blob: 63938e0ba884214736246ab74ca0b6d55d352f71 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#include "kal_public_defs.h"
2#include "kal_general_types.h"
3#include "kal_public_api.h"
4#include "kal_trace.h"
5#include "sp_cc.h"
6#include "l1audio_trace_utmd.h"
7#include "l1sp_trc.h"
8#include "media.h"
9
10
11//DEFINE_C_SHARED_VAR(kalcc_rcuid, aud_P2L_rcu);
12kalcc_rcuid aud_P2L_rcu;
13DEFINE_RCU_DC_ARRAY(kal_uint8, aud_P2L_rcu_mem, RCU_MEMORY_SIZE(CC_BUFFER_SIZE * sizeof(kal_uint32), 2)); // 1024 bytes * 1 blocks
14
15//DEFINE_C_SHARED_VAR(kalcc_rcuid, aud_L2P_rcu);
16kalcc_rcuid aud_L2P_rcu;
17DEFINE_RCU_DC_ARRAY(kal_uint8, aud_L2P_rcu_mem, RCU_MEMORY_SIZE(CC_BUFFER_SIZE * sizeof(kal_uint32), 2)); // 1024 bytes * 1 blocks
18
19//DECLARE_SHARED_VAR(cc_eventgrpid, AUD_P2L);
20//DEFINE_C_SHARED_VAR(cc_eventgrpid, AUD_P2L);
21cc_eventgrpid AUD_P2L;
22
23//DECLARE_SHARED_VAR(cc_eventgrpid, AUD_L2P);
24//DEFINE_C_SHARED_VAR(cc_eventgrpid, AUD_L2P);
25cc_eventgrpid AUD_L2P;
26
27typedef struct {
28 kal_uint32 event_id;
29 kal_uint32 event_param1;
30 kal_uint32 event_param2;
31} SP_CC_EVENT_PARAM;
32
33RINGBUFFER_T(SP_CC_EVENT_PARAM,32) qsp_cc_event_param;
34extern kal_enhmutexid sp_handover_mutex;
35
36
37static kal_uint32 u32BT_SCO_LISR_L2P_counter;
38
39extern void L1Audio_DSP2MCU_Interrupt();
40#if defined(__CVSD_CODEC_SUPPORT__)
41extern void BT_SCO_LISR(void);
42#endif //#if defined(__CVSD_CODEC_SUPPORT__)
43
44
45extern kal_enhmutexid sp_cc_mutex;
46
47void SP_CC_Event_Handler()
48{
49 //send a message to MED
50 SP_CC_EVENT_PARAM sp_cc_event_param_local;
51
52 while( !RB_EMPTY(qsp_cc_event_param) ){
53 ilm_SP_CHANGERATE_EVENT_t *local_para;
54 RB_GET( qsp_cc_event_param, sp_cc_event_param_local );
55 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);
56 local_para = (ilm_SP_CHANGERATE_EVENT_t *) construct_local_para( sizeof(ilm_SP_CHANGERATE_EVENT_t), TD_CTRL );
57
58 switch(sp_cc_event_param_local.event_id){
59 case IRQ_L2P_TCH_NOTIFY:
60 local_para->event = SP_2G_TCH;
61 break;
62 case IRQ_L2P_2G_HANDOVER:
63 local_para->event = SP_2G_HANDOVER;
64 break;
65 case IRQ_L2P_2G_AUDIOMANAGER_INFO:
66 local_para->event = SP_2G_AUDIOMANAGER_INFO;
67 break;
68 default:
69 ASSERT(0);
70 break;
71 }
72 local_para->param[0] = sp_cc_event_param_local.event_param1;
73 local_para->param[1] = sp_cc_event_param_local.event_param2;
74 msg_send6(MOD_L1SP, MOD_MED, AUDIO_SAP, MSG_ID_AUDIO_M2M_CHANGERATE_EVENT, (local_para_struct *)local_para, NULL);
75 MD_TRC_SP_CC_EVENT_HANDLER_LEAVE();
76 }
77}
78
79void cc_irq_lisr_aud(kal_uint32 event_id, kal_uint32 param1, kal_uint32 param2)
80{
81 SP_CC_EVENT_PARAM sp_cc_event_param_local;
82 void L1Audio_CCSetEvent( void );
83
84 sp_cc_event_param_local.event_id = event_id;
85 sp_cc_event_param_local.event_param1 = param1;
86 sp_cc_event_param_local.event_param2 = param2;
87 RB_PUT( qsp_cc_event_param, sp_cc_event_param_local );
88 L1Audio_CCSetEvent();
89}
90
91//ToDO move Task Init
92void SP_CC_Init()
93{
94 RB_INIT( qsp_cc_event_param );
95
96 u32BT_SCO_LISR_L2P_counter = 0;
97
98 ASSERT( KAL_SUCCESS == kalcc_create_event_group( SHARED_pVAR(AUD_L2P), "receive_AUD_L2P_eg" ) );
99
100 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);
101
102}
103
104//audio_service.c
105void cc_InvokeLCoreFunction(kal_uint32 P2L_Buf[CC_BUFFER_SIZE], kal_uint32 L2P_Buf[CC_BUFFER_SIZE])
106{
107 int i;
108 kal_uint32 *P2L_rcu_buf;
109 kal_uint32 *L2P_rcu_buf;
110 kal_uint32 retrieved_events;
111
112 kal_take_enh_mutex( sp_cc_mutex );
113
114 ASSERT(P2L_Buf[1] <= CC_MAX_DATA);
115
116 // P -> L invoke a LCore side's function
117 //Prepare Params
118 MD_TRC_SP_CC_INVOKELCORE(1);
119 P2L_rcu_buf = rcu_get_free_buff(SHARED_VAR(aud_P2L_rcu));
120 //dynamic_switch_cacheable_region(&P2L_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_CACHEABLE);
121
122 MD_TRC_SP_CC_INVOKELCORE(2);
123 for(i=0; i<CC_BUFFER_SIZE; i++){
124 P2L_rcu_buf[i] = P2L_Buf[i];
125 MD_TRC_SP_CC_INVOKELCORE_INFO(3, i, P2L_Buf[i]);
126 }
127 //dynamic_switch_cacheable_region(&P2L_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_NO_CACHE);
128 ASSERT(KAL_SUCCESS == rcu_commit_data(P2L_rcu_buf));
129
130 MD_TRC_SP_CC_INVOKELCORE(4);
131 //Send A CrossCore Message
132 kalcc_set_eg_events(SHARED_pVAR(AUD_P2L), 0xFF, KAL_OR);
133
134 // L -> P Get return values
135 //Wait for the response
136 MD_TRC_SP_CC_INVOKELCORE(5);
137 kalcc_retrieve_eg_events(SHARED_pVAR(AUD_L2P), 0xFF, KAL_OR_CONSUME, &retrieved_events, KAL_SUSPEND);
138
139 //Retrieve returns
140 MD_TRC_SP_CC_INVOKELCORE(6);
141 L2P_rcu_buf = rcu_get_read_lock(SHARED_VAR(aud_L2P_rcu));
142 //dynamic_switch_cacheable_region(&L2P_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_CACHEABLE);
143
144 for(i=0; i<CC_BUFFER_SIZE; i++){
145 L2P_Buf[i] = L2P_rcu_buf[i];
146 MD_TRC_SP_CC_INVOKELCORE_INFO(7, i, L2P_Buf[i]);
147 }
148 //dynamic_switch_cacheable_region(&L2P_rcu_buf, ALIGNTOCACHELINE(CC_BUFFER_SIZE * sizeof(kal_uint32)), PAGE_NO_CACHE);
149 ASSERT( KAL_SUCCESS == rcu_free_read_lock(L2P_rcu_buf));
150
151 ASSERT( ( P2L_Buf[0] | 0x8000 ) == L2P_Buf[0] );
152
153 kal_give_enh_mutex( sp_cc_mutex );
154}
155
156
157void cc_L1D_Audio_ChkDspInitDone()
158{
159 int i;
160 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
161 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
162 // clear internal buffer
163 for( i = 0; i < CC_BUFFER_SIZE ; i++){
164 P2L_Buf[i] = L2P_Buf[i] = 0 ;
165 }
166
167 P2L_Buf[0] = MSG_P2L_L1D_AUD_CHKDSPINITDONE;
168 P2L_Buf[1] = 0;
169 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
170 ASSERT( 0 == L2P_Buf[1]);
171}
172
173kal_uint16 cc_L1D_Audio_RestartDSP()
174{
175 int i;
176 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
177 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
178 // clear internal buffer
179 for( i = 0; i < CC_BUFFER_SIZE ; i++){
180 P2L_Buf[i] = L2P_Buf[i] = 0 ;
181 }
182
183 P2L_Buf[0] = MSG_P2L_AUD_RESTART_DSP;
184 P2L_Buf[1] = 0;
185 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
186 ASSERT( 1 == L2P_Buf[1]);
187 return L2P_Buf[2];
188}
189
190void cc_L1D_Audio_NoNeedDSP()
191{
192 int i;
193 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
194 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
195 // clear internal buffer
196 for( i = 0; i < CC_BUFFER_SIZE ; i++){
197 P2L_Buf[i] = L2P_Buf[i] = 0 ;
198 }
199
200 P2L_Buf[0] = MSG_P2L_AUD_NONEEDDSP;
201 P2L_Buf[1] = 0;
202 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
203 ASSERT( 0 == L2P_Buf[1]);
204}
205
206void cc_set_VBI_for_FSM(kal_uint32 state)
207{
208 int i;
209 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
210 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
211 // clear internal buffer
212 for( i = 0; i < CC_BUFFER_SIZE ; i++){
213 P2L_Buf[i] = L2P_Buf[i] = 0 ;
214 }
215
216 P2L_Buf[0] = MSG_P2L_SET_VBI_FOR_FSM;
217 P2L_Buf[1] = 1;
218 P2L_Buf[2] = state;
219 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
220 ASSERT( 0 == L2P_Buf[1]);
221}
222
223void cc_Standby_Call_Open(kal_uint32 enc_mod)
224{
225 int i;
226 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
227 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
228 // clear internal buffer
229 for( i = 0; i < CC_BUFFER_SIZE ; i++){
230 P2L_Buf[i] = L2P_Buf[i] = 0 ;
231 }
232
233 P2L_Buf[0] = MSG_P2L_STANDBY_CALL_ON;
234 P2L_Buf[1] = 1;
235 P2L_Buf[2] = enc_mod;
236 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
237 ASSERT( 0 == L2P_Buf[1]);
238 L1SP_Set_isStandByMode(true);
239}
240
241
242void cc_Standby_Call_Close(kal_uint32 dsp_end)
243{
244 int i;
245 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
246 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
247
248 // clear internal buffer
249 for( i = 0; i < CC_BUFFER_SIZE ; i++){
250 P2L_Buf[i] = L2P_Buf[i] = 0 ;
251 }
252
253 P2L_Buf[0] = MSG_P2L_STANDBY_CALL_OFF;
254 P2L_Buf[1] = 1;
255 P2L_Buf[2] = dsp_end;
256 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
257 ASSERT( 0 == L2P_Buf[1]);
258 L1SP_Set_isStandByMode(false);
259}
260
261
262//am.c
263void cc_2G_Call_Open(kal_uint32 enc_mod, kal_uint32 dec_mod, kal_uint32 sub_channel, kal_uint32 resetType)
264{
265 int i;
266 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
267 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
268 // clear internal buffer
269 for( i = 0; i < CC_BUFFER_SIZE ; i++){
270 P2L_Buf[i] = L2P_Buf[i] = 0 ;
271 }
272
273 P2L_Buf[0] = MSG_P2L_2G_CALL_ON;
274 P2L_Buf[1] = 4;
275 P2L_Buf[2] = enc_mod; P2L_Buf[3] = dec_mod; P2L_Buf[4] = sub_channel; P2L_Buf[5] = resetType;
276 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
277 ASSERT( 0 == L2P_Buf[1]);
278}
279
280void cc_2G_Call_Close(kal_uint32 dsp_end)
281{
282 int i;
283 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
284 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
285
286 if( L1SP_Get_isStandByMode() ) {
287 cc_Standby_Call_Close(true);
288 }
289 else {
290 // clear internal buffer
291 for( i = 0; i < CC_BUFFER_SIZE ; i++){
292 P2L_Buf[i] = L2P_Buf[i] = 0 ;
293 }
294
295 P2L_Buf[0] = MSG_P2L_2G_CALL_OFF;
296 P2L_Buf[1] = 1;
297 P2L_Buf[2] = dsp_end;
298 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
299 ASSERT( 0 == L2P_Buf[1]);
300 }
301}
302
303void cc_2G_Call_Handover(kal_uint32 speech_mode, kal_uint32 sub_channel)
304{
305 int i;
306 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
307 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
308 // clear internal buffer
309 for( i = 0; i < CC_BUFFER_SIZE ; i++){
310 P2L_Buf[i] = L2P_Buf[i] = 0 ;
311 }
312
313 P2L_Buf[0] = MSG_P2L_2G_HANDOVER;
314 P2L_Buf[1] = 3;
315 P2L_Buf[2] = speech_mode;
316 P2L_Buf[3] = speech_mode;
317 P2L_Buf[4] = sub_channel;
318 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
319 ASSERT( 0 == L2P_Buf[1]);
320}
321
322void 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,
323 kal_uint32 resetType)
324{
325 int i;
326 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
327 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
328 // clear internal buffer
329 for( i = 0; i < CC_BUFFER_SIZE ; i++){
330 P2L_Buf[i] = L2P_Buf[i] = 0 ;
331 }
332
333 P2L_Buf[0] = MSG_P2L_3G_CALL_ON;
334 P2L_Buf[1] = 8;
335 P2L_Buf[2] = enc_mod; P2L_Buf[3] = dec_mod; P2L_Buf[4] = dtx;
336 P2L_Buf[5] = delR; P2L_Buf[6] = delW; P2L_Buf[7] = delM;
337 P2L_Buf[8] = u32CurTime64us; P2L_Buf[9] = resetType;
338 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
339 ASSERT( 0 == L2P_Buf[1]);
340}
341
342void cc_3G_Call_Close(kal_uint32 dsp_end)
343{
344 int i;
345 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
346 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
347
348 if( L1SP_Get_isStandByMode() ) {
349 cc_Standby_Call_Close(true);
350 }
351 else {
352 // clear internal buffer
353 for( i = 0; i < CC_BUFFER_SIZE ; i++){
354 P2L_Buf[i] = L2P_Buf[i] = 0 ;
355 }
356
357 P2L_Buf[0] = MSG_P2L_3G_CALL_OFF;
358 P2L_Buf[1] = 1;
359 P2L_Buf[2] = dsp_end;
360 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
361 ASSERT( 0 == L2P_Buf[1]);
362 }
363}
364
365void 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)
366{
367 int i;
368 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
369 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
370 // clear internal buffer
371 for( i = 0; i < CC_BUFFER_SIZE ; i++){
372 P2L_Buf[i] = L2P_Buf[i] = 0 ;
373 }
374
375 P2L_Buf[0] = MSG_P2L_4G_CALL_ON;
376 P2L_Buf[1] = 8;
377 P2L_Buf[2] = enc_mod; P2L_Buf[3] = dec_mod; P2L_Buf[4] = dtx;
378 P2L_Buf[5] = delR; P2L_Buf[6] = delW; P2L_Buf[7] = delM;
379 P2L_Buf[8] = u32CurTime64us;
380 P2L_Buf[9] = resetType;
381 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
382 ASSERT( 0 == L2P_Buf[1]);
383}
384
385void cc_4G_Call_Close_temp(kal_uint32 dsp_end)
386{
387 int i;
388 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
389 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
390
391 if( L1SP_Get_isStandByMode() ) {
392 cc_Standby_Call_Close(true);
393 }
394 else {
395 // clear internal buffer
396 for( i = 0; i < CC_BUFFER_SIZE ; i++){
397 P2L_Buf[i] = L2P_Buf[i] = 0 ;
398 }
399
400 P2L_Buf[0] = MSG_P2L_4G_CALL_OFF;
401 P2L_Buf[1] = 1;
402 P2L_Buf[2] = dsp_end;
403 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
404 ASSERT( 0 == L2P_Buf[1]);
405 }
406}
407
408void cc_4G_G_Codec_Call_Open(kal_uint32 band_mod, kal_uint32 delR, kal_uint32 delW, kal_uint32 delM, kal_uint32 u32CurTime64us,
409 kal_uint32 resetType)
410{
411 int i;
412// ASSERT(false);
413 #if 1
414 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
415 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
416 // clear internal buffer
417 for( i = 0; i < CC_BUFFER_SIZE ; i++){
418 P2L_Buf[i] = L2P_Buf[i] = 0 ;
419 }
420
421 P2L_Buf[0] = MSG_P2L_4G_G_Codec_CALL_ON;
422 P2L_Buf[1] = 6;
423 P2L_Buf[2] = band_mod; P2L_Buf[3] = delR; P2L_Buf[4] = delW;
424 P2L_Buf[5] = delM; P2L_Buf[6] = u32CurTime64us;
425 P2L_Buf[7] = resetType;
426 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
427 ASSERT( 0 == L2P_Buf[1]);
428 #endif
429}
430
431void cc_4G_G_Codec_Call_Close(kal_uint32 dsp_end)
432{
433 int i;
434// ASSERT(false);
435 #if 1
436 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
437 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
438
439 if( L1SP_Get_isStandByMode() ) {
440 cc_Standby_Call_Close(true);
441 }
442 else {
443 // clear internal buffer
444 for( i = 0; i < CC_BUFFER_SIZE ; i++){
445 P2L_Buf[i] = L2P_Buf[i] = 0 ;
446 }
447
448 P2L_Buf[0] = MSG_P2L_4G_G_Codec_CALL_OFF;
449 P2L_Buf[1] = 1;
450 P2L_Buf[2] = dsp_end;
451 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
452 ASSERT( 0 == L2P_Buf[1]);
453 }
454 #endif
455}
456
457
458void 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)
459{
460 int i;
461 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
462 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
463 // clear internal buffer
464 for( i = 0; i < CC_BUFFER_SIZE ; i++){
465 P2L_Buf[i] = L2P_Buf[i] = 0 ;
466 }
467
468 P2L_Buf[0] = MSG_P2L_4G_EVS_Codec_CALL_ON;
469 P2L_Buf[1] = 7;
470 P2L_Buf[2] = codec; P2L_Buf[3] = isDTX; P2L_Buf[4] = delR;
471 P2L_Buf[5] = delW; P2L_Buf[6] = delM; P2L_Buf[7] = u32CurTime64us;
472 P2L_Buf[8] = resetType;
473 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
474 ASSERT( 0 == L2P_Buf[1]);
475}
476
477
478void cc_4G_EVS_Codec_Call_Close(kal_uint32 dsp_end)
479{
480 int i;
481 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
482 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
483
484 if( L1SP_Get_isStandByMode() ) {
485 cc_Standby_Call_Close(true);
486 }
487 else {
488 // clear internal buffer
489 for( i = 0; i < CC_BUFFER_SIZE ; i++){
490 P2L_Buf[i] = L2P_Buf[i] = 0 ;
491 }
492
493 P2L_Buf[0] = MSG_P2L_4G_EVS_Codec_CALL_OFF;
494 P2L_Buf[1] = 1;
495 P2L_Buf[2] = dsp_end;
496 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
497 ASSERT( 0 == L2P_Buf[1]);
498 }
499}
500
501
502void cc_C2K_Call_Open(kal_uint32 so, kal_uint32 dtx, kal_uint32 delR, kal_uint32 delW, kal_uint32 delM,
503 kal_uint32 resetType)
504{
505 int i;
506 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
507 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
508 // clear internal buffer
509 for( i = 0; i < CC_BUFFER_SIZE ; i++){
510 P2L_Buf[i] = L2P_Buf[i] = 0 ;
511 }
512
513 P2L_Buf[0] = MSG_P2L_C2K_CALL_ON;
514 P2L_Buf[1] = 6;
515 P2L_Buf[2] = so;
516 P2L_Buf[3] = dtx;
517 P2L_Buf[4] = delR;
518 P2L_Buf[5] = delW;
519 P2L_Buf[6] = delM;
520 P2L_Buf[7] = resetType;
521 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
522 ASSERT( 0 == L2P_Buf[1]);
523}
524
525void cc_C2K_Call_Close(kal_uint32 dsp_end)
526{
527 int i;
528 kal_uint32 P2L_Buf[CC_BUFFER_SIZE];
529 kal_uint32 L2P_Buf[CC_BUFFER_SIZE];
530
531 if( L1SP_Get_isStandByMode() ) {
532 cc_Standby_Call_Close(true);
533 }
534 else {
535 // clear internal buffer
536 for( i = 0; i < CC_BUFFER_SIZE ; i++){
537 P2L_Buf[i] = L2P_Buf[i] = 0 ;
538 }
539
540 P2L_Buf[0] = MSG_P2L_C2K_CALL_OFF;
541 P2L_Buf[1] = 1;
542 P2L_Buf[2] = dsp_end;
543 cc_InvokeLCoreFunction(P2L_Buf, L2P_Buf);
544 ASSERT( 0 == L2P_Buf[1]);
545 }
546}
547
548void SP_L2P_Handler(ilm_struct *ilm_ptr)
549{
550 switch (ilm_ptr->msg_id) {
551 case MSG_ID_AUDIO_L2P_SP3G_UPDATE_L1_INFO:
552 {
553 ilm_L2P_SP3G_UPDATE_L1_INFO *local_para = (ilm_L2P_SP3G_UPDATE_L1_INFO *)(ilm_ptr->local_para_ptr);
554 MD_TRC_SP_CC_L2P_Hdler(0, local_para->l1_info[0], local_para->l1_info[1]);
555 SP3G_UpdateL1AInFo_P(local_para->l1_info[0], local_para->l1_info[1]);
556 }
557 break;
558 default:
559 {
560 MD_TRC_SP_CC_L2P_Hdler_Err(ilm_ptr->msg_id);
561 break;
562 }
563 }
564}