KT24-1110_65E-HA-651B/include_lib/btstack/avctp_user.h
2024-11-10 18:44:17 +08:00

640 lines
24 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __AVCTP_USER_H__
#define __AVCTP_USER_H__
#include "typedef.h"
#include "btstack_typedef.h"
///***注意:该文件的枚举与库编译密切相关,主要是给用户提供调用所用。用户不能自己在中间添加值。*/
////----user (command) codes----////
typedef enum {
/*
使用user_send_cmd_prepare(USER_CMD_TYPE cmd,u16 param_len,u8 *param)发送命令
//返回0表支持参数个数正确返回1表不支持2是参数错误
要三个参数没参数说明的命令参数param_len传0param传NULL
例子A、USER_CTRL_HFP_CALL_SET_VOLUME命令需要1个参数的使用例子
u8 vol = 8;
user_send_cmd_prepare(USER_CTRL_HFP_CALL_SET_VOLUME,1, &vol);
例子B、USER_CTRL_DIAL_NUMBER 参数要用数组先存起来param_len是号码长度param可传参数数组指针
user_val->income_phone_num已经存好号码
user_send_cmd_prepare(USER_CTRL_DIAL_NUMBER,user_val->phone_num_len,user_val->income_phone_num);
*/
//链路操作部分
//回连,使用的是VM的地址一般按键操作不使用该接口
USER_CTRL_START_CONNECTION,
//通过地址去连接,如果知道地址想去连接使用该接口
USER_CTRL_START_CONNEC_VIA_ADDR,
//通过指定地址手动回连,该地址是最后一个断开设备的地址
USER_CTRL_START_CONNEC_VIA_ADDR_MANUALLY,
//通过地址去连接spp如果知道地址想去连接使用该接口
USER_CTRL_START_CONNEC_SPP_VIA_ADDR,
//断开连接,断开当前所有蓝牙连接
USER_CTRL_DISCONNECTION_HCI,
//取消链接
USER_CTRL_CONNECTION_CANCEL,
//读取远端名字
USER_CTRL_READ_REMOTE_NAME,
//连接或断开SCO或esco,选择这个命令会自动判断要断开还是连接sco
USER_CTRL_PAUSE_MUSIC,
//连接或断开SCO或esco,选择这个命令会自动判断要断开还是连接sco
USER_CTRL_SCO_LINK,
//连接SCO或esco
USER_CTRL_CONN_SCO,
//断开sco或esco
USER_CTRL_DISCONN_SCO,
//断开SDP一般按键操作不使用该接口
USER_CTRL_DISCONN_SDP_MASTER,
//关闭蓝牙可发现
USER_CTRL_WRITE_SCAN_DISABLE,
//打开蓝牙可发现
USER_CTRL_WRITE_SCAN_ENABLE,
// USER_CTRL_WRITE_SCAN_ENABLE_KEY ,
//关闭蓝牙可连接
USER_CTRL_WRITE_CONN_DISABLE,
//打开蓝牙可连接
USER_CTRL_WRITE_CONN_ENABLE,
// USER_CTRL_WRITE_CONN_ENABLE_KEY ,
//控制蓝牙搜索,需要搜索附件设备做功能的连续说明情况在补充完善功能
USER_CTRL_SEARCH_DEVICE,
//取消搜索
USER_CTRL_INQUIRY_CANCEL,
//取消配对
USER_CTRL_PAGE_CANCEL,
///进入sniff模式一般按键操作不使用该接口
USER_CTRL_SNIFF_IN,
USER_CTRL_SNIFF_EXIT,
USER_CTRL_ALL_SNIFF_EXIT,
//hfp链路部分
//控制打电话音量注意可能有些手机进度条有变化音量大小没变化同步要设置样机DAC音量
/*跟电话音量操作有关的操作最终都执行回调函数call_vol_change*/
USER_CTRL_HFP_CMD_BEGIN,
USER_CTRL_HFP_CALL_VOLUME_UP, /*音量加1手机可以同步显示*/
USER_CTRL_HFP_CALL_VOLUME_DOWN, /*音量减1手机可以同步显示*/
USER_CTRL_HFP_CALL_SET_VOLUME, /*设置固定值手机可以同步显示需要传1个音量值*/
USER_CTRL_HFP_CALL_GET_VOLUME, /*获取音量默认从call_vol_change返回*/
//来电接听电话
USER_CTRL_HFP_CALL_ANSWER,
//挂断电话
USER_CTRL_HFP_CALL_HANGUP,
//回拨上一个打出电话
USER_CTRL_HFP_CALL_LAST_NO,
//获取当前通话电话号码
USER_CTRL_HFP_CALL_CURRENT,
//通话过程中根据提示输入控制
/*例子
char num = '1';
user_send_cmd_prepare(USER_CTRL_HFP_DTMF_TONES,1,(u8 *)&num);
*/
//发送打电话时的信号选择DTMF tones ,有一个参数,参数支持{0-9, *, #, A, B, C, D}
USER_CTRL_HFP_DTMF_TONES,
//根据电话号码拨号
/**USER_CTRL_DIAL_NUMBER命令有参数参数要用数组先存起来
param_len是号码长度param可传参数数组指针*/
USER_CTRL_DIAL_NUMBER,
//发送电量 /**要连接上HFP才有用*/
USER_CTRL_SEND_BATTERY,
//*控制siri状态*//*可以注册回调函数获取返回值*/
USER_CTRL_HFP_GET_SIRI_STATUS,
//*开启siri*/
USER_CTRL_HFP_GET_SIRI_OPEN,
//*关闭siri,一般说完话好像自动关闭了,如果要提前终止可调用*/
USER_CTRL_HFP_GET_SIRI_CLOSE,
/*获取手机的日期和时间,苹果可以,一般安卓机好像都不行*/
USER_CTRL_HFP_GET_PHONE_DATE_TIME,
USER_CTRL_HFP_CMD_SEND_BIA,
/*获取手机厂商的命令 */
USER_CTRL_HFP_CMD_GET_MANUFACTURER,
/*更新当前的电量给手机*/
USER_CTRL_HFP_CMD_UPDATE_BATTARY,
//三方通话操作
//应答
USER_CTRL_HFP_THREE_WAY_ANSWER1, //挂断当前去听另一个(未接听或者在保留状态都可以)
USER_CTRL_HFP_THREE_WAY_ANSWER2, //保留当前去接听, 或者用于两个通话的切换
USER_CTRL_HFP_THREE_WAY_ANSWER1X,
USER_CTRL_HFP_THREE_WAY_ANSWER2X,
USER_CTRL_HFP_THREE_WAY_ANSWER3,
//拒听
USER_CTRL_HFP_THREE_WAY_REJECT, //拒绝后台来电
USER_CTRL_HFP_DISCONNECT, //断开HFP连接
USER_CTRL_HFP_CMD_END,
//音乐控制部分
USER_CTRL_AVCTP_CMD_BEGIN,
//音乐播放
USER_CTRL_AVCTP_OPID_PLAY,
//音乐暂停
USER_CTRL_AVCTP_OPID_PAUSE,
//音乐停止
USER_CTRL_AVCTP_OPID_STOP,
//音乐下一首
USER_CTRL_AVCTP_OPID_NEXT,
//音乐上一首
USER_CTRL_AVCTP_OPID_PREV,
//音乐快进
USER_CTRL_AVCTP_OPID_FORWARD,
//音乐快退
USER_CTRL_AVCTP_OPID_REWIND,
//音乐循环模式
USER_CTRL_AVCTP_OPID_REPEAT_MODE,
USER_CTRL_AVCTP_OPID_SHUFFLE_MODE,
//获取播放歌曲总时间和当前时间接口
USER_CTRL_AVCTP_OPID_GET_PLAY_TIME,
//同步音量接口
USER_CTRL_AVCTP_OPID_SEND_VOL,
// //AVCTP断开是音乐控制链路一般不使用
USER_CTRL_AVCTP_DISCONNECT,
// //AVCTP连接是音乐控制链路一般不使用
USER_CTRL_AVCTP_CONN,
USER_CTRL_AVCTP_CMD_END,
//高级音频部分
USER_CTRL_A2DP_CMD_BEGIN,
//有判断条件的,回连过程连接高级音频,避免手机连也自动发起连接,一般按键操作不使用该接口
USER_CTRL_AUTO_CONN_A2DP,
//连接高级音频,回来最后一个断开设备的地址
USER_CTRL_CONN_A2DP,
//断开高级音频,只断开高级音频链路,如果有电话还会保留
USER_CTRL_DISCONN_A2DP,
//maybe BQB test will use
USER_CTRL_A2DP_CMD_START ,
USER_CTRL_A2DP_CMD_CLOSE ,
USER_CTRL_A2DP_CMD_SUSPEND ,
USER_CTRL_A2DP_CMD_GET_CONFIGURATION ,
USER_CTRL_A2DP_CMD_ABORT ,
USER_CTRL_A2DP_CMD_END,
//蓝牙关闭
USER_CTRL_POWER_OFF,
//蓝牙开启
USER_CTRL_POWER_ON,
///*hid操作定义*/
USER_CTRL_HID_CMD_BEGIN,
//按键连接
USER_CTRL_HID_CONN,
// //只发一个按键,安卓手机使用
USER_CTRL_HID_ANDROID,
//只发一个按键,苹果和部分安卓手机适用
USER_CTRL_HID_IOS,
// //发两个拍照按键
USER_CTRL_HID_BOTH,
//HID断开
USER_CTRL_HID_DISCONNECT,
//Home Key,apply to IOS and Android
USER_CTRL_HID_HOME ,
//Return Key,only support Android
USER_CTRL_HID_RETURN ,
//LeftArrow Key
USER_CTRL_HID_LEFTARROW ,
//RightArrow Key
USER_CTRL_HID_RIGHTARROW ,
//Volume Up
USER_CTRL_HID_VOL_UP ,
//Volume Down
USER_CTRL_HID_VOL_DOWN ,
USER_CTRL_HID_SEND_DATA ,
USER_CTRL_HID_CMD_END,
/*对箱操作命令*/
USER_CTRL_TWS_CMD_BEGIN,
USER_CTRL_SYNC_TRAIN,
USER_CTRL_SYNC_TRAIN_SCAN,
USER_CTRL_MONITOR,
USER_CTRL_TWS_CONNEC_VIA_ADDR,
USER_CTRL_TWS_COTROL_CDM,
//清除对箱连接信息
USER_CTRL_TWS_CLEAR_INFO,
//断开对箱连接
USER_CTRL_TWS_DISCONNECTION_HCI,
//发起对箱连接
USER_CTRL_TWS_START_CONNECTION,
USER_CTRL_TWS_SYNC_CDM,
USER_CTRL_TWS_SYNC_SBC_CDM,
USER_CTRL_TWS_RESTART_SBC_CDM,
USER_CTRL_SYNC_TRAIN_CANCEL,
USER_CTRL_SYNC_TRAIN_SCAN_CANCEL,
USER_CTRL_TWS_SYNC_CDM_FUN,
USER_CTRL_TWS_LINEIN_START,
USER_CTRL_TWS_LINEIN_CLOSE,
USER_CTRL_TWS_CMD_END,
///蓝牙串口发送命令
USER_CTRL_SPP_CMD_BEGIN,
/**USER_CTRL_SPP_SEND_DATA命令有参数参数会先存起来
param_len是数据长度param发送数据指针
返回0,表示准备成功会PENDing发完才返回
3表示上一包数据没发完*/
USER_CTRL_SPP_SEND_DATA, //len <= 512
USER_CTRL_SPP_TRY_SEND_DATA,//
USER_CTRL_SPP_UPDATA_DATA,
//serial port profile disconnect command
USER_CTRL_SPP_DISCONNECT,
USER_CTRL_SPP_CMD_END,
///pbg发送命令
USER_CTRL_PBG_CMD_BEGIN,
USER_CTRL_PBG_SEND_DATA,//len <= 512
USER_CTRL_PBG_TRY_SEND_DATA,//
USER_CTRL_PBG_CMD_END,
///adt 发送命令
USER_CTRL_ADT_CMD_BEGIN,
USER_CTRL_ADT_CONNECT,
USER_CTRL_ADT_KEY_MIC_OPEN,
USER_CTRL_ADT_SEND_DATA,//len <= 512
USER_CTRL_ADT_TRY_SEND_DATA,//
USER_CTRL_ADT_CMD_END,
///蓝牙电话本功能发送命令
USER_CTRL_PBAP_CMD_BEGIN,
//电话本功能读取通话记录的前n条
USER_CTRL_PBAP_READ_PART,
//电话本功能读全部记录
USER_CTRL_PBAP_READ_ALL,
//电话本功能中断读取记录
USER_CTRL_PBAP_STOP_READING,
USER_CTRL_PBAP_CMD_END,
//蓝牙其他操作
// //删除最新的一个设备记忆
// USER_CTRL_DEL_LAST_REMOTE_INFO ,
// //删除所有设备记忆
USER_CTRL_DEL_ALL_REMOTE_INFO,
USER_CTRL_TEST_KEY,
USER_CTRL_SEND_USER_INFO,
USER_CTRL_KEYPRESS,
USER_CTRL_PAIR,
USER_CTRL_AFH_CHANNEL,
USER_CTRL_HALF_SEC_LOOP_CREATE,
USER_CTRL_HALF_SEC_LOOP_DEL,
USER_CTRL_CMD_SYNC_VOL_INC,
USER_CTRL_CMD_SYNC_VOL_DEC,
USER_CTRL_CMD_CHANGE_PROFILE_MODE,
USER_CTRL_CMD_RESERVE_INDEX4,
USER_CTRL_CMD_RESUME_STACK,
USER_CTRL_AVCTP_OPID_GET_MUSIC_INFO,
USER_CTRL_LAST
} USER_CMD_TYPE;
////----反馈给客户使用的状态----////
typedef enum {
/*下面是一些即时反馈的状态,无法重复获取的状态*/
BT_STATUS_POWER_ON = 1, /*上电*/
BT_STATUS_POWER_OFF = 2,
BT_STATUS_INIT_OK, /*初始化完成*/
BT_STATUS_EXIT_OK, /*蓝牙退出完成*/
BT_STATUS_START_CONNECTED, /*开始连接*/
BT_STATUS_FIRST_CONNECTED, /*连接成功*/
BT_STATUS_SECOND_CONNECTED, /*连接成功*/
BT_STATUS_ENCRY_COMPLETE, /*加密完成*/
BT_STATUS_FIRST_DISCONNECT, /*断开连接*/
BT_STATUS_SECOND_DISCONNECT, /*断开连接*/
BT_STATUS_PHONE_INCOME, /*来电*/
BT_STATUS_PHONE_NUMBER, /*来电话号码*/
BT_STATUS_PHONE_MANUFACTURER, /*获取手机的厂商*/
BT_STATUS_PHONE_OUT, /*打出电话*/
BT_STATUS_PHONE_ACTIVE, /*接通电话*/
BT_STATUS_PHONE_HANGUP, /*挂断电话*/
BT_STATUS_BEGIN_AUTO_CON, /*发起回连*/
BT_STATUS_MUSIC_SOUND_COME, /*库中加入auto mute判断音乐播放开始*/
BT_STATUS_MUSIC_SOUND_GO, /*库中加入auto mute判断音乐播放暂停*/
BT_STATUS_RESUME, /*后台有效,手动切回蓝牙*/
BT_STATUS_RESUME_BTSTACK, /*后台有效,后台时来电切回蓝牙*/
BT_STATUS_SUSPEND, /*蓝牙挂起,退出蓝牙*/
BT_STATUS_LAST_CALL_TYPE_CHANGE, /*最后拨打电话的类型,只区分打入和打出两种状态*/
BT_STATUS_CALL_VOL_CHANGE, /*通话过程中设置音量会产生这个状态变化*/
BT_STATUS_SCO_STATUS_CHANGE, /*当esco/sco连接或者断开时会产生这个状态变化*/
BT_STATUS_CONNECT_WITHOUT_LINKKEY, /*判断是首次连接还是配对后的连接主要依据要不要简易配对或者pin code*/
BT_STATUS_PHONE_BATTERY_CHANGE, /*电话电量变化该状态仅6个等级0-5*/
BT_STATUS_RECONNECT_LINKKEY_LOST, /*回连时发现linkkey丢失了即手机取消配对了*/
BT_STATUS_RECONN_OR_CONN, /*回连成功还是被连接*/
BT_STATUS_BT_TEST_BOX_CMD, /*蓝牙收到测试盒消息。1-升级2-fast test*/
BT_STATUS_BT_TWS_CONNECT_CMD,
BT_STATUS_SNIFF_STATE_UPDATE, /*SNIFF STATE UPDATE*/
BT_STATUS_TONE_BY_FILE_NAME, /*直接使用文件名播放提示音*/
BT_STATUS_PHONE_DATE_AND_TIME, /*获取到手机的时间和日期,注意会有兼容性问题*/
BT_STATUS_INBAND_RINGTONE,
BT_STATUS_VOICE_RECOGNITION,
BT_STATUS_AVRCP_INCOME_OPID, /*收到远端设备发过来的AVRCP命令*/
BT_STATUS_HFP_SERVICE_LEVEL_CONNECTION_OK,
BT_STATUS_CONN_A2DP_CH,
BT_STATUS_CONN_HFP_CH,
BT_STATUS_INQUIRY_TIMEOUT,
/*下面是1个持续的状态是get_stereo_bt_connect_status获取*/
/*下面是6个持续的状态是get_bt_connect_status()获取*/
BT_STATUS_INITING, /*正在初始化*/
BT_STATUS_WAITINT_CONN, /*等待连接*/
BT_STATUS_AUTO_CONNECTINT, /*正在回连*/
BT_STATUS_CONNECTING, /*已连接,没有电话和音乐在活动*/
BT_STATUS_TAKEING_PHONE, /*正在电话*/
BT_STATUS_PLAYING_MUSIC, /*正在音乐*/
BT_STATUS_A2DP_MEDIA_START,
BT_STATUS_A2DP_MEDIA_STOP,
BT_STATUS_BROADCAST_STATE,/*braoadcaset中*/
BT_STATUS_TRIM_OVER, /*测试盒TRIM完成*/
} STATUS_FOR_USER;
typedef enum {
BT_CALL_BATTERY_CHG = 0, //电池电量改变
BT_CALL_SIGNAL_CHG, //网络信号改变
BT_CALL_INCOMING, //电话打入
BT_CALL_OUTGOING, //电话打出
BT_CALL_ACTIVE, //接通电话
BT_CALL_HANGUP, //电话挂断
BT_CALL_ALERT, //远端reach
BT_CALL_VOL_CHANGED,
} BT_CALL_IND_STA;
typedef enum {
BT_MUSIC_STATUS_IDLE = 0,
BT_MUSIC_STATUS_STARTING,
BT_MUSIC_STATUS_SUSPENDING,
} BT_MUSIC_STATE; //音乐状态
#define SYS_BT_EVENT_TYPE_CON_STATUS (('C' << 24) | ('O' << 16) | ('N' << 8) | '\0')
#define SYS_BT_EVENT_TYPE_HCI_STATUS (('H' << 24) | ('C' << 16) | ('I' << 8) | '\0')
#define REMOTE_DEFAULT 0x00
#define REMOTE_SINK 0x01
#define REMOTE_SOURCE 0x02
#define SPP_CH 0x01
#define HFP_CH 0x02
#define A2DP_CH 0x04 //media
#define AVCTP_CH 0x08
#define HID_CH 0x10
#define AVDTP_CH 0x20
#define PBAP_CH 0x40
#define HFP_AG_CH 0x80
#define A2DP_SRC_CH 0x2000
struct sniff_ctrl_config_t {
u16 sniff_max_interval;
u16 sniff_mix_interval;
u16 sniff_attemp;
u16 sniff_timeout;
u8 sniff_addr[6];
};
extern u32 user_send_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param);
extern u32 user_emitter_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param);
u8 get_emitter_connect_status(void);
u16 get_emitter_curr_channel_state();
u8 get_emitter_a2dp_status(void);
/*
u16 get_curr_channel_state(); 与 channel 判断区分
主动获取当前链路的连接状态,可以用来判断有哪些链路连接上了
*/
extern u16 get_curr_channel_state();
/*
u8 get_call_status(); 与BT_CALL_IND_STA 枚举的值判断
用于获取当前蓝牙电话的状态
*/
extern u8 get_call_status();
extern void user_cmd_ctrl_init(void *var);
/******当前连接的设备是jl测试盒**********/
extern bool get_remote_test_flag();
extern void set_remote_test_flag(u8 own_remote_test);
extern void bt_fast_test_handle_register(void (*handle)(void));
extern void bt_dut_test_handle_register(void (*handle)(u8));
extern void inquiry_result_handle_register(void (*handle)(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi));
/*个性化参数设置*/
/*用户调试设置地址6个byte*/
extern void __set_bt_mac_addr(u8 *addr);
/*用户调试设置name,最长32个字符*/
extern void __set_host_name(const char *name, u8 len);
/*用户调试设置pin code*/
extern void __set_pin_code(const char *code);
/*该接口用于设置上电回连需要依次搜索设备的个数。*/
extern void __set_auto_conn_device_num(u8 num);
/*//回连的超时设置。ms单位。但是对手机发起的连接是没作用的*/
extern void __set_super_timeout_value(u16 time);
/*外部设置支持什么协议*/
extern void bt_cfg_default_init(u8 support);
/*设置电量显示发送更新的周期时间为0表示关闭电量显示功能*/
extern void __bt_set_update_battery_time(u8 time);
/*给用户设置蓝牙支持连接的个数,主要用于控制控制可发现可连接和回连流程*/
extern void __set_user_ctrl_conn_num(u8 num);
/*提供接口外部设置要保留hfp不要蓝牙通话*/
extern void __set_disable_sco_flag(bool flag);
/*提供接口外部设置简易配对参数*/
extern void __set_simple_pair_param(u8 io_cap, u8 oob_data, u8 mitm);
/*有些自选接口用来实现个性化功能流程,回调函数注册,记得常来看看哟*/
extern void get_battery_value_register(int (*handle)(void)); /*电量发送时获取电量等级的接口注册*/
extern void music_vol_change_handle_register(void (*handle)(int vol), int (*handle2)(void)); /*手机更样机音乐模式的音量同步*/
extern void read_remote_name_handle_register(void (*handle)(u8 status, u8 *addr, u8 *name)); /*获取到名字后的回调函数接口注册函数*/
extern void spp_data_deal_handle_register(void (*handler)(u8 packet_type, u16 channel, u8 *packet, u16 size)); /*支持串口功能的数据处理接口*/
extern void discon_complete_handle_register(void (*handle)(u8 *addr, int reason)); /*断开或者连接上会调用的函数,给客户反馈信息*/
extern void update_bt_current_status(u8 *addr, u8 new_status, u8 conn_status);
extern u8 get_bt_connect_status(void);
extern u8 a2dp_get_status(void);
/*//回连的超时设置。ms单位。但是对手机发起的连接是没作用的*/
extern void __set_super_timeout_value(u16 time);
/*//回连page的超时设置。ms单位*/
extern void __set_page_timeout_value(u16 time);
/*上电自动搜索设备的个数*/
extern u8 get_current_poweron_memory_search_index(u8 *temp_mac_addr);
extern void clear_current_poweron_memory_search_index(u8 inc);
extern void __set_user_background_goback(u8 en);
extern bool user_sniff_check_req(u8 sniff_cnt_time);
extern int tws_updata_phone_wait_con_addr(u8 *addr);
extern int tws_updata_internal_addr(u8 *internal_addr_local, u8 *internal_addr_remote);
extern void bt_discon_complete_handle(u8 *addr, int reason);
extern bool is_1t2_connection(void);
extern u8 get_total_connect_dev(void);
extern u8 is_bt_conn_hfp_hangup(u8 *addr);
extern void infor_2_user_handle_register(int (*handle)(u8 *info, u16 len), u8 *buffer_ptr);
extern void bt_music_info_handle_register(void (*handler)(u8 type, u32 time, u8 *info, u16 len));
extern void set_bt_vm_interface(u32 vm_index, void *interface);
extern void bredr_stack_init(void);
extern u8 get_a2dp_decoder_status();
extern bool bt_api_conn_mode_check(u8 enable, u8 *addr);
extern u8 bt_api_enter_sniff_status_check(u16 time_cnt, u8 *addr);
extern void user_cmd_timer_init();
extern void remove_user_cmd_timer();
extern u8 get_auto_connect_state(u8 *addr);
extern u8 get_esco_coder_busy_flag();
extern u8 hci_standard_connect_check(void);
extern void set_stack_exiting(u8 exit);
extern int a2dp_media_packet_codec_type(u8 *data);
extern void lib_make_ble_address(u8 *ble_address, u8 *edr_address);
extern u8 connect_last_device_from_vm();
extern u8 hci_standard_connect_check(void);
extern void __bt_set_hid_independent_flag(bool flag);
extern bool get_esco_busy_flag();
extern int btstack_exit();
extern int sbc_energy_check(u8 *packet, u16 size);
extern int a2dp_source_init(void *buf, u16 len, int deal_flag);
extern int hfp_ag_buf_init(void *buf, int size, int deal_flag);
extern void __set_emitter_enable_flag(u8 flag);
extern void hci_cancel_inquiry();
extern u8 hci_standard_connect_check(void);
extern void __emitter_send_media_toggle(u8 *addr, u8 toggle);
extern u8 is_a2dp_source_dev_null();
extern u8 get_total_connect_dev(void);
extern u8 get_remote_dev_info_index();
extern u8 check_tws_le_aa(void);
extern u8 get_esco_coder_busy_flag();
extern void tws_api_set_connect_aa(int);
extern void tws_le_acc_generation_init(void);
extern void tws_api_clear_connect_aa();
extern void clear_sniff_cnt(void);
extern u8 delete_last_device_from_vm();
#define BD_CLASS_WEARABLE_HEADSET 0x240404/*ios10.2 display headset icon*/
#define BD_CLASS_HANDS_FREE 0x240408/*ios10.2 display bluetooth icon*/
#define BD_CLASS_MICROPHONE 0x240410
#define BD_CLASS_LOUDSPEAKER 0x240414
#define BD_CLASS_HEADPHONES 0x240418
#define BD_CLASS_CAR_AUDIO 0x240420
#define BD_CLASS_HIFI_AUDIO 0x240428
#define BD_CLASS_PHONEBOOK 0x340404
#define BD_CLASS_PAN_DEV 0X020118
#define BD_CLASS_MOUSE 0x002580
#define BD_CLASS_KEYBOARD 0x002540
#define BD_CLASS_KEYBOARD_MOUSE 0x0025C0
#define BD_CLASS_TRANSFER_HEALTH 0x10091C
extern void __change_hci_class_type(u32 class);
extern void __set_support_msbc_flag(bool flag);
extern void __set_support_aac_flag(bool flag);
/*设置1拖2时电话是否抢断标识*/
extern void __set_hfp_switch(u8 switch_en);
/*
*设置1拖2时电话是否恢复标识
*通话结束的时候,如果还有手机在通话,自动切到蓝牙端
*/
extern void __set_hfp_restore(u8 restore_en);
/*当前设备被打断时是否自动暂停*/
extern void __set_auto_pause_flag(u8 flag);
/*当前设备被打断时是否自动暂停*/
extern void __set_auto_pause_flag(u8 flag);
/*高级音频设置标志是否允许后者打断前者*/
extern void __set_music_break_in_flag(u8 flag);
/*高级音频打断检测数据包阈值设置*/
extern void __set_a2dp_sound_detect_counter(u8 sound_come, u8 sound_go);
/*pan的控制接口和发数接口,
addr指定就按指定的查找NULL就默认正在使用那个
cmd 下面定义的宏用户可以使用
param 传参数需要的值或者data包的长度
data 传的是要发数据的包指针
*/
#define USER_PAN_CMD_SEND_DATA 0xff
int user_pan_send_cmd(u8 *addr, u32 cmd, u32 param, u8 *data);
enum {
BD_ESCO_IDLE = 0, /*当前没有设备通话中*/
BD_ESCO_BUSY_CURRENT, /*当前地址对应的设备通话中*/
BD_ESCO_BUSY_OTHER, /*通话中的设备非当前地址*/
};
extern u8 check_esco_state_via_addr(u8 *addr);
/*判断是否主动回连*/
extern u8 get_auto_connect_state(u8 *addr);
typedef struct __hid_sdp_info {
u16 vid_private;
u16 pid_private;
u16 ver_private;
u8 sub_class;
u8 country_code;
bool virtual_cable;
bool reconnect_initiate;
bool sdp_disable;
bool battery_power;
bool remote_wake;
bool normally_connectable;
bool boot_device;
u16 version;
u16 parser_version;
u16 profile_version;
u16 supervision_timeout;
u16 language;
u16 bt_string_offset;
u16 descriptor_len;
u8 *descriptor;
char *service_name;
char *service_description;
char *provide_name;
void (*sdp_request_respone_callback)(u8 type);
u8 *extra_buf;
u8 extra_len;
} hid_sdp_info_t;
typedef struct {
u16 chl_id;
u16 data_len;
u8 *data_ptr;
} hid_s_param_t;
extern u16 sdp_create_diy_device_ID_service(u8 *buffer, u16 buffer_size);
extern u16 sdp_create_diy_hid_service(u8 *buffer, u16 buffer_size, const u8 *hid_descriptor, u16 hid_descriptor_size);
u8 get_remote_vol_sync(void);
void set_start_search_spp_device(u8 spp);
u8 restore_remote_device_info_opt(bd_addr_t *mac_addr, u8 conn_device_num, u8 id);
u8 restore_remote_device_info_profile(bd_addr_t *mac_addr, u8 device_num, u8 id, u8 profile);
/*remote dev type*/
/*0:unknow,1-android,2:apple_inc,0x03-xiaomi*/
enum {
REMOTE_DEV_UNKNOWN = 0,
REMOTE_DEV_ANDROID ,
REMOTE_DEV_IOS ,
REMOTE_DEV_XIAOMI ,
};
u8 remote_dev_company_ioctrl(bd_addr_t dev_addr, u8 op_flag, u8 value);
u8 hci_standard_link_check(void);
extern void XM_status_update(u8 status);
#endif