FreeCalypso > hg > fc-magnetite
diff src/cs/services/Audio/audio_compatibilities.c @ 0:945cf7f506b2
src/cs: chipsetsw import from tcs211-fcmodem
binary blobs and LCD demo files have been excluded,
all line endings are LF only
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Sep 2016 22:50:11 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/services/Audio/audio_compatibilities.c Sun Sep 25 22:50:11 2016 +0000 @@ -0,0 +1,598 @@ +/****************************************************************************/ +/* */ +/* File Name: audio_compatibilities.c */ +/* */ +/* Purpose: This file contains all the functions used to manage the audio */ +/* feature compatibilites */ +/* */ +/* Version 0.1 */ +/* */ +/* Date Modification */ +/* ------------------------------------------------------------------------*/ +/* 12 November 2001 Create */ +/* */ +/* Author Francois Mazard */ +/* */ +/* (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved*/ +/****************************************************************************/ + +#include "rv/rv_defined_swe.h" + +#ifdef RVM_AUDIO_MAIN_SWE + #ifndef _WINDOWS + #include "config/swconfig.cfg" + #include "config/sys.cfg" + #include "config/chipset.cfg" + #endif + + + #include "l1_confg.h" + #include "rvf/rvf_api.h" + #include "rv/rv_general.h" + #include "rvm/rvm_gen.h" + #include "audio/audio_api.h" + #include "audio/audio_env_i.h" + #include "audio/audio_ffs_i.h" + #include "audio/audio_structs_i.h" + #include "audio/audio_macro_i.h" + #include "rvf/rvf_target.h" + #include "audio/audio_const_i.h" + #include "audio/audio_var_i.h" + #include "audio/audio_error_hdlr_i.h" + #include "audio/audio_messages_i.h" + #include "audio/audio_compatibilities.h" + #include "ffs/ffs_api.h" + + #if (L1_GTT == 1) + #include "tty/tty_i.h" + #endif + #if (L1_GTT == 1) + extern void tty_send_status (T_AUDIO_RET status, T_RV_RETURN return_path); + extern T_TTY_ENV_CTRL_BLK *tty_env_ctrl_blk_p; + #endif + /* Audio compatibilities table described in the annex of thespec S916 */ + /* 0: uncompatible */ + /* 1: compatible */ + /* Note the melody is compatible with a melody: GAME mode */ + #if (DSP == 36) + T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] = + { + /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI*/ + /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1}, + /* Melody E1*/ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM record*/ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR enroll*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR update*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* Melody E2*/ {1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + /* TTY */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA rec */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* MIDI */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }; + #endif /* DSP=36 */ + #if (DSP == 34) + T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] = + { + /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI */ + /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + /* Melody E1*/ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM record*/ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR enroll*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR update*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* Melody E2*/ {1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + /* TTY */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA rec */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* MIDI */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }; + #endif + #if ((DSP == 32) || (DSP == 33)) + T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] = + { + /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI */ + /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0}, + /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* Melody E1 */ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM record */ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR enroll */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR update */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* Melody E2 */ {1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + /* TTY */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA play */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA rec */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* MIDI */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }; + #endif /* DSP=32 or 33 */ + + #if (DSP == 17) + T_AUDIO_COMPATIBILITES audio_feature_compatibilities_table[AUDIO_NUMBER_OF_FEATURES] = + { + /* keybeep Tones Melody E1 VM play VM record enroll update reco MelodyE2 TTY VMA pl VMA rec MIDI */ + /* Keybeep */ {0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0}, + /* Tone */ {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* Melody E1*/ {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM play */ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VM record*/ {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR enroll*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR update*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* SR reco */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* Melody E2*/ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* TTY */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA play */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* VMA rec */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + /* MIDI */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }; + #endif /* DSP=17 */ + + /********************************************************************************/ + /* */ + /* Function Name: audio_compatibilities_feature_id */ + /* */ + /* Purpose: Return the identifier of the feature to start. */ + /* */ + /* Input Parameters: */ + /* start message from any audio features */ + /* */ + /* Output Parameters: */ + /* identifier of the audio features or AUDIO_NO_START_MESSAGE if it */ + /* isn't a starting message. */ + /* */ + /* Note: */ + /* None. */ + /* */ + /* Revision History: */ + /* None. */ + /* */ + /********************************************************************************/ + INT8 audio_compatibilities_feature_id (T_RV_HDR *p_message) + { + switch(p_message->msg_id) + { + #if (KEYBEEP) + case AUDIO_KEYBEEP_START_REQ: + { + return (AUDIO_KEYBEEP_FEATURE); + } + #endif + #if (TONE) + case AUDIO_TONES_START_REQ: + { + return (AUDIO_TONES_FEATURE); + } + #endif + #if (MELODY_E1) + case AUDIO_MELODY_E1_START_REQ: + { + return (AUDIO_MELODY_E1_FEATURE); + } + #endif + #if (VOICE_MEMO) + case AUDIO_VM_PLAY_START_REQ: + { + return (AUDIO_VOICE_MEMO_PLAY_FEATURE); + } + case AUDIO_VM_RECORD_START_REQ: + { + return (AUDIO_VOICE_MEMO_RECORD_FEATURE); + } + #endif + #if (L1_VOICE_MEMO_AMR) + case AUDIO_VM_AMR_PLAY_FROM_FFS_START_REQ: + case AUDIO_VM_AMR_PLAY_FROM_RAM_START_REQ: + { + return (AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE); + } + case AUDIO_VM_AMR_RECORD_TO_FFS_START_REQ: + case AUDIO_VM_AMR_RECORD_TO_RAM_START_REQ: + { + return (AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE); + } + #endif + #if (SPEECH_RECO) + case AUDIO_SR_ENROLL_START_REQ: + { + return (AUDIO_SR_ENROLL_FEATURE); + } + case AUDIO_SR_UPDATE_START_REQ: + { + return (AUDIO_SR_UPDATE_FEATURE); + } + #endif + #if (MELODY_E2) + case AUDIO_MELODY_E2_START_REQ: + { + return (AUDIO_MELODY_E2_FEATURE); + } + #endif + #if (L1_GTT == 1) + case TTY_START_REQ: + { + return (AUDIO_TTY_FEATURE); + } + #endif + #if (L1_MIDI==1) + case AUDIO_MIDI_START_REQ: + { + return (AUDIO_MIDI_FEATURE); + } + #endif + default: + { + return (AUDIO_NO_START_MESSAGE); + } + } + } + + /********************************************************************************/ + /* */ + /* Function Name: audio_compatibilities_feature_active */ + /* */ + /* Purpose: Return the list of the active feature. */ + /* */ + /* Input Parameters: */ + /* An empty table. */ + /* */ + /* Output Parameters: */ + /* List of the current audio feature actif. */ + /* */ + /* Note: */ + /* None. */ + /* */ + /* Revision History: */ + /* None. */ + /* */ + /********************************************************************************/ + void audio_compatibilities_feature_active (T_AUDIO_ACTIVE_FEATURE *p_audio_feature_active) + { + #if (KEYBEEP) + p_audio_feature_active->feature[AUDIO_KEYBEEP_FEATURE] = + (p_audio_gbl_var->keybeep.state > AUDIO_KEYBEEP_IDLE); + #else + p_audio_feature_active->feature[AUDIO_KEYBEEP_FEATURE] = 0; + #endif + + #if (TONE) + p_audio_feature_active->feature[AUDIO_TONES_FEATURE] = + (p_audio_gbl_var->tones.state > AUDIO_TONES_IDLE); + #else + p_audio_feature_active->feature[AUDIO_TONES_FEATURE] = 0; + #endif + + #if (MELODY_E1) + p_audio_feature_active->feature[AUDIO_MELODY_E1_FEATURE] = + ((p_audio_gbl_var->melody_E1_0.state > AUDIO_MELODY_E1_IDLE) || + (p_audio_gbl_var->melody_E1_1.state > AUDIO_MELODY_E1_IDLE)); + #else + p_audio_feature_active->feature[AUDIO_MELODY_E1_FEATURE] = 0; + #endif + + #if (VOICE_MEMO) + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_PLAY_FEATURE] = + (p_audio_gbl_var->vm_play.state > AUDIO_VM_PLAY_IDLE); + + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_RECORD_FEATURE] = + (p_audio_gbl_var->vm_record.state > AUDIO_VM_RECORD_IDLE); + #else + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_PLAY_FEATURE] = 0; + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_RECORD_FEATURE] = 0; + #endif + #if (L1_VOICE_MEMO_AMR) && (AUDIO_MEM_MANAGER) + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE] = + (p_audio_gbl_var->audio_vm_amr_play.state > AUDIO_IDLE); + + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE] = + (p_audio_gbl_var->audio_vm_amr_record.state > AUDIO_IDLE); + #else + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE] = 0; + p_audio_feature_active->feature[AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE] = 0; + #endif + + #if (SPEECH_RECO) + p_audio_feature_active->feature[AUDIO_SR_ENROLL_FEATURE] = + (p_audio_gbl_var->speech_reco.sr_enroll.state > AUDIO_SR_ENROLL_IDLE); + p_audio_feature_active->feature[AUDIO_SR_UPDATE_FEATURE] = + (p_audio_gbl_var->speech_reco.sr_update.state > AUDIO_SR_UPDATE_IDLE); + p_audio_feature_active->feature[AUDIO_SR_RECO_FEATURE] = + (p_audio_gbl_var->speech_reco.sr_reco.state > AUDIO_SR_RECO_IDLE); + #else + p_audio_feature_active->feature[AUDIO_SR_ENROLL_FEATURE] = 0; + p_audio_feature_active->feature[AUDIO_SR_UPDATE_FEATURE] = 0; + p_audio_feature_active->feature[AUDIO_SR_RECO_FEATURE] = 0; + #endif + + #if (MELODY_E2) + p_audio_feature_active->feature[AUDIO_MELODY_E2_FEATURE] = + ((p_audio_gbl_var->melody_E2_0.state > AUDIO_MELODY_E2_IDLE) || + (p_audio_gbl_var->melody_E2_1.state > AUDIO_MELODY_E2_IDLE)); + #else + p_audio_feature_active->feature[AUDIO_MELODY_E2_FEATURE] = 0; + #endif + + #if (L1_GTT == 1) + p_audio_feature_active->feature[AUDIO_TTY_FEATURE] = + (tty_env_ctrl_blk_p->state > TTY_IDLE); + #else + p_audio_feature_active->feature[AUDIO_TTY_FEATURE] = 0; + #endif + + #if (L1_MIDI==1) + p_audio_feature_active->feature[AUDIO_MIDI_FEATURE] = + (p_audio_gbl_var->midi.state>AUDIO_IDLE); + #else + p_audio_feature_active->feature[AUDIO_MIDI_FEATURE] = 0; + #endif + } + + /********************************************************************************/ + /* */ + /* Function Name: audio_compatibilities_manager */ + /* */ + /* Purpose: manage the compatibilities between the audio fatures. */ + /* */ + /* Input Parameters: */ + /* The message of the start request. */ + /* */ + /* Output Parameters: */ + /* Flag to indicate if the task can be start or not. */ + /* Note: this manager send automatically the status message */ + /* corresponding to the audio feature. */ + /* */ + /* Note: */ + /* None. */ + /* */ + /* Revision History: */ + /* None. */ + /* */ + /********************************************************************************/ + BOOLEAN audio_compatibilities_manager (T_RV_HDR *p_message) + { + T_AUDIO_ACTIVE_FEATURE active_list; + INT8 feature_to_start, i; + BOOLEAN feature_can_start = TRUE; + + /* Find the features to start */ + feature_to_start = audio_compatibilities_feature_id(p_message); + + /* if the message is a start message */ + if (feature_to_start != AUDIO_NO_START_MESSAGE) + { + /* List the current active feature */ + audio_compatibilities_feature_active(&active_list); + + i = -1; + while ((feature_can_start) && + (++i < AUDIO_NUMBER_OF_FEATURES)) + { + feature_can_start = (!(active_list.feature[i]) | + audio_feature_compatibilities_table[feature_to_start].compatibilities_flag[i]); + } + + /* send the status message if the feature can't start */ + if (feature_can_start == FALSE) + { + switch (feature_to_start) + { + #if (KEYBEEP) + case AUDIO_KEYBEEP_FEATURE: + { + audio_keybeep_send_status (AUDIO_ERROR, ((T_AUDIO_KEYBEEP_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: Keybeep isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + #if (TONE) + case AUDIO_TONES_FEATURE: + { + audio_tones_send_status (AUDIO_ERROR, ((T_AUDIO_TONES_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: Tone isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + #if (VOICE_MEMO) + case AUDIO_VOICE_MEMO_PLAY_FEATURE: + { + /* close the file opened */ + #ifndef _WINDOWS + if ( ffs_close(((T_AUDIO_VM_PLAY_START *)(p_message))->audio_ffs_fd) != EFFS_OK ) + { + audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE); + } + #endif + audio_vm_play_send_status (AUDIO_ERROR, ((T_AUDIO_VM_PLAY_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: VM play isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + case AUDIO_VOICE_MEMO_RECORD_FEATURE: + { + /* close the file opened */ + #ifndef _WINDOWS + if ( ffs_close(((T_AUDIO_VM_RECORD_START *)(p_message))->audio_ffs_fd) != EFFS_OK ) + { + audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE); + } + #endif + audio_vm_record_send_status (AUDIO_ERROR, 0, ((T_AUDIO_VM_RECORD_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: VM record isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + #if (L1_VOICE_MEMO_AMR) + case AUDIO_VOICE_MEMO_AMR_PLAY_FEATURE: + { + switch (p_message->msg_id) + { + #if (AUDIO_NEW_FFS_MANAGER) + case AUDIO_VM_AMR_PLAY_FROM_FFS_START_REQ: + /* close the file opened */ + if ( ffs_close(((T_AUDIO_VM_AMR_PLAY_FROM_FFS_START *)p_message)->audio_ffs_fd) != EFFS_OK ) + { + audio_new_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE); + } + audio_vm_amr_play_send_status (AUDIO_ERROR, ((T_AUDIO_VM_AMR_PLAY_FROM_FFS_START *)p_message)->return_path); + break; + #endif + #if (AUDIO_RAM_MANAGER) + case AUDIO_VM_AMR_PLAY_FROM_RAM_START_REQ: + audio_vm_amr_play_send_status (AUDIO_ERROR, ((T_AUDIO_VM_AMR_PLAY_FROM_RAM_START *)p_message)->return_path); + break; + #endif + } + #if (AUDIO_MEM_MANAGER) + AUDIO_SEND_TRACE(" AUDIO ERROR: VM AMR play isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + #endif + p_audio_gbl_var->message_processed = TRUE; + } + break; + case AUDIO_VOICE_MEMO_AMR_RECORD_FEATURE: + { + switch (p_message->msg_id) + { + #if (AUDIO_NEW_FFS_MANAGER) + case AUDIO_VM_AMR_RECORD_TO_FFS_START_REQ: + /* close the file opened */ + if ( ffs_close(((T_AUDIO_VM_AMR_RECORD_TO_FFS_START *)p_message)->audio_ffs_fd) != EFFS_OK ) + { + audio_new_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE); + } + audio_vm_amr_record_send_status (AUDIO_ERROR, 0, ((T_AUDIO_VM_AMR_RECORD_TO_FFS_START *)p_message)->return_path); + break; + #endif + #if (AUDIO_RAM_MANAGER) + case AUDIO_VM_AMR_RECORD_TO_RAM_START_REQ: + audio_vm_amr_record_send_status (AUDIO_ERROR, 0, ((T_AUDIO_VM_AMR_RECORD_TO_RAM_START *)p_message)->return_path); + break; + #endif + } + #if (AUDIO_MEM_MANAGER) + AUDIO_SEND_TRACE(" AUDIO ERROR: VM AMR record isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + #endif + p_audio_gbl_var->message_processed = TRUE; + } + break; + #endif + #if (MELODY_E1) + case AUDIO_MELODY_E1_FEATURE: + { + /* close the file opened */ + #ifndef _WINDOWS + if ( ffs_close(((T_AUDIO_MELODY_E1_START *)(p_message))->audio_ffs_fd) != EFFS_OK ) + { + audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE); + } + #endif + audio_melody_E1_send_status (AUDIO_ERROR, ((T_AUDIO_MELODY_E1_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: MELODY E1 isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + #if (SPEECH_RECO) + case AUDIO_SR_ENROLL_FEATURE: + { + /* close the model file */ + /* close the voice sample file if it exists*/ + #ifndef _WINDOWS + ffs_close(((T_AUDIO_SR_ENROLL_START *)(p_message))->sr_ffs_fd); + if ( ((T_AUDIO_SR_ENROLL_START *)(p_message))->voice_ffs_fd != AUDIO_SR_NO_RECORD_SPEECH) + { + ffs_close(((T_AUDIO_SR_ENROLL_START *)(p_message))->voice_ffs_fd); + } + #endif + + /* event error - send an error message*/ + audio_sr_enroll_send_status (AUDIO_ERROR, + ((T_AUDIO_SR_ENROLL_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: SR Enroll isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + case AUDIO_SR_UPDATE_FEATURE: + { + /* Free the database buffer */ + rvf_free_buf( (T_RVF_BUFFER *)(((T_AUDIO_SR_UPDATE_START *)(p_message))->p_database) ); + + /* event error - send an error message*/ + audio_sr_update_send_status (AUDIO_ERROR, + ((T_AUDIO_SR_UPDATE_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: SR upate isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + case AUDIO_SR_RECO_FEATURE: + { + /* Free the database buffer */ + rvf_free_buf( (T_RVF_BUFFER *)(((T_AUDIO_SR_RECO_START *)(p_message))->p_database) ); + + /* event error - send an error message*/ + audio_sr_reco_send_status (AUDIO_ERROR, 0, + ((T_AUDIO_SR_RECO_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: SR reco isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + #if (MELODY_E2) + case AUDIO_MELODY_E2_FEATURE: + { + /* close the file opened */ + #ifndef _WINDOWS + if ( ffs_close(((T_AUDIO_MELODY_E2_START *)(p_message))->audio_E2_ffs_fd) != EFFS_OK ) + { + audio_ffs_error_trace(AUDIO_ENTITY_FILE_NO_CLOSE); + } + #endif + audio_melody_E2_send_status (AUDIO_ERROR, ((T_AUDIO_MELODY_E2_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: MELODY E2 isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + #if (L1_GTT == 1) + case AUDIO_TTY_FEATURE: + { + tty_send_status (AUDIO_ERROR, ((T_TTY_START *)(p_message))->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: TTY isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + #if (L1_MIDI==1) + case AUDIO_MIDI_FEATURE: + { + audio_midi_send_status(AUDIO_ERROR,&((T_AUDIO_MIDI_START *)p_message)->return_path); + AUDIO_SEND_TRACE(" AUDIO ERROR: MIDI isn't compatible with a running task", + RV_TRACE_LEVEL_ERROR); + p_audio_gbl_var->message_processed = TRUE; + break; + } + #endif + } + } /* feature_can_start == FALSE */ + } + return (feature_can_start); + } +#endif /* RVM_AUDIO_MAIN_SWE */