[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/driver/audio/src/v1/pcmRouter.c b/mcu/driver/audio/src/v1/pcmRouter.c
new file mode 100644
index 0000000..7404895
--- /dev/null
+++ b/mcu/driver/audio/src/v1/pcmRouter.c
@@ -0,0 +1,141 @@
+
+#include "kal_public_api.h"
+#include "kal_general_types.h"
+
+#include "kal_trace.h"
+#include "l1sp_trc.h"
+#include "l1audio_trace_utmd.h"
+#include "l1audio_sph_trc.h"
+#include "event_info_utility.h" // for MODEM_WARNING_MESSAGE
+
+#include "l1audio.h"
+#include "l1aud_common_def.h"
+#include "am.h"
+#include "sp_drv.h"
+#include "vm.h"
+#include "sp_enhance.h"
+#include "sal_def.h"
+#include "sal_exp.h"
+
+#include "afe.h"
+#if defined(__CVSD_CODEC_SUPPORT__) 
+#include "bt_sco_drv.h"
+#endif
+
+typedef struct {
+	bool isEnable;
+	bool isVocOn;
+	
+	uint16 aud_id;
+
+	
+} PCM_ROUTER_T;
+
+
+static PCM_ROUTER_T g_PcmRouter; 
+
+// ============================================================================
+
+void PcmRouterStart(void)
+{	
+
+	kal_uint32 module_id = MOD_L1AUDIO_SPH_SRV;
+   kal_uint32 voc_ptn = TVCI_CREATE_FILE;
+
+	//call cpd and lock sleep mode
+   g_PcmRouter.aud_id = L1Audio_GetAudioID();
+   L1Audio_SetFlag( g_PcmRouter.aud_id );
+
+	// force unmute to decople PS module
+	// turn on
+	AM_PcmRouter_On(0);	
+
+	// voc
+   if(!tst_trace_check_ps_filter_off(TRACE_GROUP_VM, &module_id, 0x2))
+   {
+      tst_vc_response(TVCI_VM_LOGGING, (const kal_uint8*)&voc_ptn, 4);
+      VMREC_Start(NULL, true);
+      g_PcmRouter.isVocOn = true;
+   }
+	
+	// turn on speech enhancement
+	SetSpeechEnhancement( true );
+
+	//always unmute DSP uplink when speech on (This is to keep the mute definition)
+	// SP_MuteUlFromDiffPos(false, SP_MIC_MUTE_POS_FROM_ALL);
+	// L1SP_MuteSpeaker(false);
+
+#if 0 // defined(__ECALL_SUPPORT__)
+/* under construction !*/
+/* under construction !*/
+#endif
+
+#if defined(__CVSD_CODEC_SUPPORT__) 
+   if(SP_GetDevInfo() == SPH_DEVINFO_BT_CVSD_MSBC
+   	|| SP_GetDevInfo() == SPH_DEVINFO_BT_CVSD
+   	|| SP_GetDevInfo() == SPH_DEVINFO_BT_MSBC)
+   {
+      kal_uint8 voice8kMode = SP_GetDevSamplingRate();
+
+      if( (voice8kMode==0) || (voice8kMode==1) ) {
+         BT_SCO_SPEECH_ON(voice8kMode==1);
+      } else {
+         MODEM_WARNING_MESSAGE((voice8kMode==0), "PcmRouterStart(bt): incorrect Voice8kMode, %d", voice8kMode);
+         MODEM_WARNING_MESSAGE((voice8kMode==1), "PcmRouterStart(bt): incorrect Voice8kMode, %d", voice8kMode);      
+      }
+      
+   }
+#endif
+
+	g_PcmRouter.isEnable = true;
+}
+
+void PcmRouterStop(void)
+{
+   kal_uint32 voc_ptn = TVCI_CLOSE_FILE;
+
+	// due to AP will close DL directly before speech off, so md can mute dl directly without ramping
+	// This will prevent sound pushes to hardware buffer then cause noise
+	SAL_Mute_Ctrl(SAL_MUTE_DL_8K, KAL_TRUE); // to replace 	L1SP_MuteSpeaker(true);
+
+
+#if defined(__CVSD_CODEC_SUPPORT__) 
+	if(BT_SCO_IS_SPEECH_ON())
+	{
+		BT_SCO_SPEECH_OFF();
+	}
+#endif
+	
+#if 0 // defined(__ECALL_SUPPORT__)
+/* under construction !*/
+/* under construction !*/
+#endif
+
+	
+	SetSpeechEnhancement( false );
+
+	// voc
+	if(g_PcmRouter.isVocOn)
+	{
+		tst_vc_response(TVCI_VM_LOGGING, (const kal_uint8*)(&voc_ptn), 4);
+		VMREC_Stop(true);
+		g_PcmRouter.isVocOn = false;
+	}
+
+	// turn off
+	AM_PcmRouter_Off();
+
+	SAL_Mute_Ctrl(SAL_MUTE_DL_8K, KAL_FALSE);
+	//always unmute DSP uplink after speech off to keep the mute definition
+	SP_MuteUlFromDiffPos(false, SP_MIC_MUTE_POS_FROM_ALL); 
+	L1SP_MuteSpeaker(false);
+	
+	// leave the mute control to PS module	
+
+	//unlock sleep mode and release CPD
+	L1Audio_ClearFlag( g_PcmRouter.aud_id );
+    L1Audio_FreeAudioID( g_PcmRouter.aud_id );
+	g_PcmRouter.aud_id = 0xffff;
+	
+	g_PcmRouter.isEnable = false;
+}