This commit is contained in:
cfif 2025-06-02 13:26:40 +03:00
commit 8cba3fac13
3 changed files with 412 additions and 0 deletions

254
AudioCodec.c Normal file
View File

@ -0,0 +1,254 @@
//
// Created by ilya on 27.03.24.
//
#include "AudioCodec.h"
#include "SystemDelayInterface.h"
#define AudioCodecWrite(REG,DATA) xAudioCodecWrite_Register8b_Data8b(env->codec,(uint8_t)REG,(uint8_t)DATA)
#define ACAddConfig(REG,DATA) {.reg = (uint8_t)REG, .data = (uint8_t)DATA}
#define AddConfigReg(REG,DATA) AudioCodec_AddRegisterData(&env->audioCodecConfig,REG,DATA)
#define AddConfigRegNAU(REG,BIT,DATA) AudioCodec_AddRegisterData(&env->audioCodecConfig,REG<<1|0b#BIT,DATA)
void ProtMethodsAdd_CodecSetGeinCard(tAudioCodec *env) {
if (env != NULL) {
env->volume_levels[0] = PA_CODEC_GAIN_57dB;
env->volume_levels[1] = PA_CODEC_GAIN_56dB;
env->volume_levels[2] = PA_CODEC_GAIN_55dB;
env->volume_levels[3] = PA_CODEC_GAIN_54dB;
env->volume_levels[4] = PA_CODEC_GAIN_53dB;
env->volume_levels[5] = PA_CODEC_GAIN_52dB;
env->volume_levels[6] = PA_CODEC_GAIN_51dB;
env->volume_levels[7] = PA_CODEC_GAIN_50dB;
env->volume_levels[8] = PA_CODEC_GAIN_49dB;
env->volume_levels[9] = PA_CODEC_GAIN_48dB;
env->volume_levels[10] = PA_CODEC_GAIN_47dB;
env->volume_levels[11] = PA_CODEC_GAIN_46dB;
env->volume_levels[12] = PA_CODEC_GAIN_45dB;
env->volume_levels[13] = PA_CODEC_GAIN_44dB;
env->volume_levels[14] = PA_CODEC_GAIN_43dB;
env->volume_levels[15] = PA_CODEC_GAIN_42dB;
env->volume_levels[16] = PA_CODEC_GAIN_41dB;
env->volume_levels[17] = PA_CODEC_GAIN_40dB;
env->volume_levels[18] = PA_CODEC_GAIN_39dB;
env->volume_levels[19] = PA_CODEC_GAIN_38dB;
env->volume_levels[20] = PA_CODEC_GAIN_37dB;
env->volume_levels[21] = PA_CODEC_GAIN_36dB;
env->volume_levels[22] = PA_CODEC_GAIN_35dB;
env->volume_levels[23] = PA_CODEC_GAIN_34dB;
env->volume_levels[24] = PA_CODEC_GAIN_33dB;
env->volume_levels[25] = PA_CODEC_GAIN_32dB;
env->volume_levels[26] = PA_CODEC_GAIN_31dB;
env->volume_levels[27] = PA_CODEC_GAIN_30dB;
env->volume_levels[28] = PA_CODEC_GAIN_29dB;
env->volume_levels[29] = PA_CODEC_GAIN_28dB;
env->volume_levels[30] = PA_CODEC_GAIN_27dB;
env->volume_levels[31] = PA_CODEC_GAIN_26dB;
env->volume_levels[32] = PA_CODEC_GAIN_25dB;
env->volume_levels[33] = PA_CODEC_GAIN_24dB;
env->volume_levels[34] = PA_CODEC_GAIN_23dB;
env->volume_levels[35] = PA_CODEC_GAIN_22dB;
env->volume_levels[36] = PA_CODEC_GAIN_21dB;
env->volume_levels[37] = PA_CODEC_GAIN_20dB;
env->volume_levels[38] = PA_CODEC_GAIN_19dB;
env->volume_levels[39] = PA_CODEC_GAIN_18dB;
env->volume_levels[40] = PA_CODEC_GAIN_17dB;
env->volume_levels[41] = PA_CODEC_GAIN_16dB;
env->volume_levels[42] = PA_CODEC_GAIN_15dB;
env->volume_levels[43] = PA_CODEC_GAIN_14dB;
env->volume_levels[44] = PA_CODEC_GAIN_13dB;
env->volume_levels[45] = PA_CODEC_GAIN_12dB;
env->volume_levels[46] = PA_CODEC_GAIN_11dB;
env->volume_levels[47] = PA_CODEC_GAIN_10dB;
env->volume_levels[48] = PA_CODEC_GAIN_09dB;
env->volume_levels[49] = PA_CODEC_GAIN_08dB;
env->volume_levels[50] = PA_CODEC_GAIN_07dB;
env->volume_levels[51] = PA_CODEC_GAIN_06dB;
env->volume_levels[52] = PA_CODEC_GAIN_05dB;
env->volume_levels[53] = PA_CODEC_GAIN_04dB;
env->volume_levels[54] = PA_CODEC_GAIN_03dB;
env->volume_levels[55] = PA_CODEC_GAIN_02dB;
env->volume_levels[56] = PA_CODEC_GAIN_01dB;
env->volume_levels[57] = PA_CODEC_GAIN_00dB;
env->volume_levels[58] = PA_CODEC_GAIN_1dB;
env->volume_levels[59] = PA_CODEC_GAIN_2dB;
env->volume_levels[60] = PA_CODEC_GAIN_3dB;
env->volume_levels[61] = PA_CODEC_GAIN_4dB;
env->volume_levels[62] = PA_CODEC_GAIN_5dB;
env->volume_levels[63] = PA_CODEC_GAIN_6dB;
}
}
uint8_t ProtMethods_CodecGetLvlVoltIndex(tAudioCodec *env, uint8_t indexValule) {
for(uint8_t i=0; i < sizeof(env->volume_levels); i++){
if(env->volume_levels[i] == indexValule){
return i;
}
}
return 0;
}
bool AudioCodec_AddRegisterData(tAudioCodecConfig *env, uint8_t reg, uint32_t data){
if(env->regCounter < AUDIO_CODEC_CONFIG_LIMIT){
env->configList[env->regCounter].reg = reg;
env->configList[env->regCounter].data = data;
env->regCounter++;
return true;
}else{
return false;
}
}
void AudioCodec_SetOneRegistr(tAudioCodec *env, uint8_t adr, uint16_t reg){
bool res;
if( (adr == 0x01) || (adr == 0x04) ){
AddConfigReg(adr<<1|0b1, reg);
} else {
res = AddConfigReg(adr<<1|0b0, reg);
}
// res = res;
}
void AudioCodec_SetVolumeLevel(tAudioCodec *env, uint16_t level) {
AudioCodecWrite(0x36<<1|0b0, level);
}
void AudioCodec_GetVolumeLevel(tAudioCodec *env, uint16_t *level) {
uint16_t res = *level;
if(xAudioCodecReadRegister(env->codec, 0x36, &res) > 0){
*level = res;
} else {
*level = 55;
}
}
void AudioCodec_DumpConf(tAudioCodec *env, uint16_t volume_level){
*env->volume_level = volume_level;
EraGlonassUveosDumper_ForceDump(env->dumper);
}
void AudioCodec_InitConfig(tAudioCodec *env) {
AddConfigReg(0x00<<1|0b0,0b0001110001);
AddConfigReg(0x01<<1|0b0,0b0000011001);
AddConfigReg(0x02<<1|0b0,0b0000010101);
AddConfigReg(0x03<<1|0b0,0b0001100101);
AddConfigReg(0x04<<1|0b0,0b0100011000);
AddConfigReg(0x05<<1|0b0,0b0000000000);
AddConfigReg(0x06<<1|0b0,0b0000000000);
AddConfigReg(0x07<<1|0b0,0b0000001010);
AddConfigReg(0x2D<<1|0b0,0b0000000010);
AddConfigReg(0x2F<<1|0b0,0b0000000000);
AddConfigReg(0x36<<1|0b0,0b0000111010);
switch(*env->carType)
{
case UNDEFINDET_CAR:
///Установка аудио профиля в модуле GSM по умолчанию
AddConfigReg(0x36<<1|0b0,0b0000111010);
break;
case SGR_MICRO_BUSS_M2G_CAR:
///Установка аудио профиля в модуле GSM для микроавтобуса УАЗ M2G
AddConfigReg(0x36<<1|0b0,0b0000111010);
break;
case PATRIOT_M1G_CAR:
///Установка аудио профиля в модуле GSM для Patriot УАЗ M1G
AddConfigReg(0x36<<1|0b0,0b0000110110);
break;
case PROFI_N1_CAR :
///Установка аудио профиля в модуле GSM для УАЗ Profi
AddConfigReg(0x36<<1|0b0,0b0000110101);
break;
case KIND_M2G_BUSS :
///Установка аудио профиля в модуле GSM для УАЗ Школьный автобус
AddConfigReg(0x36<<1|0b0,0b0000110110);
break;
case HUNTER_N1G :
///Установка аудио профиля в модуле GSM для УАЗ Patriot Хантер
AddConfigReg(0x36<<1|0b0,0b0000110110);
break;
case SGR_DUMP_TRUCK_N1G :
///Установка аудио профиля в модуле GSM для УАЗ самосвал
AddConfigReg(0x36<<1|0b0,0b0000111010);
break;
default:
break;
}
///========================================== UAZ ==========================================
// AddConfigReg(0x00<<1|0b0,0b0001110001);
// AddConfigReg(0x01<<1|0b0,0b0000011001);
// AddConfigReg(0x02<<1|0b0,0b0000010101);
// AddConfigReg(0x03<<1|0b0,0b0001100101);
// AddConfigReg(0x04<<1|0b0,0b0100011000);
// AddConfigReg(0x05<<1|0b0,0b0000000000);
// AddConfigReg(0x06<<1|0b0,0b0000000000);
// AddConfigReg(0x07<<1|0b0,0b0000001010);
// AddConfigReg(0x2D<<1|0b0,0b0000000010);
// AddConfigReg(0x2F<<1|0b0,0b0000000000);
// AddConfigReg(0x36<<1|0b0,0b0000111010);
}
void AudioCodec_SetVolumeExternal(tAudioCodec *env, uint16_t *volume_level){
if(*volume_level <= 63){
env->volume_level = volume_level;
AudioCodec_SetVolumeLevel(env,env->volume_levels[*volume_level]);
}
}
void AudioCodec_Init(tAudioCodec *env,
tI2cIO *codec,
tAtCmd *atCmd,
tString128 *codecConfig,
tEraGlonassUveosDumperInterface *dumper,
eCarType *carType
){
env->carType = carType;
env->state = false;
env->dumper = dumper;
env->codec = codec;
env->atCmd = atCmd;
env->codecConfig = codecConfig;
SystemDelayMs(500);
ProtMethodsAdd_CodecSetGeinCard(env);
AudioCodec_InitConfig(env);
}
bool xAudioCodec_WriteConfig(tAudioCodec *env){
bool res = true;
if (env->codec != NULL) {
for (uint8_t i = 0; i < env->audioCodecConfig.regCounter; i++) {
if(AudioCodecWrite(
env->audioCodecConfig.configList[i].reg,
env->audioCodecConfig.configList[i].data
) == true
)
{
if(res != false) {
res = true;
}
}
else {
res = false;
}
}
} else {
res = false;
}
return res;
}
bool AudioCodec_StartUp(tAudioCodec *env){
bool res = xAudioCodec_WriteConfig(env);
if(env->volume_level != NULL)
{
AudioCodecWrite(0x36<<1|0b0, env->volume_levels[*env->volume_level]);
}
env->state = res;
return res;
}

146
AudioCodec.h Normal file
View File

@ -0,0 +1,146 @@
//
// Created by ilya on 27.03.24.
//
#ifndef SMART_COMPONENTS_AUDIOCODEC_H
#define SMART_COMPONENTS_AUDIOCODEC_H
#include "nau88u10yg.h"
#include "AtCmdBase.h"
#include "BaseTypes/Strings.h"
#include "EraGlonassUveos_Dumper.h"
#define AUDIO_CODEC_CONFIG_LIMIT 60
typedef struct{
uint8_t reg;
uint32_t data;
}tAudioCodecRegisterData;
typedef struct {
tAudioCodecRegisterData configList[AUDIO_CODEC_CONFIG_LIMIT];
uint8_t regCounter;
}tAudioCodecConfig;
typedef enum {
UNDEFINDET_CAR = 0,
SGR_MICRO_BUSS_M2G_CAR = 1,
SGR_DUMP_TRUCK_N1G = 2,
PATRIOT_M1G_CAR = 3,
PROFI_N1_CAR = 4,
KIND_M2G_BUSS = 5,
HUNTER_N1G = 6,
} eCarType;
typedef struct {
tEraGlonassUveosDumperInterface *dumper;
tI2cIO *codec;
tAtCmd *atCmd;
tString128 *codecConfig;
tAudioCodecConfig audioCodecConfig;
uint16_t volume_levels[64];
uint16_t *volume_level;
bool state;
eCarType *carType;
} tAudioCodec;
void AudioCodec_Init(tAudioCodec *env,
tI2cIO *codec,
tAtCmd *atCmd,
tString128 *codecConfig,
tEraGlonassUveosDumperInterface *dumper,
eCarType *carType
);
typedef enum {
PA_CODEC_GAIN_57dB = 0b0000000000,
PA_CODEC_GAIN_56dB = 0b0000000001,
PA_CODEC_GAIN_55dB = 0b0000000010,
PA_CODEC_GAIN_54dB = 0b0000000011,
PA_CODEC_GAIN_53dB = 0b0000000100,
PA_CODEC_GAIN_52dB = 0b0000000101,
PA_CODEC_GAIN_51dB = 0b0000000110,
PA_CODEC_GAIN_50dB = 0b0000000111,
PA_CODEC_GAIN_49dB = 0b0000001000,
PA_CODEC_GAIN_48dB = 0b0000001001,
PA_CODEC_GAIN_47dB = 0b0000001010,
PA_CODEC_GAIN_46dB = 0b0000001011,
PA_CODEC_GAIN_45dB = 0b0000001100,
PA_CODEC_GAIN_44dB = 0b0000001101,
PA_CODEC_GAIN_43dB = 0b0000001110,
PA_CODEC_GAIN_42dB = 0b0000001111,
PA_CODEC_GAIN_41dB = 0b0000010000,
PA_CODEC_GAIN_40dB = 0b0000010001,
PA_CODEC_GAIN_39dB = 0b0000010010,
PA_CODEC_GAIN_38dB = 0b0000010011,
PA_CODEC_GAIN_37dB = 0b0000010100,
PA_CODEC_GAIN_36dB = 0b0000010101,
PA_CODEC_GAIN_35dB = 0b0000010110,
PA_CODEC_GAIN_34dB = 0b0000010111,
PA_CODEC_GAIN_33dB = 0b0000011000,
PA_CODEC_GAIN_32dB = 0b0000011001,
PA_CODEC_GAIN_31dB = 0b0000011010,
PA_CODEC_GAIN_30dB = 0b0000011011,
PA_CODEC_GAIN_29dB = 0b0000011100,
PA_CODEC_GAIN_28dB = 0b0000011110,
PA_CODEC_GAIN_27dB = 0b0000011111,
PA_CODEC_GAIN_26dB = 0b0000100000,
PA_CODEC_GAIN_25dB = 0b0000100001,
PA_CODEC_GAIN_24dB = 0b0000100010,
PA_CODEC_GAIN_23dB = 0b0000100011,
PA_CODEC_GAIN_22dB = 0b0000100100,
PA_CODEC_GAIN_21dB = 0b0000100101,
PA_CODEC_GAIN_20dB = 0b0000100110,
PA_CODEC_GAIN_19dB = 0b0000100111,
PA_CODEC_GAIN_18dB = 0b0000101000,
PA_CODEC_GAIN_17dB = 0b0000101001,
PA_CODEC_GAIN_16dB = 0b0000101010,
PA_CODEC_GAIN_15dB = 0b0000101011,
PA_CODEC_GAIN_14dB = 0b0000101100,
PA_CODEC_GAIN_13dB = 0b0000101101,
PA_CODEC_GAIN_12dB = 0b0000101110,
PA_CODEC_GAIN_11dB = 0b0000101111,
PA_CODEC_GAIN_10dB = 0b0000110000,
PA_CODEC_GAIN_09dB = 0b0000110001,
PA_CODEC_GAIN_08dB = 0b0000110010,
PA_CODEC_GAIN_07dB = 0b0000110011,
PA_CODEC_GAIN_06dB = 0b0000110100,
PA_CODEC_GAIN_05dB = 0b0000110101,
PA_CODEC_GAIN_04dB = 0b0000110110,
PA_CODEC_GAIN_03dB = 0b0000110111,
PA_CODEC_GAIN_02dB = 0b0000111000,
PA_CODEC_GAIN_01dB = 0b0000111001,
PA_CODEC_GAIN_00dB = 0b0000111011,
PA_CODEC_GAIN_1dB = 0b0000111010,
PA_CODEC_GAIN_2dB = 0b0000111011,
PA_CODEC_GAIN_3dB = 0b0000111100,
PA_CODEC_GAIN_4dB = 0b0000111101,
PA_CODEC_GAIN_5dB = 0b0000111110,
PA_CODEC_GAIN_6dB = 0b0000111111,
}CODEC_GAIN;
bool AudioCodec_StartUp(tAudioCodec *env);
void AudioCodec_SetOneRegistr(tAudioCodec *env, uint8_t adr, uint16_t reg);
void AudioCodec_SetVolumeLevel(tAudioCodec *env, uint16_t volume_level);
void AudioCodec_GetVolumeLevel(tAudioCodec *env, uint16_t *level);
bool xAudioCodec_WriteConfig(tAudioCodec *env);
void AudioCodec_GetOneRegistr(tAudioCodec *env, uint16_t regAdr, uint16_t *DataRegResult);
uint8_t ProtMethods_CodecGetLvlVoltIndex(tAudioCodec *env, uint8_t indexValule);
void AudioCodec_DumpConf(tAudioCodec *env, uint16_t volume_level);
void AudioCodec_SetVolumeExternal(tAudioCodec *env, uint16_t *volume_level);
#define AudioCodec_Config(CODEC) xAudioCodec_WriteConfigDefolte(CODEC,true)
#define AudioCodec_Config_whithModem(CODEC) xAudioCodec_WriteConfigDefolte(CODEC,false)
#endif //SMART_COMPONENTS_AUDIOCODEC_H

12
modular.json Normal file
View File

@ -0,0 +1,12 @@
{
"dep": [
],
"cmake": {
"inc_dirs": [
"./"
],
"srcs": [
"./**.c"
]
}
}