am_event_handler_audio.cc

来自「Motorola synergy audio component」· CC 代码 · 共 1,295 行 · 第 1/3 页

CC
1,295
字号
    UINT8 clock_rate;        if (rat_type == TD_RAT_GSM)    {        clock_rate = HAPI_CODEC_CLK_13M;    }    else if (rat_type == TD_RAT_UTRA)    {        clock_rate = HAPI_CODEC_CLK_15M;    }    am_event_logic_processor.set_clock_rate(clock_rate);    am_event_logic_processor.update_audio ();#endif}/* DESCRIPTION:       This function receives the media open success from MME.   INPUTS       The pointer to the message from MME.   OUTPUTS       None.   IMPORTANT NOTES       None*/  voidAM_Event_Handler::handle_aud_media_open_success(void *msg){     DL_MMSP_MEDIA_OPEN_SUCCESS_DATA_T* local_msg = (DL_MMSP_MEDIA_OPEN_SUCCESS_DATA_T*)msg;    MMSS_MEDIA_HANDLE_T media_handle = local_msg->media_handle;    Tone_Item *current = eventqueuehandler.FindbyMediaSeq(local_msg->iface_data.seq_number);    TD_AUD_TONE_UNION_T pending_media_tone_type = {media_tone_type};    BOOL media_alert = !(pending_media_tone_type.fields.pwrup || pending_media_tone_type.fields.send_dl_msg);    BOOL media_state_change = TRUE;    MMSS_MEDIA_USAGE_T media_usage = MMSS_MEDIA_USAGE_MMA;    AUD_MEDIA_TONE_IND_T  dl_msg;    BOOL attr_value = TRUE;     if ((pending_media_tone_type.type == DL_AUDIO_TONE_TYPE_INVALID_TONE) && (current != NULL))    {        media_alert = !(current->ToneEvent.fields.pwrup || current->ToneEvent.fields.send_dl_msg);    }    if ( (isVibAlert(pending_media_tone_type.fields.id)) ||           ((current != NULL) && (isVibAlert(current->ToneEvent.fields.id))) )    {        media_usage = MMSS_MEDIA_USAGE_MFT_VIB;    }    else    if (pending_media_tone_type.fields.pwrup)    {        media_usage = MMSS_MEDIA_USAGE_PUPD;    }    else    if (media_alert)    {        media_usage = MMSS_MEDIA_USAGE_ALERT;    }    DL_MMSP_Playback_MediaSetAttribute((MMSS_MEDIA_HANDLE_T)(media_handle),                                       MMSS_MEDIA_USAGE,                                       &media_usage);    //subscribing for state_change notification from mme    DL_MMSP_Playback_MediaSetAttribute((MMSS_MEDIA_HANDLE_T)(media_handle),				       MMSS_MEDIA_STATE_CHANGE,				       (void*)&media_state_change);    /* libhh43622: Subscribe to Stop Complete, so that AM restarts MME only after       receiving STOP_CMPL from MME. */     DL_MMSP_Playback_MediaSetAttribute(media_handle, MMSS_SUBSCRIBE_STOP_COMPLETE, &attr_value);        if ((media_vibrate_type != DL_AUDIO_TONE_TYPE_INVALID_TONE) && (media_alert == TRUE))    {        DL_MMSP_Playback_MediaSetAttribute((MMSS_MEDIA_HANDLE_T)(media_handle),                                       MMSS_MEDIA_VIB_TYPE,                                       &media_vibrate_type);        media_vibrate_type = DL_AUDIO_TONE_TYPE_INVALID_TONE;    }    dl_msg.media_handle = media_handle;    dl_msg.seq_num = current->SequenceID;        if ( beat_to_mme != 0xFFFF )    {        DL_MMSP_Playback_MediaSetAttribute((MMSS_MEDIA_HANDLE_T)(media_handle),                                       MMSS_MEDIA_IMELODY_BEAT,                                       &beat_to_mme);        beat_to_mme = 0xFFFF;    }     if (current == NULL)     {        DL_MMSP_Playback_MediaSetAttribute((MMSS_MEDIA_HANDLE_T)(media_handle),                                                MMSS_MEDIA_VOLUME,                                                &media_tone_vol);    }    else    {        DL_MMSP_Playback_MediaSetAttribute((MMSS_MEDIA_HANDLE_T)(media_handle),                                                MMSS_MEDIA_VOLUME,                                                &(current->VolumeStep));    }        if (current && current->ToneEvent.fields.send_dl_msg == 1)    {        /* Send open success msg to dl */        dl_msg.status = AUD_MEDIA_OPEN_SUCCESS;        dl_msg.msg_value = 0;                        aud_dl_aud_cnf(AUD_MEDIA_TONE_IND, &dl_msg, sizeof(AUD_MEDIA_TONE_IND_T));    }    else if (pending_media_tone_type.type != DL_AUDIO_TONE_TYPE_INVALID_TONE &&             pending_media_tone_type.fields.send_dl_msg == 1)    {        /* Send open success msg to dl */        AUD_MEDIA_TONE_IND_T dl_msg = {AUD_MEDIA_OPEN_SUCCESS, media_handle, media_tone_seq, NULL};                aud_dl_aud_cnf(AUD_MEDIA_TONE_IND, &dl_msg, sizeof(AUD_MEDIA_TONE_IND_T));    }    else     {#if  (MAKE_OMA_DRM_SUPPORT == TRUE)         /*  Consme rights object for OMADRM file and unlock it  */        MMSS_OMA_DRM_RIGHTS_REQ_T  rights_req = {DL_FS_DRM_ACTION_PLAY, TRUE, FALSE };                                                           DL_MMSP_Playback_MediaSetAttribute(media_handle, MMSS_OMA_DRM_RIGHTS_REQ, &rights_req);                               if(DL_MMSP_Playback_MediaStart(media_handle) == MMSS_OMA_DRM_FAIL)        {                dl_msg.status = AUD_MEDIA_START_ERROR;            dl_msg.msg_value = MMSS_OMA_DRM_INVALID_RIGHTS;                        aud_dl_aud_cnf(AUD_MEDIA_TONE_IND, &dl_msg, sizeof(AUD_MEDIA_TONE_IND_T));                }#else                DL_MMSP_Playback_MediaStart(media_handle);#endif                /* set the media handle only if flip is closed */        if (off_hook_flag_glb == 0)        {           mp3_ringer_media_handle_glb = media_handle;        }    }    media_tone_type = DL_AUDIO_TONE_TYPE_INVALID_TONE;    media_tone_seq = INVALID_SEQ_NUMBER;    media_tone_vol = INVALID_VOLUME_STEP;    media_vibrate_type = DL_AUDIO_TONE_TYPE_INVALID_TONE;}/* DESCRIPTION:       This function receives the media started from MME.   INPUTS       The pointer to the message from MME.   OUTPUTS       None.   IMPORTANT NOTES       None*/ voidAM_Event_Handler::handle_aud_media_started(void *msg){    DL_MMSP_MEDIA_CAPTURE_STARTED_DATA_T* local_msg = (DL_MMSP_MEDIA_CAPTURE_STARTED_DATA_T*)msg;    UINT32              seq_id = INVALID_SEQ_NUMBER;    TD_AUD_TONE_UNION_T tone = {0};    Tone_Item *current = eventqueuehandler.FindbyMediaSeq(local_msg->iface_data.seq_number);        if (current)    {        seq_id = current->SequenceID;        tone = current->ToneEvent;    }        /* If send_dl_msg flag set send started status to dl */    if(tone.fields.send_dl_msg == 1)    {        AUD_MEDIA_TONE_IND_T dl_msg = {AUD_MEDIA_STARTED, local_msg->media_handle, seq_id, 0};        /* Send error msg to dl */        aud_dl_aud_cnf(AUD_MEDIA_TONE_IND, &dl_msg, sizeof(AUD_MEDIA_TONE_IND_T));    }}/* DESCRIPTION:       This function receives the media open failure from MME.   INPUTS       The pointer to the message from MME.   OUTPUTS       None.   IMPORTANT NOTES       None*/ voidAM_Event_Handler::handle_aud_media_open_failure(void *msg){    DL_MMSP_MEDIA_OPEN_FAILED_DATA_T* local_msg = (DL_MMSP_MEDIA_OPEN_FAILED_DATA_T*)msg;    TD_AUD_MEDIA_INFO_T media_info = {local_msg->media_handle, local_msg->iface_data.seq_number};    UINT32              seq_id = INVALID_SEQ_NUMBER;    TD_AUD_TONE_UNION_T tone = {0};    Tone_Item *current = eventqueuehandler.FindbyMediaSeq(media_info.seq);        if (current)    {        am_event_logic_processor.generate_tone(current->ToneEvent, AUD_TONE_STOP, current->SequenceID,                                               INVALID_VOLUME_STEP, DL_AUDIO_TONE_TYPE_INVALID_TONE,                                                   FALSE, media_info, AM_SAMPLING_RATE_08_00);        seq_id = current->SequenceID;        tone = current->ToneEvent;    }        /* If send_dl_msg flag set send error status to dl */    if(tone.fields.send_dl_msg == 1)    {        AUD_MEDIA_TONE_IND_T dl_msg = {AUD_MEDIA_ERROR, local_msg->media_handle, seq_id, local_msg->media_error};        /* Send error msg to dl */        aud_dl_aud_cnf(AUD_MEDIA_TONE_IND, &dl_msg, sizeof(AUD_MEDIA_TONE_IND_T));    }}/* DESCRIPTION:       This function receives the state change message from MME.   INPUTS       The pointer to the message from MME.   OUTPUTS       None.   IMPORTANT NOTES       None*/voidAM_Event_Handler::handle_aud_media_state_change(void *msg){   DL_MMSP_MEDIA_STATE_DATA_T *media_state = (DL_MMSP_MEDIA_STATE_DATA_T *) msg;     MMSS_RETURN_STATUS_T media_status = MMSS_NO_ERROR;   MMSS_MEDIA_HANDLE_T mHandle = media_state->media_handle;   Tone_Item * front = eventqueuehandler.GetCurrent ();   if((front->MediaInfo).handle == mHandle && media_state->media_state == MMSS_MEDIA_STATE_FORCED_PAUSE)   {       DL_MMSP_Playback_MediaClose(mHandle);   }}/* DESCRIPTION:       This function receives the media complete from MME.   INPUTS       The pointer to the message from MME.   OUTPUTS       None.   IMPORTANT NOTES       None*/ voidAM_Event_Handler::handle_aud_media_complete(void *msg){    DL_MMSP_MEDIA_COMPLETE_DATA_T* local_msg = (DL_MMSP_MEDIA_COMPLETE_DATA_T*)msg;    TD_AUD_MEDIA_INFO_T  media_info = {local_msg->media_handle, local_msg->iface_data.seq_number};    Tone_Item           *current = eventqueuehandler.FindbyMediaSeq(media_info.seq);    if (current)    {        TD_AUD_TONE_UNION_T  tone = current->ToneEvent;        /* check if we need to repeat the media, e.g. for ringer */        if (tone.fields.one_shot == 0)        {            DL_MMSP_Playback_MediaStart(local_msg->media_handle);        }        /* If send_dl_msg flag clear close the media else only send compleate status to dl */        else if (tone.fields.send_dl_msg == 0)        {            am_event_logic_processor.generate_tone(current->ToneEvent, AUD_TONE_STOP, current->SequenceID,                                                   INVALID_VOLUME_STEP, DL_AUDIO_TONE_TYPE_INVALID_TONE,                                                   FALSE, media_info, AM_SAMPLING_RATE_08_00);        }        else        {            /* Send media complete msg to dl */            AUD_MEDIA_TONE_IND_T dl_msg = {AUD_MEDIA_COMPLETE, local_msg->media_handle, current->SequenceID, 0};            aud_dl_aud_cnf(AUD_MEDIA_TONE_IND, &dl_msg, sizeof(AUD_MEDIA_TONE_IND_T));        }    }}/* DESCRIPTION:       Function to handle turning on Echo Cancellation, Noise Supression and       Entertainment mute for Telematics and Bluetooth Handsfree. This is done        through couple of test commands sent down to the Device Layer which lets        AM to set these parameters  INPUTS:       void *msg  OUTPUTS:       none  IMPORTANT NOTES:       none*/voidAM_Event_Handler::handle_aud_dynamic_echo_noise_on_req(void *msg){    DL_ACC_ATTRIBUTE_T attribute = *((DL_ACC_ATTRIBUTE_T*)msg);         switch(attribute)    {     case DL_ACC_ECHO_CANCELATION:        echo_control = TRUE;        break;    case DL_ACC_NOISE_SUPPRESSION:        noise_sup = TRUE;        break;      default:        break;    }    am_event_logic_processor.update_audio();}   /* DESCRIPTION:       Function to handle turning off Echo Cancellation, Noise Supression and        Entertainment mute for Telematics and bluetooth handsfree.   INPUTS:       void *msg  OUTPUTS:       none  IMPORTANT NOTES:       none*/voidAM_Event_Handler::handle_aud_dynamic_echo_noise_off_req(void *msg){    DL_ACC_ATTRIBUTE_T attribute = *((DL_ACC_ATTRIBUTE_T*)msg);         switch(attribute)    {     case DL_ACC_ECHO_CANCELATION:        echo_control = FALSE;        break;    case DL_ACC_NOISE_SUPPRESSION:        noise_sup = FALSE;        break;      default:        break;    }    am_event_logic_processor.update_audio();}/* DESCRIPTION:       Function to handle turning off Noise Supression for an AMR voice call        when the network needs it   INPUTS:       void *msg  OUTPUTS:       none  IMPORTANT NOTES:       none*/voidAM_Event_Handler::handle_aud_amr_allow_ns_req(void *msg){    am_allow_ns = *(BOOL *)msg;    am_event_logic_processor.update_audio();}  /* DESCRIPTION:       Function to "kick" the Audio Manager when settings change  INPUTS:       void   OUTPUTS:       none  IMPORTANT NOTES:       none*/void AM_Event_Handler::handle_aud_setting_change_ind(void *msg){    am_event_logic_processor.update_audio();    }/* DESCRIPTION:       Function to handle Haptics ON/OFF settings  INPUTS:       void   OUTPUTS:       none  IMPORTANT NOTES:       The actual reading of the feature database would be done       right before turning on or off the instruction mask*/void AM_Event_Handler::handle_aud_haptics_setting_change_ind(void *msg){    am_event_logic_processor.update_audio();    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?