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;