FreeCalypso > hg > fc-magnetite
comparison src/cs/layer1/audio_cust0/l1audio_cust.c @ 234:b870b6a44d31
l1audio and l1tm reconstructed source imported from tcs211-l1-reconst
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 20 Mar 2017 00:51:20 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 233:17d79c62e638 | 234:b870b6a44d31 |
|---|---|
| 1 /************* Revision Controle System Header ************* | |
| 2 * GSM Layer 1 software | |
| 3 * L1AUDIO_CUST.C | |
| 4 * | |
| 5 * Filename l1audio_cust.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 #include "tc_defs.h" | |
| 25 | |
| 26 #include <stdlib.h> | |
| 27 #include <string.h> | |
| 28 | |
| 29 #include "iq.h" // Debug / Init hardware ("eva3.lib") | |
| 30 #include "l1_ver.h" | |
| 31 #include "l1_const.h" | |
| 32 #include "l1_signa.h" | |
| 33 | |
| 34 #if TESTMODE | |
| 35 #include "l1tm_defty.h" | |
| 36 #endif | |
| 37 | |
| 38 #include "l1audio_const.h" | |
| 39 #include "l1audio_cust.h" | |
| 40 #include "l1audio_defty.h" | |
| 41 #include "l1audio_msgty.h" | |
| 42 #include "l1audio_varex.h" | |
| 43 #include "l1audio_signa.h" | |
| 44 | |
| 45 #if (L1_GTT == 1) | |
| 46 #include "l1gtt_const.h" | |
| 47 #include "l1gtt_defty.h" | |
| 48 #endif | |
| 49 | |
| 50 #if (L1_MP3 == 1) | |
| 51 #include "l1mp3_defty.h" | |
| 52 #endif | |
| 53 | |
| 54 #if (L1_MIDI == 1) | |
| 55 #include "l1midi_defty.h" | |
| 56 #endif | |
| 57 | |
| 58 #if (L1_AAC == 1) | |
| 59 #include "l1aac_defty.h" | |
| 60 #endif | |
| 61 #include "l1_defty.h" | |
| 62 #include "cust_os.h" | |
| 63 #include "l1_msgty.h" | |
| 64 #include "l1_varex.h" | |
| 65 | |
| 66 #include "l1_mftab.h" | |
| 67 #include "l1_tabs.h" | |
| 68 #include "l1_ctl.h" | |
| 69 | |
| 70 | |
| 71 #include "l1_time.h" | |
| 72 #include "l1_scen.h" | |
| 73 | |
| 74 #if L1_GPRS | |
| 75 #include "l1p_cons.h" | |
| 76 #include "l1p_msgt.h" | |
| 77 #include "l1p_deft.h" | |
| 78 #include "l1p_vare.h" | |
| 79 #include "l1p_tabs.h" | |
| 80 #include "l1p_macr.h" | |
| 81 #include "l1p_sign.h" | |
| 82 #endif | |
| 83 | |
| 84 #include "sim_cfg.h" | |
| 85 #include "sim_cons.h" | |
| 86 #include "sim_def.h" | |
| 87 #include "sim_var.h" | |
| 88 #include "sim_prot.h" | |
| 89 | |
| 90 #include "audio_sim_cons.h" | |
| 91 #include "audio_sim_def.h" | |
| 92 #include "mmi_simul.h" | |
| 93 #include "audio_sim_var.h" | |
| 94 | |
| 95 #else | |
| 96 // Layer1 and debug include files. | |
| 97 | |
| 98 #include <ctype.h> | |
| 99 #include <string.h> | |
| 100 #include <math.h> | |
| 101 #include "l1_ver.h" | |
| 102 #include "l1_const.h" | |
| 103 #include "l1_signa.h" | |
| 104 | |
| 105 #if TESTMODE | |
| 106 #include "l1tm_defty.h" | |
| 107 #endif | |
| 108 | |
| 109 #include "l1audio_const.h" | |
| 110 #include "l1audio_cust.h" | |
| 111 #include "l1audio_defty.h" | |
| 112 #include "l1audio_msgty.h" | |
| 113 #include "l1audio_varex.h" | |
| 114 #include "l1audio_signa.h" | |
| 115 | |
| 116 #if (L1_GTT == 1) | |
| 117 #include "l1gtt_const.h" | |
| 118 #include "l1gtt_defty.h" | |
| 119 #endif | |
| 120 | |
| 121 #if (L1_MP3 == 1) | |
| 122 #include "l1mp3_defty.h" | |
| 123 #endif | |
| 124 | |
| 125 #if (L1_MIDI == 1) | |
| 126 #include "l1midi_defty.h" | |
| 127 #endif | |
| 128 | |
| 129 #include "l1_defty.h" | |
| 130 #include "cust_os.h" | |
| 131 #include "l1_msgty.h" | |
| 132 #include "tpudrv.h" // TPU drivers. ("eva3.lib") | |
| 133 #include "l1_varex.h" | |
| 134 | |
| 135 #include "l1_proto.h" | |
| 136 #include "l1_mftab.h" | |
| 137 #include "l1_tabs.h" | |
| 138 #include "mem.h" | |
| 139 #include "armio.h" | |
| 140 #include "timer.h" | |
| 141 #include "timer1.h" | |
| 142 #include "dma.h" | |
| 143 #include "inth.h" | |
| 144 #include "ulpd.h" | |
| 145 #include "rhea_arm.h" | |
| 146 #include "clkm.h" // Clockm ("eva3.lib") | |
| 147 #include "l1_ctl.h" | |
| 148 | |
| 149 #include "l1_time.h" | |
| 150 #if L2_L3_SIMUL | |
| 151 #include "l1_scen.h" | |
| 152 #endif | |
| 153 #if (AUDIO_L1_STANDALONE) | |
| 154 #include "mmi_simul.h" | |
| 155 #endif | |
| 156 | |
| 157 #if (OP_RIV_AUDIO == 1) | |
| 158 #if (MELODY_E1) || (VOICE_MEMO) || (SPEECH_RECO) || (L1_EXT_AUDIO_MGT) || (MELODY_E2) | |
| 159 #include "rv_general.h" | |
| 160 #include "audio_api.h" | |
| 161 #include "audio_structs_i.h" | |
| 162 #include "audio_var_i.h" | |
| 163 #include "audio_ffs_i.h" | |
| 164 #include "audio_const_i.h" | |
| 165 #include "audio_error_hdlr_i.h" | |
| 166 #include "ffs/ffs_api.h" | |
| 167 #include "audio_macro_i.h" | |
| 168 #endif | |
| 169 #endif | |
| 170 | |
| 171 #endif | |
| 172 | |
| 173 #include "l1_trace.h" | |
| 174 //extern void L1_trace_string(char *s); | |
| 175 //extern void L1_trace_char (char s); | |
| 176 | |
| 177 /**************************************/ | |
| 178 /* Prototypes for L1 ASYNCH task */ | |
| 179 /**************************************/ | |
| 180 #if (SPEECH_RECO) | |
| 181 void Cust_srback_save_model (UWORD8 database, UWORD8 index, API *RAM_address); | |
| 182 void Cust_srback_save_speech (UWORD8 database, UWORD8 index, UWORD16 *start_buffer, UWORD16 *stop_buffer, UWORD16 *start_speech, UWORD16 *stop_speech); | |
| 183 void Cust_srback_load_model (UWORD8 database, UWORD8 index, API *RAM_address); | |
| 184 #endif | |
| 185 UWORD8 Cust_get_pointer (UWORD16 **ptr, UWORD16 *buffer_size, UWORD8 session_id); | |
| 186 | |
| 187 #if (L1_EXT_AUDIO_MGT) | |
| 188 void Cust_ext_audio_mgt_hisr(void); | |
| 189 #endif | |
| 190 void l1a_bt_audio_noti_process(void); | |
| 191 | |
| 192 /**************************************/ | |
| 193 /* External prototypes */ | |
| 194 /**************************************/ | |
| 195 #if (OP_RIV_AUDIO == 1) | |
| 196 #if (SPEECH_RECO) | |
| 197 extern void audio_sr_error_trace(UINT8 error_id); | |
| 198 #endif | |
| 199 #endif | |
| 200 | |
| 201 | |
| 202 /***************************************/ | |
| 203 /* Global variables for MP3 management */ | |
| 204 /***************************************/ | |
| 205 #if (L1_MP3 == 1) | |
| 206 UWORD8 mp3_tempbuf_idx; | |
| 207 UWORD16 Cust_get_pointer_mp3_last_buffer_size; | |
| 208 BOOL Cust_get_pointer_mp3_buffer_last; | |
| 209 #endif | |
| 210 | |
| 211 /***************************************/ | |
| 212 /* Global variables for AAC management */ | |
| 213 /***************************************/ | |
| 214 #if (L1_AAC == 1) | |
| 215 UWORD8 aac_tempbuf_idx; | |
| 216 UWORD16 Cust_get_pointer_aac_last_buffer_size; | |
| 217 BOOL Cust_get_pointer_aac_buffer_last; | |
| 218 #endif | |
| 219 | |
| 220 /* | |
| 221 * FreeCalypso TCS211 reconstruction: the following unused trivial | |
| 222 * function has been reconstruction in order to aid the diffing | |
| 223 * of the functions that follow. | |
| 224 */ | |
| 225 void audio_test_callback(void *buffer) | |
| 226 { | |
| 227 rvf_free_buf(buffer); | |
| 228 } | |
| 229 | |
| 230 #if (SPEECH_RECO) | |
| 231 /*-------------------------------------------------------*/ | |
| 232 /* Cust_srback_save_model() */ | |
| 233 /*-------------------------------------------------------*/ | |
| 234 /* */ | |
| 235 /* Parameters : database */ | |
| 236 /* index */ | |
| 237 /* RAM_address */ | |
| 238 /* */ | |
| 239 /* Return : none */ | |
| 240 /* */ | |
| 241 /* Description : save the model into a database. */ | |
| 242 /* */ | |
| 243 /*-------------------------------------------------------*/ | |
| 244 void Cust_srback_save_model (UWORD8 database, UWORD8 index, API *RAM_address) | |
| 245 { | |
| 246 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 247 UWORD16 model_size; | |
| 248 UWORD16 *ptr_dst; | |
| 249 UWORD8 frame_size; | |
| 250 | |
| 251 // initialize the pointer to the database | |
| 252 ptr_dst = sr_mmi_database[database][index].model; | |
| 253 | |
| 254 // look the size of the model in model frame unit (16 words unit) | |
| 255 model_size = *RAM_address++; | |
| 256 | |
| 257 // save the header of the model | |
| 258 *ptr_dst++ = model_size; | |
| 259 | |
| 260 while( (model_size != 0) && | |
| 261 (l1_srback_com.emergency_stop == FALSE) ) | |
| 262 { | |
| 263 frame_size = SC_SR_MODEL_FRAME_SIZE; | |
| 264 | |
| 265 while ( (frame_size != 0) && | |
| 266 (l1_srback_com.emergency_stop == FALSE) ) | |
| 267 { | |
| 268 *ptr_dst++ = *RAM_address++; | |
| 269 frame_size--; | |
| 270 } | |
| 271 | |
| 272 model_size--; | |
| 273 } | |
| 274 #endif | |
| 275 | |
| 276 #if (OP_RIV_AUDIO == 1) | |
| 277 T_FFS_FD ffs_fd; | |
| 278 UWORD16 model_size; | |
| 279 UWORD8 i; | |
| 280 char *p_model_path; | |
| 281 | |
| 282 if (p_audio_gbl_var->speech_reco.sr_enroll.state != AUDIO_SR_ENROLL_IDLE) | |
| 283 { | |
| 284 ffs_fd = p_audio_gbl_var->speech_reco.sr_enroll.sr_ffs_fd; | |
| 285 } | |
| 286 else | |
| 287 if (p_audio_gbl_var->speech_reco.sr_update.state != AUDIO_SR_UPDATE_IDLE) | |
| 288 { | |
| 289 /* reach the path of the corresponding model */ | |
| 290 p_model_path = p_audio_gbl_var->speech_reco.sr_update.p_database; | |
| 291 for (i=0; i<index; i++) | |
| 292 { | |
| 293 p_model_path += AUDIO_PATH_NAME_MAX_SIZE; | |
| 294 } | |
| 295 | |
| 296 ffs_fd = ffs_open(p_model_path, | |
| 297 FFS_O_CREATE | FFS_O_WRONLY | FFS_O_TRUNC | FFS_O_APPEND); | |
| 298 if ( ffs_fd <= 0) | |
| 299 { | |
| 300 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_SAVED); | |
| 301 return; | |
| 302 } | |
| 303 } | |
| 304 | |
| 305 /* look the size of the model in model frame unit (16 words unit) */ | |
| 306 model_size = ((*RAM_address)<<1); | |
| 307 model_size *= SC_SR_MODEL_FRAME_SIZE; | |
| 308 | |
| 309 /* save the model in flash */ | |
| 310 if (ffs_write(ffs_fd, (void *)RAM_address, model_size) <= EFFS_OK) | |
| 311 { | |
| 312 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_SAVED); | |
| 313 } | |
| 314 | |
| 315 /* close the model file flash */ | |
| 316 if (ffs_close(ffs_fd) != EFFS_OK) | |
| 317 { | |
| 318 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_SAVED); | |
| 319 } | |
| 320 #endif // OP_RIV_AUDIO | |
| 321 } | |
| 322 | |
| 323 /*-------------------------------------------------------*/ | |
| 324 /* Cust_srback_save_speech() */ | |
| 325 /*-------------------------------------------------------*/ | |
| 326 /* */ | |
| 327 /* Parameters : database */ | |
| 328 /* index */ | |
| 329 /* start_buffer */ | |
| 330 /* stop_buffer */ | |
| 331 /* start_speech */ | |
| 332 /* stop_speech */ | |
| 333 /* */ | |
| 334 /* Return : none */ | |
| 335 /* */ | |
| 336 /* Description : save the speech from a circular buffer */ | |
| 337 /* to a database. And add the end VM mask */ | |
| 338 /* */ | |
| 339 /*-------------------------------------------------------*/ | |
| 340 void Cust_srback_save_speech (UWORD8 database, UWORD8 index, UWORD16 *start_buffer, UWORD16 *stop_buffer, UWORD16 *start_speech, UWORD16 *stop_speech) | |
| 341 { | |
| 342 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 343 UWORD16 *ptr_dst; | |
| 344 | |
| 345 // initialize the pointer to the database | |
| 346 ptr_dst = sr_mmi_database[database][index].speech; | |
| 347 | |
| 348 // The speech samples can be in two positions in the circular buffer: | |
| 349 | |
| 350 // Position 1: | |
| 351 // [.............XXXXXXXXXXXXX.............] | |
| 352 // ^ ^ ^ ^ | |
| 353 // | | | | | |
| 354 // start_buffer start_speech stop_speech stop_buffer | |
| 355 if (start_speech < stop_speech) | |
| 356 { | |
| 357 while ( (start_speech < stop_speech) && | |
| 358 (l1_srback_com.emergency_stop == FALSE) ) | |
| 359 { | |
| 360 *ptr_dst++ = *start_speech++; | |
| 361 } | |
| 362 | |
| 363 // Write the end VM mask | |
| 364 *ptr_dst = SC_VM_END_MASK; | |
| 365 } | |
| 366 else | |
| 367 // Position 2: | |
| 368 // [XXXXXXXXXXXX..............XXXXXXXXXXXXX] | |
| 369 // ^ ^ ^ ^ | |
| 370 // | | | | | |
| 371 // start_buffer stop_speech start_speech stop_buffer | |
| 372 { | |
| 373 while ( (start_speech < stop_buffer) && | |
| 374 (l1_srback_com.emergency_stop == FALSE) ) | |
| 375 { | |
| 376 *ptr_dst++ = *start_speech++; | |
| 377 } | |
| 378 | |
| 379 while ( (start_buffer < stop_speech) && | |
| 380 (l1_srback_com.emergency_stop == FALSE) ) | |
| 381 { | |
| 382 *ptr_dst++ = *start_buffer++; | |
| 383 } | |
| 384 | |
| 385 // Write the end VM mask | |
| 386 *ptr_dst = SC_VM_END_MASK; | |
| 387 } | |
| 388 #endif | |
| 389 | |
| 390 #if (OP_RIV_AUDIO == 1) | |
| 391 T_FFS_FD ffs_fd; | |
| 392 UWORD16 speech_size; | |
| 393 char *p_model_path, | |
| 394 sr_speech_path[AUDIO_SR_PATH_NAME_MAX_SIZE]; | |
| 395 UWORD8 i; | |
| 396 | |
| 397 if (p_audio_gbl_var->speech_reco.sr_enroll.state !=AUDIO_SR_ENROLL_IDLE ) | |
| 398 { | |
| 399 ffs_fd = p_audio_gbl_var->speech_reco.sr_enroll.voice_ffs_fd; | |
| 400 } | |
| 401 else | |
| 402 if (p_audio_gbl_var->speech_reco.sr_update.state != AUDIO_SR_UPDATE_IDLE) | |
| 403 { | |
| 404 /* reach the path of the corresponding model */ | |
| 405 p_model_path = p_audio_gbl_var->speech_reco.sr_update.p_database; | |
| 406 for (i=0; i<index; i++) | |
| 407 { | |
| 408 p_model_path += AUDIO_PATH_NAME_MAX_SIZE; | |
| 409 } | |
| 410 | |
| 411 /* build the speech path name */ | |
| 412 speech_size = ( strlen(p_model_path)- 3); | |
| 413 strncpy(sr_speech_path, p_model_path, speech_size); | |
| 414 sr_speech_path[speech_size] = 0; | |
| 415 | |
| 416 ffs_fd = ffs_open(sr_speech_path, | |
| 417 FFS_O_CREATE | FFS_O_WRONLY | FFS_O_TRUNC | FFS_O_APPEND); | |
| 418 if (ffs_fd <= 0) | |
| 419 { | |
| 420 audio_sr_error_trace(AUDIO_ENTITY_SPEECH_NO_SAVED); | |
| 421 return; | |
| 422 } | |
| 423 } | |
| 424 | |
| 425 // The speech samples can be in two positions in the circular buffer: | |
| 426 | |
| 427 // Position 1: | |
| 428 // [.............XXXXXXXXXXXXX.............] | |
| 429 // ^ ^ ^ ^ | |
| 430 // | | | | | |
| 431 // start_buffer start_speech stop_speech stop_buffer | |
| 432 if (start_speech < stop_speech) | |
| 433 { | |
| 434 /* Calculate the size of the speech file */ | |
| 435 speech_size = (stop_speech - start_speech)<<1; | |
| 436 | |
| 437 /* save the model in flash */ | |
| 438 if (ffs_write(ffs_fd, (void *)start_speech, speech_size) <= EFFS_OK) | |
| 439 { | |
| 440 audio_sr_error_trace(AUDIO_ENTITY_SPEECH_NO_SAVED); | |
| 441 } | |
| 442 } | |
| 443 else | |
| 444 // Position 2: | |
| 445 // [XXXXXXXXXXXX..............XXXXXXXXXXXXX] | |
| 446 // ^ ^ ^ ^ | |
| 447 // | | | | | |
| 448 // start_buffer stop_speech start_speech stop_buffer | |
| 449 { | |
| 450 /* Calculate the size of the speech file */ | |
| 451 speech_size = (stop_buffer - start_speech)<<1; | |
| 452 | |
| 453 /* save the model in flash */ | |
| 454 if (ffs_write(ffs_fd, (void *)start_speech, speech_size) <= EFFS_OK) | |
| 455 { | |
| 456 audio_sr_error_trace(AUDIO_ENTITY_SPEECH_NO_SAVED); | |
| 457 } | |
| 458 | |
| 459 /* Calculate the size of the speech file */ | |
| 460 speech_size = (stop_speech - start_buffer)<<1; | |
| 461 | |
| 462 /* save the model in flash */ | |
| 463 if (ffs_write(ffs_fd, (void *)start_speech, speech_size) <= EFFS_OK) | |
| 464 { | |
| 465 audio_sr_error_trace(AUDIO_ENTITY_SPEECH_NO_SAVED); | |
| 466 } | |
| 467 } | |
| 468 // Write the end VM mask | |
| 469 speech_size = SC_VM_END_MASK; | |
| 470 if (ffs_write(ffs_fd, (void *)(&speech_size), 2) <= EFFS_OK) | |
| 471 { | |
| 472 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_SAVED); | |
| 473 } | |
| 474 | |
| 475 /* close the speech file flash */ | |
| 476 if (ffs_close(ffs_fd) != EFFS_OK) | |
| 477 { | |
| 478 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_SAVED); | |
| 479 } | |
| 480 #endif // OP_RIV_AUDIO | |
| 481 } | |
| 482 | |
| 483 /*-------------------------------------------------------*/ | |
| 484 /* Cust_srback_load_model() */ | |
| 485 /*-------------------------------------------------------*/ | |
| 486 /* */ | |
| 487 /* Parameters : database */ | |
| 488 /* index */ | |
| 489 /* RAM_address */ | |
| 490 /* */ | |
| 491 /* Return : none */ | |
| 492 /* */ | |
| 493 /* Description : load the model into the API. */ | |
| 494 /* */ | |
| 495 /*-------------------------------------------------------*/ | |
| 496 void Cust_srback_load_model (UWORD8 database, UWORD8 index, API *RAM_address) | |
| 497 { | |
| 498 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 499 UWORD16 model_size; | |
| 500 UWORD16 *ptr_src; | |
| 501 UWORD8 frame_size; | |
| 502 | |
| 503 // initialize the pointer to the database | |
| 504 ptr_src = sr_mmi_database[database][index].model; | |
| 505 | |
| 506 // look the size of the model in model frame unit (16 words unit) | |
| 507 model_size = *ptr_src++; | |
| 508 | |
| 509 // save the header of the model | |
| 510 *RAM_address++ = model_size; | |
| 511 | |
| 512 while( (model_size != 0) && | |
| 513 (l1_srback_com.emergency_stop == FALSE) ) | |
| 514 { | |
| 515 frame_size = SC_SR_MODEL_FRAME_SIZE; | |
| 516 while ( (frame_size != 0) && | |
| 517 (l1_srback_com.emergency_stop == FALSE) ) | |
| 518 { | |
| 519 *RAM_address++ = *ptr_src++; | |
| 520 frame_size--; | |
| 521 } | |
| 522 model_size--; | |
| 523 } | |
| 524 #endif | |
| 525 | |
| 526 #if (OP_RIV_AUDIO == 1) | |
| 527 char *p_model_path; | |
| 528 T_FFS_FD ffs_fd; | |
| 529 UWORD8 i; | |
| 530 | |
| 531 if (p_audio_gbl_var->speech_reco.sr_reco.state !=AUDIO_SR_RECO_IDLE ) | |
| 532 { | |
| 533 p_model_path = p_audio_gbl_var->speech_reco.sr_reco.p_database; | |
| 534 } | |
| 535 else | |
| 536 if (p_audio_gbl_var->speech_reco.sr_update.state != AUDIO_SR_UPDATE_IDLE) | |
| 537 { | |
| 538 p_model_path = p_audio_gbl_var->speech_reco.sr_update.p_database; | |
| 539 } | |
| 540 | |
| 541 /* reach the path of the corresponding model */ | |
| 542 for (i=0; i<index; i++) | |
| 543 { | |
| 544 p_model_path += AUDIO_PATH_NAME_MAX_SIZE; | |
| 545 } | |
| 546 | |
| 547 /* open the model file flash */ | |
| 548 ffs_fd = ffs_open(p_model_path, FFS_O_RDONLY); | |
| 549 if ( ffs_fd <= 0) | |
| 550 { | |
| 551 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_LOAD); | |
| 552 return; | |
| 553 } | |
| 554 | |
| 555 /* download the model to the API buffer */ | |
| 556 if (ffs_read(ffs_fd, (void *)RAM_address, (SC_SR_MODEL_API_SIZE<<1)) <= EFFS_OK) | |
| 557 { | |
| 558 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_LOAD); | |
| 559 } | |
| 560 | |
| 561 /* close the model file flash */ | |
| 562 if (ffs_close(ffs_fd) != EFFS_OK) | |
| 563 { | |
| 564 audio_sr_error_trace(AUDIO_ENTITY_MODEL_NO_LOAD); | |
| 565 } | |
| 566 #endif // OP_RIV_AUDIO | |
| 567 } | |
| 568 #endif // SPEECH_RECO | |
| 569 | |
| 570 /*-------------------------------------------------------*/ | |
| 571 /* Cust_get_pointer */ | |
| 572 /*-------------------------------------------------------*/ | |
| 573 /* */ | |
| 574 /* Parameters : ptr */ | |
| 575 /* buffer_size */ | |
| 576 /* session_id */ | |
| 577 /* */ | |
| 578 /* Return : error_id : */ | |
| 579 /* DATA_AVAILABLE: 0, no error occured */ | |
| 580 /* SESSION_ERROR: 1, wrong session id */ | |
| 581 /* POINTER_ERROR: 2, wrong ptr */ | |
| 582 /* DATA_AVAIL_ERROR: 3, no more data */ | |
| 583 /* available */ | |
| 584 /* DATA_LAST: 4, last buffer available */ | |
| 585 /* buffer_size */ | |
| 586 /* ptr */ | |
| 587 /* */ | |
| 588 /* Description : */ | |
| 589 /* The L1 calls this function to request new data buffer */ | |
| 590 /* (requested size: buffer_size). This function returns */ | |
| 591 /* the description of the new data buffer */ | |
| 592 /* (start address: ptr and the size: buffer_size) */ | |
| 593 /* Moreover, the L1 indicates the position of the last */ | |
| 594 /* data used via the ptr argument. */ | |
| 595 /* Note that this function can be returns an error. */ | |
| 596 /* */ | |
| 597 /*-------------------------------------------------------*/ | |
| 598 UWORD8 Cust_get_pointer (UWORD16 **ptr, UWORD16 *buffer_size, UWORD8 session_id) | |
| 599 { | |
| 600 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 601 | |
| 602 UWORD8 database_id, word_index; | |
| 603 | |
| 604 switch (session_id & 0x0F) | |
| 605 { | |
| 606 #if (MELODY_E1) | |
| 607 // Melody E1 0 | |
| 608 case 0: | |
| 609 { | |
| 610 if (*ptr == NULL) | |
| 611 { | |
| 612 *ptr = (UWORD16 *)&melody_0; | |
| 613 *buffer_size = SC_MELODY_0_SCORE_SIZE>>1; | |
| 614 } | |
| 615 else | |
| 616 { | |
| 617 *buffer_size = SC_MELODY_0_SCORE_SIZE>>1; | |
| 618 } | |
| 619 | |
| 620 return(DATA_AVAILABLE); | |
| 621 } | |
| 622 //omaps00090550 break; | |
| 623 | |
| 624 // Melody E1 1 | |
| 625 case 1: | |
| 626 { | |
| 627 if (*ptr == NULL) | |
| 628 { | |
| 629 *ptr = (UWORD16 *)&melody_1; | |
| 630 *buffer_size = SC_MELODY_1_SCORE_SIZE>>1; | |
| 631 } | |
| 632 else | |
| 633 { | |
| 634 *buffer_size = SC_MELODY_1_SCORE_SIZE>>1; | |
| 635 } | |
| 636 | |
| 637 return(DATA_AVAILABLE); | |
| 638 } | |
| 639 //omaps00090550 break; | |
| 640 #endif // MELODY_E1 | |
| 641 #if (VOICE_MEMO) | |
| 642 // Voice memo play | |
| 643 case 2: | |
| 644 { | |
| 645 if (*ptr == NULL) | |
| 646 { | |
| 647 *ptr = (UWORD16 *)&voice_memo_buffer; | |
| 648 *buffer_size = SC_VM_BUFFER_SIZE>>1; | |
| 649 } | |
| 650 else | |
| 651 { | |
| 652 *buffer_size = (SC_VM_BUFFER_SIZE>>1) + 1; | |
| 653 } | |
| 654 | |
| 655 return(DATA_AVAILABLE); | |
| 656 } | |
| 657 //omaps00090550 break; | |
| 658 | |
| 659 // Voice memo record | |
| 660 case 3: | |
| 661 { | |
| 662 if (*ptr == NULL) | |
| 663 { | |
| 664 *ptr = (UWORD16 *)&voice_memo_buffer; | |
| 665 *buffer_size = SC_VM_BUFFER_SIZE>>1; | |
| 666 } | |
| 667 else | |
| 668 { | |
| 669 *buffer_size = (SC_VM_BUFFER_SIZE>>1) + 1; | |
| 670 } | |
| 671 | |
| 672 return(DATA_AVAILABLE); | |
| 673 } | |
| 674 //omaps00090550 break; | |
| 675 #endif // VOICE_MEMO | |
| 676 #if (SPEECH_RECO) | |
| 677 case 4: | |
| 678 { | |
| 679 database_id = 0; | |
| 680 word_index = (session_id & 0xF0)>>4; | |
| 681 *ptr = (UWORD16 *)&(sr_mmi_database[database_id][word_index].speech); | |
| 682 | |
| 683 *buffer_size = SC_SR_MMI_DB_SPEECH_SIZE; | |
| 684 | |
| 685 return(DATA_AVAILABLE); | |
| 686 } | |
| 687 break; | |
| 688 | |
| 689 case 5: | |
| 690 { | |
| 691 database_id = 1; | |
| 692 word_index = (session_id & 0xF0)>>4; | |
| 693 *ptr = (UWORD16 *)&(sr_mmi_database[database_id][word_index].speech); | |
| 694 | |
| 695 *buffer_size = SC_SR_MMI_DB_SPEECH_SIZE; | |
| 696 | |
| 697 return(DATA_AVAILABLE); | |
| 698 } | |
| 699 break; | |
| 700 #endif // SPEECH_RECO | |
| 701 #if (MELODY_E2 && FIR) | |
| 702 // Melody E2 | |
| 703 // Tchaikowski | |
| 704 case 6: | |
| 705 { | |
| 706 if (*ptr == NULL) | |
| 707 { | |
| 708 *ptr = (UWORD16 *)&Tchaikowski_danse_russe; | |
| 709 *buffer_size = TCHAIKOWSKI_DANSE_RUSSE>>1; | |
| 710 } | |
| 711 else | |
| 712 { | |
| 713 *buffer_size = TCHAIKOWSKI_DANSE_RUSSE>>1; | |
| 714 } | |
| 715 | |
| 716 return(DATA_AVAILABLE); | |
| 717 } | |
| 718 break; | |
| 719 | |
| 720 // Small melody | |
| 721 case 7: | |
| 722 { | |
| 723 if (*ptr == NULL) | |
| 724 { | |
| 725 *ptr = (UWORD16 *)&Small_melody_E2; | |
| 726 *buffer_size = SMALL_MELODY_E2>>1; | |
| 727 } | |
| 728 else | |
| 729 { | |
| 730 *buffer_size = SMALL_MELODY_E2>>1; | |
| 731 } | |
| 732 | |
| 733 return(DATA_AVAILABLE); | |
| 734 } | |
| 735 break; | |
| 736 | |
| 737 // CPU load | |
| 738 case 8: | |
| 739 { | |
| 740 if (*ptr == NULL) | |
| 741 { | |
| 742 *ptr = (UWORD16 *)&Cpu_load_E2; | |
| 743 *buffer_size = CPU_LOAD_E2>>1; | |
| 744 } | |
| 745 else | |
| 746 { | |
| 747 *buffer_size = CPU_LOAD_E2>>1; | |
| 748 } | |
| 749 | |
| 750 return(DATA_AVAILABLE); | |
| 751 } | |
| 752 break; | |
| 753 | |
| 754 // USA hymn | |
| 755 case 9: | |
| 756 { | |
| 757 if (*ptr == NULL) | |
| 758 { | |
| 759 *ptr = (UWORD16 *)&Usa_E2; | |
| 760 *buffer_size = USA_E2>>1; | |
| 761 } | |
| 762 else | |
| 763 { | |
| 764 *buffer_size = USA_E2>>1; | |
| 765 } | |
| 766 | |
| 767 return(DATA_AVAILABLE); | |
| 768 } | |
| 769 break; | |
| 770 #endif // MELODY_E2 | |
| 771 #if (L1_VOICE_MEMO_AMR) | |
| 772 // Voice memo amr play | |
| 773 case 10: | |
| 774 { | |
| 775 if (*ptr == NULL) | |
| 776 { | |
| 777 *ptr = (UWORD16 *)&voice_memo_buffer; | |
| 778 *buffer_size = SC_VM_BUFFER_SIZE>>1; | |
| 779 } | |
| 780 else | |
| 781 { | |
| 782 *buffer_size = (SC_VM_BUFFER_SIZE>>1) + 1; | |
| 783 } | |
| 784 | |
| 785 return(DATA_AVAILABLE); | |
| 786 } | |
| 787 //omaps00090550 break; | |
| 788 | |
| 789 // Voice memo record | |
| 790 case 11: | |
| 791 { | |
| 792 if (*ptr == NULL) | |
| 793 { | |
| 794 *ptr = (UWORD16 *)&voice_memo_buffer; | |
| 795 *buffer_size = SC_VM_BUFFER_SIZE>>1; | |
| 796 } | |
| 797 else | |
| 798 { | |
| 799 *buffer_size = (SC_VM_BUFFER_SIZE>>1) + 1; | |
| 800 } | |
| 801 | |
| 802 return(DATA_AVAILABLE); | |
| 803 } | |
| 804 //omaps00090550 break; | |
| 805 #endif // L1_VOICE_MEMO_AMR | |
| 806 | |
| 807 #if (L1_MIDI == 1) | |
| 808 // MIDI | |
| 809 case 12: | |
| 810 { | |
| 811 extern struct MIDI_FILE midi_file; | |
| 812 UWORD8 **ptr_char=(UWORD8 **)ptr; | |
| 813 static UWORD8 *last_ptr; | |
| 814 | |
| 815 if(*ptr_char==NULL) | |
| 816 { | |
| 817 midi_file_offset=0; | |
| 818 *ptr_char=&(midi_file.midi_file_buffer[0]); | |
| 819 last_ptr=*ptr_char; | |
| 820 | |
| 821 // All MIDI file available due to SMF1 format constraints | |
| 822 // For SMF0, *buffer_size should be set to MIDI_BUFFER_SIZE | |
| 823 *buffer_size=midi_file.midi_file_size; | |
| 824 return DATA_LAST; | |
| 825 } | |
| 826 else | |
| 827 { | |
| 828 *buffer_size=MIDI_BUFFER_SIZE; | |
| 829 *ptr_char=last_ptr+MIDI_BUFFER_SIZE; | |
| 830 | |
| 831 // Check if pointer is out of bounds | |
| 832 if(*ptr_char > &(midi_file.midi_file_buffer[0])+midi_file.midi_file_size-1) | |
| 833 { | |
| 834 *ptr_char=&(midi_file.midi_file_buffer[0]); | |
| 835 return DATA_AVAIL_ERROR; | |
| 836 } | |
| 837 | |
| 838 // Check if it's the last valid buffer | |
| 839 if((*ptr_char+*buffer_size) > &(midi_file.midi_file_buffer[0])+midi_file.midi_file_size-1) | |
| 840 { | |
| 841 *buffer_size=MIDI_BUFFER_SIZE-(UWORD16)(*ptr_char+MIDI_BUFFER_SIZE-&(midi_file.midi_file_buffer[0])-midi_file.midi_file_size+1); | |
| 842 | |
| 843 // Update offset in the MIDI file | |
| 844 midi_file_offset+=*ptr_char-last_ptr; | |
| 845 | |
| 846 last_ptr=*ptr_char; | |
| 847 | |
| 848 return DATA_LAST; | |
| 849 } | |
| 850 else | |
| 851 { | |
| 852 // Update offset in the MIDI file | |
| 853 midi_file_offset+=*ptr_char-last_ptr; | |
| 854 | |
| 855 last_ptr=*ptr_char; | |
| 856 | |
| 857 return DATA_AVAILABLE; | |
| 858 } | |
| 859 } | |
| 860 } | |
| 861 #endif // L1_MIDI | |
| 862 | |
| 863 #if L1_PCM_EXTRACTION | |
| 864 case 13: | |
| 865 { | |
| 866 *ptr = (UWORD16 *)&pcm_download_buffer; | |
| 867 *buffer_size = SC_PCM_DOWNLOAD_BUFFER_SIZE; | |
| 868 return DATA_AVAILABLE; | |
| 869 } | |
| 870 //omaps00090550 break; | |
| 871 | |
| 872 case 14: | |
| 873 { | |
| 874 *ptr = (UWORD16 *)&pcm_upload_buffer; | |
| 875 *buffer_size = SC_PCM_UPLOAD_BUFFER_SIZE; | |
| 876 return DATA_AVAILABLE; | |
| 877 } | |
| 878 //omaps00090550 break; | |
| 879 #endif /* L1_PCM_EXTRACTION */ | |
| 880 default: | |
| 881 { | |
| 882 return(SESSION_ERROR); | |
| 883 } | |
| 884 //omaps00090550 break; | |
| 885 } | |
| 886 #endif | |
| 887 | |
| 888 #if (OP_RIV_AUDIO == 1) | |
| 889 | |
| 890 #if (MELODY_E1) || (VOICE_MEMO) || (MELODY_E2) || (L1_VOICE_MEMO_AMR) || (L1_EXT_AUDIO_MGT) | |
| 891 UWORD8 index_l1, *current_ptr_8; | |
| 892 UWORD16 *current_ptr, *size_ptr, *end_ptr; | |
| 893 UWORD32 current, end; | |
| 894 T_AUDIO_FFS_SESSION *p_session; | |
| 895 | |
| 896 #if (L1_AUDIO_DRIVER == 1) | |
| 897 T_AUDIO_DRIVER_SESSION *p_driver_session; | |
| 898 UINT8 channel_id; | |
| 899 xSignalHeaderRec *msg; | |
| 900 | |
| 901 /* special handling for features in driver */ | |
| 902 if ((session_id == AUDIO_VM_AMR_RECORD_SESSION_ID) || | |
| 903 (session_id == AUDIO_VM_AMR_PLAY_SESSION_ID)) | |
| 904 { | |
| 905 channel_id = 0; | |
| 906 /* find active channel_id associated to session_id */ | |
| 907 while ( (channel_id < AUDIO_DRIVER_MAX_CHANNEL)&& | |
| 908 ((p_audio_gbl_var->audio_driver_session[channel_id].session_info.state == AUDIO_DRIVER_CHANNEL_WAIT_INIT)|| | |
| 909 (p_audio_gbl_var->audio_driver_session[channel_id].session_req.session_id != session_id)) ) | |
| 910 { | |
| 911 channel_id++; | |
| 912 } | |
| 913 /* get driver session */ | |
| 914 p_driver_session = &(p_audio_gbl_var->audio_driver_session[channel_id]); | |
| 915 | |
| 916 /* first buffer, index_l1 = 0 */ | |
| 917 if (*ptr == NULL) | |
| 918 { | |
| 919 *ptr = (UWORD16 *)(p_driver_session->session_info.buffer[0].p_start_pointer); | |
| 920 *buffer_size = (p_driver_session->session_info.buffer[0].size >> 1); | |
| 921 | |
| 922 return(DATA_AVAILABLE); | |
| 923 } | |
| 924 /* following buffers */ | |
| 925 else | |
| 926 { | |
| 927 /* prepare notification */ | |
| 928 msg = os_alloc_sig(sizeof(T_L1_AUDIO_DRIVER_IND)); | |
| 929 DEBUGMSG(status,NU_ALLOC_ERR) | |
| 930 msg->SignalCode = L1_AUDIO_DRIVER_IND; | |
| 931 ((T_L1_AUDIO_DRIVER_IND *)msg->SigP)->channel_id = channel_id; | |
| 932 ((T_L1_AUDIO_DRIVER_IND *)msg->SigP)->p_buffer = NULL; | |
| 933 | |
| 934 /* fill message with current buffer for record */ | |
| 935 index_l1 = p_driver_session->session_info.index_l1; | |
| 936 if (session_id == AUDIO_VM_AMR_RECORD_SESSION_ID) | |
| 937 ((T_L1_AUDIO_DRIVER_IND *)msg->SigP)->p_buffer = | |
| 938 (UWORD16 *)p_driver_session->session_info.buffer[index_l1].p_start_pointer; | |
| 939 | |
| 940 /* give new buffer = index_l1++ % nb_buffer */ | |
| 941 p_driver_session->session_info.index_l1++; | |
| 942 if ((p_driver_session->session_info.index_l1) == (p_driver_session->session_req.nb_buffer)) | |
| 943 p_driver_session->session_info.index_l1 =(UINT8)( 0);//omaps | |
| 944 | |
| 945 /* Update new current buffer parameters */ | |
| 946 index_l1 = (UWORD8)(p_driver_session->session_info.index_l1);//oamps | |
| 947 *ptr = (UWORD16 *)(p_driver_session->session_info.buffer[index_l1].p_start_pointer); | |
| 948 *buffer_size = (p_driver_session->session_info.buffer[index_l1].size >> 1); | |
| 949 | |
| 950 // Send confirmation message... | |
| 951 os_send_sig(msg, L1C1_QUEUE); | |
| 952 DEBUGMSG(status,NU_SEND_QUEUE_ERR) | |
| 953 | |
| 954 return (DATA_AVAILABLE); | |
| 955 } | |
| 956 } | |
| 957 /* Other features */ | |
| 958 else | |
| 959 { | |
| 960 #endif // L1_AUDIO_DRIVER | |
| 961 p_session = &(p_audio_gbl_var->audio_ffs_session[session_id]); | |
| 962 | |
| 963 switch (p_session->session_info.cust_get_pointer_state) | |
| 964 { | |
| 965 case AUDIO_CUST_GET_POINTER_INIT: | |
| 966 { | |
| 967 /* the first buffer, the index_l1 is already OK so the index_l1 doesn't change */ | |
| 968 index_l1 = | |
| 969 p_session->session_info.index_l1; | |
| 970 *ptr = | |
| 971 (UWORD16 *)(p_session->session_info.buffer[index_l1].p_start_pointer); | |
| 972 *buffer_size = | |
| 973 (p_session->session_info.buffer[index_l1].size>>1); | |
| 974 | |
| 975 | |
| 976 p_session->session_info.cust_get_pointer_state = | |
| 977 AUDIO_CUST_GET_POINTER_NORMAL; | |
| 978 break; | |
| 979 } | |
| 980 case AUDIO_CUST_GET_POINTER_NORMAL: | |
| 981 { | |
| 982 /* in loopback mode, when the melody restarts, the L1 pointer management is different */ | |
| 983 if ( (*buffer_size == 0) && | |
| 984 (p_session->session_req.loop_mode == TRUE) ) | |
| 985 { | |
| 986 p_session->session_info.cust_get_pointer_state = | |
| 987 AUDIO_CUST_GET_POINTER_LOOP; | |
| 988 break; | |
| 989 } | |
| 990 | |
| 991 /* The index_l1 needs to be changed */ | |
| 992 p_session->session_info.index_l1++; | |
| 993 if (p_session->session_info.index_l1 | |
| 994 == AUDIO_MAX_FFS_BUFFER_PER_SESSION) | |
| 995 { | |
| 996 p_session->session_info.index_l1 = 0; | |
| 997 } | |
| 998 | |
| 999 index_l1 = | |
| 1000 p_session->session_info.index_l1; | |
| 1001 *ptr = | |
| 1002 (UWORD16 *)(p_session->session_info.buffer[index_l1].p_start_pointer); | |
| 1003 *buffer_size = | |
| 1004 (p_session->session_info.buffer[index_l1].size>>1); | |
| 1005 | |
| 1006 break; | |
| 1007 } | |
| 1008 case AUDIO_CUST_GET_POINTER_LOOP: | |
| 1009 { | |
| 1010 /* in loopback mode, the next melody data is contiguous to the first */ | |
| 1011 /* if it's the end of the buffer , we use the next buffer */ | |
| 1012 index_l1 = | |
| 1013 p_session->session_info.index_l1; | |
| 1014 | |
| 1015 current_ptr = (UWORD16 *)(*ptr); | |
| 1016 current_ptr_8 = (UWORD8 *)(*ptr); | |
| 1017 end_ptr = (UWORD16 *)(p_session->session_info.buffer[index_l1].p_stop_pointer); | |
| 1018 | |
| 1019 if ( current_ptr >= end_ptr ) | |
| 1020 { | |
| 1021 p_session->session_info.index_l1++; | |
| 1022 if (p_session->session_info.index_l1 | |
| 1023 == AUDIO_MAX_FFS_BUFFER_PER_SESSION) | |
| 1024 { | |
| 1025 p_session->session_info.index_l1 = 0; | |
| 1026 } | |
| 1027 | |
| 1028 index_l1 = | |
| 1029 p_session->session_info.index_l1; | |
| 1030 *ptr = | |
| 1031 (UWORD16 *)(p_session->session_info.buffer[index_l1].p_start_pointer); | |
| 1032 *buffer_size = | |
| 1033 (p_session->session_info.buffer[index_l1].size>>1); | |
| 1034 } | |
| 1035 else | |
| 1036 { | |
| 1037 // Realign the pointer to the next 16 bit in case of melody E2 | |
| 1038 current = (UWORD32)current_ptr_8; | |
| 1039 if (current & 0x01) | |
| 1040 { | |
| 1041 current_ptr_8++; | |
| 1042 *ptr = (UWORD16 *)current_ptr_8; | |
| 1043 } | |
| 1044 | |
| 1045 end = (UWORD32)end_ptr; | |
| 1046 current = (UWORD32)current_ptr; | |
| 1047 | |
| 1048 *buffer_size = (UWORD16)((end-current)>>1); | |
| 1049 } | |
| 1050 | |
| 1051 p_session->session_info.cust_get_pointer_state = | |
| 1052 AUDIO_CUST_GET_POINTER_NORMAL; | |
| 1053 break; | |
| 1054 } | |
| 1055 } /* switch(p_session->session_info.cust_get_pointer_state) */ | |
| 1056 | |
| 1057 return(DATA_AVAILABLE); | |
| 1058 #if (L1_AUDIO_DRIVER == 1) | |
| 1059 } // added | |
| 1060 #endif | |
| 1061 #endif // MELODY_E1 || VOICE_MEMO || MELODY_E2 | |
| 1062 #endif // OP_RIV_AUDIO | |
| 1063 } | |
| 1064 | |
| 1065 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 1066 /*-------------------------------------------------------*/ | |
| 1067 /* Cust_get_next_buffer_status */ | |
| 1068 /*-------------------------------------------------------*/ | |
| 1069 /* */ | |
| 1070 /* Parameters : */ | |
| 1071 /* */ | |
| 1072 /* Return : */ | |
| 1073 /* */ | |
| 1074 /* Description : */ | |
| 1075 /* */ | |
| 1076 /*-------------------------------------------------------*/ | |
| 1077 UWORD8 Cust_get_next_buffer_status(void) | |
| 1078 { | |
| 1079 return (FALSE); | |
| 1080 } | |
| 1081 | |
| 1082 #endif | |
| 1083 | |
| 1084 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 1085 /*-------------------------------------------------------*/ | |
| 1086 /* Cust_get_pointer_next_buffer */ | |
| 1087 /*-------------------------------------------------------*/ | |
| 1088 /* */ | |
| 1089 /* Parameters : ptr */ | |
| 1090 /* buffer_size */ | |
| 1091 /* session_id */ | |
| 1092 /* */ | |
| 1093 /* Return : error_id : */ | |
| 1094 /* DATA_AVAILABLE: 0, no error occured */ | |
| 1095 /* SESSION_ERROR: 1, wrong session id */ | |
| 1096 /* POINTER_ERROR: 2, wrong ptr */ | |
| 1097 /* DATA_AVAIL_ERROR: 3, no more data */ | |
| 1098 /* available */ | |
| 1099 /* DATA_LAST: 4, returned buffer is the */ | |
| 1100 /* last */ | |
| 1101 /* buffer_size */ | |
| 1102 /* ptr */ | |
| 1103 /* */ | |
| 1104 /* Description : */ | |
| 1105 /* This function acts the same as Cust_get_pointer() but */ | |
| 1106 /* does not send notification to upper layers to free */ | |
| 1107 /* current buffer */ | |
| 1108 /* */ | |
| 1109 /*-------------------------------------------------------*/ | |
| 1110 UWORD8 Cust_get_pointer_next_buffer(UWORD16 **ptr, | |
| 1111 UWORD16 *buffer_size, | |
| 1112 UWORD8 session_id) | |
| 1113 { | |
| 1114 #if (L1_MP3 == 1) | |
| 1115 extern UWORD32 mp3_file_size; | |
| 1116 #endif | |
| 1117 #if (L1_AAC == 1) | |
| 1118 extern UWORD32 aac_file_size; | |
| 1119 #endif | |
| 1120 | |
| 1121 switch(session_id&0x0F) | |
| 1122 { | |
| 1123 #if (L1_MP3 == 1) | |
| 1124 case 13: | |
| 1125 { | |
| 1126 if(*ptr==NULL) | |
| 1127 { | |
| 1128 // Reset flag | |
| 1129 Cust_get_pointer_mp3_buffer_last=FALSE; | |
| 1130 | |
| 1131 // Set pointer to first buffer with corresponding size | |
| 1132 mp3_tempbuf_idx=0; | |
| 1133 *ptr=mp3_tempbuf0; | |
| 1134 *buffer_size=C_MP3_L1STANDALONE_BUFFER_SIZE; | |
| 1135 | |
| 1136 Cust_get_pointer_mp3_last_buffer_size=C_MP3_L1STANDALONE_BUFFER_SIZE; | |
| 1137 | |
| 1138 #if (CODE_VERSION == NOT_SIMULATION) | |
| 1139 if(mp3_file_size<C_MP3_L1STANDALONE_BUFFER_SIZE) | |
| 1140 { | |
| 1141 *buffer_size=(UWORD16)mp3_file_size; | |
| 1142 Cust_get_pointer_mp3_buffer_last=TRUE; | |
| 1143 return DATA_LAST; | |
| 1144 } | |
| 1145 #endif | |
| 1146 | |
| 1147 return DATA_AVAILABLE; | |
| 1148 } | |
| 1149 else | |
| 1150 { | |
| 1151 switch(mp3_tempbuf_idx) | |
| 1152 { | |
| 1153 case 0: | |
| 1154 *ptr=mp3_tempbuf1; | |
| 1155 break; | |
| 1156 | |
| 1157 case 1: | |
| 1158 *ptr=mp3_tempbuf0; | |
| 1159 break; | |
| 1160 } | |
| 1161 | |
| 1162 // Swap buffer index | |
| 1163 mp3_tempbuf_idx^=1; | |
| 1164 | |
| 1165 *buffer_size=Cust_get_pointer_mp3_last_buffer_size; | |
| 1166 | |
| 1167 if(Cust_get_pointer_mp3_buffer_last==FALSE) | |
| 1168 return DATA_AVAILABLE; | |
| 1169 else | |
| 1170 { | |
| 1171 if(l1a_l1s_com.mp3_task.parameters.loopback==TRUE) | |
| 1172 Cust_get_pointer_mp3_buffer_last=FALSE; | |
| 1173 | |
| 1174 return DATA_LAST; | |
| 1175 } | |
| 1176 } | |
| 1177 } | |
| 1178 //omaps00090550 break; | |
| 1179 #endif // L1_MP3 | |
| 1180 | |
| 1181 #if (L1_AAC == 1) | |
| 1182 case 14: // session id for AAC | |
| 1183 { | |
| 1184 if(*ptr==NULL) | |
| 1185 { | |
| 1186 // Reset flag | |
| 1187 Cust_get_pointer_aac_buffer_last=FALSE; | |
| 1188 | |
| 1189 // Set pointer to first buffer with corresponding size | |
| 1190 aac_tempbuf_idx=0; | |
| 1191 *ptr=aac_tempbuf0; | |
| 1192 *buffer_size=C_AAC_L1STANDALONE_BUFFER_SIZE; | |
| 1193 | |
| 1194 Cust_get_pointer_aac_last_buffer_size=C_AAC_L1STANDALONE_BUFFER_SIZE; | |
| 1195 | |
| 1196 #if (CODE_VERSION == NOT_SIMULATION) | |
| 1197 if(aac_file_size<C_AAC_L1STANDALONE_BUFFER_SIZE) | |
| 1198 { | |
| 1199 *buffer_size=(UWORD16)aac_file_size; | |
| 1200 Cust_get_pointer_aac_buffer_last=TRUE; | |
| 1201 return DATA_LAST; | |
| 1202 } | |
| 1203 #endif | |
| 1204 | |
| 1205 return DATA_AVAILABLE; | |
| 1206 } | |
| 1207 else | |
| 1208 { | |
| 1209 switch(aac_tempbuf_idx) | |
| 1210 { | |
| 1211 case 0: | |
| 1212 *ptr=aac_tempbuf1; | |
| 1213 break; | |
| 1214 | |
| 1215 case 1: | |
| 1216 *ptr=aac_tempbuf0; | |
| 1217 break; | |
| 1218 } | |
| 1219 | |
| 1220 // Swap buffer index | |
| 1221 aac_tempbuf_idx^=1; | |
| 1222 | |
| 1223 *buffer_size=Cust_get_pointer_aac_last_buffer_size; | |
| 1224 | |
| 1225 if(Cust_get_pointer_aac_buffer_last==FALSE) | |
| 1226 return DATA_AVAILABLE; | |
| 1227 else | |
| 1228 { | |
| 1229 if(l1a_l1s_com.aac_task.parameters.loopback==TRUE) | |
| 1230 Cust_get_pointer_aac_buffer_last=FALSE; | |
| 1231 | |
| 1232 return DATA_LAST; | |
| 1233 } | |
| 1234 } | |
| 1235 } | |
| 1236 //omaps00090550 break; | |
| 1237 #endif // L1_AAC | |
| 1238 | |
| 1239 default: | |
| 1240 { | |
| 1241 return SESSION_ERROR; | |
| 1242 } | |
| 1243 //omaps00090550 break; | |
| 1244 } | |
| 1245 } | |
| 1246 #endif // (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 1247 | |
| 1248 | |
| 1249 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 1250 /*------------------------------------------------------------------*/ | |
| 1251 /* Cust_get_pointer_notify */ | |
| 1252 /*------------------------------------------------------------------*/ | |
| 1253 /* */ | |
| 1254 /* Parameters : ptr */ | |
| 1255 /* session_id */ | |
| 1256 /* */ | |
| 1257 /* Return : n/a */ | |
| 1258 /* */ | |
| 1259 /* Description : */ | |
| 1260 /* This function sends notification to upper layers to */ | |
| 1261 /* fill next buffer. */ | |
| 1262 /* This function should be used with Cust_get_pointer_next_buffer() */ | |
| 1263 /* */ | |
| 1264 /*------------------------------------------------------------------*/ | |
| 1265 void Cust_get_pointer_notify(UWORD8 session_id) | |
| 1266 { | |
| 1267 switch(session_id&0x0F) | |
| 1268 { | |
| 1269 #if (L1_MP3 == 1) | |
| 1270 case 13: | |
| 1271 { | |
| 1272 #if (CODE_VERSION == NOT_SIMULATION) | |
| 1273 UWORD32 size; | |
| 1274 UWORD8 *dst; | |
| 1275 extern UWORD32 mp3_file_size; | |
| 1276 | |
| 1277 // Check if file is ending | |
| 1278 if(mp3_file_offset+C_MP3_L1STANDALONE_BUFFER_SIZE > mp3_file_size) | |
| 1279 { | |
| 1280 size=mp3_file_size-mp3_file_offset; | |
| 1281 Cust_get_pointer_mp3_buffer_last=TRUE; | |
| 1282 } | |
| 1283 else | |
| 1284 { | |
| 1285 size=C_MP3_L1STANDALONE_BUFFER_SIZE; | |
| 1286 Cust_get_pointer_mp3_buffer_last=FALSE; | |
| 1287 } | |
| 1288 | |
| 1289 switch(mp3_tempbuf_idx) | |
| 1290 { | |
| 1291 case 0: | |
| 1292 { | |
| 1293 // L1 is working on buffer 0 -> fill buffer 1 | |
| 1294 dst=(UWORD8 *)mp3_tempbuf1; | |
| 1295 } | |
| 1296 break; | |
| 1297 | |
| 1298 case 1: | |
| 1299 { | |
| 1300 // L1 is working on buffer 1 -> fill buffer 0 | |
| 1301 dst=(UWORD8 *)mp3_tempbuf0; | |
| 1302 } | |
| 1303 break; | |
| 1304 } | |
| 1305 | |
| 1306 memcpy(dst,(UWORD8 *)mp3_file+mp3_file_offset,size); | |
| 1307 | |
| 1308 // Update MP3 read offset | |
| 1309 mp3_file_offset+=C_MP3_L1STANDALONE_BUFFER_SIZE; | |
| 1310 | |
| 1311 // Rewind if loopback mode is on | |
| 1312 if((l1a_l1s_com.mp3_task.parameters.loopback==TRUE) && | |
| 1313 (Cust_get_pointer_mp3_buffer_last==TRUE)) | |
| 1314 mp3_file_offset=0; | |
| 1315 | |
| 1316 // Keep track of buffer size | |
| 1317 Cust_get_pointer_mp3_last_buffer_size=(UWORD16)size; | |
| 1318 | |
| 1319 #else // CODE_VERSION == NOT_SIMULATION | |
| 1320 UWORD16 i; | |
| 1321 UWORD8 *dst; | |
| 1322 switch(mp3_tempbuf_idx) | |
| 1323 { | |
| 1324 case 0: | |
| 1325 dst=(UWORD8 *)mp3_tempbuf1; | |
| 1326 break; | |
| 1327 case 1: | |
| 1328 dst=(UWORD8 *)mp3_tempbuf0; | |
| 1329 break; | |
| 1330 } | |
| 1331 for(i=0; i<C_MP3_L1STANDALONE_BUFFER_SIZE/2; i++) | |
| 1332 { | |
| 1333 dst[2*i] =0x12; | |
| 1334 dst[2*i+1]=0x24; | |
| 1335 } | |
| 1336 #endif | |
| 1337 } | |
| 1338 break; | |
| 1339 #endif // L1_MP3 | |
| 1340 | |
| 1341 #if (L1_AAC == 1) | |
| 1342 case 14: | |
| 1343 { | |
| 1344 #if (CODE_VERSION == NOT_SIMULATION) | |
| 1345 UWORD32 size; | |
| 1346 UWORD8 *dst; | |
| 1347 extern UWORD32 aac_file_size; | |
| 1348 | |
| 1349 // Check if file is ending | |
| 1350 if(aac_file_offset+C_AAC_L1STANDALONE_BUFFER_SIZE > aac_file_size) | |
| 1351 { | |
| 1352 size=aac_file_size-aac_file_offset; | |
| 1353 Cust_get_pointer_aac_buffer_last=TRUE; | |
| 1354 } | |
| 1355 else | |
| 1356 { | |
| 1357 size=C_AAC_L1STANDALONE_BUFFER_SIZE; | |
| 1358 Cust_get_pointer_aac_buffer_last=FALSE; | |
| 1359 } | |
| 1360 | |
| 1361 switch(aac_tempbuf_idx) | |
| 1362 { | |
| 1363 case 0: | |
| 1364 { | |
| 1365 // L1 is working on buffer 0 -> fill buffer 1 | |
| 1366 dst=(UWORD8 *)aac_tempbuf1; | |
| 1367 } | |
| 1368 break; | |
| 1369 | |
| 1370 case 1: | |
| 1371 { | |
| 1372 // L1 is working on buffer 1 -> fill buffer 0 | |
| 1373 dst=(UWORD8 *)aac_tempbuf0; | |
| 1374 } | |
| 1375 break; | |
| 1376 } | |
| 1377 | |
| 1378 memcpy(dst,(UWORD8 *)aac_file+aac_file_offset,size); | |
| 1379 | |
| 1380 // Update AAC read offset | |
| 1381 aac_file_offset+=C_AAC_L1STANDALONE_BUFFER_SIZE; | |
| 1382 | |
| 1383 // Rewind if loopback mode is on | |
| 1384 if((l1a_l1s_com.aac_task.parameters.loopback==TRUE) && | |
| 1385 (Cust_get_pointer_aac_buffer_last==TRUE)) | |
| 1386 aac_file_offset=0; | |
| 1387 | |
| 1388 // Keep track of buffer size | |
| 1389 Cust_get_pointer_aac_last_buffer_size=(UWORD16)size; | |
| 1390 | |
| 1391 #else // CODE_VERSION == NOT_SIMULATION | |
| 1392 UWORD16 i; | |
| 1393 UWORD8 *dst; | |
| 1394 switch(aac_tempbuf_idx) | |
| 1395 { | |
| 1396 case 0: | |
| 1397 dst=(UWORD8 *)aac_tempbuf1; | |
| 1398 break; | |
| 1399 case 1: | |
| 1400 dst=(UWORD8 *)aac_tempbuf0; | |
| 1401 break; | |
| 1402 } | |
| 1403 for(i=0; i<C_AAC_L1STANDALONE_BUFFER_SIZE/2; i++) | |
| 1404 { | |
| 1405 dst[2*i] =0x10; | |
| 1406 dst[2*i+1]=0x20; | |
| 1407 } | |
| 1408 #endif | |
| 1409 } | |
| 1410 break; | |
| 1411 #endif // L1_AAC | |
| 1412 | |
| 1413 } // switch(session_id&0x0F) | |
| 1414 } | |
| 1415 #endif // (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 1416 | |
| 1417 | |
| 1418 #if (MELODY_E2 && FIR) | |
| 1419 /*-------------------------------------------------------*/ | |
| 1420 /* Cust_audio_melody_E2_load_instrument */ | |
| 1421 /*-------------------------------------------------------*/ | |
| 1422 /* */ | |
| 1423 /* Parameters : customer_instrument_id: */ | |
| 1424 /* Identifier of the instrument */ | |
| 1425 /* API_address */ | |
| 1426 /* address where the insturment */ | |
| 1427 /* is downloaded */ | |
| 1428 /* allowed_size */ | |
| 1429 /* maximum size of the instrument */ | |
| 1430 /* */ | |
| 1431 /* Return : instrument_size : */ | |
| 1432 /* size of the insturment downloaded in */ | |
| 1433 /* 16-bit word */ | |
| 1434 /* */ | |
| 1435 /* Description : */ | |
| 1436 /* The audio background task calls this function to */ | |
| 1437 /* request to the MMI to download a new instrument */ | |
| 1438 /* description at the API_address. */ | |
| 1439 /* */ | |
| 1440 /*-------------------------------------------------------*/ | |
| 1441 UWORD16 Cust_audio_melody_E2_load_instrument (UWORD8 customer_instrument_id, | |
| 1442 API *API_address, | |
| 1443 UWORD16 allowed_size) | |
| 1444 { | |
| 1445 #if (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 1446 UWORD16 instrument_size = 0, i, *instrument_ptr; | |
| 1447 | |
| 1448 // default.lsi file: | |
| 1449 // 0 piano31 0x0 | |
| 1450 // 1 piano15 0x1 | |
| 1451 // 2 pia_811 0x2 | |
| 1452 // 3 eba_2536 0x3 | |
| 1453 // 4 tsax_255 0x4 | |
| 1454 // 5 asax_124 0x5 | |
| 1455 // 6 clar_121 0x6 | |
| 1456 // 7 clar_130 0x7 | |
| 1457 // 8 stdr_515 0x8 | |
| 1458 // 9 timp_661 0x9 | |
| 1459 // 10 agog_406 0xA | |
| 1460 // 11 wood_110 0xB | |
| 1461 // 12 vib_3836 0xC | |
| 1462 // 13 xylo_120 0xD | |
| 1463 // 14 xylo_315 0xE | |
| 1464 // 15 xylo_516 0xF | |
| 1465 // 16 kali_215 0x10 | |
| 1466 // 17 viol_231 0x11 | |
| 1467 // 18 viol_215 0x12 | |
| 1468 // 19 viol_211 0x13 | |
| 1469 // 20 viol_108 0x14 | |
| 1470 // 21 flut_436 0x15 | |
| 1471 // 22 flut_308 0x16 | |
| 1472 // 23 porg_131 0x17 | |
| 1473 // 24 acco_211 0x18 | |
| 1474 // 25 stng_231 0x19 | |
| 1475 // 26 stng_058 0x1A | |
| 1476 // 27 ldsa_131 0x1B | |
| 1477 // 28 sin7 0x1C | |
| 1478 // 29 egu_3036 0x1D | |
| 1479 // 30 jgui_215 0x1E | |
| 1480 // 31 banj_315 0x1F | |
| 1481 // 32 trum_231 0x20 | |
| 1482 // 33 tromb31 0x21 | |
| 1483 // 34 cho_2116 0x22 | |
| 1484 // 35 vooh_331 0x23 | |
| 1485 // 36 crc_1210 0x24 | |
| 1486 // 37 chc_1210 0x25 | |
| 1487 // 38 ohc_1610 0x26 | |
| 1488 // 39 lbon_121 0x27 | |
| 1489 // 40 esn_0210 0x28 | |
| 1490 // 41 crc_0210 0x29 | |
| 1491 // 42 ric_0210 0x2A | |
| 1492 // 43 bdm_0122 0x2B | |
| 1493 // 44 vib_0415 0x2C | |
| 1494 // 45 ngu_0343 0x2D | |
| 1495 // 46 sgu_0230 0x2E | |
| 1496 // 47 xyl_0315 0x2F | |
| 1497 | |
| 1498 switch (customer_instrument_id) | |
| 1499 { | |
| 1500 case 0: | |
| 1501 // Piano31.mwa | |
| 1502 { | |
| 1503 instrument_size = MELODY_E2_PIANO31_MWA_SIZE; | |
| 1504 instrument_ptr = (UWORD16 *)(&melody_E2_piano31[0]); | |
| 1505 break; | |
| 1506 } | |
| 1507 case 1: | |
| 1508 // Piano15.mwa | |
| 1509 { | |
| 1510 instrument_size = MELODY_E2_PIANO15_MWA_SIZE; | |
| 1511 instrument_ptr = (UWORD16 *)(&melody_E2_piano15[0]); | |
| 1512 break; | |
| 1513 } | |
| 1514 case 2: | |
| 1515 // Pia_811.mwa | |
| 1516 { | |
| 1517 instrument_size = MELODY_E2_PIA_811_MWA_SIZE; | |
| 1518 instrument_ptr = (UWORD16 *)(&melody_E2_pia_811[0]); | |
| 1519 break; | |
| 1520 } | |
| 1521 case 3: | |
| 1522 // eba_2536.mwa | |
| 1523 { | |
| 1524 instrument_size = MELODY_E2_EBA_2536_MWA_SIZE; | |
| 1525 instrument_ptr = (UWORD16 *)(&melody_E2_eba_2536[0]); | |
| 1526 break; | |
| 1527 } | |
| 1528 case 4: | |
| 1529 // tsax_255.mwa | |
| 1530 { | |
| 1531 instrument_size = MELODY_E2_TSAX_255_MWA_SIZE; | |
| 1532 instrument_ptr = (UWORD16 *)(&melody_E2_tsax_255[0]); | |
| 1533 break; | |
| 1534 } | |
| 1535 case 5: | |
| 1536 // asax_124.mwa | |
| 1537 { | |
| 1538 instrument_size = MELODY_E2_ASAX_124_MWA_SIZE; | |
| 1539 instrument_ptr = (UWORD16 *)(&melody_E2_asax_124[0]); | |
| 1540 break; | |
| 1541 } | |
| 1542 case 6: | |
| 1543 // clar_121.mwa | |
| 1544 { | |
| 1545 instrument_size = MELODY_E2_CLAR_121_MWA_SIZE; | |
| 1546 instrument_ptr = (UWORD16 *)(&melody_E2_clar_121[0]); | |
| 1547 break; | |
| 1548 } | |
| 1549 case 7: | |
| 1550 // clar_130.mwa | |
| 1551 { | |
| 1552 instrument_size = MELODY_E2_CLAR_130_MWA_SIZE; | |
| 1553 instrument_ptr = (UWORD16 *)(&melody_E2_clar_130[0]); | |
| 1554 break; | |
| 1555 } | |
| 1556 case 8: | |
| 1557 // stdr_515.mwa | |
| 1558 { | |
| 1559 instrument_size = MELODY_E2_STDR_515_MWA_SIZE; | |
| 1560 instrument_ptr = (UWORD16 *)(&melody_E2_stdr_515[0]); | |
| 1561 break; | |
| 1562 } | |
| 1563 case 9: | |
| 1564 // timp_661.mwa | |
| 1565 { | |
| 1566 instrument_size = MELODY_E2_TIMP_661_MWA_SIZE; | |
| 1567 instrument_ptr = (UWORD16 *)(&melody_E2_timp_661[0]); | |
| 1568 break; | |
| 1569 } | |
| 1570 case 10: | |
| 1571 // agog_406.mwa | |
| 1572 { | |
| 1573 instrument_size = MELODY_E2_AGOG_406_MWA_SIZE; | |
| 1574 instrument_ptr = (UWORD16 *)(&melody_E2_agog_406[0]); | |
| 1575 break; | |
| 1576 } | |
| 1577 case 11: | |
| 1578 // wood_110.mwa | |
| 1579 { | |
| 1580 instrument_size = MELODY_E2_WOOD_110_MWA_SIZE; | |
| 1581 instrument_ptr = (UWORD16 *)(&melody_E2_wood_110[0]); | |
| 1582 break; | |
| 1583 } | |
| 1584 case 12: | |
| 1585 // vib_3836.mwa | |
| 1586 { | |
| 1587 instrument_size = MELODY_E2_VIB_3836_MWA_SIZE; | |
| 1588 instrument_ptr = (UWORD16 *)(&melody_E2_vib_3836[0]); | |
| 1589 break; | |
| 1590 } | |
| 1591 case 13: | |
| 1592 // xylo_120.mwa | |
| 1593 { | |
| 1594 instrument_size = MELODY_E2_XYLO_120_MWA_SIZE; | |
| 1595 instrument_ptr = (UWORD16 *)(&melody_E2_xylo_120[0]); | |
| 1596 break; | |
| 1597 } | |
| 1598 case 14: | |
| 1599 // xylo_315.mwa | |
| 1600 { | |
| 1601 instrument_size = MELODY_E2_XYLO_315_MWA_SIZE; | |
| 1602 instrument_ptr = (UWORD16 *)(&melody_E2_xylo_315[0]); | |
| 1603 break; | |
| 1604 } | |
| 1605 case 15: | |
| 1606 // xylo_516.mwa | |
| 1607 { | |
| 1608 instrument_size = MELODY_E2_XYLO_516_MWA_SIZE; | |
| 1609 instrument_ptr = (UWORD16 *)(&melody_E2_xylo_516[0]); | |
| 1610 break; | |
| 1611 } | |
| 1612 case 16: | |
| 1613 // kali_215.mwa | |
| 1614 { | |
| 1615 instrument_size = MELODY_E2_KALI_215_MWA_SIZE; | |
| 1616 instrument_ptr = (UWORD16 *)(&melody_E2_kali_215[0]); | |
| 1617 break; | |
| 1618 } | |
| 1619 case 17: | |
| 1620 // viol_231 | |
| 1621 { | |
| 1622 instrument_size = MELODY_E2_VIOL_231_MWA_SIZE; | |
| 1623 instrument_ptr = (UWORD16 *)(&melody_E2_viol_231[0]); | |
| 1624 break; | |
| 1625 } | |
| 1626 case 18: | |
| 1627 // viol_215.mwa | |
| 1628 { | |
| 1629 instrument_size = MELODY_E2_VIOL_215_MWA_SIZE; | |
| 1630 instrument_ptr = (UWORD16 *)(&melody_E2_viol_215[0]); | |
| 1631 break; | |
| 1632 } | |
| 1633 case 19: | |
| 1634 // viol_211.mwa | |
| 1635 { | |
| 1636 instrument_size = MELODY_E2_VIOL_211_MWA_SIZE; | |
| 1637 instrument_ptr = (UWORD16 *)(&melody_E2_viol_211[0]); | |
| 1638 break; | |
| 1639 } | |
| 1640 case 20: | |
| 1641 // viol_108.mwa | |
| 1642 { | |
| 1643 instrument_size = MELODY_E2_VIOL_108_MWA_SIZE; | |
| 1644 instrument_ptr = (UWORD16 *)(&melody_E2_viol_108[0]); | |
| 1645 break; | |
| 1646 } | |
| 1647 case 21: | |
| 1648 // flut_436 | |
| 1649 { | |
| 1650 instrument_size = MELODY_E2_FLUT_436_MWA_SIZE; | |
| 1651 instrument_ptr = (UWORD16 *)(&melody_E2_flut_436[0]); | |
| 1652 break; | |
| 1653 } | |
| 1654 case 22: | |
| 1655 // flut_308.mwa | |
| 1656 { | |
| 1657 instrument_size = MELODY_E2_FLUT_308_MWA_SIZE; | |
| 1658 instrument_ptr = (UWORD16 *)(&melody_E2_flut_308[0]); | |
| 1659 break; | |
| 1660 } | |
| 1661 case 23: | |
| 1662 // porg_131 | |
| 1663 { | |
| 1664 instrument_size = MELODY_E2_PORG_131_MWA_SIZE; | |
| 1665 instrument_ptr = (UWORD16 *)(&melody_E2_porg_131[0]); | |
| 1666 break; | |
| 1667 } | |
| 1668 case 24: | |
| 1669 // acco_211.mwa | |
| 1670 { | |
| 1671 instrument_size = MELODY_E2_ACCO_211_MWA_SIZE; | |
| 1672 instrument_ptr = (UWORD16 *)(&melody_E2_acco_211[0]); | |
| 1673 break; | |
| 1674 } | |
| 1675 case 25: | |
| 1676 // stng_231 | |
| 1677 { | |
| 1678 instrument_size = MELODY_E2_STNG_231_MWA_SIZE; | |
| 1679 instrument_ptr = (UWORD16 *)(&melody_E2_stng_231[0]); | |
| 1680 break; | |
| 1681 } | |
| 1682 case 26: | |
| 1683 // stng_058.mwa | |
| 1684 { | |
| 1685 instrument_size = MELODY_E2_STNG_058_MWA_SIZE; | |
| 1686 instrument_ptr = (UWORD16 *)(&melody_E2_stng_058[0]); | |
| 1687 break; | |
| 1688 } | |
| 1689 case 27: | |
| 1690 // ldsa_131 | |
| 1691 { | |
| 1692 instrument_size = MELODY_E2_LDSA_131_MWA_SIZE; | |
| 1693 instrument_ptr = (UWORD16 *)(&melody_E2_ldsa_131[0]); | |
| 1694 break; | |
| 1695 } | |
| 1696 case 28: | |
| 1697 // sin7.mwa | |
| 1698 { | |
| 1699 instrument_size = MELODY_E2_SIN7_MWA_SIZE; | |
| 1700 instrument_ptr = (UWORD16 *)(&melody_E2_sin7[0]); | |
| 1701 break; | |
| 1702 } | |
| 1703 case 29: | |
| 1704 // Egu_3036.mwa | |
| 1705 { | |
| 1706 instrument_size = MELODY_E2_EGU_3036_MWA_SIZE; | |
| 1707 instrument_ptr = (UWORD16 *)(&melody_E2_egu_3036[0]); | |
| 1708 break; | |
| 1709 } | |
| 1710 case 30: | |
| 1711 // Jgui_215.mwa | |
| 1712 { | |
| 1713 instrument_size = MELODY_E2_JGUI_215_MWA_SIZE; | |
| 1714 instrument_ptr = (UWORD16 *)(&melody_E2_jgui_215[0]); | |
| 1715 break; | |
| 1716 } | |
| 1717 case 31: | |
| 1718 // Banj_315.mwa | |
| 1719 { | |
| 1720 instrument_size = MELODY_E2_BANJ_315_MWA_SIZE; | |
| 1721 instrument_ptr = (UWORD16 *)(&melody_E2_banj_315[0]); | |
| 1722 break; | |
| 1723 } | |
| 1724 | |
| 1725 case 32: | |
| 1726 // trum_231 | |
| 1727 { | |
| 1728 instrument_size = MELODY_E2_TRUM_231_MWA_SIZE; | |
| 1729 instrument_ptr = (UWORD16 *)(&melody_E2_trum_231[0]); | |
| 1730 break; | |
| 1731 } | |
| 1732 case 33: | |
| 1733 // tromb31 | |
| 1734 { | |
| 1735 instrument_size = MELODY_E2_TROMB31_MWA_SIZE; | |
| 1736 instrument_ptr = (UWORD16 *)(&melody_E2_tromb31[0]); | |
| 1737 break; | |
| 1738 } | |
| 1739 case 34: | |
| 1740 // cho_2116 | |
| 1741 { | |
| 1742 instrument_size = MELODY_E2_CHO_2116_MWA_SIZE; | |
| 1743 instrument_ptr = (UWORD16 *)(&melody_E2_cho_2116[0]); | |
| 1744 break; | |
| 1745 } | |
| 1746 case 35: | |
| 1747 // vooh_331.mwa | |
| 1748 { | |
| 1749 instrument_size = MELODY_E2_VOOH_331_MWA_SIZE; | |
| 1750 instrument_ptr = (UWORD16 *)(&melody_E2_vooh_331[0]); | |
| 1751 break; | |
| 1752 } | |
| 1753 case 36: | |
| 1754 // crc_1210.mwa | |
| 1755 { | |
| 1756 instrument_size = MELODY_E2_CRC_1210_MWA_SIZE; | |
| 1757 instrument_ptr = (UWORD16 *)(&melody_E2_crc_1210[0]); | |
| 1758 break; | |
| 1759 } | |
| 1760 case 37: | |
| 1761 // chc_1210.mwa | |
| 1762 { | |
| 1763 instrument_size = MELODY_E2_CHC_1210_MWA_SIZE; | |
| 1764 instrument_ptr = (UWORD16 *)(&melody_E2_chc_1210[0]); | |
| 1765 break; | |
| 1766 } | |
| 1767 case 38: | |
| 1768 // ohc_1610 | |
| 1769 { | |
| 1770 instrument_size = MELODY_E2_OHC_1610_MWA_SIZE; | |
| 1771 instrument_ptr = (UWORD16 *)(&melody_E2_ohc_1610[0]); | |
| 1772 break; | |
| 1773 } | |
| 1774 case 39: | |
| 1775 // lbon_121 | |
| 1776 { | |
| 1777 instrument_size = MELODY_E2_LBON_121_MWA_SIZE; | |
| 1778 instrument_ptr = (UWORD16 *)(&melody_E2_lbon_121[0]); | |
| 1779 break; | |
| 1780 } | |
| 1781 case 40: | |
| 1782 // esn_0210 | |
| 1783 { | |
| 1784 instrument_size = MELODY_E2_ESN_0210_MWA_SIZE; | |
| 1785 instrument_ptr = (UWORD16 *)(&melody_E2_esn_0210[0]); | |
| 1786 break; | |
| 1787 } | |
| 1788 case 41: | |
| 1789 // crc_0210 | |
| 1790 { | |
| 1791 instrument_size = MELODY_E2_CRC_0210_MWA_SIZE; | |
| 1792 instrument_ptr = (UWORD16 *)(&melody_E2_crc_0210[0]); | |
| 1793 break; | |
| 1794 } | |
| 1795 case 42: | |
| 1796 // ric_0210 | |
| 1797 { | |
| 1798 instrument_size = MELODY_E2_RIC_0210_MWA_SIZE; | |
| 1799 instrument_ptr = (UWORD16 *)(&melody_E2_ric_0210[0]); | |
| 1800 break; | |
| 1801 } | |
| 1802 case 43: | |
| 1803 // bdm_0122 | |
| 1804 { | |
| 1805 instrument_size = MELODY_E2_BDM_0122_MWA_SIZE; | |
| 1806 instrument_ptr = (UWORD16 *)(&melody_E2_bdm_0122[0]); | |
| 1807 break; | |
| 1808 } | |
| 1809 case 44: | |
| 1810 // vib_0415 | |
| 1811 { | |
| 1812 instrument_size = MELODY_E2_VIB_0415_MWA_SIZE; | |
| 1813 instrument_ptr = (UWORD16 *)(&melody_E2_vib_0415[0]); | |
| 1814 break; | |
| 1815 } | |
| 1816 case 45: | |
| 1817 // ngu_0343 | |
| 1818 { | |
| 1819 instrument_size = MELODY_E2_NGU_0343_MWA_SIZE; | |
| 1820 instrument_ptr = (UWORD16 *)(&melody_E2_ngu_0343[0]); | |
| 1821 break; | |
| 1822 } | |
| 1823 case 46: | |
| 1824 // sgu_0230 | |
| 1825 { | |
| 1826 instrument_size = MELODY_E2_SGU_0230_MWA_SIZE; | |
| 1827 instrument_ptr = (UWORD16 *)(&melody_E2_sgu_0230[0]); | |
| 1828 break; | |
| 1829 } | |
| 1830 case 47: | |
| 1831 // xyl_0315 | |
| 1832 { | |
| 1833 instrument_size = MELODY_E2_XYL_0315_MWA_SIZE; | |
| 1834 instrument_ptr = (UWORD16 *)(&melody_E2_xyl_0315[0]); | |
| 1835 break; | |
| 1836 } | |
| 1837 } | |
| 1838 | |
| 1839 i = instrument_size; | |
| 1840 while ( (i != 0) && | |
| 1841 (l1a_l1s_com.melody0_e2_task.parameters.emergency_stop == FALSE) ) | |
| 1842 { | |
| 1843 *API_address++ = *instrument_ptr++; | |
| 1844 i--; | |
| 1845 } | |
| 1846 | |
| 1847 return(instrument_size); | |
| 1848 #endif // (AUDIO_SIMULATION) || (AUDIO_L1_STANDALONE) | |
| 1849 | |
| 1850 #if (OP_RIV_AUDIO == 1) | |
| 1851 #ifndef _WINDOWS | |
| 1852 T_FFS_FD ffs_fd_1, ffs_fd_2; | |
| 1853 T_FFS_STAT stat; | |
| 1854 | |
| 1855 /* Nb of instruments in the .lsi file */ | |
| 1856 INT8 i = 0; | |
| 1857 INT16 instrument_id = -1; | |
| 1858 | |
| 1859 /* basic structure of the .lsi file */ | |
| 1860 T_AUDIO_MELODY_E2_ID_NAME file_E2; | |
| 1861 | |
| 1862 /**** Find the size of the .lsi file ****/ | |
| 1863 /* the .lsi file is stores into the flash */ | |
| 1864 /* check if the .lsi file exists */ | |
| 1865 | |
| 1866 ffs_fd_1 = ffs_open(p_audio_gbl_var->melody_E2_load_file_instruments.instrument_file_name, | |
| 1867 FFS_O_RDONLY ); | |
| 1868 | |
| 1869 if (ffs_fd_1 < EFFS_OK) | |
| 1870 { | |
| 1871 audio_melody_E2_error_trace(AUDIO_ENTITY_LOAD_FILE_INSTR_ERROR); | |
| 1872 return (0); | |
| 1873 } | |
| 1874 | |
| 1875 /* find the .mwa file */ | |
| 1876 while ( (i < p_audio_gbl_var->melody_E2_load_file_instruments.nb_of_instruments) && | |
| 1877 (customer_instrument_id != instrument_id)) | |
| 1878 { | |
| 1879 /* Load the instruments file from the FFS */ | |
| 1880 if ( (ffs_read ( ffs_fd_1, | |
| 1881 (&file_E2), | |
| 1882 (sizeof(INT8) + AUDIO_PATH_NAME_MAX_SIZE))) < EFFS_OK ) | |
| 1883 { | |
| 1884 AUDIO_SEND_TRACE("AUDIO MELODY E2: impossible to load the .lsi file", RV_TRACE_LEVEL_ERROR); | |
| 1885 | |
| 1886 /* Close the file */ | |
| 1887 ffs_close(ffs_fd_1); | |
| 1888 | |
| 1889 return (0); | |
| 1890 } | |
| 1891 | |
| 1892 instrument_id = file_E2.id; | |
| 1893 } | |
| 1894 /* Close the file */ | |
| 1895 ffs_close(ffs_fd_1); | |
| 1896 | |
| 1897 if (i == p_audio_gbl_var->melody_E2_load_file_instruments.nb_of_instruments) | |
| 1898 { | |
| 1899 AUDIO_SEND_TRACE("AUDIO MELODY E2: the instrument doesn't exist in the .lsi file", RV_TRACE_LEVEL_ERROR); | |
| 1900 | |
| 1901 return (0); | |
| 1902 } | |
| 1903 | |
| 1904 /* Open the corresponding .mwa file */ | |
| 1905 ffs_fd_2 = ffs_open( file_E2.melody_name, | |
| 1906 FFS_O_RDONLY ); | |
| 1907 if (ffs_fd_2 < EFFS_OK) | |
| 1908 { | |
| 1909 AUDIO_SEND_TRACE("AUDIO MELODY E2: impossible to open the .mwa file instruments", RV_TRACE_LEVEL_ERROR); | |
| 1910 | |
| 1911 /* Close the .mwa file */ | |
| 1912 ffs_close(ffs_fd_2); | |
| 1913 | |
| 1914 return (0); | |
| 1915 } | |
| 1916 | |
| 1917 /* download the instrument description */ | |
| 1918 ffs_stat(file_E2.melody_name,&stat); | |
| 1919 | |
| 1920 /* check if the file contains some data */ | |
| 1921 if (stat.size ==0) | |
| 1922 { | |
| 1923 /* the file doesn't contains data */ | |
| 1924 /* an error is generated */ | |
| 1925 audio_melody_E2_error_trace(AUDIO_ENTITY_FILE_ERROR); | |
| 1926 | |
| 1927 /* Close the .mwa file */ | |
| 1928 ffs_close(ffs_fd_2); | |
| 1929 | |
| 1930 return(0); | |
| 1931 } | |
| 1932 | |
| 1933 /* check if there's enough memory in the API for this instrument */ | |
| 1934 if (allowed_size < (stat.size>>1)) | |
| 1935 { | |
| 1936 /* an error is generated */ | |
| 1937 audio_melody_E2_error_trace(AUDIO_ERROR_INSTRUMENT_SIZE); | |
| 1938 | |
| 1939 /* Close the .mwa file */ | |
| 1940 ffs_close(ffs_fd_2); | |
| 1941 | |
| 1942 return(0); | |
| 1943 } | |
| 1944 | |
| 1945 ffs_read ( ffs_fd_2, | |
| 1946 (void *)API_address, | |
| 1947 stat.size ); | |
| 1948 | |
| 1949 /* Close the file */ | |
| 1950 ffs_close(ffs_fd_2); | |
| 1951 | |
| 1952 return((stat.size>>1)); | |
| 1953 #endif //_WINDOWS | |
| 1954 #endif // OP_RIV_AUDIO | |
| 1955 } | |
| 1956 #endif // MELODY_E2 | |
| 1957 | |
| 1958 #if (L1_EXT_AUDIO_MGT) | |
| 1959 /*-------------------------------------------------------*/ | |
| 1960 /* Cust_ext_audio_mgt_hisr */ | |
| 1961 /*-------------------------------------------------------*/ | |
| 1962 /* */ | |
| 1963 /* Parameters : none */ | |
| 1964 /* */ | |
| 1965 /* Return : none */ | |
| 1966 /* */ | |
| 1967 /* Description : */ | |
| 1968 /* handle the DMA interrupt in order to request a new */ | |
| 1969 /* buffer */ | |
| 1970 /* */ | |
| 1971 /*-------------------------------------------------------*/ | |
| 1972 void Cust_ext_audio_mgt_hisr() | |
| 1973 { | |
| 1974 UWORD8 error_id = 0; | |
| 1975 UWORD16 requested_size = l1a_l1s_com.stereopath_drv_task.parameters.frame_number*2; | |
| 1976 | |
| 1977 error_id = Cust_get_pointer((UWORD16 **)&l1a_l1s_com.stereopath_drv_task.parameters.source_buffer_address, | |
| 1978 &requested_size, | |
| 1979 l1s.ext_audio_mgt.session_id); | |
| 1980 | |
| 1981 } | |
| 1982 #endif | |
| 1983 | |
| 1984 #if 0 /* FreeCalypso: removing functions not present in TCS211 */ | |
| 1985 void l1a_bt_audio_noti_process() | |
| 1986 { | |
| 1987 UINT8 channel_id=0; | |
| 1988 void *p_message = NULL; //omaps00090550 | |
| 1989 T_RVF_MB_STATUS mb_status; //omaps00090550 | |
| 1990 T_AUDIO_DRIVER_SESSION *p_session; | |
| 1991 T_RV_RETURN *return_path; | |
| 1992 /* find active channel_id associated to session_id */ | |
| 1993 while ( (channel_id < AUDIO_DRIVER_MAX_CHANNEL)&& | |
| 1994 ((p_audio_gbl_var->audio_driver_session[channel_id].session_info.state == AUDIO_DRIVER_CHANNEL_WAIT_INIT)|| | |
| 1995 (p_audio_gbl_var->audio_driver_session[channel_id].session_req.session_id != AUDIO_EXT_MIDI_SESSION_ID)) ) | |
| 1996 { | |
| 1997 channel_id++; | |
| 1998 } | |
| 1999 /* get driver session */ | |
| 2000 | |
| 2001 p_session = &(p_audio_gbl_var->audio_driver_session[channel_id]); | |
| 2002 p_session->session_info.index_l1=1-p_session->session_info.index_l1; | |
| 2003 return_path = &(p_session->session_req.return_path); | |
| 2004 | |
| 2005 /* Translate the l1 message into the Riviera compliant message */ | |
| 2006 /* Allocate the Riviera buffer */ | |
| 2007 mb_status = rvf_get_buf ( p_audio_gbl_var->mb_external, | |
| 2008 sizeof (T_AUDIO_DRIVER_NOTIFICATION), | |
| 2009 (T_RVF_BUFFER **) (&p_message)); | |
| 2010 /* If insufficient resources, then report a memory error and abort. */ | |
| 2011 if (mb_status == RVF_RED) | |
| 2012 { | |
| 2013 /* the memory is insufficient to continue the non regression test */ | |
| 2014 AUDIO_SEND_TRACE("AUDIO entity has no memory for driver notification",RV_TRACE_LEVEL_ERROR); | |
| 2015 return; | |
| 2016 } | |
| 2017 | |
| 2018 /* Fill the message ID + parameters */ | |
| 2019 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->header.msg_id = AUDIO_DRIVER_NOTIFICATION_MSG; | |
| 2020 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->channel_id = channel_id; | |
| 2021 ((T_AUDIO_DRIVER_NOTIFICATION *)p_message)->p_buffer = NULL; | |
| 2022 | |
| 2023 /* send answer */ | |
| 2024 if (return_path->callback_func == NULL) | |
| 2025 rvf_send_msg (return_path->addr_id, p_message); | |
| 2026 else | |
| 2027 { | |
| 2028 (*return_path->callback_func)((void *)(p_message)); | |
| 2029 rvf_free_buf((T_RVF_BUFFER *)p_message); | |
| 2030 } | |
| 2031 | |
| 2032 } | |
| 2033 //NAVC start/stop/read energy | |
| 2034 // Parameters :d_navc_start_stop_read // 1=start,2=stop,3=read energy | |
| 2035 // UWORD32 d_navc_ctrl_status_energy_val | |
| 2036 // 0=action not performed,1=action perf, xxx-value | |
| 2037 // Description : this function will called to start/stop the NAVC and also to read the energy value during call | |
| 2038 //The bit map of d_navc_ctrl_status is as follows. | |
| 2039 // Bit 0: Start command: If 1 NAVC start. Set to 1 by MCU , Reset by DSp after module start Bit 1: Stop command : | |
| 2040 // If 1 NAVC stop. Set to 1 by MCU , Reset by DSP after module stop. Bit 15: Status: Set and reset by DSP. If 1 | |
| 2041 // module is active. If 0 module is not active. | |
| 2042 | |
| 2043 | |
| 2044 UWORD32 Cust_navc_ctrl_status(UWORD8 d_navc_start_stop_read) | |
| 2045 { | |
| 2046 UWORD32 d_navc_ctrl_status_energy_val=0; | |
| 2047 | |
| 2048 switch (d_navc_start_stop_read) | |
| 2049 { | |
| 2050 case 1: /* Start NAVC */ | |
| 2051 { | |
| 2052 if((l1s_dsp_com.dsp_ndb_ptr->d_navc_ctrl_status & 0x8000)==0)l1s_dsp_com.dsp_ndb_ptr->d_navc_ctrl_status |= 0x01; //check 15th bit and if not active-put the last bit to 1 to start | |
| 2053 d_navc_ctrl_status_energy_val=1; //indicates action performed | |
| 2054 } | |
| 2055 break; | |
| 2056 case 2: /* Stop NAVC */ | |
| 2057 { | |
| 2058 if((l1s_dsp_com.dsp_ndb_ptr->d_navc_ctrl_status & 0x8000)==0x8000)l1s_dsp_com.dsp_ndb_ptr->d_navc_ctrl_status |= 0x02; //check 15th bit and if active-put the last bit to 1 to start | |
| 2059 d_navc_ctrl_status_energy_val=1; //indicates action performed | |
| 2060 } | |
| 2061 break; | |
| 2062 case 3: /* NAVC read energy */ | |
| 2063 { | |
| 2064 if((l1s_dsp_com.dsp_ndb_ptr->d_navc_ctrl_status & 0x8000) == 0x8000)//check 15th bit and if active- read the value-- | |
| 2065 { | |
| 2066 d_navc_ctrl_status_energy_val = l1s_dsp_com.dsp_ndb_ptr->d_vad_noise_ene_ndb[0]; //MSB part | |
| 2067 d_navc_ctrl_status_energy_val= (d_navc_ctrl_status_energy_val<<16)|(l1s_dsp_com.dsp_ndb_ptr->d_vad_noise_ene_ndb[1]); //MSB <<16 | LSB - indicates the energy value | |
| 2068 } | |
| 2069 } | |
| 2070 break; | |
| 2071 /*intended fall through */ | |
| 2072 default: | |
| 2073 break; | |
| 2074 | |
| 2075 | |
| 2076 } | |
| 2077 #if (L1_NAVC_TRACE == 1) //to see the NAVC trace | |
| 2078 l1_trace_navc(d_navc_start_stop_read,d_navc_ctrl_status_energy_val); | |
| 2079 #endif | |
| 2080 | |
| 2081 return (d_navc_ctrl_status_energy_val); | |
| 2082 } | |
| 2083 #endif | |
| 2084 | |
| 2085 #endif // AUDIO_TASK== 1 |
