comparison src/cs/services/audio/audio_compatibilities.c @ 0:92470e5d0b9e

src: partial import from FC Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 15 May 2020 01:28:16 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:92470e5d0b9e
1 /****************************************************************************/
2 /* */
3 /* File Name: audio_compatibilities.c */
4 /* */
5 /* Purpose: This file contains all the functions used to manage the audio */
6 /* feature compatibilites */
7 /* */
8 /* Version 0.1 */
9 /* */
10 /* Date Modification */
11 /* ------------------------------------------------------------------------*/
12 /* 12 November 2001 Create */
13 /* */
14 /* Author Francois Mazard */
15 /* */
16 /* (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved*/
17 /****************************************************************************/
18
19 #include "rv/rv_defined_swe.h"
20
21 #ifdef RVM_AUDIO_MAIN_SWE
22 #ifndef _WINDOWS
23 #include "config/swconfig.cfg"
24 #include "config/sys.cfg"
25 #include "config/chipset.cfg"
26 #endif
27
28
29 #include "l1_confg.h"
30 #include "rvf/rvf_api.h"
31 #include "rv/rv_general.h"
32 #include "rvm/rvm_gen.h"
33 #include "audio/audio_api.h"
34 #include "audio/audio_env_i.h"
35 #include "audio/audio_ffs_i.h"
36 #include "audio/audio_structs_i.h"
37 #include "audio/audio_macro_i.h"
38 #include "rvf/rvf_target.h"
39 #include "audio/audio_const_i.h"
40 #include "audio/audio_var_i.h"
41 #include "audio/audio_error_hdlr_i.h"
42 #include "audio/audio_messages_i.h"
43 #include "audio/audio_compatibilities.h"
44 #include "ffs/ffs_api.h"
45
46 #if (L1_GTT == 1)
47 #include "tty/tty_i.h"
48 #endif
49 #if (L1_GTT == 1)
50 extern void tty_send_status (T_AUDIO_RET status, T_RV_RETURN return_path);
51 extern T_TTY_ENV_CTRL_BLK *tty_env_ctrl_blk_p;
52 #endif
53 /* Audio compatibilities table described in the annex of thespec S916 */
54 /* 0: uncompatible */
55 /* 1: compatible */
56 /* Note the melody is compatible with a melody: GAME mode */
57 #if (DSP == 36)
58 T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] =
59 {
60 /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI*/
61 /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1},
62 /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1},
63 /* Melody E1*/ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
64 /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
65 /* VM record*/ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
66 /* SR enroll*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
67 /* SR update*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
68 /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
69 /* Melody E2*/ {1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
70 /* TTY */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
71 /* VMA play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
72 /* VMA rec */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
73 /* MIDI */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
74 };
75 #endif /* DSP=36 */
76 #if (DSP == 34)
77 T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] =
78 {
79 /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI */
80 /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0},
81 /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0},
82 /* Melody E1*/ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
83 /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
84 /* VM record*/ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
85 /* SR enroll*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
86 /* SR update*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
87 /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
88 /* Melody E2*/ {1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
89 /* TTY */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
90 /* VMA play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
91 /* VMA rec */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
92 /* MIDI */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
93 };
94 #endif
95 #if ((DSP == 32) || (DSP == 33))
96 T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] =
97 {
98 /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI */
99 /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0},
100 /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
101 /* Melody E1 */ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
102 /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
103 /* VM record */ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
104 /* SR enroll */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
105 /* SR update */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
106 /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
107 /* Melody E2 */ {1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
108 /* TTY */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
109 /* VMA play */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
110 /* VMA rec */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
111 /* MIDI */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
112 };
113 #endif /* DSP=32 or 33 */
114
115 #if (DSP == 17)
116 T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] =
117 {
118 /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI */
119 /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0},
120 /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
121 /* Melody E1*/ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
122 /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
123 /* VM record*/ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
124 /* SR enroll*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
125 /* SR update*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
126 /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
127 /* Melody E2*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
128 /* TTY */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
129 /* VMA play */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
130 /* VMA rec */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
131 /* MIDI */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
132 };
133 #endif /* DSP=17 */
134
135 /********************************************************************************/
136 /* */
137 /* Function Name: audio_compatibilities_feature_id */
138 /* */
139 /* Purpose: Return the identifier of the feature to start. */
140 /* */
141 /* Input Parameters: */
142 /* start message from any audio features */
143 /* */
144 /* Output Parameters: */
145 /* identifier of the audio features or AUDIO_NO_START_MESSAGE if it */
146 /* isn't a starting message. */
147 /* */
148 /* Note: */
149 /* None. */
150 /* */
151 /* Revision History: */
152 /* None. */
153 /* */
154 /********************************************************************************/
155 INT8 audio_compatibilities_feature_id (T_RV_HDR *p_message)
156 {
157 switch(p_message->msg_id)
158 {
159 #if (KEYBEEP)
160 case AUDIO_KEYBEEP_START_REQ:
161 {
162 return (AUDIO_KEYBEEP_FEATURE);
163 }
164 #endif
165 #if (TONE)
166 case AUDIO_TONES_START_REQ:
167 {
168 return (AUDIO_TONES_FEATURE);
169 }
170 #endif
171 #if (MELODY_E1)
172 case AUDIO_MELODY_E1_START_REQ:
173 {
174 return (AUDIO_MELODY_E1_FEATURE);
175 }
176 #endif
177 #if (VOICE_MEMO)
178 case AUDIO_VM_PLAY_START_REQ:
179 {
180 return (AUDIO_VOICE_MEMO_PLAY_FEATURE);
181 }
182 case AUDIO_VM_RECORD_START_REQ:
183 {
184 return (AUDIO_VOICE_MEMO_RECORD_FEATURE);
185 }
186 #endif
187 #if (L1_VOICE_MEMO_AMR)
188 case AUDIO_VM_AMR_PLAY_FROM_FFS_START_REQ:
189 case AUDIO_VM_AMR_PLAY_FROM_RAM_START_REQ:
190 {
191 return (AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE);
192 }
193 case AUDIO_VM_AMR_RECORD_TO_FFS_START_REQ:
194 case AUDIO_VM_AMR_RECORD_TO_RAM_START_REQ:
195 {
196 return (AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE);
197 }
198 #endif
199 #if (SPEECH_RECO)
200 case AUDIO_SR_ENROLL_START_REQ:
201 {
202 return (AUDIO_SR_ENROLL_FEATURE);
203 }
204 case AUDIO_SR_UPDATE_START_REQ:
205 {
206 return (AUDIO_SR_UPDATE_FEATURE);
207 }
208 #endif
209 #if (MELODY_E2)
210 case AUDIO_MELODY_E2_START_REQ:
211 {
212 return (AUDIO_MELODY_E2_FEATURE);
213 }
214 #endif
215 #if (L1_GTT == 1)
216 case TTY_START_REQ:
217 {
218 return (AUDIO_TTY_FEATURE);
219 }
220 #endif
221 #if (L1_MIDI==1)
222 case AUDIO_MIDI_START_REQ:
223 {
224 return (AUDIO_MIDI_FEATURE);
225 }
226 #endif
227 default:
228 {
229 return (AUDIO_NO_START_MESSAGE);
230 }
231 }
232 }
233
234 /********************************************************************************/
235 /* */
236 /* Function Name: audio_compatibilities_feature_active */
237 /* */
238 /* Purpose: Return the list of the active feature. */
239 /* */
240 /* Input Parameters: */
241 /* An empty table. */
242 /* */
243 /* Output Parameters: */
244 /* List of the current audio feature actif. */
245 /* */
246 /* Note: */
247 /* None. */
248 /* */
249 /* Revision History: */
250 /* None. */
251 /* */
252 /********************************************************************************/
253 void audio_compatibilities_feature_active (T_AUDIO_ACTIVE_FEATURE *p_audio_feature_active)
254 {
255 #if (KEYBEEP)
256 p_audio_feature_active->feature[AUDIO_KEYBEEP_FEATURE] =
257 (p_audio_gbl_var->keybeep.state > AUDIO_KEYBEEP_IDLE);
258 #else
259 p_audio_feature_active->feature[AUDIO_KEYBEEP_FEATURE] = 0;
260 #endif
261
262 #if (TONE)
263 p_audio_feature_active->feature[AUDIO_TONES_FEATURE] =
264 (p_audio_gbl_var->tones.state > AUDIO_TONES_IDLE);
265 #else
266 p_audio_feature_active->feature[AUDIO_TONES_FEATURE] = 0;
267 #endif
268
269 #if (MELODY_E1)
270 p_audio_feature_active->feature[AUDIO_MELODY_E1_FEATURE] =
271 ((p_audio_gbl_var->melody_E1_0.state > AUDIO_MELODY_E1_IDLE) ||
272 (p_audio_gbl_var->melody_E1_1.state > AUDIO_MELODY_E1_IDLE));
273 #else
274 p_audio_feature_active->feature[AUDIO_MELODY_E1_FEATURE] = 0;
275 #endif
276
277 #if (VOICE_MEMO)
278 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_PLAY_FEATURE] =
279 (p_audio_gbl_var->vm_play.state > AUDIO_VM_PLAY_IDLE);
280
281 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_RECORD_FEATURE] =
282 (p_audio_gbl_var->vm_record.state > AUDIO_VM_RECORD_IDLE);
283 #else
284 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_PLAY_FEATURE] = 0;
285 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_RECORD_FEATURE] = 0;
286 #endif
287 #if (L1_VOICE_MEMO_AMR) && (AUDIO_MEM_MANAGER)
288 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE] =
289 (p_audio_gbl_var->audio_vm_amr_play.state > AUDIO_IDLE);
290
291 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE] =
292 (p_audio_gbl_var->audio_vm_amr_record.state > AUDIO_IDLE);
293 #else
294 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE] = 0;
295 p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE] = 0;
296 #endif
297
298 #if (SPEECH_RECO)
299 p_audio_feature_active->feature[AUDIO_SR_ENROLL_FEATURE] =
300 (p_audio_gbl_var->speech_reco.sr_enroll.state > AUDIO_SR_ENROLL_IDLE);
301 p_audio_feature_active->feature[AUDIO_SR_UPDATE_FEATURE] =
302 (p_audio_gbl_var->speech_reco.sr_update.state > AUDIO_SR_UPDATE_IDLE);
303 p_audio_feature_active->feature[AUDIO_SR_RECO_FEATURE] =
304 (p_audio_gbl_var->speech_reco.sr_reco.state > AUDIO_SR_RECO_IDLE);
305 #else
306 p_audio_feature_active->feature[AUDIO_SR_ENROLL_FEATURE] = 0;
307 p_audio_feature_active->feature[AUDIO_SR_UPDATE_FEATURE] = 0;
308 p_audio_feature_active->feature[AUDIO_SR_RECO_FEATURE] = 0;
309 #endif
310
311 #if (MELODY_E2)
312 p_audio_feature_active->feature[AUDIO_MELODY_E2_FEATURE] =
313 ((p_audio_gbl_var->melody_E2_0.state > AUDIO_MELODY_E2_IDLE) ||
314 (p_audio_gbl_var->melody_E2_1.state > AUDIO_MELODY_E2_IDLE));
315 #else
316 p_audio_feature_active->feature[AUDIO_MELODY_E2_FEATURE] = 0;
317 #endif
318
319 #if (L1_GTT == 1)
320 p_audio_feature_active->feature[AUDIO_TTY_FEATURE] =
321 (tty_env_ctrl_blk_p->state > TTY_IDLE);
322 #else
323 p_audio_feature_active->feature[AUDIO_TTY_FEATURE] = 0;
324 #endif
325
326 #if (L1_MIDI==1)
327 p_audio_feature_active->feature[AUDIO_MIDI_FEATURE] =
328 (p_audio_gbl_var->midi.state>AUDIO_IDLE);
329 #else
330 p_audio_feature_active->feature[AUDIO_MIDI_FEATURE] = 0;
331 #endif
332 }
333
334 /********************************************************************************/
335 /* */
336 /* Function Name: audio_compatibilities_manager */
337 /* */
338 /* Purpose: manage the compatibilities between the audio fatures. */
339 /* */
340 /* Input Parameters: */
341 /* The message of the start request. */
342 /* */
343 /* Output Parameters: */
344 /* Flag to indicate if the task can be start or not. */
345 /* Note: this manager send automatically the status message */
346 /* corresponding to the audio feature. */
347 /* */
348 /* Note: */
349 /* None. */
350 /* */
351 /* Revision History: */
352 /* None. */
353 /* */
354 /********************************************************************************/
355 BOOLEAN audio_compatibilities_manager (T_RV_HDR *p_message)
356 {
357 T_AUDIO_ACTIVE_FEATURE active_list;
358 INT8 feature_to_start, i;
359 BOOLEAN feature_can_start = TRUE;
360
361 /* Find the features to start */
362 feature_to_start = audio_compatibilities_feature_id(p_message);
363
364 /* if the message is a start message */
365 if (feature_to_start != AUDIO_NO_START_MESSAGE)
366 {
367 /* List the current active feature */
368 audio_compatibilities_feature_active(&active_list);
369
370 i = -1;
371 while ((feature_can_start) &&
372 (++i < AUDIO_NUMBER_OF_FEATURES))
373 {
374 feature_can_start = (!(active_list.feature[i]) |
375 audio_feature_compatibilities_table[feature_to_start].compatibilities_flag[i]);
376 }
377
378 /* send the status message if the feature can't start */
379 if (feature_can_start == FALSE)
380 {
381 switch (feature_to_start)
382 {
383 #if (KEYBEEP)
384 case AUDIO_KEYBEEP_FEATURE:
385 {
386 audio_keybeep_send_status (AUDIO_ERROR, ((T_AUDIO_KEYBEEP_START *)(p_message))->return_path);
387 AUDIO_SEND_TRACE(" AUDIO ERROR: Keybeep isn't compatible with a running task",
388 RV_TRACE_LEVEL_ERROR);
389 p_audio_gbl_var->message_processed = TRUE;
390 break;
391 }
392 #endif
393 #if (TONE)
394 case AUDIO_TONES_FEATURE:
395 {
396 audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_START *)(p_message))->return_path);
397 AUDIO_SEND_TRACE(" AUDIO ERROR: Tone isn't compatible with a running task",
398 RV_TRACE_LEVEL_ERROR);
399 p_audio_gbl_var->message_processed = TRUE;
400 break;
401 }
402 #endif
403 #if (VOICE_MEMO)
404 case AUDIO_VOICE_MEMO_PLAY_FEATURE:
405 {
406 /* close the file opened */
407 #ifndef _WINDOWS
408 if ( ffs_close(((T_AUDIO_VM_PLAY_START *)(p_message))->audio_ffs_fd) != EFFS_OK )
409 {
410 audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE);
411 }
412 #endif
413 audio_vm_play_send_status (AUDIO_ERROR, ((T_AUDIO_VM_PLAY_START *)(p_message))->return_path);
414 AUDIO_SEND_TRACE(" AUDIO ERROR: VM play isn't compatible with a running task",
415 RV_TRACE_LEVEL_ERROR);
416 p_audio_gbl_var->message_processed = TRUE;
417 break;
418 }
419 case AUDIO_VOICE_MEMO_RECORD_FEATURE:
420 {
421 /* close the file opened */
422 #ifndef _WINDOWS
423 if ( ffs_close(((T_AUDIO_VM_RECORD_START *)(p_message))->audio_ffs_fd) != EFFS_OK )
424 {
425 audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE);
426 }
427 #endif
428 audio_vm_record_send_status (AUDIO_ERROR, 0, ((T_AUDIO_VM_RECORD_START *)(p_message))->return_path);
429 AUDIO_SEND_TRACE(" AUDIO ERROR: VM record isn't compatible with a running task",
430 RV_TRACE_LEVEL_ERROR);
431 p_audio_gbl_var->message_processed = TRUE;
432 break;
433 }
434 #endif
435 #if (L1_VOICE_MEMO_AMR)
436 case AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE:
437 {
438 switch (p_message->msg_id)
439 {
440 #if (AUDIO_NEW_FFS_MANAGER)
441 case AUDIO_VM_AMR_PLAY_FROM_FFS_START_REQ:
442 /* close the file opened */
443 if ( ffs_close(((T_AUDIO_VM_AMR_PLAY_FROM_FFS_START *)p_message)->audio_ffs_fd) != EFFS_OK )
444 {
445 audio_new_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE);
446 }
447 audio_vm_amr_play_send_status (AUDIO_ERROR, ((T_AUDIO_VM_AMR_PLAY_FROM_FFS_START *)p_message)->return_path);
448 break;
449 #endif
450 #if (AUDIO_RAM_MANAGER)
451 case AUDIO_VM_AMR_PLAY_FROM_RAM_START_REQ:
452 audio_vm_amr_play_send_status (AUDIO_ERROR, ((T_AUDIO_VM_AMR_PLAY_FROM_RAM_START *)p_message)->return_path);
453 break;
454 #endif
455 }
456 #if (AUDIO_MEM_MANAGER)
457 AUDIO_SEND_TRACE(" AUDIO ERROR: VM AMR play isn't compatible with a running task",
458 RV_TRACE_LEVEL_ERROR);
459 #endif
460 p_audio_gbl_var->message_processed = TRUE;
461 }
462 break;
463 case AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE:
464 {
465 switch (p_message->msg_id)
466 {
467 #if (AUDIO_NEW_FFS_MANAGER)
468 case AUDIO_VM_AMR_RECORD_TO_FFS_START_REQ:
469 /* close the file opened */
470 if ( ffs_close(((T_AUDIO_VM_AMR_RECORD_TO_FFS_START *)p_message)->audio_ffs_fd) != EFFS_OK )
471 {
472 audio_new_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE);
473 }
474 audio_vm_amr_record_send_status (AUDIO_ERROR, 0, ((T_AUDIO_VM_AMR_RECORD_TO_FFS_START *)p_message)->return_path);
475 break;
476 #endif
477 #if (AUDIO_RAM_MANAGER)
478 case AUDIO_VM_AMR_RECORD_TO_RAM_START_REQ:
479 audio_vm_amr_record_send_status (AUDIO_ERROR, 0, ((T_AUDIO_VM_AMR_RECORD_TO_RAM_START *)p_message)->return_path);
480 break;
481 #endif
482 }
483 #if (AUDIO_MEM_MANAGER)
484 AUDIO_SEND_TRACE(" AUDIO ERROR: VM AMR record isn't compatible with a running task",
485 RV_TRACE_LEVEL_ERROR);
486 #endif
487 p_audio_gbl_var->message_processed = TRUE;
488 }
489 break;
490 #endif
491 #if (MELODY_E1)
492 case AUDIO_MELODY_E1_FEATURE:
493 {
494 /* close the file opened */
495 #ifndef _WINDOWS
496 if ( ffs_close(((T_AUDIO_MELODY_E1_START *)(p_message))->audio_ffs_fd) != EFFS_OK )
497 {
498 audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE);
499 }
500 #endif
501 audio_melody_E1_send_status (AUDIO_ERROR, ((T_AUDIO_MELODY_E1_START *)(p_message))->return_path);
502 AUDIO_SEND_TRACE(" AUDIO ERROR: MELODY E1 isn't compatible with a running task",
503 RV_TRACE_LEVEL_ERROR);
504 p_audio_gbl_var->message_processed = TRUE;
505 break;
506 }
507 #endif
508 #if (SPEECH_RECO)
509 case AUDIO_SR_ENROLL_FEATURE:
510 {
511 /* close the model file */
512 /* close the voice sample file if it exists*/
513 #ifndef _WINDOWS
514 ffs_close(((T_AUDIO_SR_ENROLL_START *)(p_message))->sr_ffs_fd);
515 if ( ((T_AUDIO_SR_ENROLL_START *)(p_message))->voice_ffs_fd != AUDIO_SR_NO_RECORD_SPEECH)
516 {
517 ffs_close(((T_AUDIO_SR_ENROLL_START *)(p_message))->voice_ffs_fd);
518 }
519 #endif
520
521 /* event error - send an error message*/
522 audio_sr_enroll_send_status (AUDIO_ERROR,
523 ((T_AUDIO_SR_ENROLL_START *)(p_message))->return_path);
524 AUDIO_SEND_TRACE(" AUDIO ERROR: SR Enroll isn't compatible with a running task",
525 RV_TRACE_LEVEL_ERROR);
526 p_audio_gbl_var->message_processed = TRUE;
527 break;
528 }
529 case AUDIO_SR_UPDATE_FEATURE:
530 {
531 /* Free the database buffer */
532 rvf_free_buf( (T_RVF_BUFFER *)(((T_AUDIO_SR_UPDATE_START *)(p_message))->p_database) );
533
534 /* event error - send an error message*/
535 audio_sr_update_send_status (AUDIO_ERROR,
536 ((T_AUDIO_SR_UPDATE_START *)(p_message))->return_path);
537 AUDIO_SEND_TRACE(" AUDIO ERROR: SR upate isn't compatible with a running task",
538 RV_TRACE_LEVEL_ERROR);
539 p_audio_gbl_var->message_processed = TRUE;
540 break;
541 }
542 case AUDIO_SR_RECO_FEATURE:
543 {
544 /* Free the database buffer */
545 rvf_free_buf( (T_RVF_BUFFER *)(((T_AUDIO_SR_RECO_START *)(p_message))->p_database) );
546
547 /* event error - send an error message*/
548 audio_sr_reco_send_status (AUDIO_ERROR, 0,
549 ((T_AUDIO_SR_RECO_START *)(p_message))->return_path);
550 AUDIO_SEND_TRACE(" AUDIO ERROR: SR reco isn't compatible with a running task",
551 RV_TRACE_LEVEL_ERROR);
552 p_audio_gbl_var->message_processed = TRUE;
553 break;
554 }
555 #endif
556 #if (MELODY_E2)
557 case AUDIO_MELODY_E2_FEATURE:
558 {
559 /* close the file opened */
560 #ifndef _WINDOWS
561 if ( ffs_close(((T_AUDIO_MELODY_E2_START *)(p_message))->audio_E2_ffs_fd) != EFFS_OK )
562 {
563 audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE);
564 }
565 #endif
566 audio_melody_E2_send_status (AUDIO_ERROR, ((T_AUDIO_MELODY_E2_START *)(p_message))->return_path);
567 AUDIO_SEND_TRACE(" AUDIO ERROR: MELODY E2 isn't compatible with a running task",
568 RV_TRACE_LEVEL_ERROR);
569 p_audio_gbl_var->message_processed = TRUE;
570 break;
571 }
572 #endif
573 #if (L1_GTT == 1)
574 case AUDIO_TTY_FEATURE:
575 {
576 tty_send_status (AUDIO_ERROR, ((T_TTY_START *)(p_message))->return_path);
577 AUDIO_SEND_TRACE(" AUDIO ERROR: TTY isn't compatible with a running task",
578 RV_TRACE_LEVEL_ERROR);
579 p_audio_gbl_var->message_processed = TRUE;
580 break;
581 }
582 #endif
583 #if (L1_MIDI==1)
584 case AUDIO_MIDI_FEATURE:
585 {
586 audio_midi_send_status(AUDIO_ERROR,&((T_AUDIO_MIDI_START *)p_message)->return_path);
587 AUDIO_SEND_TRACE(" AUDIO ERROR: MIDI isn't compatible with a running task",
588 RV_TRACE_LEVEL_ERROR);
589 p_audio_gbl_var->message_processed = TRUE;
590 break;
591 }
592 #endif
593 }
594 } /* feature_can_start == FALSE */
595 }
596 return (feature_can_start);
597 }
598 #endif /* RVM_AUDIO_MAIN_SWE */