diff src/cs/services/audio/audio_task.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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/services/audio/audio_task.c	Fri May 15 01:28:16 2020 +0000
@@ -0,0 +1,767 @@
+/****************************************************************************/
+/*                                                                          */
+/*  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 */