changeset 162:8c5d012b9c4d

aci: AT@VSEL and vocoder revamping changes from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 28 Mar 2019 00:36:10 +0000
parents 5ad7f6a9d7d4
children a911ac771094
files src/g23m-aci/aci/aci_cmh.h src/g23m-aci/aci/ati_audio.c src/g23m-aci/aci/ati_cmd.c src/g23m-aci/aci/hl_audio_drv.c src/g23m-aci/aci/psa_f.c
diffstat 5 files changed, 94 insertions(+), 143 deletions(-) [+]
line wrap: on
line diff
--- a/src/g23m-aci/aci/aci_cmh.h	Fri Mar 22 17:13:59 2019 +0000
+++ b/src/g23m-aci/aci/aci_cmh.h	Thu Mar 28 00:36:10 2019 +0000
@@ -527,6 +527,7 @@
   /* FreeCalypso additions */
   AT_CMD_AT_SPKR,
   AT_CMD_AT_VPATH,
+  AT_CMD_AT_VSEL,
   AT_CMD_AT_SND,
   AT_CMD_AT_E1,
   AT_CMD_AT_E1STOP,
--- a/src/g23m-aci/aci/ati_audio.c	Fri Mar 22 17:13:59 2019 +0000
+++ b/src/g23m-aci/aci/ati_audio.c	Thu Mar 28 00:36:10 2019 +0000
@@ -168,6 +168,8 @@
 }
 
 #ifdef CONFIG_TARGET_FCDEV3B
+extern UBYTE aci_digital_voice_autoswitch;
+
 /* AT@VPATH - configure digital voice path */
 GLOBAL T_ATI_RSLT atAtVPATH ( char *cl, UBYTE srcId )
 {
@@ -212,6 +214,33 @@
 
 	return (ATI_CMPL);
 }
+
+/* AT@VSEL - configure digital voice path automatic operation */
+GLOBAL T_ATI_RSLT atAtVSEL ( char *cl, UBYTE srcId )
+{
+	int vsel_int;
+
+	TRACE_FUNCTION("atAtVSEL()");
+
+	cl = parse(cl, "D", &vsel_int);
+	if (!cl)
+		return (ATI_FAIL);
+	if (vsel_int != 0 && vsel_int != 1)
+		return (ATI_FAIL);
+	aci_digital_voice_autoswitch = vsel_int;
+	return (ATI_CMPL);
+}
+
+GLOBAL T_ATI_RSLT queatAtVSEL (char *cl, UBYTE srcId)
+{
+	char *me="@VSEL: ";
+
+	TRACE_FUNCTION("queatAtVSEL()");
+
+	sprintf(g_sa, "%s%u", me, aci_digital_voice_autoswitch);
+	io_sendMessage(srcId, g_sa, ATI_NORMAL_OUTPUT);
+	return (ATI_CMPL);
+}
 #endif
 
 static char melody_E1_name[AUDIO_PATH_NAME_MAX_SIZE];
--- a/src/g23m-aci/aci/ati_cmd.c	Fri Mar 22 17:13:59 2019 +0000
+++ b/src/g23m-aci/aci/ati_cmd.c	Thu Mar 28 00:36:10 2019 +0000
@@ -750,6 +750,8 @@
 #ifdef CONFIG_TARGET_FCDEV3B
 EXTERN T_ATI_RSLT atAtVPATH (char *cl, UBYTE srcId);
 EXTERN T_ATI_RSLT queatAtVPATH (char *cl, UBYTE srcId);
+EXTERN T_ATI_RSLT atAtVSEL (char *cl, UBYTE srcId);
+EXTERN T_ATI_RSLT queatAtVSEL (char *cl, UBYTE srcId);
 #endif
 EXTERN T_ATI_RSLT atAtSND (char *cl, UBYTE srcId);
 EXTERN T_ATI_RSLT atAtE1 (char *cl, UBYTE srcId);
@@ -1212,6 +1214,7 @@
 #endif
 #ifdef CONFIG_TARGET_FCDEV3B
     {"@VPATH",	AT_CMD_AT_VPATH, atAtVPATH,test_gen, queatAtVPATH,"%s: (0-2)"},
+    {"@VSEL",	AT_CMD_AT_VSEL,  atAtVSEL, test_gen, queatAtVSEL, "%s: (0,1)"},
 #endif
     {"@SND",	AT_CMD_AT_SND,   atAtSND,	0,	0,	0},
     {"@E1",	AT_CMD_AT_E1,    atAtE1,	0,	0,	0},
--- a/src/g23m-aci/aci/hl_audio_drv.c	Fri Mar 22 17:13:59 2019 +0000
+++ b/src/g23m-aci/aci/hl_audio_drv.c	Thu Mar 28 00:36:10 2019 +0000
@@ -29,36 +29,26 @@
 #include "aci.h"
 #include "psa.h"
 #include "hl_audio_drv.h"
-
-#ifdef VOCODER_FUNC_INTERFACE
-#include "l4_tim.h"
-#endif
-
+#include "rv/rv_general.h"
+#include "audio/audio_api.h"
+#include "fc-target.cfg"
 
 
 /* ===============GLOBAL VARIABLES====================*/
 
 LOCAL  T_HL_VOCODER_STATE currVocoderState;
-#ifdef VOCODER_FUNC_INTERFACE
-GLOBAL T_HL_VOCODER_ACTION currVocoderAction;
-#endif
 
-/* This flag helps enable the vocoder interface testing for
-   specific tescases 
-*/
-#ifdef _SIMULATION_
-BOOL vocoder_tst_flag; 
+#ifdef CONFIG_TARGET_FCDEV3B
+GLOBAL UBYTE aci_digital_voice_autoswitch;
 #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 ========================*/
@@ -77,14 +67,14 @@
   TRACE_FUNCTION("hl_audio_drv_init()");
 
   currVocoderState = HL_VOCODER_DISABLED;
-#ifdef VOCODER_FUNC_INTERFACE
-  currVocoderAction= VOCODER_IDLE;
+}
+
+#ifdef CONFIG_TARGET_FCDEV3B
+static void audio_mode_callback(void *event_from_audio)
+{
+	/* do nothing at this time */
+}
 #endif
-#ifdef _SIMULATION_
-  vocoder_tst_flag = FALSE;
-#endif
-
-}
 
 /*
 +-------------------------------------------------------------------+
@@ -92,115 +82,60 @@
 |                                 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)
 {
+#ifdef CONFIG_TARGET_FCDEV3B
+  T_AUDIO_VOICE_PATH_SETTING vpath;
+  T_AUDIO_FULL_ACCESS_WRITE audio_param;
+  T_RV_RETURN return_path;
+#endif
+
   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;
-
-    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;
+    return; /* No state change requested */
 
-    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 */
-      }
-      else
-      {
-        vocoder_mute_dl (TRUE);       /* mute speaker    */
-        vocoder_mute_ul (TRUE);       /* mute microphone */
-        enable_tch_vocoder (FALSE);   /* disable vocoder */
-      }
-    #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;
+      return_path.addr_id       = NULL;
+      return_path.callback_func = audio_mode_callback;
+      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;
+      return_path.addr_id       = NULL;
+      return_path.callback_func = audio_mode_callback;
+      audio_full_access_write(&audio_param, return_path);
+    }
+  #endif
+    currVocoderState = HL_VOCODER_DISABLED;
   }
 
   return;
@@ -248,24 +183,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	Fri Mar 22 17:13:59 2019 +0000
+++ b/src/g23m-aci/aci/psa_f.c	Thu Mar 28 00:36:10 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;