comparison src/cs/layer1/audio_cfile/l1audio_afunc.c @ 0:b6a5e36de839

src/cs: initial import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 15 Jul 2018 04:39:26 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:b6a5e36de839
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
120 #if (RF_FAM == 61)
121 #include "l1_rf61.h"
122 #endif
123
124 #include "l1_defty.h"
125 #include "l1_msgty.h"
126 #include "tpudrv.h" // TPU drivers. ("eva3.lib")
127 #include "l1_varex.h"
128
129 #include "l1_proto.h"
130 #include "l1_mftab.h"
131 #include "l1_tabs.h"
132 #include "mem.h"
133 #include "armio.h"
134 #include "timer.h"
135 #include "timer1.h"
136 #include "dma.h"
137 #include "inth.h"
138 #include "ulpd.h"
139 #include "rhea_arm.h"
140 #include "clkm.h" // Clockm ("eva3.lib")
141 #include "l1_ctl.h"
142
143 #include "l1_time.h"
144 #if L2_L3_SIMUL
145 #include "l1_scen.h"
146 #endif
147
148 #if (OP_RIV_AUDIO == 1)
149 #include "rv_general.h"
150 #include "audio_api.h"
151 #include "audio_structs_i.h"
152 #include "audio_var_i.h"
153 #include "audio_macro_i.h"
154 #include "audio_const_i.h"
155 #endif
156 #endif
157
158 // This macro avoids to duplicate the code.
159 #if (OP_RIV_AUDIO == 1)
160 #define AUDIO_MSG (p_message)
161 #else
162 #define AUDIO_MSG (msg->SigP)
163 #endif
164
165 /*-------------------------------------------------------*/
166 /* l1a_audio_send_confirmation() */
167 /*-------------------------------------------------------*/
168 /* */
169 /* Parameters : Signal Code ofthe message */
170 /* */
171 /* Return : */
172 /* */
173 /* Description : Send a confirmation message to the MMI */
174 /* for an audio task. */
175 /* */
176 /*-------------------------------------------------------*/
177 void l1a_audio_send_confirmation(UWORD32 SignalCode)
178 {
179 #if (OP_RIV_AUDIO == 1)
180
181 void *p_message;
182 T_RVF_MB_STATUS mb_status; //omaps00090550
183
184 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
185 sizeof (T_RV_HDR),
186 (T_RVF_BUFFER **) (&p_message));
187
188 /* If insufficient resources, then report a memory error and abort. */
189 if (mb_status == RVF_RED)
190 {
191 /* the memory is insufficient to continue the non regression test */
192 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
193 return;
194 }
195
196 /* fill the message id */
197 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
198
199 /* send the messsage to the audio entity */
200 rvf_send_msg (p_audio_gbl_var->addrId,
201 p_message);
202
203 #else // OP_RIV_AUDIO
204
205 xSignalHeaderRec *msg;
206
207 msg = os_alloc_sig(0);
208 DEBUGMSG(status,NU_ALLOC_ERR)
209 msg->SignalCode = SignalCode;
210
211 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
212 l1_trace_message(msg);
213 #endif
214
215 os_send_sig(msg, MMI_QUEUE);
216 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
217
218 #endif // OP_RIV_AUDIO
219 }
220
221 /*-------------------------------------------------------*/
222 /* l1a_audio_send_result() */
223 /*-------------------------------------------------------*/
224 /* Parameters : */
225 /* Return : */
226 /* Functionality : Send a result message to the MMI. */
227 /*-------------------------------------------------------*/
228 void l1a_audio_send_result(UWORD32 SignalCode, xSignalHeaderRec *msg, UWORD8 queue)
229 {
230 #if (OP_RIV_AUDIO == 1)
231
232 void *p_message;
233 T_RVF_MB_STATUS mb_status; //omaps00090550
234
235 switch (SignalCode)
236 {
237 #if (L1_AUDIO_DRIVER == 1)
238 case AUDIO_DRIVER_NOTIFICATION_MSG:
239 {
240 T_AUDIO_DRIVER_SESSION *p_session;
241 T_RV_RETURN *return_path;
242 UINT8 channel_id;
243
244 /* get driver session */
245 channel_id = ((T_L1_AUDIO_DRIVER_IND *)msg->SigP)->channel_id;
246 p_session = &(p_audio_gbl_var->audio_driver_session[channel_id]);
247 return_path = &(p_session->session_req.return_path);
248
249 /* Translate the l1 message into the Riviera compliant message */
250 /* Allocate the Riviera buffer */
251 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
252 sizeof (T_AUDIO_DRIVER_NOTIFICATION),
253 (T_RVF_BUFFER **) (&p_message));
254 /* If insufficient resources, then report a memory error and abort. */
255 if (mb_status == RVF_RED)
256 {
257 /* the memory is insufficient to continue the non regression test */
258 AUDIO_SEND_TRACE("AUDIO entity has no memory for driver notification",RV_TRACE_LEVEL_ERROR);
259 return;
260 }
261
262 /* Fill the message ID + parameters */
263 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->header.msg_id = SignalCode;
264 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->channel_id = channel_id;
265 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->p_buffer = ((T_L1_AUDIO_DRIVER_IND *)(msg->SigP))->p_buffer;
266
267 /* send answer */
268 if (return_path->callback_func == NULL)
269 rvf_send_msg (return_path->addr_id, p_message);
270 else
271 {
272 (*return_path->callback_func)((void *)(p_message));
273 rvf_free_buf((T_RVF_BUFFER *)p_message);
274 }
275
276 // This return is important because there is another rvf_send_msg at the end of the switch
277 return;
278 }
279 //omaps00090550 break;
280 #endif
281 #if (L1_VOICE_MEMO_AMR)
282 case MMI_VM_AMR_RECORD_STOP_CON:
283 {
284 /* Translate the l1 message into the Riviera compliant message */
285 /* Allocate the Riviera buffer */
286 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
287 sizeof (T_MMI_VM_AMR_RECORD_CON),
288 (T_RVF_BUFFER **) (&p_message));
289
290 /* If insufficient resources, then report a memory error and abort. */
291 if (mb_status == RVF_RED)
292 {
293 /* the memory is insufficient to continue the non regression test */
294 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_VM_AMR_RECORD_STOP_CON",RV_TRACE_LEVEL_ERROR);
295 return;
296 }
297
298 // recorded size includes the end mask
299 ((T_MMI_VM_AMR_RECORD_CON *)p_message)->recorded_size = ((T_L1_VM_AMR_RECORD_CON *)(msg->SigP))->recorded_size;
300 }
301 break;
302 #endif
303 #if (VOICE_MEMO)
304 case MMI_VM_RECORD_STOP_CON:
305 {
306 /* Translate the l1 message into the Riviera compliant message */
307
308 /* Allocate the Riviera buffer */
309 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
310 sizeof (T_MMI_VM_RECORD_CON),
311 (T_RVF_BUFFER **) (&p_message));
312
313 /* If insufficient resources, then report a memory error and abort. */
314 if (mb_status == RVF_RED)
315 {
316 /* the memory is insufficient to continue the non regression test */
317 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
318 return;
319 }
320
321 ((T_MMI_VM_RECORD_CON *)p_message)->recorded_size =
322 ((T_L1_VM_RECORD_CON *)(msg->SigP))->recorded_size;
323
324 break;
325 }
326 #endif
327 #if (L1_PCM_EXTRACTION)
328 case MMI_PCM_UPLOAD_STOP_CON:
329 {
330 /* Translate the l1 message into the Riviera compliant message */
331
332 /* Allocate the Riviera buffer */
333 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
334 sizeof (T_MMI_PCM_UPLOAD_STOP_CON),
335 (T_RVF_BUFFER **) (&p_message));
336
337 /* If insufficient resources, then report a memory error and abort. */
338 if (mb_status == RVF_RED)
339 {
340 /* the memory is insufficient to continue the non regression test */
341 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
342 return;
343 }
344
345 ((T_MMI_PCM_UPLOAD_STOP_CON *)p_message)->uploaded_size =
346 ((T_L1_PCM_UPLOAD_STOP_CON *)(msg->SigP))->uploaded_size;
347
348 break;
349 }
350 #endif /* L1_PCM_EXTRACTION */
351
352 #if (SPEECH_RECO)
353 case MMI_SR_ENROLL_STOP_CON:
354 {
355 /* Translate the l1 message into the Riviera compliant message */
356
357 /* Allocate the Riviera buffer */
358 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
359 sizeof (T_MMI_SR_ENROLL_STOP_CON),
360 (T_RVF_BUFFER **) (&p_message));
361
362 /* If insufficient resources, then report a memory error and abort. */
363 if (mb_status == RVF_RED)
364 {
365 /* the memory is insufficient to continue the non regression test */
366 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
367 return;
368 }
369
370 /* Fill the message parameter */
371 ((T_MMI_SR_ENROLL_STOP_CON *)(p_message))->error_id =
372 ((T_L1_SR_ENROLL_STOP_CON *)(msg->SigP))->error_id;
373
374 break;
375 }
376 case MMI_SR_UPDATE_STOP_CON:
377 {
378 /* Translate the l1 message into the Riviera compliant message */
379
380 /* Allocate the Riviera buffer */
381 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
382 sizeof (T_MMI_SR_UPDATE_STOP_CON),
383 (T_RVF_BUFFER **) (&p_message));
384
385 /* If insufficient resources, then report a memory error and abort. */
386 if (mb_status == RVF_RED)
387 {
388 /* the memory is insufficient to continue the non regression test */
389 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
390 return;
391 }
392
393 /* Fill the message parameter */
394 ((T_MMI_SR_UPDATE_STOP_CON *)(p_message))->error_id =
395 ((T_L1_SR_UPDATE_STOP_CON *)(msg->SigP))->error_id;
396
397 break;
398 }
399 case MMI_SR_RECO_STOP_CON:
400 {
401 /* Translate the l1 message into the Riviera compliant message */
402
403 /* Allocate the Riviera buffer */
404 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
405 sizeof (T_MMI_SR_RECO_STOP_CON),
406 (T_RVF_BUFFER **) (&p_message));
407
408 /* If insufficient resources, then report a memory error and abort. */
409 if (mb_status == RVF_RED)
410 {
411 /* the memory is insufficient to continue the non regression test */
412 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
413 return;
414 }
415
416 /* Fill the message parameter */
417 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->error_id =
418 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->error_id;
419 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->best_word_index =
420 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->best_word_index;
421 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->best_word_score =
422 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->best_word_score;
423 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->second_best_word_index =
424 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->second_best_word_index;
425 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->second_best_word_score =
426 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->second_best_word_score;
427 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->third_best_word_index =
428 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->third_best_word_index;
429 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->third_best_word_score =
430 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->third_best_word_score;
431 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->fourth_best_word_index =
432 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->fourth_best_word_index;
433 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->fourth_best_word_score =
434 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->fourth_best_word_score;
435 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->d_sr_model_size =
436 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->d_sr_model_size;
437 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->d_sr_db_level =
438 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->d_sr_db_level;
439 ((T_MMI_SR_RECO_STOP_CON *)(p_message))->d_sr_db_noise =
440 ((T_L1_SR_RECO_STOP_IND *)(msg->SigP))->d_sr_db_noise;
441
442 break;
443 }
444
445 case MMI_SR_UPDATE_CHECK_STOP_CON:
446 {
447 /* Translate the l1 message into the Riviera compliant message */
448
449 /* Allocate the Riviera buffer */
450 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
451 sizeof (T_MMI_SR_UPDATE_CHECK_STOP_CON),
452 (T_RVF_BUFFER **) (&p_message));
453
454 /* If insufficient resources, then report a memory error and abort. */
455 if (mb_status == RVF_RED)
456 {
457 /* the memory is insufficient to continue the non regression test */
458 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
459 return;
460 }
461
462 /* Fill the message parameter */
463 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->error_id =
464 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->error_id;
465 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->best_word_index =
466 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->best_word_index;
467 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->best_word_score =
468 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->best_word_score;
469 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->second_best_word_index =
470 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->second_best_word_index;
471 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->second_best_word_score =
472 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->second_best_word_score;
473 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->third_best_word_index =
474 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->third_best_word_index;
475 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->third_best_word_score =
476 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->third_best_word_score;
477 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->fourth_best_word_index =
478 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->fourth_best_word_index;
479 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->fourth_best_word_score =
480 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->fourth_best_word_score;
481 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->d_sr_model_size =
482 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->d_sr_model_size;
483 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->d_sr_db_level =
484 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->d_sr_db_level;
485 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(p_message))->d_sr_db_noise =
486 ((T_MMI_SR_UPDATE_CHECK_STOP_CON *)(msg->SigP))->d_sr_db_noise;
487
488 break;
489 }
490
491 #endif /* SPEECH_RECO */
492
493
494 #if (L1_CPORT == 1)
495 case MMI_CPORT_CONFIGURE_CON:
496 {
497 /* Translate the l1 message into the Riviera compliant message */
498 /* Allocate the Riviera buffer */
499 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
500 sizeof (T_MMI_CPORT_CONFIGURE_CON),
501 (T_RVF_BUFFER **) (&p_message));
502
503 /* If insufficient resources, then report a memory error and abort. */
504 if (mb_status == RVF_RED)
505 {
506 /* the memory is insufficient to continue the non regression test */
507 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_CPORT_CONFIGURE_CON",RV_TRACE_LEVEL_ERROR);
508 return;
509 }
510
511 // recorded size includes the end mask
512 ((T_MMI_CPORT_CONFIGURE_CON *)p_message)->register_id = ((T_L1_CPORT_CONFIGURE_CON *)(msg->SigP))->register_id;
513 ((T_MMI_CPORT_CONFIGURE_CON *)p_message)->register_value = ((T_L1_CPORT_CONFIGURE_CON *)(msg->SigP))->register_value;
514 }
515 break;
516 #endif
517
518 #if(L1_ANR == 2)
519 case MMI_AQI_ANR_CON:
520 {
521 /* Translate the l1 message into the Riviera compliant message */
522 /* Allocate the Riviera buffer */
523 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
524 sizeof (T_MMI_AQI_ANR_CON),
525 (T_RVF_BUFFER **) (&p_message));
526
527 /* If insufficient resources, then report a memory error and abort. */
528 if (mb_status == RVF_RED)
529 {
530 /* the memory is insufficient to continue the non regression test */
531 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_ANR_CON",RV_TRACE_LEVEL_ERROR);
532 return;
533 }
534
535 // recorded size includes the end mask
536 ((T_MMI_AQI_ANR_CON *)p_message)->anr_ul_action = ((T_L1_AQI_ANR_CON *)(msg->SigP))->anr_ul_action;
537 }
538 break;
539 #endif
540
541 #if(L1_IIR == 2)
542 case MMI_AQI_IIR_DL_CON:
543 {
544 /* Translate the l1 message into the Riviera compliant message */
545 /* Allocate the Riviera buffer */
546 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
547 sizeof (T_MMI_AQI_IIR_DL_CON),
548 (T_RVF_BUFFER **) (&p_message));
549
550 /* If insufficient resources, then report a memory error and abort. */
551 if (mb_status == RVF_RED)
552 {
553 /* the memory is insufficient to continue the non regression test */
554 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_IIR_DL_CON",RV_TRACE_LEVEL_ERROR);
555 return;
556 }
557
558 // recorded size includes the end mask
559 ((T_MMI_AQI_IIR_DL_CON *)p_message)->iir_dl_action = ((T_L1_AQI_IIR_DL_CON *)(msg->SigP))->iir_dl_action;
560 }
561 break;
562 #endif
563
564 #if(L1_AGC_UL == 1)
565 case MMI_AQI_AGC_UL_CON:
566 {
567 /* Translate the l1 message into the Riviera compliant message */
568 /* Allocate the Riviera buffer */
569 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
570 sizeof (T_MMI_AQI_AGC_UL_CON),
571 (T_RVF_BUFFER **) (&p_message));
572
573 /* If insufficient resources, then report a memory error and abort. */
574 if (mb_status == RVF_RED)
575 {
576 /* the memory is insufficient to continue the non regression test */
577 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_AGC_UL_CON",RV_TRACE_LEVEL_ERROR);
578 return;
579 }
580
581 // recorded size includes the end mask
582 ((T_MMI_AQI_AGC_UL_CON *)p_message)->agc_ul_action = ((T_L1_AQI_AGC_UL_CON *)(msg->SigP))->agc_ul_action;
583 }
584 break;
585 #endif
586
587 #if(L1_AGC_DL == 1)
588 case MMI_AQI_AGC_DL_CON:
589 {
590 /* Translate the l1 message into the Riviera compliant message */
591 /* Allocate the Riviera buffer */
592 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
593 sizeof (T_MMI_AQI_AGC_DL_CON),
594 (T_RVF_BUFFER **) (&p_message));
595
596 /* If insufficient resources, then report a memory error and abort. */
597 if (mb_status == RVF_RED)
598 {
599 /* the memory is insufficient to continue the non regression test */
600 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_AGC_DL_CON",RV_TRACE_LEVEL_ERROR);
601 return;
602 }
603
604 // recorded size includes the end mask
605 ((T_MMI_AQI_AGC_DL_CON *)p_message)->agc_dl_action = ((T_L1_AQI_AGC_DL_CON *)(msg->SigP))->agc_dl_action;
606 }
607 break;
608 #endif
609
610 #if(L1_WCM == 1)
611 case MMI_AQI_WCM_CON:
612 {
613 /* Translate the l1 message into the Riviera compliant message */
614 /* Allocate the Riviera buffer */
615 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
616 sizeof (T_MMI_AQI_WCM_CON),
617 (T_RVF_BUFFER **) (&p_message));
618
619 /* If insufficient resources, then report a memory error and abort. */
620 if (mb_status == RVF_RED)
621 {
622 /* the memory is insufficient to continue the non regression test */
623 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_WCM_CON",RV_TRACE_LEVEL_ERROR);
624 return;
625 }
626
627 // recorded size includes the end mask
628 ((T_MMI_AQI_WCM_CON *)p_message)->wcm_action = ((T_L1_AQI_WCM_CON *)(msg->SigP))->wcm_action;
629 }
630 break;
631 #endif
632
633
634 #if(L1_DRC == 1)
635 case MMI_AQI_DRC_CON:
636 {
637 /* Translate the l1 message into the Riviera compliant message */
638 /* Allocate the Riviera buffer */
639 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
640 sizeof (T_MMI_AQI_DRC_CON),
641 (T_RVF_BUFFER **) (&p_message));
642
643 /* If insufficient resources, then report a memory error and abort. */
644 if (mb_status == RVF_RED)
645 {
646 /* the memory is insufficient to continue the non regression test */
647 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_DRC_CON",RV_TRACE_LEVEL_ERROR);
648 return;
649 }
650
651 // recorded size includes the end mask
652 ((T_MMI_AQI_DRC_CON *)p_message)->drc_dl_action = ((T_L1_AQI_DRC_CON *)(msg->SigP))->drc_dl_action;
653 }
654 break;
655 #endif
656
657 #if(L1_AEC == 2)
658 case MMI_AQI_AEC_CON:
659 {
660 /* Translate the l1 message into the Riviera compliant message */
661 /* Allocate the Riviera buffer */
662 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external,
663 sizeof (T_MMI_AQI_AEC_CON),
664 (T_RVF_BUFFER **) (&p_message));
665
666 /* If insufficient resources, then report a memory error and abort. */
667 if (mb_status == RVF_RED)
668 {
669 /* the memory is insufficient to continue the non regression test */
670 AUDIO_SEND_TRACE("AUDIO entity has no memory for MMI_AQI_AEC_CON",RV_TRACE_LEVEL_ERROR);
671 return;
672 }
673
674 // recorded size includes the end mask
675 ((T_MMI_AQI_AEC_CON *)p_message)->aec_action = ((T_L1_AQI_AEC_CON *)(msg->SigP))->aec_action;
676 }
677 break;
678 #endif
679
680
681 default:
682 {
683 AUDIO_SEND_TRACE("AUDIO entity: wrong L1 confirmation message",RV_TRACE_LEVEL_ERROR);
684 break;
685 }
686 }
687
688 /* Fill the message ID */
689 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
690 /* send the messsage to the audio entity */
691 rvf_send_msg (p_audio_gbl_var->addrId,
692 p_message);
693
694 #else // OP_RIV_AUDIO
695
696 // Set flag to avoid the FREE(msg) in L1ASYNC.
697 l1a.l1_msg_forwarded = TRUE;
698
699 msg->SignalCode = SignalCode;
700
701 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
702 l1_trace_message(msg);
703 #endif
704
705 os_send_sig(msg, queue);
706 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
707
708 #endif // OP_RIV_AUDIO
709 }
710
711 #if (SPEECH_RECO)
712 /*-------------------------------------------------------*/
713 /* l1_send_sr_background_msg() */
714 /*-------------------------------------------------------*/
715 /* */
716 /* Parameters : Signal Code ofthe message */
717 /* */
718 /* Return : */
719 /* */
720 /* Description : Send a message to the SR background */
721 /* task. */
722 /* */
723 /*-------------------------------------------------------*/
724 void l1_send_sr_background_msg(UWORD32 SignalCode)
725 {
726 #if (OP_RIV_AUDIO == 1)
727 void *p_message;
728 T_RVF_MB_STATUS mb_status; //omaps00090550
729 #else
730 xSignalHeaderRec *msg;
731 #endif
732
733 switch (SignalCode)
734 {
735 case L1_SRBACK_SAVE_DATA_REQ:
736 {
737 // Allocate the partition
738 #if (OP_RIV_AUDIO == 1)
739 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
740 sizeof (T_L1_SRBACK_SAVE_DATA_REQ),
741 (T_RVF_BUFFER **) (&p_message));
742
743 /* If insufficient resources, then report a memory error and abort. */
744 if (mb_status == RVF_RED)
745 {
746 /* the memory is insufficient to continue the non regression test */
747 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
748 return;
749 }
750 #else // OP_RIV_AUDIO
751 msg = os_alloc_sig(sizeof(T_L1_SRBACK_SAVE_DATA_REQ));
752 DEBUGMSG(status,NU_ALLOC_ERR)
753 #endif // OP_RIV_AUDIO
754
755 // Fill the message
756 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->database_id = l1a_l1s_com.speechreco_task.parameters.database_id;
757 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->model_index = l1a_l1s_com.speechreco_task.parameters.word_index;
758 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->model_RAM_address = l1a_l1s_com.speechreco_task.parameters.model_address;
759 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->speech = l1a_l1s_com.speechreco_task.parameters.speech;
760 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->start_buffer = l1a_l1s_com.speechreco_task.parameters.speech_address;
761 ((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;
762 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->start_address = l1a_l1s_com.speechreco_task.parameters.start_address;
763 ((T_L1_SRBACK_SAVE_DATA_REQ *)(AUDIO_MSG))->stop_address = l1a_l1s_com.speechreco_task.parameters.stop_address;
764 }
765 break;
766
767 case L1_SRBACK_LOAD_MODEL_REQ:
768 {
769 // Allocate the partition
770 #if (OP_RIV_AUDIO == 1)
771 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
772 sizeof (T_L1_SRBACK_LOAD_MODEL_REQ),
773 (T_RVF_BUFFER **) (&p_message));
774
775 /* If insufficient resources, then report a memory error and abort. */
776 if (mb_status == RVF_RED)
777 {
778 /* the memory is insufficient to continue the non regression test */
779 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
780 return;
781 }
782 #else // OP_RIV_AUDIO
783 msg = os_alloc_sig(sizeof(T_L1_SRBACK_LOAD_MODEL_REQ));
784 DEBUGMSG(status,NU_ALLOC_ERR)
785 #endif // OP_RIV_AUDIO
786
787 // Fill the message
788 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->database_id = l1a_l1s_com.speechreco_task.parameters.database_id;
789 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->model_index = l1a_l1s_com.speechreco_task.parameters.word_index;
790 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->model_RAM_address = l1a_l1s_com.speechreco_task.parameters.model_address;
791 ((T_L1_SRBACK_LOAD_MODEL_REQ *)(AUDIO_MSG))->CTO_enable = l1a_l1s_com.speechreco_task.parameters.CTO_algorithm;
792 }
793 break;
794
795 case L1_SRBACK_TEMP_SAVE_DATA_REQ:
796 {
797 // Allocate the partition
798 #if (OP_RIV_AUDIO == 1)
799 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
800 sizeof (T_L1_SRBACK_TEMP_SAVE_DATA_REQ),
801 (T_RVF_BUFFER **) (&p_message));
802
803 /* If insufficient resources, then report a memory error and abort. */
804 if (mb_status == RVF_RED)
805 {
806 /* the memory is insufficient to continue the non regression test */
807 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
808 return;
809 }
810 #else // OP_RIV_AUDIO
811 msg = os_alloc_sig(sizeof(T_L1_SRBACK_TEMP_SAVE_DATA_REQ));
812 DEBUGMSG(status,NU_ALLOC_ERR)
813 #endif // OP_RIV_AUDIO
814
815 // Fill the message
816 ((T_L1_SRBACK_TEMP_SAVE_DATA_REQ *)(AUDIO_MSG))->model_RAM_address_input = l1a_l1s_com.speechreco_task.parameters.model_address;
817 ((T_L1_SRBACK_TEMP_SAVE_DATA_REQ *)(AUDIO_MSG))->model_RAM_address_output = l1a_l1s_com.speechreco_task.parameters.model_temp_address;
818 }
819 break;
820 }
821
822 #if (OP_RIV_AUDIO == 1)
823 /* fill the message id */
824 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
825
826 /* send the messsage to the audio entity */
827 rvf_send_msg (p_audio_gbl_var->addrId,
828 p_message);
829 #else // OP_RIV_AUDIO
830 msg->SignalCode = SignalCode;
831
832 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
833 l1_trace_message(msg);
834 #endif
835
836 os_send_sig(msg, SRBACK_QUEUE);
837 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
838 #endif // OP_RIV_AUDIO
839 }
840 #endif
841 #if (MELODY_E2)
842 /*-------------------------------------------------------*/
843 /* l1_send_melody_e2_background_msg() */
844 /*-------------------------------------------------------*/
845 /* */
846 /* Parameters : Signal Code of the message */
847 /* melody ID (0 or 1) */
848 /* */
849 /* Return : */
850 /* */
851 /* Description : Send a message to the audio background */
852 /* for the melody E2 feature. */
853 /* */
854 /*-------------------------------------------------------*/
855 void l1_send_melody_e2_background_msg(UWORD32 SignalCode, UWORD8 melody_id)
856 {
857 #if (OP_RIV_AUDIO == 1)
858 void *p_message;
859 T_RVF_MB_STATUS mb_status; //omaps00090550
860 #else
861 xSignalHeaderRec *msg;
862 #endif
863
864 UWORD8 i;
865
866 if ( SignalCode == L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ )
867 {
868 // Allocate the partition
869 #if (OP_RIV_AUDIO == 1)
870 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
871 sizeof (T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ),
872 (T_RVF_BUFFER **) (&p_message));
873
874 /* If insufficient resources, then report a memory error and abort. */
875 if (mb_status == RVF_RED)
876 {
877 /* the memory is insufficient to continue the non regression test */
878 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
879 return;
880 }
881 #else // OP_RIV_AUDIO
882 msg = os_alloc_sig(sizeof(T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ));
883 DEBUGMSG(status,NU_ALLOC_ERR)
884 #endif // OP_RIV_AUDIO
885
886 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->melody_id =
887 melody_id;
888
889 if (melody_id == 0)
890 {
891 // Load instrument for the melody 0
892 // Fill the message
893 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
894 l1a_l1s_com.melody0_e2_task.parameters.number_of_instrument;
895 for(i=0; i<SC_AUDIO_MELODY_E2_MAX_NUMBER_OF_INSTRUMENT; i++)
896 {
897 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->waves_table_id[i] =
898 l1a_l1s_com.melody0_e2_task.parameters.waves_table_id[i];
899 }
900 }
901 if (melody_id == 1)
902 {
903 // Load instrument for the melody 1
904 // Fill the message
905 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
906 l1a_l1s_com.melody1_e2_task.parameters.number_of_instrument;
907 for(i=0; i<SC_AUDIO_MELODY_E2_MAX_NUMBER_OF_INSTRUMENT; i++)
908 {
909 ((T_L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->waves_table_id[i] =
910 l1a_l1s_com.melody1_e2_task.parameters.waves_table_id[i];
911 }
912 }
913 }
914 else
915 if (SignalCode == L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ)
916 {
917 // Allocate the partition
918 #if (OP_RIV_AUDIO == 1)
919 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_internal,
920 sizeof (T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ),
921 (T_RVF_BUFFER **) (&p_message));
922
923 /* If insufficient resources, then report a memory error and abort. */
924 if (mb_status == RVF_RED)
925 {
926 /* the memory is insufficient to continue the non regression test */
927 AUDIO_SEND_TRACE("AUDIO entity has no memory for L1 confirm",RV_TRACE_LEVEL_ERROR);
928 return;
929 }
930 #else // OP_RIV_AUDIO
931 msg = os_alloc_sig(sizeof(T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ));
932 DEBUGMSG(status,NU_ALLOC_ERR)
933 #endif // OP_RIV_AUDIO
934
935 ((T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->melody_id =
936 melody_id;
937
938 if (melody_id == 0)
939 {
940 ((T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
941 l1a_l1s_com.melody0_e2_task.parameters.number_of_instrument;
942 }
943 else
944 if (melody_id == 1)
945 {
946 ((T_L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ *)(AUDIO_MSG))->number_of_instrument =
947 l1a_l1s_com.melody1_e2_task.parameters.number_of_instrument;
948 }
949 }
950
951 #if (OP_RIV_AUDIO == 1)
952 ((T_RV_HDR *)p_message)->msg_id = SignalCode;
953
954 /* send the messsage to the audio entity */
955 rvf_send_msg (p_audio_gbl_var->addrId,
956 p_message);
957 #else // OP_RIV_AUDIO
958 msg->SignalCode = SignalCode;
959
960 #if (TRACE_TYPE==1) || (TRACE_TYPE==4)
961 l1_trace_message(msg);
962 #endif
963
964 os_send_sig(msg, SRBACK_QUEUE);
965 DEBUGMSG(status,NU_SEND_QUEUE_ERR)
966 #endif // OP_RIV_AUDIO
967 }
968 #endif // MELODY_E2
969
970 #endif // AUDIO_TASK