comparison gsm-fw/L1/audio_cfile/l1audio_afunc.c @ 606:c5286d24539e

gsm-fw/L1/audio_cfile: initial import from LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Fri, 29 Aug 2014 03:25:51 +0000
parents
children
comparison
equal deleted inserted replaced
605:527956ce73c7 606:c5286d24539e
1 /************* Revision Controle System Header *************
2 * GSM Layer 1 software
3 * L1AUDIO_AFUNC.C
4 *
5 * Filename l1audio_afunc.c
6 * Copyright 2003 (C) Texas Instruments
7 *
8 ************* Revision Controle System Header *************/
9
10 /************************************/
11 /* Include files... */
12 /************************************/
13
14 #include "l1_macro.h"
15 #include "l1_confg.h"
16
17 #if (AUDIO_TASK == 1)
18
19 #include "l1_types.h"
20 #include "sys_types.h"
21
22 #if (CODE_VERSION == SIMULATION) && (AUDIO_SIMULATION)
23
24
25 #include <stdlib.h>
26 #include <string.h>
27
28 #include "iq.h" // Debug / Init hardware ("eva3.lib")
29 #include "l1_ver.h"
30 #include "l1_const.h"
31 #include "l1_signa.h"
32
33 #if TESTMODE
34 #include "l1tm_defty.h"
35 #endif
36
37 #include "l1audio_const.h"
38 #include "l1audio_cust.h"
39 #include "l1audio_signa.h"
40 #include "l1audio_defty.h"
41 #include "l1audio_msgty.h"
42
43 #if (L1_GTT == 1)
44 #include "l1gtt_const.h"
45 #include "l1gtt_defty.h"
46 #endif
47 //added from e-sample for AAC
48 #if (L1_DYN_DSP_DWNLD == 1)
49 #include "l1_dyn_dwl_const.h"
50 #include "l1_dyn_dwl_defty.h"
51 #endif
52 #if (L1_MP3 == 1)
53 #include "l1mp3_defty.h"
54 #endif
55
56 #if (L1_MIDI == 1)
57 #include "l1midi_defty.h"
58 #endif
59 //added from e-sample for AAC
60 #if (L1_AAC == 1)
61 #include "l1aac_defty.h"
62 #endif
63
64 #include "l1_defty.h"
65 #include "cust_os.h"
66 #include "l1_msgty.h"
67 #include "l1_varex.h"
68
69 #include "l1_mftab.h"
70 #include "l1_tabs.h"
71 #include "l1_ctl.h"
72
73 #include "l1_time.h"
74 #include "l1_scen.h"
75
76 #include "l1audio_proto.h"
77
78 #else
79 // Layer1 and debug include files.
80
81 #include <ctype.h>
82 #include <math.h>
83 #include "l1_ver.h"
84 #include "l1_const.h"
85 #include "l1_signa.h"
86 #include "cust_os.h"
87
88 #if TESTMODE
89 #include "l1tm_defty.h"
90 #endif
91
92 #include "l1audio_const.h"
93 #include "l1audio_cust.h"
94 #include "l1audio_signa.h"
95 #include "l1audio_defty.h"
96 #include "l1audio_msgty.h"
97 #include "l1audio_proto.h"
98
99 #if (L1_GTT == 1)
100 #include "l1gtt_const.h"
101 #include "l1gtt_defty.h"
102 #endif
103 //added from e-sample for AAC
104 #if (L1_DYN_DSP_DWNLD == 1)
105 #include "l1_dyn_dwl_const.h"
106 #include "l1_dyn_dwl_defty.h"
107 #endif
108 #if (L1_MP3 == 1)
109 #include "l1mp3_defty.h"
110 #endif
111
112 #if (L1_MIDI == 1)
113 #include "l1midi_defty.h"
114 #endif
115 //added from e-smaple for AAC
116 #if (L1_AAC == 1)
117 #include "l1aac_defty.h"
118 #endif
119 #if (RF_FAM == 61)
120 #include "l1_rf61.h"
121 #endif
122
123 #include "l1_defty.h"
124 #include "l1_msgty.h"
125 #include "tpudrv.h" // TPU drivers. ("eva3.lib")
126 #include "l1_varex.h"
127
128 #include "l1_proto.h"
129 #include "l1_mftab.h"
130 #include "l1_tabs.h"
131 #include "mem.h"
132 #include "armio.h"
133 #include "timer.h"
134 #include "timer1.h"
135 #include "dma.h"
136 #include "inth.h"
137 #include "ulpd.h"
138 #include "rhea_arm.h"
139 #include "clkm.h" // Clockm ("eva3.lib")
140 #include "l1_ctl.h"
141
142 #include "l1_time.h"
143 #if L2_L3_SIMUL
144 #include "l1_scen.h"
145 #endif
146
147 #if (OP_RIV_AUDIO == 1)
148 #include "rv_general.h"
149 #include "audio_api.h"
150 #include "audio_structs_i.h"
151 #include "audio_var_i.h"
152 #include "audio_macro_i.h"
153 #include "audio_const_i.h"
154 #endif
155 #endif
156 // #include "audio_api.h" //Thukaram Test
157 #if (OP_L1_STANDALONE == 0)
158
159 #include "typedefs.h"
160 #include "vsi.h"
161 #include "os_const.h"
162 #include "os.h"
163 #include "frm_glob.h"
164
165 #include "typedefs.h"
166 #include "vsi.h"
167 #include "os_const.h"
168 #include "os.h"
169 #include "frm_glob.h"
170
171 extern T_HANDLE mm_ext_data_pool_handle;
172 extern T_HANDLE mm_int_data_pool_handle;
173 #endif
174 UWORD8 dma_src_port;
175 // This macro avoids to duplicate the code.
176 #if (OP_RIV_AUDIO == 1)
177 #define AUDIO_MSG (p_message)
178 #else
179 #define AUDIO_MSG (msg->SigP)
180 #endif
181
182 /*-------------------------------------------------------*/
183 /* l1a_audio_send_confirmation() */
184 /*-------------------------------------------------------*/
185 /* */
186 /* Parameters : Signal Code ofthe message */
187 /* */
188 /* Return : */
189 /* */
190 /* Description : Send a confirmation message to the MMI */
191 /* for an audio task. */
192 /* */
193 /*-------------------------------------------------------*/
194 void l1a_audio_send_confirmation(UWORD32 SignalCode)
195 {
196 #if (OP_RIV_AUDIO == 1)
197
198 void *p_message;
199 T_RVF_MB_STATUS mb_status; //omaps00090550
200
201 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
202 sizeof (T_RV_HDR),
203 (T_RVF_BUFFER **) (&p_message));
204
205 /* If insufficient resources, then report a memory error and abort. */
206 if (mb_status == RVF_RED)
207 {
208 /* the memory is insufficient to continue the non regression test */
209 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
210 return;
211 }
212
213 /* fill the message id */
214 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
215
216 /* send the messsage to the audio entity */
217 rvf_send_msg (p_audio_gbl_var->addrId,
218 p_message);
219
220 #else // OP_RIV_AUDIO
221
222 xSignalHeaderRec *msg;
223
224 msg = os_alloc_sig(0);
225 DEBUGMSG(status,NU_ALLOC_ERR)
226 msg->SignalCode = SignalCode;
227
228 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
229 l1_trace_message(msg);
230 #endif
231
232 os_send_sig(msg, MMI_QUEUE);
233 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
234
235 #endif // OP_RIV_AUDIO
236 }
237
238 /*-------------------------------------------------------*/
239 /* l1a_audio_send_result() */
240 /*-------------------------------------------------------*/
241 /* Parameters : */
242 /* Return : */
243 /* Functionality : Send a result message to the MMI. */
244 /*-------------------------------------------------------*/
245 void l1a_audio_send_result(UWORD32 SignalCode, xSignalHeaderRec *msg, UWORD8 queue)
246 {
247 #if (OP_RIV_AUDIO == 1)
248
249 void *p_message = NULL; //omaps00090550
250 T_RVF_MB_STATUS mb_status; //omaps00090550
251
252 switch (SignalCode)
253 {
254 #if (L1_AUDIO_DRIVER == 1)
255 case AUDIO_DRIVER_NOTIFICATION_MSG:
256 {
257 T_AUDIO_DRIVER_SESSION *p_session;
258 T_RV_RETURN *return_path;
259 UINT8 channel_id;
260
261 /* get driver session */
262 channel_id = ((T_L1_AUDIO_DRIVER_IND *)msg->SigP)->channel_id;
263 p_session = &(p_audio_gbl_var->audio_driver_session[channel_id]);
264 return_path = &(p_session->session_req.return_path);
265
266 /* Translate the l1 message into the Riviera compliant message */
267 /* Allocate the Riviera buffer */
268 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
269 sizeof (T_AUDIO_DRIVER_NOTIFICATION),
270 (T_RVF_BUFFER **) (&p_message));
271 /* If insufficient resources, then report a memory error and abort. */
272 if (mb_status == RVF_RED)
273 {
274 /* the memory is insufficient to continue the non regression test */
275 AUDIO_SEND_TRACE("AUDIO entity has no memory for driver notification",RV_TRACE_LEVEL_ERROR);
276 return;
277 }
278
279 /* Fill the message ID + parameters */
280 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->header.msg_id = SignalCode;
281 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->channel_id = channel_id;
282 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->p_buffer = ((T_L1_AUDIO_DRIVER_IND *)(msg->SigP))->p_buffer;
283
284 /* send answer */
285 if (return_path->callback_func == NULL)
286 rvf_send_msg (return_path->addr_id, p_message);
287 else
288 {
289 (*return_path->callback_func)((void *)(p_message));
290 rvf_free_buf((T_RVF_BUFFER *)p_message);
291 }
292
293 // This return is important because there is another rvf_send_msg at the end of the switch
294 return;
295 }
296 //omaps00090550 break;
297 #endif
298 #if (L1_VOICE_MEMO_AMR)
299 case MMI_VM_AMR_RECORD_STOP_CON:
300 {
301 /* Translate the l1 message into the Riviera compliant message */
302 /* Allocate the Riviera buffer */
303 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
304 sizeof (T_MMI_VM_AMR_RECORD_CON),
305 (T_RVF_BUFFER **) (&p_message));
306
307 /* If insufficient resources, then report a memory error and abort. */
308 if (mb_status == RVF_RED)
309 {
310 /* the memory is insufficient to continue the non regression test */
311 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_VM_AMR_RECORD_STOP_CON",RV_TRACE_LEVEL_ERROR);
312 return;
313 }
314
315 // recorded size includes the end mask
316 ((T_MMI_VM_AMR_RECORD_CON *)p_message)->recorded_size = ((T_L1_VM_AMR_RECORD_CON *)(msg->SigP))->recorded_size;
317 }
318 break;
319 #endif
320 #if (VOICE_MEMO)
321 case MMI_VM_RECORD_STOP_CON:
322 {
323 /* Translate the l1 message into the Riviera compliant message */
324
325 /* Allocate the Riviera buffer */
326 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
327 sizeof (T_MMI_VM_RECORD_CON),
328 (T_RVF_BUFFER **) (&p_message));
329
330 /* If insufficient resources, then report a memory error and abort. */
331 if (mb_status == RVF_RED)
332 {
333 /* the memory is insufficient to continue the non regression test */
334 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
335 return;
336 }
337
338 ((T_MMI_VM_RECORD_CON *)p_message)->recorded_size =
339 ((T_L1_VM_RECORD_CON *)(msg->SigP))->recorded_size;
340
341 break;
342 }
343 #endif
344 #if (L1_PCM_EXTRACTION)
345 case MMI_PCM_UPLOAD_STOP_CON:
346 {
347 /* Translate the l1 message into the Riviera compliant message */
348
349 /* Allocate the Riviera buffer */
350 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
351 sizeof (T_MMI_PCM_UPLOAD_STOP_CON),
352 (T_RVF_BUFFER **) (&p_message));
353
354 /* If insufficient resources, then report a memory error and abort. */
355 if (mb_status == RVF_RED)
356 {
357 /* the memory is insufficient to continue the non regression test */
358 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
359 return;
360 }
361
362 ((T_MMI_PCM_UPLOAD_STOP_CON *)p_message)->uploaded_size =
363 ((T_L1_PCM_UPLOAD_STOP_CON *)(msg->SigP))->uploaded_size;
364
365 break;
366 }
367 #endif /* L1_PCM_EXTRACTION */
368
369 #if (SPEECH_RECO)
370 case MMI_SR_ENROLL_STOP_CON:
371 {
372 /* Translate the l1 message into the Riviera compliant message */
373
374 /* Allocate the Riviera buffer */
375 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
376 sizeof (T_MMI_SR_ENROLL_STOP_CON),
377 (T_RVF_BUFFER **) (&p_message));
378
379 /* If insufficient resources, then report a memory error and abort. */
380 if (mb_status == RVF_RED)
381 {
382 /* the memory is insufficient to continue the non regression test */
383 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
384 return;
385 }
386
387 /* Fill the message parameter */
388 ((T_MMI_SR_ENROLL_STOP_CON *)(p_message))->error_id =
389 ((T_L1_SR_ENROLL_STOP_CON *)(msg->SigP))->error_id;
390
391 break;
392 }
393 case MMI_SR_UPDATE_STOP_CON:
394 {
395 /* Translate the l1 message into the Riviera compliant message */
396
397 /* Allocate the Riviera buffer */
398 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
399 sizeof (T_MMI_SR_UPDATE_STOP_CON),
400 (T_RVF_BUFFER **) (&p_message));
401
402 /* If insufficient resources, then report a memory error and abort. */
403 if (mb_status == RVF_RED)
404 {
405 /* the memory is insufficient to continue the non regression test */
406 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
407 return;
408 }
409
410 /* Fill the message parameter */
411 ((T_MMI_SR_UPDATE_STOP_CON *)(p_message))->error_id =
412 ((T_L1_SR_UPDATE_STOP_CON *)(msg->SigP))->error_id;
413
414 break;
415 }
416 case MMI_SR_RECO_STOP_CON:
417 {
418 /* Translate the l1 message into the Riviera compliant message */
419
420 /* Allocate the Riviera buffer */
421 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
422 sizeof (T_MMI_SR_RECO_STOP_CON),
423 (T_RVF_BUFFER **) (&p_message));
424
425 /* If insufficient resources, then report a memory error and abort. */
426 if (mb_status == RVF_RED)
427 {
428 /* the memory is insufficient to continue the non regression test */
429 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
430 return;
431 }
432
433 /* Fill the message parameter */
434 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->error_id =
435 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->error_id;
436 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->best_word_index =
437 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->best_word_index;
438 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->best_word_score =
439 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->best_word_score;
440 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->second_best_word_index =
441 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->second_best_word_index;
442 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->second_best_word_score =
443 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->second_best_word_score;
444 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->third_best_word_index =
445 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->third_best_word_index;
446 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->third_best_word_score =
447 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->third_best_word_score;
448 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->fourth_best_word_index =
449 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->fourth_best_word_index;
450 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->fourth_best_word_score =
451 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->fourth_best_word_score;
452 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->d_sr_model_size =
453 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->d_sr_model_size;
454 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->d_sr_db_level =
455 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->d_sr_db_level;
456 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->d_sr_db_noise =
457 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->d_sr_db_noise;
458
459 break;
460 }
461
462 case MMI_SR_UPDATE_CHECK_STOP_CON:
463 {
464 /* Translate the l1 message into the Riviera compliant message */
465
466 /* Allocate the Riviera buffer */
467 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
468 sizeof (T_MMI_SR_UPDATE_CHECK_STOP_CON),
469 (T_RVF_BUFFER **) (&p_message));
470
471 /* If insufficient resources, then report a memory error and abort. */
472 if (mb_status == RVF_RED)
473 {
474 /* the memory is insufficient to continue the non regression test */
475 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
476 return;
477 }
478
479 /* Fill the message parameter */
480 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->error_id =
481 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->error_id;
482 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->best_word_index =
483 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->best_word_index;
484 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->best_word_score =
485 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->best_word_score;
486 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->second_best_word_index =
487 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->second_best_word_index;
488 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->second_best_word_score =
489 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->second_best_word_score;
490 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->third_best_word_index =
491 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->third_best_word_index;
492 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->third_best_word_score =
493 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->third_best_word_score;
494 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->fourth_best_word_index =
495 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->fourth_best_word_index;
496 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->fourth_best_word_score =
497 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->fourth_best_word_score;
498 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->d_sr_model_size =
499 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->d_sr_model_size;
500 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->d_sr_db_level =
501 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->d_sr_db_level;
502 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->d_sr_db_noise =
503 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->d_sr_db_noise;
504
505 break;
506 }
507
508 #endif /* SPEECH_RECO */
509
510
511 #if (L1_CPORT == 1)
512 case MMI_CPORT_CONFIGURE_CON:
513 {
514 /* Translate the l1 message into the Riviera compliant message */
515 /* Allocate the Riviera buffer */
516 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
517 sizeof (T_MMI_CPORT_CONFIGURE_CON),
518 (T_RVF_BUFFER **) (&p_message));
519
520 /* If insufficient resources, then report a memory error and abort. */
521 if (mb_status == RVF_RED)
522 {
523 /* the memory is insufficient to continue the non regression test */
524 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_CPORT_CONFIGURE_CON",RV_TRACE_LEVEL_ERROR);
525 return;
526 }
527
528 // recorded size includes the end mask
529 ((T_MMI_CPORT_CONFIGURE_CON *)p_message)->register_id = ((T_L1_CPORT_CONFIGURE_CON *)(msg->SigP))->register_id;
530 ((T_MMI_CPORT_CONFIGURE_CON *)p_message)->register_value = ((T_L1_CPORT_CONFIGURE_CON *)(msg->SigP))->register_value;
531 }
532 break;
533 #endif
534
535 #if(L1_ANR == 2)
536 case MMI_AQI_ANR_CON:
537 {
538 /* Translate the l1 message into the Riviera compliant message */
539 /* Allocate the Riviera buffer */
540 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
541 sizeof (T_MMI_AQI_ANR_CON),
542 (T_RVF_BUFFER **) (&p_message));
543
544 /* If insufficient resources, then report a memory error and abort. */
545 if (mb_status == RVF_RED)
546 {
547 /* the memory is insufficient to continue the non regression test */
548 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_ANR_CON",RV_TRACE_LEVEL_ERROR);
549 return;
550 }
551
552 // recorded size includes the end mask
553 ((T_MMI_AQI_ANR_CON *)p_message)->anr_ul_action = ((T_L1_AQI_ANR_CON *)(msg->SigP))->anr_ul_action;
554 }
555 break;
556 #endif
557
558 #if(L1_IIR == 2)
559 case MMI_AQI_IIR_DL_CON:
560 {
561 /* Translate the l1 message into the Riviera compliant message */
562 /* Allocate the Riviera buffer */
563 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
564 sizeof (T_MMI_AQI_IIR_DL_CON),
565 (T_RVF_BUFFER **) (&p_message));
566
567 /* If insufficient resources, then report a memory error and abort. */
568 if (mb_status == RVF_RED)
569 {
570 /* the memory is insufficient to continue the non regression test */
571 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_IIR_DL_CON",RV_TRACE_LEVEL_ERROR);
572 return;
573 }
574
575 // recorded size includes the end mask
576 ((T_MMI_AQI_IIR_DL_CON *)p_message)->iir_dl_action = ((T_L1_AQI_IIR_DL_CON *)(msg->SigP))->iir_dl_action;
577 }
578 break;
579 #endif
580
581 #if(L1_AGC_UL == 1)
582 case MMI_AQI_AGC_UL_CON:
583 {
584 /* Translate the l1 message into the Riviera compliant message */
585 /* Allocate the Riviera buffer */
586 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
587 sizeof (T_MMI_AQI_AGC_UL_CON),
588 (T_RVF_BUFFER **) (&p_message));
589
590 /* If insufficient resources, then report a memory error and abort. */
591 if (mb_status == RVF_RED)
592 {
593 /* the memory is insufficient to continue the non regression test */
594 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_AGC_UL_CON",RV_TRACE_LEVEL_ERROR);
595 return;
596 }
597
598 // recorded size includes the end mask
599 ((T_MMI_AQI_AGC_UL_CON *)p_message)->agc_ul_action = ((T_L1_AQI_AGC_UL_CON *)(msg->SigP))->agc_ul_action;
600 }
601 break;
602 #endif
603
604 #if(L1_AGC_DL == 1)
605 case MMI_AQI_AGC_DL_CON:
606 {
607 /* Translate the l1 message into the Riviera compliant message */
608 /* Allocate the Riviera buffer */
609 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
610 sizeof (T_MMI_AQI_AGC_DL_CON),
611 (T_RVF_BUFFER **) (&p_message));
612
613 /* If insufficient resources, then report a memory error and abort. */
614 if (mb_status == RVF_RED)
615 {
616 /* the memory is insufficient to continue the non regression test */
617 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_AGC_DL_CON",RV_TRACE_LEVEL_ERROR);
618 return;
619 }
620
621 // recorded size includes the end mask
622 ((T_MMI_AQI_AGC_DL_CON *)p_message)->agc_dl_action = ((T_L1_AQI_AGC_DL_CON *)(msg->SigP))->agc_dl_action;
623 }
624 break;
625 #endif
626
627 #if(L1_WCM == 1)
628 case MMI_AQI_WCM_CON:
629 {
630 /* Translate the l1 message into the Riviera compliant message */
631 /* Allocate the Riviera buffer */
632 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
633 sizeof (T_MMI_AQI_WCM_CON),
634 (T_RVF_BUFFER **) (&p_message));
635
636 /* If insufficient resources, then report a memory error and abort. */
637 if (mb_status == RVF_RED)
638 {
639 /* the memory is insufficient to continue the non regression test */
640 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_WCM_CON",RV_TRACE_LEVEL_ERROR);
641 return;
642 }
643
644 // recorded size includes the end mask
645 ((T_MMI_AQI_WCM_CON *)p_message)->wcm_action = ((T_L1_AQI_WCM_CON *)(msg->SigP))->wcm_action;
646 }
647 break;
648 #endif
649
650
651 #if(L1_DRC == 1)
652 case MMI_AQI_DRC_CON:
653 {
654 /* Translate the l1 message into the Riviera compliant message */
655 /* Allocate the Riviera buffer */
656 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
657 sizeof (T_MMI_AQI_DRC_CON),
658 (T_RVF_BUFFER **) (&p_message));
659
660 /* If insufficient resources, then report a memory error and abort. */
661 if (mb_status == RVF_RED)
662 {
663 /* the memory is insufficient to continue the non regression test */
664 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_DRC_CON",RV_TRACE_LEVEL_ERROR);
665 return;
666 }
667
668 // recorded size includes the end mask
669 ((T_MMI_AQI_DRC_CON *)p_message)->drc_dl_action = ((T_L1_AQI_DRC_CON *)(msg->SigP))->drc_dl_action;
670 }
671 break;
672 #endif
673
674 #if(L1_AEC == 2)
675 case MMI_AQI_AEC_CON:
676 {
677 /* Translate the l1 message into the Riviera compliant message */
678 /* Allocate the Riviera buffer */
679 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
680 sizeof (T_MMI_AQI_AEC_CON),
681 (T_RVF_BUFFER **) (&p_message));
682
683 /* If insufficient resources, then report a memory error and abort. */
684 if (mb_status == RVF_RED)
685 {
686 /* the memory is insufficient to continue the non regression test */
687 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_AEC_CON",RV_TRACE_LEVEL_ERROR);
688 return;
689 }
690
691 // recorded size includes the end mask
692 ((T_MMI_AQI_AEC_CON *)p_message)->aec_action = ((T_L1_AQI_AEC_CON *)(msg->SigP))->aec_action;
693 }
694 break;
695 #endif
696
697
698 default:
699 {
700 AUDIO_SEND_TRACE("AUDIO entity: wrong L1 confirmation message",RV_TRACE_LEVEL_ERROR);
701 break;
702 }
703 }
704
705 if(p_message != NULL)
706 {
707 /* Fill the message ID */
708 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
709 }
710 /* send the messsage to the audio entity */
711 rvf_send_msg (p_audio_gbl_var->addrId,
712 p_message);
713
714 #else // OP_RIV_AUDIO
715
716 // Set flag to avoid the FREE(msg) in L1ASYNC.
717 l1a.l1_msg_forwarded = TRUE;
718
719 msg->SignalCode = SignalCode;
720
721 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
722 l1_trace_message(msg);
723 #endif
724
725 os_send_sig(msg, queue);
726 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
727
728 #endif // OP_RIV_AUDIO
729 }
730
731 #if (SPEECH_RECO)
732 /*-------------------------------------------------------*/
733 /* l1_send_sr_background_msg() */
734 /*-------------------------------------------------------*/
735 /* */
736 /* Parameters : Signal Code ofthe message */
737 /* */
738 /* Return : */
739 /* */
740 /* Description : Send a message to the SR background */
741 /* task. */
742 /* */
743 /*-------------------------------------------------------*/
744 void l1_send_sr_background_msg(UWORD32 SignalCode)
745 {
746 #if (OP_RIV_AUDIO == 1)
747 void *p_message;
748 T_RVF_MB_STATUS mb_status; //omaps00090550
749 #else
750 xSignalHeaderRec *msg;
751 #endif
752
753 switch (SignalCode)
754 {
755 case L1_SRBACK_SAVE_DATA_REQ:
756 {
757 // Allocate the partition
758 #if (OP_RIV_AUDIO == 1)
759 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
760 sizeof (T_L1_SRBACK_SAVE_DATA_REQ),
761 (T_RVF_BUFFER **) (&p_message));
762
763 /* If insufficient resources, then report a memory error and abort. */
764 if (mb_status == RVF_RED)
765 {
766 /* the memory is insufficient to continue the non regression test */
767 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
768 return;
769 }
770 #else // OP_RIV_AUDIO
771 msg = os_alloc_sig(sizeof(T_L1_SRBACK_SAVE_DATA_REQ));
772 DEBUGMSG(status,NU_ALLOC_ERR)
773 #endif // OP_RIV_AUDIO
774
775 // Fill the message
776 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->database_id = l1a_l1s_com.speechreco_task.parameters.database_id;
777 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->model_index = l1a_l1s_com.speechreco_task.parameters.word_index;
778 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->model_RAM_address = l1a_l1s_com.speechreco_task.parameters.model_address;
779 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->speech = l1a_l1s_com.speechreco_task.parameters.speech;
780 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->start_buffer = l1a_l1s_com.speechreco_task.parameters.speech_address;
781 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->stop_buffer = l1a_l1s_com.speechreco_task.parameters.speech_address + SC_SR_MMI_2_L1_SPEECH_SIZE;
782 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->start_address = l1a_l1s_com.speechreco_task.parameters.start_address;
783 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->stop_address = l1a_l1s_com.speechreco_task.parameters.stop_address;
784 }
785 break;
786
787 case L1_SRBACK_LOAD_MODEL_REQ:
788 {
789 // Allocate the partition
790 #if (OP_RIV_AUDIO == 1)
791 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
792 sizeof (T_L1_SRBACK_LOAD_MODEL_REQ),
793 (T_RVF_BUFFER **) (&p_message));
794
795 /* If insufficient resources, then report a memory error and abort. */
796 if (mb_status == RVF_RED)
797 {
798 /* the memory is insufficient to continue the non regression test */
799 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
800 return;
801 }
802 #else // OP_RIV_AUDIO
803 msg = os_alloc_sig(sizeof(T_L1_SRBACK_LOAD_MODEL_REQ));
804 DEBUGMSG(status,NU_ALLOC_ERR)
805 #endif // OP_RIV_AUDIO
806
807 // Fill the message
808 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->database_id = l1a_l1s_com.speechreco_task.parameters.database_id;
809 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->model_index = l1a_l1s_com.speechreco_task.parameters.word_index;
810 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->model_RAM_address = l1a_l1s_com.speechreco_task.parameters.model_address;
811 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->CTO_enable = l1a_l1s_com.speechreco_task.parameters.CTO_algorithm;
812 }
813 break;
814
815 case L1_SRBACK_TEMP_SAVE_DATA_REQ:
816 {
817 // Allocate the partition
818 #if (OP_RIV_AUDIO == 1)
819 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
820 sizeof (T_L1_SRBACK_TEMP_SAVE_DATA_REQ),
821 (T_RVF_BUFFER **) (&p_message));
822
823 /* If insufficient resources, then report a memory error and abort. */
824 if (mb_status == RVF_RED)
825 {
826 /* the memory is insufficient to continue the non regression test */
827 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
828 return;
829 }
830 #else // OP_RIV_AUDIO
831 msg = os_alloc_sig(sizeof(T_L1_SRBACK_TEMP_SAVE_DATA_REQ));
832 DEBUGMSG(status,NU_ALLOC_ERR)
833 #endif // OP_RIV_AUDIO
834
835 // Fill the message
836 ((T_L1_SRBACK_TEMP_SAVE_DATA_REQ *)(AUDIO_MSG))->model_RAM_address_input = l1a_l1s_com.speechreco_task.parameters.model_address;
837 ((T_L1_SRBACK_TEMP_SAVE_DATA_REQ *)(AUDIO_MSG))->model_RAM_address_output = l1a_l1s_com.speechreco_task.parameters.model_temp_address;
838 }
839 break;
840 }
841
842 #if (OP_RIV_AUDIO == 1)
843 /* fill the message id */
844 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
845
846 /* send the messsage to the audio entity */
847 rvf_send_msg (p_audio_gbl_var->addrId,
848 p_message);
849 #else // OP_RIV_AUDIO
850 msg->SignalCode = SignalCode;
851
852 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
853 l1_trace_message(msg);
854 #endif
855
856 os_send_sig(msg, SRBACK_QUEUE);
857 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
858 #endif // OP_RIV_AUDIO
859 }
860 #endif
861 #if (MELODY_E2)
862 /*-------------------------------------------------------*/
863 /* l1_send_melody_e2_background_msg() */
864 /*-------------------------------------------------------*/
865 /* */
866 /* Parameters : Signal Code of the message */
867 /* melody ID (0 or 1) */
868 /* */
869 /* Return : */
870 /* */
871 /* Description : Send a message to the audio background */
872 /* for the melody E2 feature. */
873 /* */
874 /*-------------------------------------------------------*/
875 void l1_send_melody_e2_background_msg(UWORD32 SignalCode, UWORD8 melody_id)
876 {
877 #if (OP_RIV_AUDIO == 1)
878 void *p_message;
879 T_RVF_MB_STATUS mb_status; //omaps00090550
880 #else
881 xSignalHeaderRec *msg;
882 #endif
883
884 UWORD8 i;
885
886 if ( SignalCode == L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ )
887 {
888 // Allocate the partition
889 #if (OP_RIV_AUDIO == 1)
890 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
891 sizeof (T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ),
892 (T_RVF_BUFFER **) (&p_message));
893
894 /* If insufficient resources, then report a memory error and abort. */
895 if (mb_status == RVF_RED)
896 {
897 /* the memory is insufficient to continue the non regression test */
898 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
899 return;
900 }
901 #else // OP_RIV_AUDIO
902 msg = os_alloc_sig(sizeof(T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ));
903 DEBUGMSG(status,NU_ALLOC_ERR)
904 #endif // OP_RIV_AUDIO
905
906 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->melody_id =
907 melody_id;
908
909 if (melody_id == 0)
910 {
911 // Load instrument for the melody 0
912 // Fill the message
913 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
914 l1a_l1s_com.melody0_e2_task.parameters.number_of_instrument;
915 for(i=0; i<SC_AUDIO_MELODY_E2_MAX_NUMBER_OF_INSTRUMENT; i++)
916 {
917 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->waves_table_id[i] =
918 l1a_l1s_com.melody0_e2_task.parameters.waves_table_id[i];
919 }
920 }
921 if (melody_id == 1)
922 {
923 // Load instrument for the melody 1
924 // Fill the message
925 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
926 l1a_l1s_com.melody1_e2_task.parameters.number_of_instrument;
927 for(i=0; i<SC_AUDIO_MELODY_E2_MAX_NUMBER_OF_INSTRUMENT; i++)
928 {
929 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->waves_table_id[i] =
930 l1a_l1s_com.melody1_e2_task.parameters.waves_table_id[i];
931 }
932 }
933 }
934 else
935 if (SignalCode == L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ)
936 {
937 // Allocate the partition
938 #if (OP_RIV_AUDIO == 1)
939 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
940 sizeof (T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ),
941 (T_RVF_BUFFER **) (&p_message));
942
943 /* If insufficient resources, then report a memory error and abort. */
944 if (mb_status == RVF_RED)
945 {
946 /* the memory is insufficient to continue the non regression test */
947 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
948 return;
949 }
950 #else // OP_RIV_AUDIO
951 msg = os_alloc_sig(sizeof(T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ));
952 DEBUGMSG(status,NU_ALLOC_ERR)
953 #endif // OP_RIV_AUDIO
954
955 ((T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->melody_id =
956 melody_id;
957
958 if (melody_id == 0)
959 {
960 ((T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
961 l1a_l1s_com.melody0_e2_task.parameters.number_of_instrument;
962 }
963 else
964 if (melody_id == 1)
965 {
966 ((T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
967 l1a_l1s_com.melody1_e2_task.parameters.number_of_instrument;
968 }
969 }
970
971 #if (OP_RIV_AUDIO == 1)
972 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
973
974 /* send the messsage to the audio entity */
975 rvf_send_msg (p_audio_gbl_var->addrId,
976 p_message);
977 #else // OP_RIV_AUDIO
978 msg->SignalCode = SignalCode;
979
980 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
981 l1_trace_message(msg);
982 #endif
983
984 os_send_sig(msg, SRBACK_QUEUE);
985 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
986 #endif // OP_RIV_AUDIO
987 }
988 #endif // MELODY_E2
989
990 #if (OP_L1_STANDALONE == 0)
991 void *mem_Allocate(UWORD16 size)
992 {
993
994 void* p_buffer;
995
996 T_HANDLE hTask;
997
998 hTask = e_running[os_MyHandle()];
999
1000 if(os_AllocateMemory( hTask , (T_VOID_STRUCT **)&p_buffer,size,OS_NO_SUSPEND, mm_int_data_pool_handle) != 0)
1001 {
1002 if(os_AllocateMemory ( hTask, (T_VOID_STRUCT**)&p_buffer,size,OS_NO_SUSPEND, mm_ext_data_pool_handle) != 0)
1003 return NULL;
1004 else
1005 {
1006 dma_src_port =AUDIO_SP_SOURCE_EMIF;
1007 return p_buffer;
1008 }
1009 }
1010 else
1011 {
1012 dma_src_port =AUDIO_SP_SOURCE_IMIF;
1013 return p_buffer;
1014 }
1015
1016
1017 }
1018
1019
1020 void mem_Deallocate(void *memoryBlock)
1021 {
1022 T_HANDLE hTask;
1023
1024 hTask = e_running[os_MyHandle()];
1025
1026 if (memoryBlock)
1027 {
1028 os_DeallocateMemory(hTask, (T_VOID_STRUCT *) memoryBlock);
1029 }
1030 }
1031 #endif//op_l1_standalone=0
1032 #endif // AUDIO_TASK