FreeCalypso > hg > fc-magnetite
view src/cs/services/Audio/audio_task.c @ 516:1ed9de6c90bd
src/g23m-gsm/sms/sms_for.c: bogus malloc removed
The new error handling code that was not present in TCS211 blob version
contains a malloc call that is bogus for 3 reasons:
1) The memory allocation in question is not needed in the first place;
2) libc malloc is used instead of one of the firmware's proper ways;
3) The memory allocation is made inside a function and then never freed,
i.e., a memory leak.
This bug was caught in gcc-built FreeCalypso fw projects (Citrine
and Selenite) because our gcc environment does not allow any use of
libc malloc (any reference to malloc produces a link failure),
but this code from TCS3.2 is wrong even for Magnetite: if this code
path is executed repeatedly over a long time, the many small allocations
made by this malloc call without a subsequent free will eventually
exhaust the malloc heap provided by the TMS470 environment, malloc will
start returning NULL, and the bogus code will treat it as an error.
Because the memory allocation in question is not needed at all,
the fix entails simply removing it.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 22 Jul 2018 06:04:49 +0000 |
parents | 945cf7f506b2 |
children |
line wrap: on
line source
/****************************************************************************/ /* */ /* Name audio_task.c */ /* */ /* Function this file contains the main AUDIO function: audio_task */ /* It contains the body of the AUDIO task. */ /* It will initialize the AUDIO and then wait for messages */ /* or functions calls. */ /* */ /* Version 0.1 */ /* */ /* Date Modification */ /* ------------------------------------ */ /* 18 May 2001 Create */ /* */ /* Author Francois Mazard - Stephanie Gerthoux */ /* */ /* (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_features_i.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" #if (L1_GTT == 1) #include "tty/tty_i.h" #include "l1gtt_signa.h" #endif #ifndef _WINDOWS /* include the usefull L1 header */ #define BOOL_FLAG #define CHAR_FLAG #include "l1_types.h" #include "cust_os.h" #include "l1audio_cust.h" #include "l1audio_msgty.h" #include "l1audio_signa.h" #include "l1_signa.h" #else /* include the usefull L1 header */ #define BOOL_FLAG //#define CHAR_FLAG #include "l1_types.h" #include "l1audio_const.h" #include "l1audio_cust.h" #include "l1audio_defty.h" #include "l1audio_msgty.h" #include "l1audio_signa.h" #include "l1_const.h" #include "l1_defty.h" #include "l1_msgty.h" #include "l1_signa.h" #include "l1_varex.h" #include "audio/tests/audio_test.h" #endif #ifndef _WINDOWS #if (TRACE_TYPE==4) extern void l1_trace_message(xSignalHeaderRec *msg); #endif #endif #if (L1_GTT == 1) extern void tty_manager (T_RV_HDR *p_message); extern T_TTY_ENV_CTRL_BLK *tty_env_ctrl_blk_p; #endif #if (L1_MIDI==1) extern UINT8 audio_midi_message_switch(T_RV_HDR *p_message); #endif extern BOOLEAN audio_compatibilities_manager (T_RV_HDR *p_message); /********************************************************************************/ /* */ /* Function Name: audio_allocate_l1_message */ /* */ /* Purpose: This function is called to allocate a buffer for the message */ /* to the l1 */ /* */ /* Input Parameters: */ /* Size */ /* */ /* Output Parameters: */ /* None. */ /* */ /* Note: */ /* None. */ /* */ /* Revision History: */ /* None. */ /* */ /********************************************************************************/ void *audio_allocate_l1_message(UINT16 size) { void *buffer = NULL; #ifdef _WINDOWS T_RVF_MB_STATUS mb_status; /* allocate a buffer in the riviera environement */ if (size == 0) { /* allocate the memory for a message without parameter */ mb_status = rvf_get_buf (p_audio_gbl_var->mb_internal, sizeof(T_RV_HDR), (T_RVF_BUFFER **) (&buffer)); } else { /* allocate the memory for a message with some parameters */ mb_status = rvf_get_buf (p_audio_gbl_var->mb_internal, size, (T_RVF_BUFFER **) (&buffer)); } /* If insufficient resources, then report a memory error and abort. */ if (mb_status == RVF_YELLOW) { /* deallocate the memory */ rvf_free_buf((T_RVF_BUFFER *)buffer); audio_error_trace(AUDIO_ENTITY_NO_MEMORY); return (NULL); } else if (mb_status == RVF_RED) { audio_error_trace(AUDIO_ENTITY_NO_MEMORY); return (NULL); } #else /* allocate a buffer in the L1 environement */ /* allocate a buffer in the L1 environement */ xSignalHeaderRec* p_msg; p_msg = os_alloc_sig(size); buffer = (void*)p_msg->SigP; #endif return(buffer); } /********************************************************************************/ /* */ /* Function Name: audio_deallocate_l1_message */ /* */ /* Purpose: This function is called to deallocate a buffer for the message */ /* to the l1. */ /* */ /* Input Parameters: */ /* Audio Key Beep Parameters, */ /* */ /* Output Parameters: */ /* None. */ /* */ /* Note: */ /* None. */ /* */ /* Revision History: */ /* None. */ /* */ /********************************************************************************/ void audio_deallocate_l1_message(void *message) { #ifdef _WINDOWS T_RV_RET status; /* deallocate the memory */ status = rvf_free_buf((T_RVF_BUFFER *)message); if (status != RVF_GREEN) { AUDIO_SEND_TRACE(" AUDIO ERROR (env). A wrong message is deallocated ", RV_TRACE_LEVEL_ERROR); } #else /* deallocate a buffer in the L1 environement */ os_free_sig((xSignalHeaderRec*)message); #endif } /********************************************************************************/ /* */ /* Function Name: audio_send_l1_message */ /* */ /* Purpose: This function is called to send the message to the L1 */ /* */ /* Input Parameters: */ /* the message id and the message, */ /* */ /* Output Parameters: */ /* None. */ /* */ /* Note: */ /* None. */ /* */ /* Revision History: */ /* None. */ /* */ /********************************************************************************/ T_RV_RET audio_send_l1_message(INT16 message_id, void *message) { #ifdef _WINDOWS #if ((AUDIO_REGR == SW_COMPILED) || (AUDIO_MISC == SW_COMPILED)) ((T_RV_HDR *)message)->msg_id = message_id; switch (message_id) { /* send the messsage to the audio entity */ #if (KEYBEEP) case MMI_KEYBEEP_START_REQ: case MMI_KEYBEEP_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->keybeep.return_path.addr_id, message); break; } #endif #if (TONE) case MMI_TONE_START_REQ: case MMI_TONE_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->tones.return_path.addr_id, message); break; } #endif #if (MELODY_E1) case MMI_MELODY0_START_REQ: case MMI_MELODY0_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->melody_E1_0.return_path.addr_id, message); break; } case MMI_MELODY1_START_REQ: case MMI_MELODY1_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->melody_E1_1.return_path.addr_id, message); break; } #endif #if (MELODY_E2) case MMI_MELODY0_E2_START_REQ: case MMI_MELODY0_E2_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->melody_E2_0.return_path.addr_id, message); break; } case MMI_MELODY1_E2_START_REQ: case MMI_MELODY1_E2_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->melody_E2_1.return_path.addr_id, message); break; } #endif #if (VOICE_MEMO) case MMI_VM_PLAY_START_REQ: case MMI_VM_PLAY_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->vm_play.return_path.addr_id, message); break; } case MMI_VM_RECORD_START_REQ: case MMI_VM_RECORD_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->vm_record.return_path.addr_id, message); break; } #endif #if (SPEECH_RECO) case MMI_SR_ENROLL_START_REQ: case MMI_SR_ENROLL_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->speech_reco.sr_enroll.return_path.addr_id, message); break; } case MMI_SR_UPDATE_START_REQ: case MMI_SR_UPDATE_STOP_REQ: case MMI_SR_UPDATE_CHECK_START_REQ: case MMI_SR_UPDATE_CHECK_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->speech_reco.sr_update.return_path.addr_id, message); break; } case MMI_SR_RECO_START_REQ: case MMI_SR_RECO_STOP_REQ: { rvf_send_msg (p_audio_gbl_var->speech_reco.sr_reco.return_path.addr_id, message); break; } #endif #if (L1_GTT == 1) case MMI_GTT_START_REQ: case MMI_GTT_STOP_REQ: { rvf_send_msg (tty_env_ctrl_blk_p->return_path.addr_id, message); } break; #endif #if (L1_MIDI==1) case MMI_MIDI_START_REQ: case MMI_MIDI_STOP_REQ: { rvf_send_msg(p_audio_gbl_var->addrId,message); break; } #endif #if (FIR) case MMI_AUDIO_FIR_CON: case MMI_AUDIO_FIR_REQ: #endif #if (AEC) case MMI_AEC_CON: case MMI_AEC_REQ: #endif #if (AUDIO_MODE) case MMI_AUDIO_MODE_CON: case MMI_AUDIO_MODE_REQ: #endif case OML1_STOP_DAI_TEST_REQ: case OML1_STOP_DAI_TEST_CON: { rvf_send_msg (p_audio_test->test_addr_id, message); break; } } return(RV_OK); #endif #else xSignalHeaderRec *p_signal; p_signal = (xSignalHeaderRec*)(message); p_signal--; p_signal->SigP = (DummyStruct*)(message); p_signal->SignalCode = message_id; #if (TRACE_TYPE==4) l1_trace_message(p_signal); #endif /* send a message in the L1 environement */ os_send_sig(p_signal, L1C1_QUEUE); return(RV_OK); #endif } /********************************************************************************/ /* Function audio_core */ /* */ /* Description Core of the audio task, which initiliazes the audio SWE and */ /* waits for messages. */ /* */ /********************************************************************************/ T_RV_RET audio_core(void) { /* Declare local variables */ BOOLEAN error_occured = FALSE; T_RV_HDR *p_message = NULL; UINT16 received_event= 0x0000; T_RV_RET status; AUDIO_SEND_TRACE("AUDIO_TASK started",RV_TRACE_LEVEL_DEBUG_HIGH); /* loop to process messages */ while (error_occured == FALSE) { /* Wait for the necessary events (all events and no time out). */ received_event = rvf_wait (AUDIO_ALL_EVENT_FLAGS, AUDIO_NOT_TIME_OUT); #if (MELODY_E1) || (MELODY_E2) || (VOICE_MEMO) /* the time out for the AUDIO FFS downloader is expired */ if (received_event & AUDIO_FFS_TIMER_EVT_MASK) { audio_ffs_downloader(); } #endif /* MELODY_E1 || MELODY_E2 || VOICE_MEMO /* If an event is received, then ....*/ if (received_event & AUDIO_TASK_MBOX_EVT_MASK) { /* Read the message in the audio mailbox */ p_message = (T_RV_HDR *) rvf_read_mbox(AUDIO_MBOX); if (p_message != NULL) { p_audio_gbl_var->message_processed = FALSE; #if (MELODY_E1) || (MELODY_E2) || (VOICE_MEMO) if ( (p_message->msg_id == AUDIO_FFS_FLASH_2_RAM_START_REQ) || (p_message->msg_id == AUDIO_FFS_RAM_2_FLASH_START_REQ) || (p_message->msg_id == AUDIO_FFS_STOP_REQ) ) { AUDIO_SEND_TRACE_PARAM("AUDIO FFS MANAGER with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process FFS message */ audio_ffs_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif /* MELODY_E1 || MELODY_E2 || VOICE_MEMO */ #if (AUDIO_MEM_MANAGER) if (audio_mem_message_switch(p_message) == 1) { AUDIO_SEND_TRACE_PARAM("AUDIO MEMORY MANAGER with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process FFS message */ audio_mem_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif // AUDIO_MEM_MANAGER /* Check the compatibility with the active audio task */ if (audio_compatibilities_manager(p_message)) { #if (KEYBEEP) if ( (p_message->msg_id == AUDIO_KEYBEEP_START_REQ) || (p_message->msg_id == AUDIO_KEYBEEP_STOP_REQ) || (p_message->msg_id == MMI_KEYBEEP_START_CON) || (p_message->msg_id == MMI_KEYBEEP_STOP_CON) ) { AUDIO_SEND_TRACE_PARAM("AUDIO KEYBEEP with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the keybeep manager */ audio_keybeep_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif #if (TONE) if ( (p_message->msg_id == AUDIO_TONES_START_REQ) || (p_message->msg_id == AUDIO_TONES_STOP_REQ) || (p_message->msg_id == MMI_TONE_START_CON) || (p_message->msg_id == MMI_TONE_STOP_CON) ) { AUDIO_SEND_TRACE_PARAM("AUDIO TONES with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the tones manager */ audio_tones_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif #if (SPEECH_RECO) if ( (p_message->msg_id == AUDIO_SR_ENROLL_START_REQ) || (p_message->msg_id == AUDIO_SR_ENROLL_STOP_REQ) || (p_message->msg_id == MMI_SR_ENROLL_START_CON) || (p_message->msg_id == MMI_SR_ENROLL_STOP_CON) ) { AUDIO_SEND_TRACE_PARAM("AUDIO SR ENROLL with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_sr_enroll_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } if ( (p_message->msg_id == AUDIO_SR_UPDATE_START_REQ) || (p_message->msg_id == AUDIO_SR_UPDATE_STOP_REQ) || (p_message->msg_id == MMI_SR_UPDATE_START_CON) || (p_message->msg_id == MMI_SR_UPDATE_STOP_CON) || (p_message->msg_id == MMI_SR_UPDATE_CHECK_START_CON) || (p_message->msg_id == MMI_SR_UPDATE_CHECK_STOP_CON) ) { AUDIO_SEND_TRACE_PARAM("AUDIO SR UPDATE with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_sr_update_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } if ( (p_message->msg_id == AUDIO_SR_RECO_START_REQ) || (p_message->msg_id == AUDIO_SR_RECO_STOP_REQ) || (p_message->msg_id == MMI_SR_RECO_START_CON) || (p_message->msg_id == MMI_SR_RECO_STOP_CON) ) { AUDIO_SEND_TRACE_PARAM("AUDIO SR RECO with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_sr_reco_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #ifndef _WINDOWS /* add the management of the background task in the audio entity */ if ( (p_message->msg_id == L1_SRBACK_SAVE_DATA_REQ) || (p_message->msg_id == L1_SRBACK_LOAD_MODEL_REQ) || (p_message->msg_id == L1_SRBACK_TEMP_SAVE_DATA_REQ) ) { AUDIO_SEND_TRACE_PARAM("AUDIO SR BACKGROUND with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_sr_background_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif #endif #if (MELODY_E1) /* determine which melody id is involved by this start or stop message */ switch (audio_melody_E1_message_switch(p_message)) { /* The message is for the melody number 0 */ case AUDIO_MELODY_E1_0: { AUDIO_SEND_TRACE_PARAM("AUDIO MELODY E1.0 with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the melody E1 manager 0 */ audio_melody_E1_manager_0(p_message); p_audio_gbl_var->message_processed = TRUE; break; } /* The message is for the melody number 1 */ case AUDIO_MELODY_E1_1: { AUDIO_SEND_TRACE_PARAM("AUDIO MELODY E1.1 with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the melody E1 manager 1 */ audio_melody_E1_manager_1(p_message); p_audio_gbl_var->message_processed = TRUE; break; } } /* switch */ #endif #if (MELODY_E2) /* determine which melody id is involved by this start or stop messsage */ switch (audio_melody_E2_message_switch(p_message)) { /* The message is for the melody number 0 */ case AUDIO_MELODY_E2_0: { AUDIO_SEND_TRACE_PARAM("AUDIO MELODY E2.0 with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the melody E2 manager 0 */ audio_melody_E2_manager_0(p_message); p_audio_gbl_var->message_processed = TRUE; break; } /* The message is for the melody number 1 */ case AUDIO_MELODY_E2_1: { AUDIO_SEND_TRACE_PARAM("AUDIO MELODY E2.1 with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the melody E2 manager 1 */ audio_melody_E2_manager_1(p_message); p_audio_gbl_var->message_processed = TRUE; break; } } /* switch */ #ifndef _WINDOWS /* add the management of the melody E2 background task in the audio entity */ if ( (p_message->msg_id == L1_BACK_MELODY_E2_LOAD_INSTRUMENT_REQ) || (p_message->msg_id == L1_BACK_MELODY_E2_UNLOAD_INSTRUMENT_REQ) ) { AUDIO_SEND_TRACE_PARAM("AUDIO MELODY E2 BACKGROUND with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_background_melody_e2_download_instrument_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif #endif #if (VOICE_MEMO) switch (audio_voice_memo_message_switch(p_message)) { /* The message is for the voice memo play*/ case AUDIO_VM_PLAY: { AUDIO_SEND_TRACE_PARAM("AUDIO VM PLAY with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo play manager */ audio_vm_play_manager(p_message); p_audio_gbl_var->message_processed = TRUE; break; } /* The message is for the voice memo record */ case AUDIO_VM_RECORD: { AUDIO_SEND_TRACE_PARAM("AUDIO VM RECORD with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo record manager */ audio_vm_record_manager(p_message); p_audio_gbl_var->message_processed = TRUE; break; } } /* switch */ #endif #if (L1_GTT == 1) if ( (p_message->msg_id == TTY_START_REQ) || (p_message->msg_id == TTY_STOP_REQ) || (p_message->msg_id == MMI_GTT_START_CON) || (p_message->msg_id == MMI_GTT_STOP_CON)) { AUDIO_SEND_TRACE_PARAM("TTY with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the TTY manager */ tty_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif #if (L1_VOICE_MEMO_AMR)&&(AUDIO_MEM_MANAGER) switch (audio_voice_memo_amr_memory_message_switch(p_message)) { /* The message is for the voice memo play*/ case AUDIO_VM_AMR_PLAY: { AUDIO_SEND_TRACE_PARAM("AUDIO VM AMR MMS PLAY from memory with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo play manager */ audio_vm_amr_play_from_memory_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } break; /* The message is for the voice memo record */ case AUDIO_VM_AMR_RECORD: { AUDIO_SEND_TRACE_PARAM("AUDIO VM AMR MMS RECORD to memory with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo record manager */ audio_vm_amr_record_to_memory_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } break; } /* switch */ #endif #if (L1_MIDI==1) if(audio_midi_message_switch(p_message)==AUDIO_MIDI) { AUDIO_SEND_TRACE_PARAM("AUDIO MIDI with the msg",p_message->msg_id,RV_TRACE_LEVEL_DEBUG_LOW); audio_midi_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } #endif #if (L1_AUDIO_DRIVER) switch (audio_driver_message_switch(p_message)) { /* The message is for the voice memo play*/ case AUDIO_DRIVER_SWITCH: { AUDIO_SEND_TRACE_PARAM("AUDIO DRIVER with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo play manager */ audio_driver_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } break; case AUDIO_DRIVER_VM_AMR_RECORD_SESSION_SWITCH: { AUDIO_SEND_TRACE_PARAM("AUDIO DRIVER VM AMR RECORD with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo record manager */ audio_driver_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } break; case AUDIO_DRIVER_VM_AMR_PLAY_SESSION_SWITCH: { AUDIO_SEND_TRACE_PARAM("AUDIO DRIVER VM AMR PLAY with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo record manager */ audio_driver_manager(p_message); p_audio_gbl_var->message_processed = TRUE; } break; case AUDIO_DRIVER_MIDI_SESSION_SWITCH: { AUDIO_SEND_TRACE_PARAM("AUDIO DRIVER MIDI with the msg",p_message->msg_id,RV_TRACE_LEVEL_DEBUG_LOW); /* process the voice memo record manager */ audio_driver_manager(p_message); p_audio_gbl_var->message_processed=TRUE; } break; } /* switch */ #endif switch(audio_mode_message_switch(p_message)) { case AUDIO_FULL_ACCESS_WRITE: { AUDIO_SEND_TRACE_PARAM("AUDIO MODE FULL ACCESS WRITE with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_mode_full_access_write_manager(p_message); p_audio_gbl_var->message_processed = TRUE; break; } case AUDIO_MODE_SAVE: { AUDIO_SEND_TRACE_PARAM("AUDIO MODE SAVE with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_mode_save_manager(p_message); p_audio_gbl_var->message_processed = TRUE; break; } case AUDIO_MODE_LOAD: { AUDIO_SEND_TRACE_PARAM("AUDIO MODE LOAD with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_mode_load_manager(p_message); p_audio_gbl_var->message_processed = TRUE; break; } case AUDIO_SPEAKER_VOLUME: { AUDIO_SEND_TRACE_PARAM("AUDIO MODE SPEAKER VOLUME with the msg", p_message->msg_id, RV_TRACE_LEVEL_DEBUG_LOW); audio_mode_speaker_volume_manager (p_message); p_audio_gbl_var->message_processed = TRUE; break; } } #ifdef _WINDOWS #if (L1_MIDI == 1) // l1 simulator for MIDI if(p_message->msg_id==MMI_MIDI_START_REQ || p_message->msg_id==MMI_MIDI_STOP_REQ) { AUDIO_SEND_TRACE_PARAM("AUDIO MIDI SIMUL with the msg",p_message->msg_id,RV_TRACE_LEVEL_DEBUG_LOW); audio_midi_l1_simulator(received_event,p_message); p_audio_gbl_var->message_processed = TRUE; } #endif #endif // _WINDOWS } /* audio_compatibilities_manager */ if (p_audio_gbl_var->message_processed == FALSE) { AUDIO_SEND_TRACE_PARAM(" AUDIO ERROR (env). A wrong message is received ", p_message->msg_id, RV_TRACE_LEVEL_ERROR); } status = rvf_free_buf((T_RVF_BUFFER *)p_message); if (status != RVF_GREEN) { AUDIO_SEND_TRACE(" AUDIO ERROR (env). A wrong message is deallocated ", RV_TRACE_LEVEL_ERROR); } } /* if (p_message != NULL) */ else { AUDIO_SEND_TRACE(" AUDIO ERROR (env). Can't read the message received ", RV_TRACE_LEVEL_ERROR); } } /* if (received_event & AUDIO_TASK_MBOX_EVT_MASK) */ /* Wait timer simulation event to send notifications */ #ifdef _WINDOWS #if (L1_MIDI == 1) if(received_event & AUDIO_MIDI_L1_SIMUL_TIMER_EVT_MASK) audio_midi_l1_simulator(received_event,p_message); #endif #endif /* If one of the occured events is unexpected (due to an unassigned */ /* mailbox), then report an internal error. */ #ifdef _WINDOWS if(received_event & ~(AUDIO_TASK_MBOX_EVT_MASK | AUDIO_FFS_TIMER_EVT_MASK| AUDIO_MIDI_L1_SIMUL_TIMER_EVT_MASK)) #else if(received_event & ~(AUDIO_TASK_MBOX_EVT_MASK | AUDIO_FFS_TIMER_EVT_MASK)) #endif { AUDIO_SEND_TRACE(" AUDIO ERROR (env). One of the occured events is unexpected ", RV_TRACE_LEVEL_ERROR); error_occured = TRUE; } } /* end of While */ return(RV_INTERNAL_ERR); } /****************************** End of audio_task function **************************/ #endif /* #ifdef RVM_AUDIO_MAIN_SWE */