FreeCalypso > hg > fc-magnetite
changeset 598:717ed17d82c6
aci3 vocoder control revamped, AT@VSEL now works as it should
The vocoder control code (hl_audio_drv.c) that came with the TCS3 version
of ACI was totally broken in the Calypso config (VOCODER_FUNC_INTERFACE)
and worked in the standard analog voice environment only by luck.
This code has now been rewritten to work correctly with our Calypso
platform and TCS211 L1, and our new AT@VSEL mechanism (automatic enabling
and disabling of MCSI voice path as the modem enters and exits the voice
call state) now also works as designed.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 27 Mar 2019 23:44:35 +0000 |
parents | f18b29e27be5 |
children | 4626d7a955de |
files | src/g23m-aci/aci/hl_audio_drv.c src/g23m-aci/aci/psa_f.c |
diffstat | 2 files changed, 39 insertions(+), 163 deletions(-) [+] |
line wrap: on
line diff
--- a/src/g23m-aci/aci/hl_audio_drv.c Wed Mar 27 22:18:35 2019 +0000 +++ b/src/g23m-aci/aci/hl_audio_drv.c Wed Mar 27 23:44:35 2019 +0000 @@ -33,39 +33,22 @@ #include "audio/audio_api.h" #include "fc-target.cfg" -#ifdef VOCODER_FUNC_INTERFACE -#include "l4_tim.h" -#endif - - /* ===============GLOBAL VARIABLES====================*/ LOCAL T_HL_VOCODER_STATE currVocoderState; -#ifdef VOCODER_FUNC_INTERFACE -GLOBAL T_HL_VOCODER_ACTION currVocoderAction; -#endif #ifdef CONFIG_TARGET_FCDEV3B GLOBAL UBYTE aci_digital_voice_autoswitch; #endif -/* This flag helps enable the vocoder interface testing for - specific tescases -*/ -#ifdef _SIMULATION_ -BOOL vocoder_tst_flag; -#endif - /* =============FUNCTION DEFINITIONS FOR L1===========*/ -#ifndef _SIMULATION_ #ifdef VOCODER_FUNC_INTERFACE void vocoder_mute_dl( BOOL mute ); void vocoder_mute_ul( BOOL mute ); void enable_tch_vocoder (BOOL vocoder_on); #endif /* VOCODER_FUNC_INTERFACE */ -#endif /* _SIMULATION_ */ /*================= FUNCTIONS ========================*/ @@ -84,13 +67,6 @@ TRACE_FUNCTION("hl_audio_drv_init()"); currVocoderState = HL_VOCODER_DISABLED; -#ifdef VOCODER_FUNC_INTERFACE - currVocoderAction= VOCODER_IDLE; -#endif -#ifdef _SIMULATION_ - vocoder_tst_flag = FALSE; -#endif - } /* @@ -99,12 +75,10 @@ | ROUTINE : hl_drv_set_vocoder_state| +-------------------------------------------------------------------+ - PURPOSE : This function will enable/disable vocoder OR put the - vocoder state to PENDING_ENABLE/DISABLE depending on the - vocoder states. Depending on the vocoder state and if - requires timer will be started. Timer implementation is - done to synchronize timing delay needed(appr 35ms) to actually - enable/disable of vocoder in DSP. + PURPOSE : This function will enable or disable vocoder as needed, + and possibly also enable/disable the MCSI digital voice + path if running on a FreeCalypso modem in the digital + voice interface configuration. */ GLOBAL void hl_drv_set_vocoder_state(BOOL user_attach) { @@ -116,122 +90,41 @@ TRACE_FUNCTION("hl_drv_set_vocoder_state"); - #ifdef VOCODER_FUNC_INTERFACE if ( (user_attach EQ TRUE AND currVocoderState EQ HL_VOCODER_ENABLED) OR (user_attach EQ FALSE AND currVocoderState EQ HL_VOCODER_DISABLED) ) - return; /* Do nothing, when the timeout occurs corresponding action will be taken */ - - switch (currVocoderAction) /* currVocoderAction is the state */ - { - case VOCODER_IDLE: - break; - - case VOCODER_BUSY: - { - if ( (user_attach EQ TRUE) AND (currVocoderState EQ HL_VOCODER_DISABLED) ) - { - currVocoderAction = VOCODER_PENDING_ENABLE; - return; - } - else if ( (user_attach EQ FALSE) AND (currVocoderState EQ HL_VOCODER_ENABLED) ) - { - currVocoderAction = VOCODER_PENDING_DISABLE; - return; - } - } - break; + return; /* No state change requested */ - case VOCODER_PENDING_ENABLE: - { - if (user_attach EQ TRUE) - return; /* Do nothing */ - else /* user_attach EQ FALSE */ - { - currVocoderAction = VOCODER_PENDING_DISABLE; - return; - } - } - break; - - case VOCODER_PENDING_DISABLE: - { - if (user_attach EQ FALSE) - return; /* Do nothing */ - else /* user_attach EQ TRUE */ - { - currVocoderAction = VOCODER_PENDING_ENABLE; - return; - } - } - break; - - default: /* Assumed to be a never as all values caught */ - TRACE_ERROR ("Illegal value of currVocoderAction"); - break; - - } - #endif /* VOCODER_FUNC_INTERFACE */ - - #ifdef _SIMULATION_ - if(vocoder_tst_flag) - #endif + if (user_attach) { - - #ifndef VOCODER_FUNC_INTERFACE - { - if(user_attach AND (currVocoderState EQ HL_VOCODER_DISABLED OR currVocoderState EQ HL_VOCODER_DISABLE_INITIATED)) - { - PALLOC(mmi_tch_vocoder_cfg_req, MMI_TCH_VOCODER_CFG_REQ); - mmi_tch_vocoder_cfg_req->vocoder_state = VOCODER_ENABLE; - PSENDX(L1, mmi_tch_vocoder_cfg_req); - currVocoderState = HL_VOCODER_ENABLE_INITIATED; - } - if(!user_attach AND (currVocoderState EQ HL_VOCODER_ENABLED OR currVocoderState EQ HL_VOCODER_ENABLE_INITIATED)) - { - PALLOC(mmi_tch_vocoder_cfg_req, MMI_TCH_VOCODER_CFG_REQ); - mmi_tch_vocoder_cfg_req->vocoder_state = VOCODER_DISABLE; - PSENDX(L1, mmi_tch_vocoder_cfg_req); - currVocoderState = HL_VOCODER_DISABLE_INITIATED; - } - } - #else - #ifndef _SIMULATION_ - TRACE_EVENT("Function interface for Vocoder"); - - currVocoderAction = VOCODER_BUSY; - TIMERSTART(VOCODER_VALUE, ACI_VOCODER); - if (user_attach) - { - enable_tch_vocoder(TRUE); - vocoder_mute_dl (FALSE); /* un-mute speaker */ - vocoder_mute_ul (FALSE); /* un-mute microphone */ - #ifdef CONFIG_TARGET_FCDEV3B - if (aci_digital_voice_autoswitch) - { - vpath = AUDIO_BLUETOOTH_HEADSET; - audio_param.variable_indentifier = AUDIO_PATH_USED; - audio_param.data = &vpath; - audio_full_access_write(&audio_param, return_path); - } - #endif - } - else - { - vocoder_mute_dl (TRUE); /* mute speaker */ - vocoder_mute_ul (TRUE); /* mute microphone */ - enable_tch_vocoder (FALSE); /* disable vocoder */ - #ifdef CONFIG_TARGET_FCDEV3B - if (aci_digital_voice_autoswitch) - { - vpath = AUDIO_GSM_VOICE_PATH; - audio_param.variable_indentifier = AUDIO_PATH_USED; - audio_param.data = &vpath; - audio_full_access_write(&audio_param, return_path); - } - #endif - } - #endif /* _SIMULATION_ */ - #endif /* VOCODER_FUNC_INTERFACE */ + enable_tch_vocoder(TRUE); + vocoder_mute_dl (FALSE); /* un-mute speaker */ + vocoder_mute_ul (FALSE); /* un-mute microphone */ + #ifdef CONFIG_TARGET_FCDEV3B + if (aci_digital_voice_autoswitch) + { + vpath = AUDIO_BLUETOOTH_HEADSET; + audio_param.variable_indentifier = AUDIO_PATH_USED; + audio_param.data = &vpath; + audio_full_access_write(&audio_param, return_path); + } + #endif + currVocoderState = HL_VOCODER_ENABLED; + } + else + { + vocoder_mute_dl (TRUE); /* mute speaker */ + vocoder_mute_ul (TRUE); /* mute microphone */ + enable_tch_vocoder (FALSE); /* disable vocoder */ + #ifdef CONFIG_TARGET_FCDEV3B + if (aci_digital_voice_autoswitch) + { + vpath = AUDIO_GSM_VOICE_PATH; + audio_param.variable_indentifier = AUDIO_PATH_USED; + audio_param.data = &vpath; + audio_full_access_write(&audio_param, return_path); + } + #endif + currVocoderState = HL_VOCODER_DISABLED; } return; @@ -279,24 +172,5 @@ break; } -#ifdef VOCODER_FUNC_INTERFACE - currVocoderAction = VOCODER_IDLE; -#endif } #endif - -#ifdef _SIMULATION_ -/* -+-------------------------------------------------------------------+ -| PROJECT : GSM-PS (6147) MODULE : HL_AUDIO_DRV | -| ROUTINE : hl_audio_drv_initForTest | -+-------------------------------------------------------------------+ - - PURPOSE : Initialise global variables related to simulaed -*/ - -GLOBAL void hl_audio_drv_initForTest(void) -{ - vocoder_tst_flag = TRUE; -} -#endif
--- a/src/g23m-aci/aci/psa_f.c Wed Mar 27 22:18:35 2019 +0000 +++ b/src/g23m-aci/aci/psa_f.c Wed Mar 27 23:44:35 2019 +0000 @@ -59,7 +59,8 @@ #include "cmh_uart.h" #endif -#ifdef VOCODER_FUNC_INTERFACE +/* removed in FreeCalypso */ +#if 0 //#ifdef VOCODER_FUNC_INTERFACE #include "hl_audio_drv.h" #endif @@ -143,7 +144,8 @@ psaCC_DTMFTimeout(); return(TRUE); -#ifdef VOCODER_FUNC_INTERFACE +/* removed in FreeCalypso */ +#if 0 //#ifdef VOCODER_FUNC_INTERFACE case(ACI_VOCODER): { T_HL_VOCODER_ACTION tmpcurrVocoderAction = currVocoderAction;