void HandleAudioEventReqCb(RPC_Msg_t* pMsg, ResultDataBufHandle_t dataBufHandle, UInt32 userContextData) { Log_DebugPrintf(LOGID_MISC, "HandleAudioEventRspCb msg=0x%x clientID=%d ", pMsg->msgId, 0); #if defined(FUSE_COMMS_PROCESSOR) RPC_SendAckForRequest(dataBufHandle, 0); if(pMsg->msgId == MSG_AUDIO_CTRL_GENERIC_REQ) { Audio_Params_t* p = (Audio_Params_t*)pMsg->dataBuf; UInt32 val = audio_control_generic(p->param1,p->param2,p->param3,p->param4,p->param5,p->param6); SendAudioRspForRequest(pMsg, MSG_AUDIO_CTRL_GENERIC_RSP, &val); } else if(pMsg->msgId == MSG_AUDIO_CTRL_DSP_REQ) { Audio_Params_t* p = (Audio_Params_t*)pMsg->dataBuf; UInt32 val = audio_control_dsp(p->param1,p->param2,p->param3,p->param4,p->param5,p->param6); SendAudioRspForRequest(pMsg, MSG_AUDIO_CTRL_DSP_RSP, &val); } else xassert(0, pMsg->msgId); #endif RPC_SYSFreeResultDataBuffer(dataBufHandle); }
AudioEqualizer_en_t AUDDRV_GetEquType( AUDDRV_TYPE_Enum_t path ) { #if ( defined(FUSE_DUAL_PROCESSOR_ARCHITECTURE) && defined(FUSE_APPS_PROCESSOR) ) Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_GetEquType (AP before read from CP) %d \n\r", sEqualizerType); sEqualizerType = (AudioEqualizer_en_t) audio_control_generic( AUDDRV_CPCMD_READ_AUDVOC_AEQMODE, (UInt32) path, 0, 0, 0, 0 ); Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_GetEquType (AP after read from CP) %d \n\r", sEqualizerType); #else UInt16 * ptr=0; // PCG could chagned the equ type from PC. // Read equ type from sysinterface/dsp/audio/audioapi.c. ptr = (UInt16 *) AUDIO_GetAudioParam( PARAM_AUDVOC_AEQMODE ); sEqualizerType = (AudioEqualizer_en_t) *ptr; Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_GetEquType (CP) %d \n\r", sEqualizerType); #endif return sEqualizerType; }
void AUDDRV_SetEquType( AUDDRV_TYPE_Enum_t path, AudioEqualizer_en_t equ_id ) { #if ( defined(FUSE_DUAL_PROCESSOR_ARCHITECTURE) && defined(FUSE_APPS_PROCESSOR) ) sEqualizerType = equ_id; Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_SetEquType (AP) %d \n\r", sEqualizerType); audio_control_generic( AUDDRV_CPCMD_WRITE_AUDVOC_AEQMODE, (UInt32) equ_id, 0, 0, 0, 0 ); #else SysCalDataInd_t* pSysparm; pSysparm = SYSPARM_GetAudioParmAccessPtr(); sEqualizerType = equ_id; Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_SetEquType (CP) %d \n\r", sEqualizerType); // CP: update audvoc_aeqMode in sysinterface/dsp/audio/audioapi.c AUDIO_SetAudioParam( PARAM_AUDVOC_AEQMODE, (void *) & sEqualizerType ); //set these parameters AUDDRV_SetFilter( AUDDRV_AEQPATHGAIN, (const UInt16 *)& pSysparm->AUDVOC_AEQPATHGAIN[ sEqualizerType ][0] ); AUDDRV_SetFilter( AUDDRV_AEQ, (const UInt16 *)& pSysparm->AUDVOC_AEQCOF[ sEqualizerType ][0] ); AUDDRV_SetFilter( AUDDRV_PEQPATHGAIN, (const UInt16 *)& pSysparm->AUDVOC_PEQPATHGAIN[ sEqualizerType ][0] ); AUDDRV_SetFilter( AUDDRV_PEQ, (const UInt16 *)& pSysparm->AUDVOC_PEQCOF[ sEqualizerType ][0] ); //AUDDRV_SetFilter( AUDDRV_PEQPATHOFST, (const UInt16 *)& pSysparm->AUDVOC_PEQCOF[ sEqualizerType ][0] ); //to remove this after the sys parm are readable at AP AUDDRV_SetFilter( AUDDRV_AFIR, (const UInt16 *) & SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[0] ); Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_SetEquType (CP) FIR [0] %x, [32] %x, [33] %x \n\r", SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[0], SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[32], SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[33] ); #endif }
void HandleAudioEventReqCb(RPC_Msg_t *pMsg, ResultDataBufHandle_t dataBufHandle, UInt32 userContextData) { aTrace(LOG_AUDIO_DRIVER, "HandleAudioEventRspCb msg=0x%x clientID=%d ", pMsg->msgId, 0); #if defined(FUSE_COMMS_PROCESSOR) RPC_SendAckForRequest(dataBufHandle, 0); if (pMsg->msgId == MSG_AUDIO_CTRL_GENERIC_REQ) { Audio_Params_t *p = (Audio_Params_t *) pMsg->dataBuf; UInt32 val = audio_control_generic(p->param1, p->param2, p->param3, p->param4, p->param5, p->param6); SendAudioRspForRequest(pMsg, MSG_AUDIO_CTRL_GENERIC_RSP, &val); } else if (pMsg->msgId == MSG_AUDIO_CTRL_DSP_REQ) { Audio_Params_t *p = (Audio_Params_t *) pMsg->dataBuf; UInt32 val = audio_control_dsp(p->param1, p->param2, p->param3, p->param4, p->param5, p->param6); SendAudioRspForRequest(pMsg, MSG_AUDIO_CTRL_DSP_RSP, &val); } else if (pMsg->msgId == MSG_AUDIO_COMP_FILTER_REQ) { AudioCompfilter_t *p = (AudioCompfilter_t *) pMsg->dataBuf; UInt32 val = audio_cmf_filter(p); SendAudioRspForRequest(pMsg, MSG_AUDIO_COMP_FILTER_RSP, &val); } else audio_xassert(0, pMsg->msgId); #endif #if defined(CONFIG_BCM_MODEM) RPC_SYSFreeResultDataBuffer(dataBufHandle); #endif }
//Prepare DSP before turn off hardware audio path for voice call. // This is part of the control sequence for ending telephony audio. void AUDDRV_Telephony_Deinit (void ) { Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Telephony_Deinit voicePlayOutpathEnabled = %d*\n\r", voicePlayOutpathEnabled); #if defined(FUSE_APPS_PROCESSOR)&&!defined(BSP_ONLY_BUILD) AUDDRV_SetVCflag(FALSE); //let HW control logic know. // a quick fix not to disable voice path for speech playbck or recording when end the phone call. if ((voicePlayOutpathEnabled == FALSE) && (voiceInPathEnabled == FALSE)) { //per call basis: disable the DTX by calling stack api when call disconnected audio_control_generic( AUDDRV_CPCMD_ENABLE_DSP_DTX, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_CONNECT_DL, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_CONNECT_UL, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_EC_NS_ON, FALSE, FALSE, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_DUAL_MIC_ON, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_TURN_UL_COMPANDEROnOff, FALSE, 0, 0, 0, 0 ); //audio_control_dsp( DSPCMD_TYPE_AUDIO_ENABLE, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_MUTE_DSP_UL, 0, 0, 0, 0, 0 ); //OSTASK_Sleep( 3 ); //make sure audio is off AUDDRV_Telephony_DeinitHW( ); audio_control_dsp( DSPCMD_TYPE_AUDIO_ENABLE, FALSE, 0, 0, 0, 0 ); } if (AUDIO_CHNL_BLUETOOTH == AUDDRV_GetAudioMode() ) VPRIPCMDQ_DigitalSound( FALSE ); //at last voiceCallSampleRate = 8000; //reset it to 8KHz, inVoiceCall = FALSE; #endif return; }
//Prepare DSP before turn on hardware audio path for voice call. // This is part of the control sequence for starting telephony audio. void AUDDRV_Telephony_Init ( AUDDRV_MIC_Enum_t mic, AUDDRV_SPKR_Enum_t speaker ) { Boolean ec_enable_from_sysparm = dspECEnable; Boolean ns_enable_from_sysparm = dspNSEnable; Log_DebugPrintf(LOGID_AUDIO, "AUDDRV_Telephony_Init"); if ( ec_enable_from_sysparm == TRUE ) { AudioMode_t audio_mode; audio_mode = AUDDRV_GetAudioMode(); audio_mode = (AudioMode_t)(audio_mode % AUDIO_MODE_NUMBER); Log_DebugPrintf(LOGID_AUDIO, "AUDDRV_Telephony_Init: echo_cancelling_enable from sysparm \n\r"); ec_enable_from_sysparm = AUDIOMODE_PARM_ACCESSOR(AUDDRV_GetAudioApp(), audio_mode).echo_cancelling_enable; } if ( ns_enable_from_sysparm == TRUE ) { AudioMode_t audio_mode; audio_mode = AUDDRV_GetAudioMode(); audio_mode = (AudioMode_t)(audio_mode % AUDIO_MODE_NUMBER); Log_DebugPrintf(LOGID_AUDIO, "AUDDRV_Telephony_Init: noise_suppression_enable from sysparm \n\r"); ns_enable_from_sysparm = AUDIOMODE_PARM_ACCESSOR(AUDDRV_GetAudioApp(), audio_mode).noise_suppression_enable; } currVoiceMic = mic; currVoiceSpkr = speaker; #if defined(FUSE_APPS_PROCESSOR)&&!defined(BSP_ONLY_BUILD) Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Telephony_Init AP mic %d, spkr %d *\n\r", mic, speaker); //control HW and flags at AP //at beginning inVoiceCall = TRUE; //to prevent sending DSP Audio Enable when enable voice path. audio_control_dsp( DSPCMD_TYPE_MUTE_DSP_UL, 0, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_EC_NS_ON, FALSE, FALSE, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_DUAL_MIC_ON, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_TURN_UL_COMPANDEROnOff, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_CONNECT_UL, FALSE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_CONNECT_DL, FALSE, 0, 0, 0, 0 ); //only check voiceCallSampleRate if (voiceCallSampleRate == 16000) { AUDDRV_SetAudioMode( (AudioMode_t)(AUDDRV_GetAudioMode()% AUDIO_MODE_NUMBER), AUDIO_APP_VOICE_CALL_WB ); //WB AUDDRV_Telephony_InitHW ( mic, speaker, AUDIO_SAMPLING_RATE_16000 ); } else { AUDDRV_SetAudioMode( (AudioMode_t)(AUDDRV_GetAudioMode()% AUDIO_MODE_NUMBER), AUDIO_APP_VOICE_CALL ); //NB AUDDRV_Telephony_InitHW ( mic, speaker, AUDIO_SAMPLING_RATE_8000 ); } audio_control_dsp( DSPCMD_TYPE_AUDIO_ENABLE, TRUE, 0, AUDDRV_IsCall16K( AUDDRV_GetAudioMode() ), 0, 0 ); //after AUDDRV_Telephony_InitHW to make SRST. AUDDRV_SetVCflag(TRUE); //let HW control logic know. audio_control_dsp( DSPCMD_TYPE_AUDIO_CONNECT_DL, TRUE, AUDDRV_IsCall16K( AUDDRV_GetAudioMode() ), 0, 0, 0 ); OSTASK_Sleep( 40 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_CONNECT_UL, TRUE, AUDDRV_IsCall16K( AUDDRV_GetAudioMode() ), 0, 0, 0 ); Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Telephony_Init dspECEnable = %d, dspNSEnable = %d *\n\r", ec_enable_from_sysparm, ns_enable_from_sysparm); audio_control_dsp( DSPCMD_TYPE_EC_NS_ON, ec_enable_from_sysparm, ns_enable_from_sysparm, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_DUAL_MIC_ON, TRUE, 0, 0, 0, 0 ); audio_control_dsp( DSPCMD_TYPE_AUDIO_TURN_UL_COMPANDEROnOff, TRUE, 0, 0, 0, 0 ); if ( !voiceULMute ) audio_control_dsp( DSPCMD_TYPE_UNMUTE_DSP_UL, 0, 0, 0, 0, 0 ); //per call basis: enable the DTX by calling stack api when call connected audio_control_generic( AUDDRV_CPCMD_ENABLE_DSP_DTX, TRUE, 0, 0, 0, 0 ); if (speaker == AUDDRV_SPKR_PCM_IF) AUDDRV_SetPCMOnOff( 1 ); else { if(currVoiceMic != AUDDRV_MIC_PCM_IF) //need to check mic too. AUDDRV_SetPCMOnOff( 0 ); } #endif return; }
void AUDDRV_SetAudioMode( AudioMode_t audio_mode, AudioApp_t audio_app) { Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_SetAudioMode() audio_mode==%d\n\r", audio_mode ); // load DSP parameters: Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_SetAudioMode() audio_app==%d\n\r", audio_app ); currAudioMode = (AudioMode_t)(audio_mode % AUDIO_MODE_NUMBER); // update mode currMusicAudioMode = currAudioMode; currAudioApp = audio_app; if (( audio_mode >= AUDIO_MODE_NUMBER ) && (audio_mode < AUDIO_MODE_NUMBER_VOICE )) { if (audio_app == AUDIO_APP_VOICE_CALL) currAudioApp = AUDIO_APP_VOICE_CALL_WB; } else if ((audio_app == AUDIO_APP_VOICE_CALL_WB) && (audio_mode < AUDIO_MODE_NUMBER)) audio_mode = (AudioMode_t)(audio_mode + AUDIO_MODE_NUMBER); #ifdef SEPARATE_MODE_FOR_GVS_WTIH_RATE // remap audio mdoe to separate 8 kHz and 16 kHz for GVS function. if (currAudioApp == AUDIO_APP_RECORDING_GVS) AUDDRV_RemapAudioModeForGVS(); #endif // SEPARATE_MODE_FOR_GVS_WTIH_RATE Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* to call AUDDRV_CPCMD_SetAudioMode() mode=%d \t app =%d\n\r", currAudioMode, currAudioApp ); audio_control_generic( AUDDRV_CPCMD_SetAudioMode, currAudioMode, currAudioApp, 0, 0, 0 ); AUDDRV_SetFilter( AUDDRV_VoiceADC, (UInt16*) AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).voice_adc); AUDDRV_SetFilter( AUDDRV_VoiceDAC, (UInt16*) AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).voice_dac); //AUDDRV_VoiceDAC #if 0 //should be part of audio mode API //or make SYSPARM_GetAudioParmAccessPtr to be the same on AP and CP: *(volatile UInt32 *)(SYSCFG_BASE_ADDR + SYSCFG_ANACR0_OFFSET) &= ~ANACR0_ModeMask; //clear the bits //*(volatile UInt32 *)(SYSCFG_BASE_ADDR + SYSCFG_ANACR0_OFFSET) |= ( AUDIOMODE_PARM_ACCESSOR(currAudioMode).audvoc_anacr0 & ANACR0_ModeMask ) ; if(currAudioMode == 0) *(volatile UInt32 *)(SYSCFG_BASE_ADDR + SYSCFG_ANACR0_OFFSET) |= ( 0x006040ca & ANACR0_ModeMask ) ; else if(currAudioMode == 1) *(volatile UInt32 *)(SYSCFG_BASE_ADDR + SYSCFG_ANACR0_OFFSET) |= ( 0x01E000FE & ANACR0_ModeMask ) ; else if(currAudioMode == 4) *(volatile UInt32 *)(SYSCFG_BASE_ADDR + SYSCFG_ANACR0_OFFSET) |= ( 0x00006000 & ANACR0_ModeMask ) ; else *(volatile UInt32 *)(SYSCFG_BASE_ADDR + SYSCFG_ANACR0_OFFSET) |= ( 0x000000C0 & ANACR0_ModeMask ) ; #endif //*(volatile UInt32 *)(SYSCFG_BASE_ADDR + SYSCFG_ANACR0_OFFSET) |= ANACR0_DrvrSelMask; if ( controlFlagForCustomGain == FALSE ) { AUDDRV_SetGain_Hex( AUDDRV_GAIN_SPKR_IHF, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).speaker_pga); AUDDRV_SetGain_Hex( AUDDRV_GAIN_SPKR_EP, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).speaker_pga); } AUDDRV_SetGain_Hex( AUDDRV_GAIN_VOICE_OUTPUT_CFGR, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_vcfgr ); // Only load the slopgain for voice call. For voice playback/record, we don't want to load the sysparm value to overwrite what user set. <==NO, this is wrong. // all voice playback goes throught DSP, and shall use DSP SW gain control on the playback path. The voice slopgain is fixed at the sysparm value. Log_DebugPrintf(LOGID_AUDIO, "AUDDRV_SetAudioMode vopath_slopgain %x, mode %d \n\r", AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_vslopgain, currAudioMode ); AUDDRV_SetGain_Hex( AUDDRV_GAIN_VOICE_OUTPUT, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_vslopgain ); AUDDRV_SetEquType ( AUDDRV_TYPE_AUDIO_OUTPUT, sEqualizerType ); // AUDDRV_SetEquType ( AUDDRV_TYPE_RINGTONE_OUTPUT, sEqualizerType ); // remove aslopgain loading from sysparm, user set it. //AUDDRV_SetGain_Hex( AUDDRV_GAIN_AUDIO_OUTPUT_L, AUDIOMODE_PARM_MM_ACCESSOR(currAudioApp,currMusicAudioMode).audvoc_aslopgain ); //AUDDRV_SetGain_Hex( AUDDRV_GAIN_AUDIO_OUTPUT_R, AUDIOMODE_PARM_MM_ACCESSOR(currAudioApp,currMusicAudioMode).audvoc_aslopgain ); //move to CP. //to read and set this after the sys parm are readable at AP //AUDDRV_SetFilter( AUDDRV_AFIR, (const UInt16 *) & SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[0] ); //this sysparm at AP is not right. AUDDRV_SetFilter( AUDDRV_PEQ, (const UInt16 *) & SYSPARM_GetAudioParmAccessPtr()->AUDVOC_PEQCOF[0][0] ); //this sysparm at AP is not right. AUDDRV_SetFilter( AUDDRV_PEQPATHGAIN, (const UInt16 *) & SYSPARM_GetAudioParmAccessPtr()->AUDVOC_PEQPATHGAIN[0][0] ); //AUDDRV_SetFilter( AUDDRV_PEQPATHOFST, & SYSPARM_GetAudioParmAccessPtr()->AUDVOC_PEQPATHOFST[0][0] ); AUDDRV_SetFilter( AUDDRV_PIIR, (const UInt16 *) & AUDIOMODE_PARM_MM_ACCESSOR(currAudioApp,currMusicAudioMode).PR_DAC_IIR[0] ); // remove pslopgain loading from sysparm, user set it. //AUDDRV_SetGain_Hex( AUDDRV_GAIN_RINGTONE_OUTPUT_L, AUDIOMODE_PARM_MM_ACCESSOR(currAudioApp,currMusicAudioMode).audvoc_pslopgain ); //AUDDRV_SetGain_Hex( AUDDRV_GAIN_RINGTONE_OUTPUT_R, AUDIOMODE_PARM_MM_ACCESSOR(currAudioApp,currMusicAudioMode).audvoc_pslopgain ); AUDDRV_SetMPM( AUDDRV_Mixer_BIQUAD_CFG, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).MPMbiquad_cfg ); AUDDRV_SetFilter( AUDDRV_Mixer1_MPMIIR, (const UInt16 *) & AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).AUDVOC_MIXER_IIR[0] ); AUDDRV_SetFilter( AUDDRV_Mixer2_MPMIIR, (const UInt16 *) & AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).AUDVOC_MIXER_IIR[0] ); AUDDRV_SetFilter( AUDDRV_Mixer3_MPMIIR, (const UInt16 *) & AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).AUDVOC_MIXER_IIR[0] ); AUDDRV_SetFilter( AUDDRV_Mixer4_MPMIIR, (const UInt16 *) & AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).AUDVOC_MIXER_IIR[0] ); if ( controlFlagForCustomGain == FALSE ) { AUDDRV_SetGain_Hex( AUDDRV_GAIN_MIXER1, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_mixergain ); Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_SetAudioMode() currAudioMode==%d AUDDRV_GAIN_MIXER1 %x, *\n\r", currAudioMode, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_mixergain ); AUDDRV_SetGain_Hex( AUDDRV_GAIN_MIXER2, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_mixergain ); AUDDRV_SetGain_Hex( AUDDRV_GAIN_MIXER3, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_mixergain ); AUDDRV_SetGain_Hex( AUDDRV_GAIN_MIXER4, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).audvoc_mixergain ); } //Open loop target gain parameters AUDDRV_SetGain_Hex( AUDDRV_GAIN_MPMDGA1, 0x00 ); AUDDRV_SetGain_Hex( AUDDRV_GAIN_MPMDGA2, 0x00 ); AUDDRV_SetGain_Hex( AUDDRV_GAIN_MPMDGA3, 0x00 ); AUDDRV_SetGain_Hex( AUDDRV_GAIN_MPMDGA4, 0x00 ); if ( controlFlagForCustomGain == FALSE ) { AUDDRV_SetGain_Hex( AUDDRV_MIC, AUDIOMODE_PARM_ACCESSOR(currAudioApp,currAudioMode).mic_pga); } if ( AUDDRV_GetVCflag() ) { // AUDIO_MODE_BLUETOOTH_WB should not be used for voice call. it should be convert to AUDIO_MODE_BLUETOOTH. if ((currAudioApp == AUDIO_APP_VOICE_CALL_WB ) && (currAudioMode != AUDIO_MODE_BLUETOOTH) ) AUDDRV_SetVoicePathSampRate( AUDIO_SAMPLING_RATE_16000 ); else AUDDRV_SetVoicePathSampRate( AUDIO_SAMPLING_RATE_8000 ); } // Test to disable VP COMPANDER for GVS: if (currAudioApp == AUDIO_APP_RECORDING_GVS) audio_control_generic(AUDDRV_CPCMD_SET_VP_COMPANDER, (UInt32)2, 0, 0, 0, 0); // bit 0 compressr, bit 1 expander else if (currAudioApp == AUDIO_APP_RECORDING) audio_control_generic(AUDDRV_CPCMD_SET_VP_COMPANDER, (UInt32)3, 0, 0, 0, 0); }