commit 8cba3fac1392d2d5b0f26fd9d487614af38a0805 Author: cfif Date: Mon Jun 2 13:26:40 2025 +0300 Init diff --git a/AudioCodec.c b/AudioCodec.c new file mode 100644 index 0000000..95db313 --- /dev/null +++ b/AudioCodec.c @@ -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; +} \ No newline at end of file diff --git a/AudioCodec.h b/AudioCodec.h new file mode 100644 index 0000000..4a84a40 --- /dev/null +++ b/AudioCodec.h @@ -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 \ No newline at end of file diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..5e4ed34 --- /dev/null +++ b/modular.json @@ -0,0 +1,12 @@ +{ + "dep": [ + ], + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +} \ No newline at end of file