/*************************************************************************** * * 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_BT_H__ #define __APP_BT_H__ #ifdef __cplusplus extern "C" { #endif #include "me_api.h" #include "a2dp_api.h" #include "hfp_api.h" enum APP_BT_REQ_T { APP_BT_REQ_ACCESS_MODE_SET, APP_BT_REQ_AUTO_TEST, APP_BT_REQ_NUM }; enum APP_BT_GOLBAL_HANDLE_HOOK_USER_T { APP_BT_GOLBAL_HANDLE_HOOK_USER_0 = 0, APP_BT_GOLBAL_HANDLE_HOOK_USER_1, APP_BT_GOLBAL_HANDLE_HOOK_USER_QTY }; typedef void (*APP_BT_REQ_CONNECT_PROFILE_FN_T)(void *, void *); typedef bt_status_t (*APP_BT_REQ_HF_OP_FN_T)(void *); typedef void (*APP_BT_GOLBAL_HANDLE_HOOK_HANDLER)(const btif_event_t*Event); typedef void (*APP_APPTHREAD_REQ_CUSTOMER_CALL_FN_T)(void *, void *); #define app_bt_accessmode_set_req(accmode) do{app_bt_send_request(APP_BT_REQ_ACCESS_MODE_SET, accmode, 0, 0);}while(0) typedef enum { APP_BT_IDLE_STATE = 0, APP_BT_IN_CONNECTING_PROFILES_STATE // acl link is created and in the process of connecting profiles } APP_BT_CONNECTING_STATE_E; typedef enum { // always in active mode during a2dp streaming ACTIVE_MODE_KEEPER_A2DP_STREAMING = 0, // always in active mode during ai voice up-streaming ACTIVE_MODE_KEEPER_AI_VOICE_STREAM, // always in active mode during OTA ACTIVE_MODE_KEEPER_OTA, // stay in active mode for 15 seconds after role switch ACTIVE_MODE_KEEPER_ROLE_SWITCH, // stay in active mode during synchronous voice prompt playing ACTIVE_MODE_KEEPER_SYNC_VOICE_PROMPT, // always in active mode during phone call ACTIVE_MODE_KEEPEER_SCO_STREAMING, } BT_LINK_ACTIVE_MODE_KEEPER_USER_E; #define MAX_ACTIVE_MODE_MANAGED_LINKS 3 #define UPDATE_ACTIVE_MODE_FOR_ALL_LINKS MAX_ACTIVE_MODE_MANAGED_LINKS void app_bt_active_mode_manager_init(void); void app_bt_active_mode_reset(uint32_t linkIndex); void app_bt_active_mode_set(BT_LINK_ACTIVE_MODE_KEEPER_USER_E user, uint32_t linkIndex); void app_bt_active_mode_clear(BT_LINK_ACTIVE_MODE_KEEPER_USER_E user, uint32_t linkIndex); void app_bt_global_handle(const btif_event_t *Event); bool is_app_bt_pairing_running(void); void PairingTransferToConnectable(void); void app_bt_global_handle_init(void); void app_bt_opening_reconnect(void); void app_bt_accessmode_set( btif_accessible_mode_t mode); void app_bt_send_request(uint32_t message_id, uint32_t param0, uint32_t param1, uint32_t ptr); void app_bt_init(void); int app_bt_state_checker(void); void *app_bt_profile_active_store_ptr_get(uint8_t *bdAddr); void app_bt_profile_connect_manager_open(void); void app_bt_profile_connect_manager_opening_reconnect(void); BOOL app_bt_profile_connect_openreconnecting(void *ptr); int app_bt_global_handle_hook_set(enum APP_BT_GOLBAL_HANDLE_HOOK_USER_T user, APP_BT_GOLBAL_HANDLE_HOOK_HANDLER handler); APP_BT_GOLBAL_HANDLE_HOOK_HANDLER app_bt_global_handle_hook_get(enum APP_BT_GOLBAL_HANDLE_HOOK_USER_T user); bool app_is_hfp_service_connected(void); #if defined(IBRT) void app_bt_ibrt_reconnect_mobile_profile_flag_set(void); void app_bt_ibrt_reconnect_mobile_profile_flag_clear(void); bool app_bt_ibrt_reconnect_mobile_profile_flag_get(void); #endif #if defined(__BT_SELECT_PROF_DEVICE_ID__) int8_t app_bt_a2dp_is_same_stream(a2dp_stream_t *src_Stream, a2dp_stream_t *dst_Stream); void app_bt_a2dp_find_same_unused_stream(a2dp_stream_t *in_Stream, a2dp_stream_t **out_Stream, uint32_t device_id); int8_t app_bt_a2dp_is_stream_on_device_id(a2dp_stream_t *in_Stream, uint32_t device_id); int8_t app_bt_hfp_is_chan_on_device_id(hf_chan_handle_t chan, uint32_t device_id); int8_t app_bt_is_any_profile_connected(uint32_t device_id); int8_t app_bt_is_a2dp_connected(uint32_t device_id); btif_remote_device_t *app_bt_get_connected_profile_remdev(uint32_t device_id); #endif void app_bt_stay_active(uint8_t deviceId); void app_bt_allow_sniff(uint8_t deviceId); btif_remote_device_t* app_bt_get_remoteDev(uint8_t deviceId); void app_bt_stop_sniff(uint8_t deviceId); void app_bt_sniff_config(btif_remote_device_t *remDev); void app_bt_allow_sniff_rem_dev(btif_remote_device_t* pRemDev); void app_bt_stay_active_rem_dev(btif_remote_device_t* pRemDev); void app_check_pending_stop_sniff_op(void); void app_bt_reset_reconnect_timer(bt_bdaddr_t *pBdAddr); uint8_t app_bt_get_num_of_connected_dev(void); bool btapp_hfp_is_dev_call_active(uint8_t devId); void app_bt_pause_media_player_again(uint8_t deviceId); bool app_bt_is_music_player_working(uint8_t deviceId); bool app_bt_pause_music_player(uint8_t deviceId); void app_bt_resume_music_player(uint8_t deviceId); bool app_bt_is_to_resume_music_player(uint8_t deviceId); void app_bt_reset_music_player_resume_state(void); bool app_bt_is_device_connected(uint8_t deviceId); void app_bt_set_music_player_resume_device(uint8_t deviceId); bool app_bt_is_a2dp_streaming(uint8_t deviceId); void app_bt_suspend_a2dp_streaming(uint8_t deviceId); bool app_bt_get_device_bdaddr(uint8_t deviceId, uint8_t* btAddr); void fast_pair_enter_pairing_mode_handler(void); void app_hfp_start_voice_media(uint8_t devId); void app_hfp_resume_pending_voice_media(void); bool app_hfp_is_starting_media_pending(void); bool app_bt_is_in_reconnecting(void); bool btapp_hfp_is_dev_sco_connected(uint8_t devId); uint8_t a2dp_get_latest_paused_device(void); bool app_bt_is_in_connecting_profiles_state(void); void app_bt_clear_connecting_profiles_state(uint8_t devId); void app_bt_set_connecting_profiles_state(uint8_t devId); void app_a2dp_hold_mute(); void app_a2dp_unhold_mute(); void app_bt_set_mobile_a2dp_stream(uint32_t deviceId,a2dp_stream_t *stream); #if defined(__INTERCONNECTION__) btif_accessible_mode_t app_bt_get_current_access_mode(void); bool app_bt_is_connected(); #endif bool app_device_bt_is_connected(); bool app_bt_is_hfp_audio_on(void); btif_remote_device_t* app_bt_get_connected_mobile_device_ptr(void); void app_bt_set_spp_device_ptr(btif_remote_device_t* device); btif_remote_device_t* app_bt_get_spp_device_ptr(void); bool app_is_disconnecting_all_bt_connections(void); void app_set_disconnecting_all_bt_connections(bool isEnable); void app_bt_start_search(void); #if defined(IBRT) #if defined(ENHANCED_STACK) uint32_t app_bt_save_a2dp_app_ctx(btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len); uint32_t app_bt_restore_a2dp_app_ctx(uint8_t *buf, uint32_t buf_len); uint32_t app_bt_save_avrcp_app_ctx(btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len); uint32_t app_bt_restore_avrcp_app_ctx(uint8_t *buf, uint32_t buf_len); uint32_t app_bt_save_hfp_app_ctx(btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len); uint32_t app_bt_restore_hfp_app_ctx(uint8_t *buf, uint32_t buf_len); uint32_t app_bt_save_spp_app_ctx(uint32_t app_id,btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len); uint32_t app_bt_restore_spp_app_ctx(uint8_t *buf, uint32_t buf_len, uint32_t app_id); #ifdef __BTMAP_ENABLE__ uint32_t app_bt_save_map_app_ctx(btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len); uint32_t app_bt_restore_map_app_ctx(uint8_t *buf, uint32_t buf_len); #endif #ifdef BTIF_HID_DEVICE uint32_t app_bt_save_hid_app_ctx(uint8_t *buf); uint32_t app_bt_restore_hid_app_ctx(uint8_t *buf); #endif #endif /* ENHANCED_STACK */ #endif void app_stop_fast_connectable_ble_adv_timer(void); int8_t app_bt_get_rssi(void); #ifdef TILE_DATAPATH int8_t app_tile_get_ble_rssi(void); #endif void app_bt_prepare_for_ota(void); void hfp_reconnecting_timer_stop_callback(const btif_event_t *event); int app_bt_start_custom_function_in_app_thread( uint32_t param0, uint32_t param1, uint32_t funcPtr); uint8_t app_bt_get_a2dp_state(); #ifdef __cplusplus } #endif #endif /* BESBT_H */