/*************************************************************************** * * Copyright 2015-2019 BES. * All rights reserved. All unpublished rights reserved. * * No part of this work may be used or reproduced in any form or by any * means, or stored in a database or retrieval system, without prior written * permission of BES. * * Use of this work is governed by a license granted by BES. * This work contains confidential and proprietary information of * BES. which is protected by copyright, trade secret, * trademark and other intellectual property rights. * ****************************************************************************/ #ifndef __APP_MEDIA_PLAYER_H__ #define __APP_MEDIA_PLAYER_H__ #include "resources.h" #include "app_bt_stream.h" #define MEDIA_DEFAULT_LANGUAGE (0) typedef enum { T_AUDIO_ID = 0x0, T_AUDIO_NUMBER, }MEDIA_AUDIO_TYPE; #define MAX_PHB_NUMBER 20 #define PROMOT_ID_BIT_MASK (0xff << 8) #define PROMOT_ID_BIT_MASK_MERGING (1 << 15) #define PROMOT_ID_BIT_MASK_CHNLSEl_LCHNL (1 << 14) #define PROMOT_ID_BIT_MASK_CHNLSEl_RCHNL (1 << 13) #define PROMOT_ID_BIT_MASK_CHNLSEl_ALL (PROMOT_ID_BIT_MASK_CHNLSEl_LCHNL|PROMOT_ID_BIT_MASK_CHNLSEl_RCHNL) #define IS_PROMPT_NEED_MERGING(promptId) ((promptId)&PROMOT_ID_BIT_MASK_MERGING ? true : false) #define PROMPT_ID_FROM_ID_VALUE(promptIdVal) ((promptIdVal)&(~PROMOT_ID_BIT_MASK)) #define PROMPT_CHNLSEl_FROM_ID_VALUE(promptIdVal) ((promptIdVal)&PROMOT_ID_BIT_MASK_CHNLSEl_ALL) #define PROMPT_PRAM_FROM_ID_VALUE(promptIdVal) ((promptIdVal)&PROMOT_ID_BIT_MASK) #define IS_PROMPT_CHNLSEl_ALL(promptId) (((promptId)&PROMOT_ID_BIT_MASK_CHNLSEl_ALL) == PROMOT_ID_BIT_MASK_CHNLSEl_ALL ? true : false) #define IS_PROMPT_CHNLSEl_LCHNL(promptId) (((promptId)&PROMOT_ID_BIT_MASK_CHNLSEl_ALL) == PROMOT_ID_BIT_MASK_CHNLSEl_RCHNL ? true : false) #define IS_PROMPT_CHNLSEl_RCHNL(promptId) (((promptId)&PROMOT_ID_BIT_MASK_CHNLSEl_ALL) == PROMOT_ID_BIT_MASK_CHNLSEl_LCHNL ? true : false) typedef struct { uint16_t id; uint16_t status; // APP_AUDIO_STATUS uint16_t aud_type; uint16_t aud_id; char phb_number[MAX_PHB_NUMBER]; }msg_num_ptr; typedef struct { uint16_t promptId; int16_t volume_level_override; float coeff_for_mix_prompt_for_music; float coeff_for_mix_music_for_music; float coeff_for_mix_prompt_for_call; float coeff_for_mix_call_for_call; } __attribute__((packed)) PROMPT_MIX_PROPERTY_T; #define PROMPT_MIX_PROPERTY_TO_ADD(promptId, \ volume_level_override, \ coeff_for_mix_prompt_for_music, \ coeff_for_mix_music_for_music, \ coeff_for_mix_prompt_for_call, \ coeff_for_mix_call_for_call) \ static PROMPT_MIX_PROPERTY_T promptId##_entry __attribute__((used, section(".mixprompt_property_table"))) = \ {(promptId), \ (volume_level_override), \ (coeff_for_mix_prompt_for_music), \ (coeff_for_mix_music_for_music), \ (coeff_for_mix_prompt_for_call), \ (coeff_for_mix_call_for_call), \ }; extern uint32_t __mixprompt_property_table_start[]; extern uint32_t __mixprompt_property_table_end[]; #ifdef __cplusplus extern "C" { #endif //uint32_t media_playAudioSideSelect(AUD_ID_ENUM id,uint8_t device_id, uint8_t side_select); // Prompt will be played on the both sides if they're connected. // If there are music/phone call on-going, the prompt will be mixed. uint32_t media_PlayAudio(AUD_ID_ENUM id,uint8_t device_id); uint32_t media_playAudioSideSelect(AUD_ID_ENUM id,uint8_t device_id, uint16_t side_select); // Prompt will be played locally no matter whether earbuds are connected or not // If there are music/phone call on-going, the prompt will be mixed. void media_PlayAudio_locally(AUD_ID_ENUM id, uint8_t device_id); // Prompt will be played on peer device only if they're connected. // If there are music/phone call on-going, the music or phone call output will be stopped // until the prompt playing is completed. void media_PlayAudio_remotely(AUD_ID_ENUM id, uint8_t device_id); // Prompt will be played on the both sides if they're connected. // If there are music/phone call on-going, the music or phone call output will be stopped // until the prompt playing is completed. void media_PlayAudio_standalone(AUD_ID_ENUM id, uint8_t device_id); // Prompt will be played locally no matter whether earbuds are connected or not // If there are music/phone call on-going, the music or phone call output will be stopped // until the prompt playing is completed. void media_PlayAudio_standalone_locally(AUD_ID_ENUM id, uint8_t device_id); // Prompt will be played on the peer device only if they're connected. // If there are music/phone call on-going, the music or phone call output will be stopped // until the prompt playing is completed. void media_PlayAudio_standalone_remotely(AUD_ID_ENUM id, uint8_t device_id); void media_Set_IncomingNumber(const char* pNumber); void media_FreeMemory(void* data); int app_play_audio_onoff(bool on, APP_AUDIO_STATUS* status); void stand_alone_prompt_supervision_timer_init(void); void app_play_audio_set_lang(int L); int app_play_audio_get_lang(); void app_audio_playback_done(void); void media_runtime_audio_prompt_update(uint16_t id, uint8_t** ptr, uint32_t* len); PROMPT_MIX_PROPERTY_T* get_prompt_mix_property(uint16_t promptId); AUD_ID_ENUM media_GetCurrentPrompt(uint8_t device_id); AUD_ID_ENUM app_get_current_standalone_promptId(void); void update_standalone_prompt_volume(int8_t vol); void app_tws_cmd_stop_prompt_handler(uint8_t* ptrParam, uint16_t paramLen); void app_stop_both_prompt_playing(void); void app_tws_stop_peer_prompt(void); int app_play_audio_stop(void); int app_play_audio_get_aud_id(void); void trigger_media_play(AUD_ID_ENUM id, uint8_t device_id, uint16_t aud_pram); void trigger_media_stop(AUD_ID_ENUM id, uint8_t device_id); #ifdef AUDIO_LINEIN uint32_t app_play_audio_lineinmode_more_data(uint8_t *buf, uint32_t len); int app_play_audio_lineinmode_init(uint8_t mode, uint32_t buff_len); int app_play_audio_lineinmode_start(APP_AUDIO_STATUS* status); int app_play_audio_lineinmode_stop(APP_AUDIO_STATUS* status); #endif void app_tws_sync_prompt_check(void); void app_tws_sync_prompt_manager_reset(void); #ifdef __cplusplus } #endif #endif