// // 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