[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/driver/audio/src/v1/sp_cc.c b/mcu/driver/audio/src/v1/sp_cc.c
new file mode 100644
index 0000000..63938e0
--- /dev/null
+++ b/mcu/driver/audio/src/v1/sp_cc.c
@@ -0,0 +1,564 @@
+#include "kal_public_defs.h"
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_trace.h"
+#include "sp_cc.h"
+#include "l1audio_trace_utmd.h"
+#include "l1sp_trc.h"
+#include "media.h"
+
+
+//DEFINE_C_SHARED_VAR(kalcc_rcuid, aud_P2L_rcu);
+kalcc_rcuid aud_P2L_rcu;
+DEFINE_RCU_DC_ARRAY(kal_uint8, aud_P2L_rcu_mem, RCU_MEMORY_SIZE(CC_BUFFER_SIZE * sizeof(kal_uint32), 2)); // 1024 bytes * 1 blocks
+
+//DEFINE_C_SHARED_VAR(kalcc_rcuid, aud_L2P_rcu);
+kalcc_rcuid aud_L2P_rcu;
+DEFINE_RCU_DC_ARRAY(kal_uint8, aud_L2P_rcu_mem, RCU_MEMORY_SIZE(CC_BUFFER_SIZE * sizeof(kal_uint32), 2)); // 1024 bytes * 1 blocks
+
+//DECLARE_SHARED_VAR(cc_eventgrpid, AUD_P2L);
+//DEFINE_C_SHARED_VAR(cc_eventgrpid, AUD_P2L);
+cc_eventgrpid AUD_P2L;
+
+//DECLARE_SHARED_VAR(cc_eventgrpid, AUD_L2P);
+//DEFINE_C_SHARED_VAR(cc_eventgrpid, AUD_L2P);
+cc_eventgrpid AUD_L2P;
+
+typedef struct {
+ kal_uint32 event_id;
+ kal_uint32 event_param1;
+ kal_uint32 event_param2;
+} SP_CC_EVENT_PARAM;
+
+RINGBUFFER_T(SP_CC_EVENT_PARAM,32) qsp_cc_event_param;
+extern kal_enhmutexid sp_handover_mutex;
+
+
+static kal_uint32 u32BT_SCO_LISR_L2P_counter;
+
+extern void L1Audio_DSP2MCU_Interrupt();
+#if defined(__CVSD_CODEC_SUPPORT__)
+extern void BT_SCO_LISR(void);
+#endif //#if defined(__CVSD_CODEC_SUPPORT__)
+
+
+extern kal_enhmutexid sp_cc_mutex;
+
+void SP_CC_Event_Handler()
+{
+ //send a message to MED
+ SP_CC_EVENT_PARAM sp_cc_event_param_local;
+
+ while( !RB_EMPTY(qsp_cc_event_param) ){
+ ilm_SP_CHANGERATE_EVENT_t *local_para;
+ RB_GET( qsp_cc_event_param, sp_cc_event_param_local );
+ MD_TRC_SP_CC_EVENT_HANDLER_ENTER(sp_cc_event_param_local.event_id, sp_cc_event_param_local.event_param1, sp_cc_event_param_local.event_param2);
+ local_para = (ilm_SP_CHANGERATE_EVENT_t *) construct_local_para( sizeof(ilm_SP_CHANGERATE_EVENT_t), TD_CTRL );
+
+ switch(sp_cc_event_param_local.event_id){
+ case IRQ_L2P_TCH_NOTIFY:
+ local_para->event = SP_2G_TCH;
+ break;
+ case IRQ_L2P_2G_HANDOVER:
+ local_para->event = SP_2G_HANDOVER;
+ break;
+ case IRQ_L2P_2G_AUDIOMANAGER_INFO:
+ local_para->event = SP_2G_AUDIOMANAGER_INFO;
+ break;
+ default:
+ ASSERT(0);
+ break;
+ }
+ local_para->param[0] = sp_cc_event_param_local.event_param1;
+ local_para->param[1] = sp_cc_event_param_local.event_param2;
+ msg_send6(MOD_L1SP, MOD_MED, AUDIO_SAP, MSG_ID_AUDIO_M2M_CHANGERATE_EVENT, (local_para_struct *)local_para, NULL);
+ MD_TRC_SP_CC_EVENT_HANDLER_LEAVE();
+ }
+}
+
+void cc_irq_lisr_aud(kal_uint32 event_id, kal_uint32 param1, kal_uint32 param2)
+{
+ SP_CC_EVENT_PARAM sp_cc_event_param_local;
+ void L1Audio_CCSetEvent( void );
+
+ sp_cc_event_param_local.event_id = event_id;
+ sp_cc_event_param_local.event_param1 = param1;
+ sp_cc_event_param_local.event_param2 = param2;
+ RB_PUT( qsp_cc_event_param, sp_cc_event_param_local );
+ L1Audio_CCSetEvent();
+}
+
+//ToDO move Task Init
+void SP_CC_Init()
+{
+ RB_INIT( qsp_cc_event_param );
+
+ u32BT_SCO_LISR_L2P_counter = 0;
+
+ ASSERT( KAL_SUCCESS == kalcc_create_event_group( SHARED_pVAR(AUD_L2P), "receive_AUD_L2P_eg" ) );
+
+ SHARED_VAR(aud_P2L_rcu) = rcu_create((void *)SHARED_ARRAY(aud_P2L_rcu_mem), RCU_MEMORY_SIZE(CC_BUFFER_SIZE * sizeof(kal_uint32), 2), CC_BUFFER_SIZE * sizeof(kal_uint32), 0);
+
+}
+
+//audio_service.c
+void cc_InvokeLCoreFunction(kal_uint32 P2L_Buf[CC_BUFFER_SIZE], kal_uint32 L2P_Buf[CC_BUFFER_SIZE])
+{
+ int i;
+ kal_uint32 *P2L_rcu_buf;
+ kal_uint32 *L2P_rcu_buf;
+ kal_uint32 retrieved_events;
+
+ kal_take_enh_mutex( sp_cc_mutex );
+
+ ASSERT(P2L_Buf[1] <= CC_MAX_DATA);
+
+ // P -> L invoke a LCore side's function
+ //Prepare Params
+ MD_TRC_SP_CC_INVOKELCORE(1);
+ P2L_rcu_buf = rcu_get_free_buff(SHARED_VAR(aud_P2L_rcu));
+ //dynamic_switch_cacheable_region(&P2L_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_CACHEABLE);
+
+ MD_TRC_SP_CC_INVOKELCORE(2);
+ for(i=0; i<CC_BUFFER_SIZE; i++){
+ P2L_rcu_buf[i] = P2L_Buf[i];
+ MD_TRC_SP_CC_INVOKELCORE_INFO(3, i, P2L_Buf[i]);
+ }
+ //dynamic_switch_cacheable_region(&P2L_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_NO_CACHE);
+ ASSERT(KAL_SUCCESS == rcu_commit_data(P2L_rcu_buf));
+
+ MD_TRC_SP_CC_INVOKELCORE(4);
+ //Send A CrossCore Message
+ kalcc_set_eg_events(SHARED_pVAR(AUD_P2L), 0xFF, KAL_OR);
+
+ // L -> P Get return values
+ //Wait for the response
+ MD_TRC_SP_CC_INVOKELCORE(5);
+ kalcc_retrieve_eg_events(SHARED_pVAR(AUD_L2P), 0xFF, KAL_OR_CONSUME, &retrieved_events, KAL_SUSPEND);
+
+ //Retrieve returns
+ MD_TRC_SP_CC_INVOKELCORE(6);
+ L2P_rcu_buf = rcu_get_read_lock(SHARED_VAR(aud_L2P_rcu));
+ //dynamic_switch_cacheable_region(&L2P_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_CACHEABLE);
+
+ for(i=0; i<CC_BUFFER_SIZE; i++){
+ L2P_Buf[i] = L2P_rcu_buf[i];
+ MD_TRC_SP_CC_INVOKELCORE_INFO(7, i, L2P_Buf[i]);
+ }
+ //dynamic_switch_cacheable_region(&L2P_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_NO_CACHE);
+ ASSERT( KAL_SUCCESS == rcu_free_read_lock(L2P_rcu_buf));
+
+ ASSERT( ( P2L_Buf[0] | 0x8000 ) == L2P_Buf[0] );
+
+ kal_give_enh_mutex( sp_cc_mutex );
+}
+
+
+void cc_L1D_Audio_ChkDspInitDone()
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_L1D_AUD_CHKDSPINITDONE;
+ P2L_Buf[1] = 0;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+kal_uint16 cc_L1D_Audio_RestartDSP()
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_AUD_RESTART_DSP;
+ P2L_Buf[1] = 0;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 1 == L2P_Buf[1]);
+ return L2P_Buf[2];
+}
+
+void cc_L1D_Audio_NoNeedDSP()
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_AUD_NONEEDDSP;
+ P2L_Buf[1] = 0;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+void cc_set_VBI_for_FSM(kal_uint32 state)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_SET_VBI_FOR_FSM;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = state;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+void cc_Standby_Call_Open(kal_uint32 enc_mod)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_STANDBY_CALL_ON;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = enc_mod;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ L1SP_Set_isStandByMode(true);
+}
+
+
+void cc_Standby_Call_Close(kal_uint32 dsp_end)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_STANDBY_CALL_OFF;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = dsp_end;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ L1SP_Set_isStandByMode(false);
+}
+
+
+//am.c
+void cc_2G_Call_Open(kal_uint32 enc_mod, kal_uint32 dec_mod, kal_uint32 sub_channel, kal_uint32 resetType)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_2G_CALL_ON;
+ P2L_Buf[1] = 4;
+ P2L_Buf[2] = enc_mod; P2L_Buf[3] = dec_mod; P2L_Buf[4] = sub_channel; P2L_Buf[5] = resetType;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+void cc_2G_Call_Close(kal_uint32 dsp_end)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+
+ if( L1SP_Get_isStandByMode() ) {
+ cc_Standby_Call_Close(true);
+ }
+ else {
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_2G_CALL_OFF;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = dsp_end;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ }
+}
+
+void cc_2G_Call_Handover(kal_uint32 speech_mode, kal_uint32 sub_channel)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_2G_HANDOVER;
+ P2L_Buf[1] = 3;
+ P2L_Buf[2] = speech_mode;
+ P2L_Buf[3] = speech_mode;
+ P2L_Buf[4] = sub_channel;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+void cc_3G_Call_Open(kal_uint32 enc_mod, kal_uint32 dec_mod, kal_uint32 dtx, kal_uint32 delR, kal_uint32 delW, kal_uint32 delM, kal_uint32 u32CurTime64us,
+ kal_uint32 resetType)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_3G_CALL_ON;
+ P2L_Buf[1] = 8;
+ P2L_Buf[2] = enc_mod; P2L_Buf[3] = dec_mod; P2L_Buf[4] = dtx;
+ P2L_Buf[5] = delR; P2L_Buf[6] = delW; P2L_Buf[7] = delM;
+ P2L_Buf[8] = u32CurTime64us; P2L_Buf[9] = resetType;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+void cc_3G_Call_Close(kal_uint32 dsp_end)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+
+ if( L1SP_Get_isStandByMode() ) {
+ cc_Standby_Call_Close(true);
+ }
+ else {
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_3G_CALL_OFF;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = dsp_end;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ }
+}
+
+void cc_4G_Call_Open_temp(kal_uint32 enc_mod, kal_uint32 dec_mod, kal_uint32 dtx, kal_uint32 delR, kal_uint32 delW, kal_uint32 delM, kal_uint32 u32CurTime64us, kal_uint32 resetType)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_4G_CALL_ON;
+ P2L_Buf[1] = 8;
+ P2L_Buf[2] = enc_mod; P2L_Buf[3] = dec_mod; P2L_Buf[4] = dtx;
+ P2L_Buf[5] = delR; P2L_Buf[6] = delW; P2L_Buf[7] = delM;
+ P2L_Buf[8] = u32CurTime64us;
+ P2L_Buf[9] = resetType;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+void cc_4G_Call_Close_temp(kal_uint32 dsp_end)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+
+ if( L1SP_Get_isStandByMode() ) {
+ cc_Standby_Call_Close(true);
+ }
+ else {
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_4G_CALL_OFF;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = dsp_end;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ }
+}
+
+void cc_4G_G_Codec_Call_Open(kal_uint32 band_mod, kal_uint32 delR, kal_uint32 delW, kal_uint32 delM, kal_uint32 u32CurTime64us,
+ kal_uint32 resetType)
+{
+ int i;
+// ASSERT(false);
+ #if 1
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_4G_G_Codec_CALL_ON;
+ P2L_Buf[1] = 6;
+ P2L_Buf[2] = band_mod; P2L_Buf[3] = delR; P2L_Buf[4] = delW;
+ P2L_Buf[5] = delM; P2L_Buf[6] = u32CurTime64us;
+ P2L_Buf[7] = resetType;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ #endif
+}
+
+void cc_4G_G_Codec_Call_Close(kal_uint32 dsp_end)
+{
+ int i;
+// ASSERT(false);
+ #if 1
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+
+ if( L1SP_Get_isStandByMode() ) {
+ cc_Standby_Call_Close(true);
+ }
+ else {
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_4G_G_Codec_CALL_OFF;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = dsp_end;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ }
+ #endif
+}
+
+
+void cc_4G_EVS_Codec_Call_Open(kal_uint32 codec, uint32 isDTX, kal_uint32 delR, kal_uint32 delW, kal_uint32 delM, kal_uint32 u32CurTime64us, kal_uint32 resetType)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_4G_EVS_Codec_CALL_ON;
+ P2L_Buf[1] = 7;
+ P2L_Buf[2] = codec; P2L_Buf[3] = isDTX; P2L_Buf[4] = delR;
+ P2L_Buf[5] = delW; P2L_Buf[6] = delM; P2L_Buf[7] = u32CurTime64us;
+ P2L_Buf[8] = resetType;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+
+void cc_4G_EVS_Codec_Call_Close(kal_uint32 dsp_end)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+
+ if( L1SP_Get_isStandByMode() ) {
+ cc_Standby_Call_Close(true);
+ }
+ else {
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_4G_EVS_Codec_CALL_OFF;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = dsp_end;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ }
+}
+
+
+void cc_C2K_Call_Open(kal_uint32 so, kal_uint32 dtx, kal_uint32 delR, kal_uint32 delW, kal_uint32 delM,
+ kal_uint32 resetType)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_C2K_CALL_ON;
+ P2L_Buf[1] = 6;
+ P2L_Buf[2] = so;
+ P2L_Buf[3] = dtx;
+ P2L_Buf[4] = delR;
+ P2L_Buf[5] = delW;
+ P2L_Buf[6] = delM;
+ P2L_Buf[7] = resetType;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+}
+
+void cc_C2K_Call_Close(kal_uint32 dsp_end)
+{
+ int i;
+ kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
+ kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
+
+ if( L1SP_Get_isStandByMode() ) {
+ cc_Standby_Call_Close(true);
+ }
+ else {
+ // clear internal buffer
+ for( i = 0; i < CC_BUFFER_SIZE ; i++){
+ P2L_Buf[i] = L2P_Buf[i] = 0 ;
+ }
+
+ P2L_Buf[0] = MSG_P2L_C2K_CALL_OFF;
+ P2L_Buf[1] = 1;
+ P2L_Buf[2] = dsp_end;
+ cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
+ ASSERT( 0 == L2P_Buf[1]);
+ }
+}
+
+void SP_L2P_Handler(ilm_struct *ilm_ptr)
+{
+ switch (ilm_ptr->msg_id) {
+ case MSG_ID_AUDIO_L2P_SP3G_UPDATE_L1_INFO:
+ {
+ ilm_L2P_SP3G_UPDATE_L1_INFO *local_para = (ilm_L2P_SP3G_UPDATE_L1_INFO *)(ilm_ptr->local_para_ptr);
+ MD_TRC_SP_CC_L2P_Hdler(0, local_para->l1_info[0], local_para->l1_info[1]);
+ SP3G_UpdateL1AInFo_P(local_para->l1_info[0], local_para->l1_info[1]);
+ }
+ break;
+ default:
+ {
+ MD_TRC_SP_CC_L2P_Hdler_Err(ilm_ptr->msg_id);
+ break;
+ }
+ }
+}