first
This commit is contained in:
53
include_lib/btstack/a2dp_media_codec.h
Normal file
53
include_lib/btstack/a2dp_media_codec.h
Normal file
@ -0,0 +1,53 @@
|
||||
#ifndef A2DP_MEDIA_CODEC_H
|
||||
#define A2DP_MEDIA_CODEC_H
|
||||
|
||||
|
||||
#include "generic/typedef.h"
|
||||
|
||||
#define seqn_after(a, b) ((s16)((s16)(b) - (s16)(a)) < 0)
|
||||
#define seqn_before(a, b) seqn_after(b, a)
|
||||
|
||||
extern int a2dp_media_get_packet(u8 **frame);
|
||||
|
||||
extern int a2dp_media_try_get_packet(u8 **frame);
|
||||
|
||||
extern int a2dp_media_get_remain_buffer_size();
|
||||
|
||||
extern int a2dp_media_get_remain_play_time(u8 include_tws);
|
||||
|
||||
extern int a2dp_media_get_total_data_len();
|
||||
|
||||
extern int a2dp_media_get_packet_num();
|
||||
|
||||
extern int a2dp_media_clear_packet_before_seqn(u16 seqn_number);
|
||||
|
||||
extern void *a2dp_media_fetch_packet(int *len, void *prev_packet);
|
||||
|
||||
extern void *a2dp_media_fetch_packet_and_wait(int *len, void *prev_packet, int msec);
|
||||
|
||||
extern void a2dp_media_free_packet(void *_packet);
|
||||
|
||||
extern int a2dp_media_channel_exist(void);
|
||||
|
||||
extern int a2dp_media_is_clearing_frame(void);
|
||||
|
||||
extern int a2dp_media_get_codec_type();
|
||||
|
||||
extern u32 a2dp_media_dump_rx_time(u8 *frame);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
733
include_lib/btstack/avctp_user.h
Normal file
733
include_lib/btstack/avctp_user.h
Normal file
@ -0,0 +1,733 @@
|
||||
#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传0,param传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, /* 接口扩展用来做HFP 连接 */
|
||||
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_ANSWER2,又发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,
|
||||
|
||||
/**有TWS命名的都不用了*/
|
||||
/*对箱操作命令*/
|
||||
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,
|
||||
/**音量同步接口,自动选择通过HID还是AVRCP来发送*/
|
||||
USER_CTRL_CMD_SYNC_VOL_INC,
|
||||
/**音量同步接口,自动选择通过HID还是AVRCP来发送*/
|
||||
USER_CTRL_CMD_SYNC_VOL_DEC,
|
||||
/*单独HID和普通蓝牙模式的切换接口,音箱SDK才有完整流程*/
|
||||
USER_CTRL_CMD_CHANGE_PROFILE_MODE,
|
||||
USER_CTRL_CMD_RESERVE_INDEX4,
|
||||
USER_CTRL_CMD_RESUME_STACK,
|
||||
//获取当前音乐的一些信息
|
||||
USER_CTRL_AVCTP_OPID_GET_MUSIC_INFO,
|
||||
|
||||
//MAP功能发送命令
|
||||
USER_CTRL_MAP_CMD_BEGIN,
|
||||
//MAP读取时间
|
||||
USER_CTRL_MAP_READ_TIME,
|
||||
//MAP读取未读短信
|
||||
USER_CTRL_MAP_READ_INDOX,
|
||||
//MAP读取已读短信
|
||||
USER_CTRL_MAP_READ_OUTDOX,
|
||||
//MAP读取已发读短信
|
||||
USER_CTRL_MAP_READ_SENT,
|
||||
//MAP读取删除短信
|
||||
USER_CTRL_MAP_READ_DELETED,
|
||||
//MAP读取草稿箱短信
|
||||
USER_CTRL_MAP_READ_DRAFT,
|
||||
//MAP停止读取
|
||||
USER_CTRL_MAP_STOP_READING,
|
||||
USER_CTRL_MAP_CMD_END,
|
||||
//不看协议栈的状态去调一次exit,关机的时候可能消息被阻塞住推上来导致SNIFF无法退出,影响后续的关机流程
|
||||
USER_CTRL_ALL_SNIFF_EXIT_BY_POWEROFF,
|
||||
|
||||
// 一拖二通话操作
|
||||
USER_CTRL_MULTI_HFP_CMD_BEGIN,
|
||||
// 设备间通话切换
|
||||
USER_CTRL_MULTI_ESCO_SWITCH,
|
||||
// 挂断打断设备通话
|
||||
USER_CTRL_MULTI_HFP_CALL_HANGUP_BREAK,
|
||||
//挂断当前通话,接听来电设备
|
||||
USER_CTRL_MULTI_HFP_CALL_HANGUP_BREAK_ACTIVE,
|
||||
//前台设备三方通话,挂断当前并接听
|
||||
USER_CTRL_MULTI_HFP_THREE_WAY_ANSWER1,
|
||||
//前台设备三方通话,保留当前并接听
|
||||
USER_CTRL_MULTI_HFP_THREE_WAY_ANSWER2,
|
||||
// 被打断设备三方通话,挂断当前接通来电
|
||||
USER_CTRL_MULTI_HFP_THREE_WAY_ANSWER1_BREAK,
|
||||
// 被打断设备三方通话,挂断当前接通来电并切换到耳机通话
|
||||
USER_CTRL_MULTI_HFP_THREE_WAY_ANSWER1_BREAK_SWITCH,
|
||||
// 被打断设备三方通话,保留当前接通来电
|
||||
USER_CTRL_MULTI_HFP_THREE_WAY_ANSWER2_BREAK,
|
||||
// 被打断设备三方通话,保留当前接通来电并切换到耳机通话
|
||||
USER_CTRL_MULTI_HFP_THREE_WAY_ANSWER2_BREAK_SWITCH,
|
||||
// 被打断设备三方通话,拒绝后台来电
|
||||
USER_CTRL_MULTI_HFP_THREE_WAY_ANSWER3_BREAK,
|
||||
USER_CTRL_MULTI_HFP_CMD_END,
|
||||
|
||||
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
|
||||
#define MAP_CH 0x8000
|
||||
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 int user_send_at_cmd_prepare(u8 *data, u16 len);
|
||||
/**发射器操作的几个接口*/
|
||||
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);
|
||||
/*获取的值上限是bt_set_auto_conn_device_num接口配置的值,一般用于做回连策略*/
|
||||
extern int btstack_get_num_of_remote_device_recorded();
|
||||
/*上电自动搜索设备的个数*/
|
||||
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);
|
||||
/*用来获取蓝牙连接的设备个数,不包含page状态的计数*/
|
||||
extern u8 get_total_connect_dev(void);
|
||||
/*可以通过地址查询HFP的状态*/
|
||||
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);
|
||||
/*音乐的ID3信息返回接口注册函数*/
|
||||
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);
|
||||
/*sniff 的计数查询*/
|
||||
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();
|
||||
//get_auto_connect_state有时效性,一般不用。可以用消息BT_STATUS_RECONN_OR_CONN
|
||||
extern u8 get_auto_connect_state(u8 *addr);
|
||||
//判断SCO/esco有没有正在使用,两个接口一样的
|
||||
extern u8 get_esco_coder_busy_flag();
|
||||
extern bool get_esco_busy_flag();
|
||||
/*有可能低层刚开始走了连接,但是上层还没有消息,不维护蓝牙的不要随便用*/
|
||||
extern u8 hci_standard_connect_check(void);
|
||||
/*设置一个标识给库里面说明正在退出蓝牙*/
|
||||
extern void set_stack_exiting(u8 exit);
|
||||
/*根据规则生产BLE的随机地址*/
|
||||
extern void lib_make_ble_address(u8 *ble_address, u8 *edr_address);
|
||||
/*查询最后一个VM记录的地址进行回连*/
|
||||
extern u8 connect_last_device_from_vm();
|
||||
/*配置协议栈支持HID功能,为了兼容以前的HID独立模式,音箱SDK有使用流程*/
|
||||
extern void __bt_set_hid_independent_flag(bool flag);
|
||||
extern int btstack_exit();
|
||||
/*能量检测之后有一些判断流程要走,非蓝牙开发不用*/
|
||||
extern int sbc_energy_check(u8 *packet, u16 size);
|
||||
extern int aac_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);
|
||||
/*用户使用USER_CTRL_INQUIRY_CANCEL就行,下面的用户层不直接使用*/
|
||||
extern void hci_cancel_inquiry();
|
||||
/*发射器启动还是暂停数据发送的接口,会发start和suspend命令*/
|
||||
extern void __emitter_send_media_toggle(u8 *addr, u8 toggle);
|
||||
/*查询当前有没有a2dp source(发射器的音频发送链路)在连接状态*/
|
||||
extern u8 is_a2dp_source_dev_null();
|
||||
/*选择用哪一块VM存储信息,非蓝牙维护人员不用*/
|
||||
extern u8 get_remote_dev_info_index();
|
||||
extern u8 check_tws_le_aa(void);
|
||||
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);
|
||||
/**删除VM记录的最后一个设备信息*/
|
||||
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_SMART_PHONE 0x5A020C//0x40020C
|
||||
|
||||
#define BD_CLASS_MOUSE 0x002580
|
||||
#define BD_CLASS_KEYBOARD 0x002540
|
||||
#define BD_CLASS_KEYBOARD_MOUSE 0x0025C0
|
||||
#define BD_CLASS_REMOTE_CONTROL 0x00254C
|
||||
|
||||
#define BD_CLASS_TRANSFER_HEALTH 0x10091C
|
||||
|
||||
//LDAC采样率
|
||||
#define LDAC_SAMPLING_FREQ_44100 0x20
|
||||
#define LDAC_SAMPLING_FREQ_48000 0x10
|
||||
#define LDAC_SAMPLING_FREQ_88200 0x08
|
||||
#define LDAC_SAMPLING_FREQ_96000 0x04
|
||||
// 配置LDAC支持的采样率
|
||||
extern void __set_a2dp_ldac_sampling_freq(u8 a2dp_ldac_sampling_freq);
|
||||
|
||||
/*修改什么的类型,会影响到手机显示的图标*/
|
||||
extern void __change_hci_class_type(u32 class);
|
||||
/*配置通话使用16k的msbc还是8k的cvsd*/
|
||||
extern void __set_support_msbc_flag(bool flag);
|
||||
/*配置协议栈使用支持AAC的信息*/
|
||||
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, /*通话中的设备非当前地址*/
|
||||
};
|
||||
|
||||
enum {
|
||||
BD_GET_SECOND_ACTIVE = 0, /*获取当前设备的三方通话状态*/
|
||||
BD_GET_SECOND_BREAK, /*获取后台设备的三方通话状态*/
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
//获取当前是否有conn处于sniff状态
|
||||
bool bt_api_get_sniff_state();
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
582
include_lib/btstack/bluetooth.h
Normal file
582
include_lib/btstack/bluetooth.h
Normal file
@ -0,0 +1,582 @@
|
||||
#ifndef _BLUETOOTH_H_
|
||||
#define _BLUETOOTH_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
//LE
|
||||
#include "le/ble_data_types.h"
|
||||
#include "le/ble_api.h"
|
||||
#include "le/le_user.h"
|
||||
#include "le/att.h"
|
||||
#include "le/gatt.h"
|
||||
#include "le/sm.h"
|
||||
|
||||
#define ISO_SDU_DTAT_LENGTH 0x032c //812byte
|
||||
#define ISO_PDU_DTAT_LENGTH 251 //251byte
|
||||
#define ISO_PDU_INTERVAL_M_S 0x4e20 //20ms
|
||||
#define ISO_PDU_INTERVAL_S_M 0x4e20 //20ms
|
||||
#define HCI_ISO_DATA_PACKET 0x05
|
||||
|
||||
//Classic
|
||||
|
||||
|
||||
|
||||
|
||||
//Common
|
||||
#include "btstack_event.h"
|
||||
|
||||
|
||||
#define HCI_COMMAND_DATA_PACKET 0x01
|
||||
#define HCI_ACL_DATA_PACKET 0x02
|
||||
#define HCI_SCO_DATA_PACKET 0x03
|
||||
#define HCI_EVENT_PACKET 0x04
|
||||
|
||||
// OGFs
|
||||
#define OGF_LINK_CONTROL 0x01
|
||||
#define OGF_LINK_POLICY 0x02
|
||||
#define OGF_CONTROLLER_BASEBAND 0x03
|
||||
#define OGF_INFORMATIONAL_PARAMETERS 0x04
|
||||
#define OGF_STATUS_PARAMETERS 0x05
|
||||
#define OGF_TESTING 0x06
|
||||
#define OGF_LE_CONTROLLER 0x08
|
||||
#define OGF_VENDOR_LE_CONTROLLER 0x3e
|
||||
#define OGF_VENDOR 0x3f
|
||||
|
||||
|
||||
// Events from host controller to host
|
||||
|
||||
/**
|
||||
* @format 1
|
||||
* @param status
|
||||
*/
|
||||
#define HCI_EVENT_INQUIRY_COMPLETE 0x01
|
||||
|
||||
/**
|
||||
* @format 1B11132
|
||||
* @param num_responses
|
||||
* @param bd_addr
|
||||
* @param page_scan_repetition_mode
|
||||
* @param reserved1
|
||||
* @param reserved2
|
||||
* @param class_of_device
|
||||
* @param clock_offset
|
||||
*/
|
||||
#define HCI_EVENT_INQUIRY_RESULT 0x02
|
||||
|
||||
/**
|
||||
* @format 12B11
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param bd_addr
|
||||
* @param link_type
|
||||
* @param encryption_enabled
|
||||
*/
|
||||
#define HCI_EVENT_CONNECTION_COMPLETE 0x03
|
||||
/**
|
||||
* @format B31
|
||||
* @param bd_addr
|
||||
* @param class_of_device
|
||||
* @param link_type
|
||||
*/
|
||||
#define HCI_EVENT_CONNECTION_REQUEST 0x04
|
||||
/**
|
||||
* @format 121
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param reason
|
||||
*/
|
||||
#define HCI_EVENT_DISCONNECTION_COMPLETE 0x05
|
||||
/**
|
||||
* @format 12
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
*/
|
||||
#define HCI_EVENT_AUTHENTICATION_COMPLETE 0x06
|
||||
/**
|
||||
* @format 1BN
|
||||
* @param status
|
||||
* @param bd_addr
|
||||
* @param remote_name
|
||||
*/
|
||||
#define HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07
|
||||
/**
|
||||
* @format 121
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param encryption_enabled
|
||||
*/
|
||||
#define HCI_EVENT_ENCRYPTION_CHANGE 0x08
|
||||
/**
|
||||
* @format 12
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
*/
|
||||
#define HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE 0x09
|
||||
/**
|
||||
* @format 121
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param key_flag
|
||||
*/
|
||||
#define HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0A
|
||||
|
||||
#define HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE 0x0B
|
||||
|
||||
#define HCI_EVENT_READ_REMOTE_VERSION_INFORMATION_COMPLETE 0x0C
|
||||
|
||||
#define HCI_EVENT_QOS_SETUP_COMPLETE 0x0D
|
||||
|
||||
/**
|
||||
* @format 12R
|
||||
* @param num_hci_command_packets
|
||||
* @param command_opcode
|
||||
* @param return_parameters
|
||||
*/
|
||||
#define HCI_EVENT_COMMAND_COMPLETE 0x0E
|
||||
/**
|
||||
* @format 112
|
||||
* @param status
|
||||
* @param num_hci_command_packets
|
||||
* @param command_opcode
|
||||
*/
|
||||
#define HCI_EVENT_COMMAND_STATUS 0x0F
|
||||
|
||||
/**
|
||||
* @format 1
|
||||
* @param hardware_code
|
||||
*/
|
||||
#define HCI_EVENT_HARDWARE_ERROR 0x10
|
||||
|
||||
#define HCI_EVENT_FLUSH_OCCURRED 0x11
|
||||
|
||||
/**
|
||||
* @format 1B1
|
||||
* @param status
|
||||
* @param bd_addr
|
||||
* @param role
|
||||
*/
|
||||
#define HCI_EVENT_ROLE_CHANGE 0x12
|
||||
|
||||
// TODO: number_of_handles 1, connection_handle[H*i], hc_num_of_completed_packets[2*i]
|
||||
#define HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13
|
||||
|
||||
/**
|
||||
* @format 1H12
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param mode
|
||||
* @param interval
|
||||
*/
|
||||
#define HCI_EVENT_MODE_CHANGE_EVENT 0x14
|
||||
|
||||
// TODO: num_keys, bd_addr[B*i], link_key[16 octets * i]
|
||||
#define HCI_EVENT_RETURN_LINK_KEYS 0x15
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_PIN_CODE_REQUEST 0x16
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_LINK_KEY_REQUEST 0x17
|
||||
|
||||
// TODO: bd_addr B, link_key 16octets, key_type 1
|
||||
#define HCI_EVENT_LINK_KEY_NOTIFICATION 0x18
|
||||
|
||||
/**
|
||||
* @format 1
|
||||
* @param link_type
|
||||
*/
|
||||
#define HCI_EVENT_DATA_BUFFER_OVERFLOW 0x1A
|
||||
|
||||
/**
|
||||
* @format H1
|
||||
* @param handle
|
||||
* @param lmp_max_slots
|
||||
*/
|
||||
#define HCI_EVENT_MAX_SLOTS_CHANGED 0x1B
|
||||
|
||||
/**
|
||||
* @format 1H2
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param clock_offset
|
||||
*/
|
||||
#define HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE 0x1C
|
||||
|
||||
/**
|
||||
* @format 1H2
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param packet_types
|
||||
* @pnote packet_type is in plural to avoid clash with Java binding Packet.getPacketType()
|
||||
*/
|
||||
#define HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED 0x1D
|
||||
|
||||
#define HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE 0x20
|
||||
/**
|
||||
* @format 1B11321
|
||||
* @param num_responses
|
||||
* @param bd_addr
|
||||
* @param page_scan_repetition_mode
|
||||
* @param reserved
|
||||
* @param class_of_device
|
||||
* @param clock_offset
|
||||
* @param rssi
|
||||
*/
|
||||
#define HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x22
|
||||
|
||||
#define HCI_EVENT_READ_REMOTE_EXTERNED_FEATURES_COMPLETE 0x23
|
||||
/**
|
||||
* @format 1HB111221
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param bd_addr
|
||||
* @param link_type
|
||||
* @param transmission_interval
|
||||
* @param retransmission_interval
|
||||
* @param rx_packet_length
|
||||
* @param tx_packet_length
|
||||
* @param air_mode
|
||||
*/
|
||||
#define HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE 0x2C
|
||||
|
||||
// TODO: serialize extended_inquiry_response and provide parser
|
||||
/**
|
||||
* @format 1B11321
|
||||
* @param num_responses
|
||||
* @param bd_addr
|
||||
* @param page_scan_repetition_mode
|
||||
* @param reserved
|
||||
* @param class_of_device
|
||||
* @param clock_offset
|
||||
* @param rssi
|
||||
*/
|
||||
#define HCI_EVENT_EXTENDED_INQUIRY_RESPONSE 0x2F
|
||||
#define HCI_EVENT_EXTENDED_INQUIRY_RESULT 0x2F
|
||||
|
||||
/**
|
||||
* @format 1H
|
||||
* @param status
|
||||
* @param handle
|
||||
*/
|
||||
#define HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
|
||||
|
||||
#define HCI_EVENT_IO_CAPABILITY_REQUEST 0x31
|
||||
#define HCI_EVENT_IO_CAPABILITY_RESPONSE 0x32
|
||||
|
||||
/**
|
||||
* @format B4
|
||||
* @param bd_addr
|
||||
* @param numeric_value
|
||||
*/
|
||||
#define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x33
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_USER_PASSKEY_REQUEST 0x34
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_REMOTE_OOB_DATA_REQUEST 0x35
|
||||
|
||||
/**
|
||||
* @format 1B
|
||||
* @param status
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_SIMPLE_PAIRING_COMPLETE 0x36
|
||||
#define HCI_EVENT_LINK_SUPPERVISION_TIMEOUT_CHANGE_EVENT 0x38
|
||||
|
||||
#define HCI_EVENT_USER_PRESSKEY_NOTIFICATION 0x3B
|
||||
#define HCI_EVENT_REMOTE_KEYPRESS_NOTIFICATION 0x3C
|
||||
#define HCI_EVENT_REMOTE_SUPPORTED_FEATURES_NOTIFICATION 0x3D
|
||||
#define HCI_EVENT_LE_META 0x3E
|
||||
|
||||
// last used HCI_EVENT in 2.1 is 0x3d
|
||||
// last used HCI_EVENT in 4.1 is 0x57
|
||||
|
||||
#define HCI_EVENT_VENDOR_CONNECTION_COMPLETE 0xEF
|
||||
|
||||
//event definition for new vendor sub event
|
||||
#define HCI_EVENT_VENDOR_META 0xF5
|
||||
#define HCI_SUBEVENT_VENDOR_TEST_MODE_CFG 0x01
|
||||
|
||||
#define HCI_EVENT_VENDOR_FRE_OFFSET_TRIM 0xF6
|
||||
#define HCI_EVENT_VENDOR_ENCRY_COMPLETE 0xF7
|
||||
#define HCI_EVENT_VENDOR_NO_RECONN_ADDR 0xF8
|
||||
#define HCI_EVENT_VENDOR_SETUP_COMPLETE 0xF9
|
||||
#define HCI_EVENT_VENDOR_DUT 0xFA
|
||||
#define HCI_EVENT_VENDOR_OSC_INTERNAL 0xFB
|
||||
#define HCI_EVENT_VENDOR_FAST_TEST 0xFC
|
||||
#define HCI_EVENT_VENDOR_REMOTE_UPDATE 0xFD
|
||||
#define HCI_EVENT_VENDOR_REMOTE_TEST 0xFE
|
||||
#define HCI_EVENT_VENDOR_SPECIFIC 0xFF
|
||||
|
||||
#define BTSTACK_EVENT_HCI_CONNECTIONS_DELETE 0x6D
|
||||
|
||||
/**
|
||||
* @format 11H11B2221
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param role
|
||||
* @param peer_address_type
|
||||
* @param peer_address
|
||||
* @param conn_interval
|
||||
* @param conn_latency
|
||||
* @param supervision_timeout
|
||||
* @param master_clock_accuracy
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_CONNECTION_COMPLETE 0x01
|
||||
|
||||
// array of advertisements, not handled by event accessor generator
|
||||
#define HCI_SUBEVENT_LE_ADVERTISING_REPORT 0x02
|
||||
|
||||
/**
|
||||
* @format 11H222
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param conn_interval
|
||||
* @param conn_latency
|
||||
* @param supervision_timeout
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE 0x03
|
||||
|
||||
/**
|
||||
* @format 1HD2
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param random_number
|
||||
* @param encryption_diversifier
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04
|
||||
|
||||
/**
|
||||
* @format 1HD2
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param random_number
|
||||
* @param encryption_diversifier
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_LONG_TERM_KEY_REQUEST 0x05
|
||||
|
||||
/**
|
||||
* @format 1H2222
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param interval_min
|
||||
* @param interval_max
|
||||
* @param latency
|
||||
* @param timeout
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_REMOTE_CONNECTION_PARAMETER_REQUEST 0x06
|
||||
|
||||
/**
|
||||
* @format 1H2222
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param max_tx_octets
|
||||
* @param max_tx_time
|
||||
* @param max_rx_octets
|
||||
* @param max_rx_time
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_DATA_LENGTH_CHANGE 0x07
|
||||
|
||||
/**
|
||||
* @format 11QQ
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param dhkey_x x coordinate of P256 public key
|
||||
* @param dhkey_y y coordinate of P256 public key
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE 0x08
|
||||
/**
|
||||
* @format 11Q
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param dhkey Diffie-Hellman key
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_GENERATE_DHKEY_COMPLETE 0x09
|
||||
|
||||
/**
|
||||
* @format 11H11BBB2221
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param role
|
||||
* @param peer_address_type
|
||||
* @param perr_addresss
|
||||
* @param local_resolvable_private_addres
|
||||
* @param peer_resolvable_private_addres
|
||||
* @param conn_interval
|
||||
* @param conn_latency
|
||||
* @param supervision_timeout
|
||||
* @param master_clock_accuracy
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE 0x0A
|
||||
|
||||
// array of advertisements, not handled by event accessor generator
|
||||
#define HCI_SUBEVENT_LE_DIRECT_ADVERTISING_REPORT 0x0B
|
||||
|
||||
/**
|
||||
* @format 11211
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param TX_PHY
|
||||
* @param RX_PHY
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE 0x0C
|
||||
|
||||
// array of advertisements, not handled by event accessor generator
|
||||
#define HCI_SUBEVENT_LE_EXTENDED_ADVERTISING_REPORT 0x0D
|
||||
|
||||
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED 0x0E
|
||||
|
||||
/**
|
||||
* @format 1211111B
|
||||
* @param subevent_code
|
||||
* @param sync_handle
|
||||
* @param tx_power
|
||||
* @param rssi
|
||||
* @param unused
|
||||
* @param data_status
|
||||
* @param data_length
|
||||
* @param data
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT 0x0F
|
||||
|
||||
/**
|
||||
* @format 2
|
||||
* @param sync_handle
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_LOST 0x10
|
||||
|
||||
/**
|
||||
* @format
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_SCAN_TIMEOUT 0x11
|
||||
|
||||
/**
|
||||
* @format 1121
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param advertising_handle
|
||||
* @param connection_handle
|
||||
* @param num_completed_extended_advertising_events
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED 0x12
|
||||
|
||||
/**
|
||||
* @format 1116
|
||||
* @param subevent_code
|
||||
* @param advertising_handle
|
||||
* @param scanner_address_type
|
||||
* @param scanner_address
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED 0x13
|
||||
|
||||
/**
|
||||
* @format 21
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param channel_selection_algorithm
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM 0x14
|
||||
|
||||
|
||||
#define HCI_SUBEVENT_LE_VENDOR_INTERVAL_COMPLETE 0xF0
|
||||
|
||||
/**
|
||||
* @format
|
||||
*/
|
||||
#define HCI_EVENT_ANCS_META 0xEA
|
||||
|
||||
|
||||
/**
|
||||
* compact HCI Command packet description
|
||||
*/
|
||||
typedef struct {
|
||||
uint16_t opcode;
|
||||
const char *format;
|
||||
} hci_cmd_t;
|
||||
|
||||
int hci_send_cmd(const hci_cmd_t *cmd, ...);
|
||||
|
||||
|
||||
extern const hci_cmd_t hci_reset;
|
||||
extern const hci_cmd_t hci_read_bd_addr;
|
||||
extern const hci_cmd_t hci_read_local_supported_features;
|
||||
extern const hci_cmd_t hci_read_buffer_size;
|
||||
extern const hci_cmd_t hci_read_local_supported_commands;
|
||||
extern const hci_cmd_t hci_read_local_version_information;
|
||||
extern const hci_cmd_t hci_read_le_host_supported;
|
||||
extern const hci_cmd_t hci_read_local_name;
|
||||
extern const hci_cmd_t hci_write_class_of_device;
|
||||
extern const hci_cmd_t hci_write_local_name;
|
||||
extern const hci_cmd_t hci_write_scan_enable;
|
||||
extern const hci_cmd_t hci_set_event_mask;
|
||||
extern const hci_cmd_t hci_le_add_device_to_white_list;
|
||||
extern const hci_cmd_t hci_le_clear_white_list;
|
||||
extern const hci_cmd_t hci_le_connection_update;
|
||||
extern const hci_cmd_t hci_le_create_connection;
|
||||
extern const hci_cmd_t hci_le_create_connection_cancel;
|
||||
extern const hci_cmd_t hci_le_encrypt;
|
||||
extern const hci_cmd_t hci_le_generate_dhkey;
|
||||
extern const hci_cmd_t hci_le_long_term_key_negative_reply;
|
||||
extern const hci_cmd_t hci_le_long_term_key_request_reply;
|
||||
extern const hci_cmd_t hci_le_rand;
|
||||
extern const hci_cmd_t hci_le_read_advertising_channel_tx_power;
|
||||
extern const hci_cmd_t hci_le_read_buffer_size;
|
||||
extern const hci_cmd_t hci_le_read_channel_map;
|
||||
extern const hci_cmd_t hci_le_read_local_p256_public_key;
|
||||
extern const hci_cmd_t hci_le_read_maximum_data_length;
|
||||
extern const hci_cmd_t hci_le_read_remote_used_features;
|
||||
extern const hci_cmd_t hci_le_read_suggested_default_data_length;
|
||||
extern const hci_cmd_t hci_le_read_supported_features;
|
||||
extern const hci_cmd_t hci_le_read_supported_states;
|
||||
extern const hci_cmd_t hci_le_read_white_list_size;
|
||||
extern const hci_cmd_t hci_le_receiver_test;
|
||||
extern const hci_cmd_t hci_le_remove_device_from_white_list;
|
||||
extern const hci_cmd_t hci_le_set_advertise_enable;
|
||||
extern const hci_cmd_t hci_le_set_advertising_data;
|
||||
extern const hci_cmd_t hci_le_set_advertising_parameters;
|
||||
extern const hci_cmd_t hci_le_set_data_length;
|
||||
extern const hci_cmd_t hci_le_set_event_mask;
|
||||
extern const hci_cmd_t hci_le_set_host_channel_classification;
|
||||
extern const hci_cmd_t hci_le_set_random_address;
|
||||
extern const hci_cmd_t hci_le_set_scan_enable;
|
||||
extern const hci_cmd_t hci_le_set_scan_parameters;
|
||||
extern const hci_cmd_t hci_le_set_scan_response_data;
|
||||
extern const hci_cmd_t hci_le_start_encryption;
|
||||
extern const hci_cmd_t hci_le_test_end;
|
||||
extern const hci_cmd_t hci_le_transmitter_test;
|
||||
extern const hci_cmd_t hci_le_write_suggested_default_data_length;
|
||||
extern const hci_cmd_t hci_le_set_phy;
|
||||
|
||||
extern const hci_cmd_t hci_le_set_ext_advertising_parameters;
|
||||
extern const hci_cmd_t hci_le_set_ext_advertising_data;
|
||||
extern const hci_cmd_t hci_le_set_ext_advertise_enable;
|
||||
extern const hci_cmd_t hci_le_set_ext_scan_parameters;
|
||||
extern const hci_cmd_t hci_le_set_ext_scan_enable;
|
||||
|
||||
enum VENDOR_REMOTE_TEST_VALUE {
|
||||
VENDOR_TEST_DISCONNECTED = 0,
|
||||
VENDOR_TEST_LEGACY_CONNECTED_BY_BT_CLASSIC,
|
||||
VENDOR_TEST_LEGACY_CONNECTED_BY_BLE,
|
||||
VENDOR_TEST_CONNECTED_WITH_TWS,
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
38
include_lib/btstack/bt_profile_config.h
Normal file
38
include_lib/btstack/bt_profile_config.h
Normal file
@ -0,0 +1,38 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : bt_profile_config.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Tongai
|
||||
|
||||
* Email : laotongai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2020-07-01 16:31
|
||||
|
||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef BT_PROFILE_H
|
||||
#define BT_PROFILE_H
|
||||
|
||||
|
||||
#define BT_BTSTACK_CLASSIC BIT(0)
|
||||
#define BT_BTSTACK_LE_ADV BIT(1)
|
||||
#define BT_BTSTACK_LE BIT(2)
|
||||
|
||||
extern const int config_stack_modules;
|
||||
#define STACK_MODULES_IS_SUPPORT(x) (config_stack_modules & (x))
|
||||
|
||||
|
||||
|
||||
extern u8 app_bredr_pool[];
|
||||
extern u8 app_le_pool[];
|
||||
extern u8 app_l2cap_pool[];
|
||||
extern u8 app_bredr_profile[];
|
||||
|
||||
extern u16 get_bredr_pool_len(void);
|
||||
extern u16 get_le_pool_len(void);
|
||||
extern u16 get_l2cap_stack_len(void);
|
||||
extern u16 get_profile_pool_len(void);
|
||||
|
||||
|
||||
#endif
|
||||
38
include_lib/btstack/btstack_error.h
Normal file
38
include_lib/btstack/btstack_error.h
Normal file
@ -0,0 +1,38 @@
|
||||
#ifndef BTSTACK_ERROR_H
|
||||
#define BTSTACK_ERROR_H
|
||||
|
||||
|
||||
#define ERROR_CODE_SUCCESS 0x00
|
||||
#define ERROR_CODE_PAGE_TIMEOUT 0x04
|
||||
#define ERROR_CODE_AUTHENTICATION_FAILURE 0x05
|
||||
#define ERROR_CODE_PIN_OR_KEY_MISSING 0x06
|
||||
#define ERROR_CODE_CONNECTION_TIMEOUT 0x08
|
||||
#define ERROR_CODE_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE_EXCEEDED 0x0A
|
||||
#define ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS 0x0B
|
||||
#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES 0x0D
|
||||
#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR 0x0F
|
||||
#define ERROR_CODE_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED 0x10
|
||||
#define ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION 0x13
|
||||
#define ERROR_CODE_CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16
|
||||
|
||||
#define CUSTOM_BB_AUTO_CANCEL_PAGE 0xFD //// app cancle page
|
||||
#define BB_CANCEL_PAGE 0xFE //// bb cancle page
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
6625
include_lib/btstack/btstack_event.h
Normal file
6625
include_lib/btstack/btstack_event.h
Normal file
File diff suppressed because it is too large
Load Diff
103
include_lib/btstack/btstack_lib.ld
Normal file
103
include_lib/btstack/btstack_lib.ld
Normal file
@ -0,0 +1,103 @@
|
||||
SECTIONS
|
||||
{
|
||||
.data : ALIGN(4)
|
||||
{
|
||||
btstack_data_start = .;
|
||||
*(.bt_stack_data)
|
||||
*(.ble_db_data)
|
||||
*(.ble_sm_data)
|
||||
*(.ble_att_data)
|
||||
*(.ble_gatt_data)
|
||||
|
||||
/*mesh*/
|
||||
BTSTACK_LE_HOST_MESH_DATA_START = .;
|
||||
. = (. +3) & ~ 3;
|
||||
_net_buf_pool_list = .;
|
||||
*(._net_buf_pool.static.*)
|
||||
|
||||
*(.ble_mesh_data)
|
||||
*(.ble_mesh_tinycrypt_data)
|
||||
BTSTACK_LE_HOST_MESH_DATA_SIZE = ABSOLUTE(. - BTSTACK_LE_HOST_MESH_DATA_START);
|
||||
|
||||
btstack_data_end = .;
|
||||
|
||||
} > ram0
|
||||
|
||||
.bss (NOLOAD) :ALIGN(4)
|
||||
{
|
||||
btstack_bss_start = .;
|
||||
*(.bt_stack_bss)
|
||||
*(.ble_db_bss)
|
||||
*(.ble_sm_bss)
|
||||
*(.ble_att_bss)
|
||||
*(.ble_gatt_bss)
|
||||
*(.btstack_pool)
|
||||
|
||||
/*mesh*/
|
||||
BTSTACK_LE_HOST_MESH_BSS_START = .;
|
||||
*(.ble_mesh_bss)
|
||||
*(.ble_mesh_tinycrypt_bss)
|
||||
BTSTACK_LE_HOST_MESH_BSS_SIZE = ABSOLUTE(. - BTSTACK_LE_HOST_MESH_BSS_START);
|
||||
|
||||
btstack_bss_end = .;
|
||||
} > ram0
|
||||
|
||||
.text : ALIGN(4)
|
||||
{
|
||||
btstack_code_start = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
|
||||
a2dp_source_media_codec_begin = .;
|
||||
KEEP(*(.a2dp_source_media_codec))
|
||||
a2dp_source_media_codec_end = .;
|
||||
a2dp_sink_media_probe_begin = .;
|
||||
KEEP(*(.a2dp_sink_media_probe))
|
||||
a2dp_sink_media_probe_end = .;
|
||||
|
||||
a2dp_sink_media_codec_begin = .;
|
||||
KEEP(*(.a2dp_sink_media_codec))
|
||||
a2dp_sink_media_codec_end = .;
|
||||
|
||||
a2dp_event_handler_begin = .;
|
||||
KEEP(*(.a2dp_event_handler))
|
||||
a2dp_event_handler_end = .;
|
||||
|
||||
sdp_record_item_begin = .;
|
||||
KEEP(*(.sdp_record_item))
|
||||
sdp_record_item_end = .;
|
||||
|
||||
bt_sleep_begin = .;
|
||||
KEEP(*(.bt_sleep))
|
||||
bt_sleep_end = .;
|
||||
|
||||
*(.bt_stack_const)
|
||||
*(.bt_stack_code)
|
||||
*(.ble_db_const)
|
||||
*(.ble_db_code)
|
||||
*(.ble_sm_const)
|
||||
*(.ble_sm_code)
|
||||
*(.ble_att_const)
|
||||
*(.ble_att_code)
|
||||
*(.ble_gatt_const)
|
||||
*(.ble_gatt_code)
|
||||
|
||||
/*mesh*/
|
||||
BTSTACK_LE_HOST_MESH_CODE_START = .;
|
||||
*(.ble_mesh_code)
|
||||
*(.ble_mesh_tinycrypt_code)
|
||||
|
||||
*(.ble_mesh_const)
|
||||
*(.ble_mesh_tinycrypt_const)
|
||||
BTSTACK_LE_HOST_MESH_CODE_SIZE = ABSOLUTE(. - BTSTACK_LE_HOST_MESH_CODE_START);
|
||||
|
||||
btstack_code_end = .;
|
||||
. = ALIGN(4);
|
||||
} > code0
|
||||
}
|
||||
|
||||
BTSTACK_LE_HOST_MESH_RAM_TOTAL = BTSTACK_LE_HOST_MESH_DATA_SIZE + BTSTACK_LE_HOST_MESH_BSS_SIZE;
|
||||
BTSTACK_LE_HOST_MESH_FLASH_TOTAL = BTSTACK_LE_HOST_MESH_CODE_SIZE;
|
||||
|
||||
BTSTACK_CODE_SIZE = (btstack_code_end - btstack_code_start) + (btstack_data_end - btstack_data_start);
|
||||
|
||||
9
include_lib/btstack/btstack_task.h
Normal file
9
include_lib/btstack/btstack_task.h
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef BTSTACK_TASK_H
|
||||
#define BTSTACK_TASK_H
|
||||
|
||||
int btstack_init();
|
||||
int btstack_exit();
|
||||
|
||||
void ble_bqb_test_thread_init(void);
|
||||
|
||||
#endif
|
||||
26
include_lib/btstack/btstack_typedef.h
Normal file
26
include_lib/btstack/btstack_typedef.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef _BTSTACK_TYPEDEF_H_
|
||||
#define _BTSTACK_TYPEDEF_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
#define BD_ADDR_LEN 6
|
||||
typedef uint8_t bd_addr_t[BD_ADDR_LEN];
|
||||
|
||||
typedef uint16_t hci_con_handle_t;
|
||||
|
||||
typedef int (*sm_stack_packet_handler_t)(uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
|
||||
typedef void (*btstack_packet_handler_t)(u8 packet_type, u16 channel, u8 *packet, u16 size);
|
||||
|
||||
typedef void (*ble_cbk_handler_t)(void);
|
||||
|
||||
void reverse_bd_addr(const bd_addr_t src, bd_addr_t dest);
|
||||
|
||||
void reverse_bytes(const u8 *src, u8 *dst, u32 len);
|
||||
|
||||
uint16_t little_endian_read_16(const uint8_t *buffer, int pos);
|
||||
uint32_t little_endian_read_24(const uint8_t *buffer, int pos);
|
||||
uint32_t little_endian_read_32(const uint8_t *buffer, int pos);
|
||||
|
||||
|
||||
#endif
|
||||
65
include_lib/btstack/frame_queque.h
Normal file
65
include_lib/btstack/frame_queque.h
Normal file
@ -0,0 +1,65 @@
|
||||
#ifndef __FRAME_QUEQUE_H
|
||||
#define __FRAME_QUEQUE_H
|
||||
#include<string.h>
|
||||
#include <stdint.h>
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
typedef unsigned char WORD8;
|
||||
typedef unsigned short int WORD16;
|
||||
typedef unsigned int WORD32;
|
||||
typedef unsigned long long WORD64;
|
||||
|
||||
typedef signed char SWORD8;
|
||||
typedef signed short int SWORD16;
|
||||
typedef signed int SWORD32;
|
||||
typedef signed long long SWORD64;
|
||||
|
||||
typedef unsigned char uint8_t;
|
||||
|
||||
#define FRAME_QUEQUE_MUTEX_ID semlock_t
|
||||
#define FRAME_QUEQUE_MUTEX_DEF semlock_t
|
||||
#define FRAME_QUEQUE_MUTEX_P(mutex_id) frame_mute_p(mutex_id)
|
||||
#define FRAME_QUEQUE_MUTEX_V(mutex_id) frame_mute_v(mutex_id)
|
||||
|
||||
typedef enum {
|
||||
APP_DUEROS_VER,
|
||||
APP_DUEROS_SEND,
|
||||
APP_TWS_BLE_SLAVE_SPEECH_START,
|
||||
APP_SPEECH_START_FROM_TWS,
|
||||
APP_SPEECH_STOP_FROM_TWS,
|
||||
APP_TWS_DUEROS_RAND_SET,
|
||||
APP_TWS_BLE_DUEROS_CONNECT,
|
||||
APP_TWS_BLE_DUEROS_DISCONNECT,
|
||||
} APP_CMD_TYPE ;
|
||||
|
||||
|
||||
typedef struct {
|
||||
int counter;
|
||||
} semlock_t;
|
||||
|
||||
typedef struct send_frame {
|
||||
void *buffer;
|
||||
WORD32 len;
|
||||
struct send_frame *next;
|
||||
} _GNU_PACKED_ SEND_FRAME;
|
||||
|
||||
typedef struct __frame_queque {
|
||||
SEND_FRAME *head;
|
||||
SEND_FRAME *tail;
|
||||
unsigned int depth;
|
||||
FRAME_QUEQUE_MUTEX_ID mutex;
|
||||
} _GNU_PACKED_ FRAME_QUEQUE;
|
||||
|
||||
|
||||
int frame_queque_is_empty(FRAME_QUEQUE *queque);
|
||||
int frame_push_queque(FRAME_QUEQUE *queque, SEND_FRAME *frame);
|
||||
SEND_FRAME *frame_pop_queque(FRAME_QUEQUE *queque);
|
||||
SEND_FRAME *frame_pop_queque_alloc(FRAME_QUEQUE *queque);
|
||||
int frame_queque_clear(FRAME_QUEQUE *queque);
|
||||
int frame_queque_init(FRAME_QUEQUE *queque);
|
||||
|
||||
void run_loop_register_for_app();
|
||||
void app_remove_stack_run(void);
|
||||
|
||||
#endif
|
||||
147
include_lib/btstack/le/att.h
Normal file
147
include_lib/btstack/le/att.h
Normal file
@ -0,0 +1,147 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : att.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : minxian
|
||||
|
||||
* Email : liminxian@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2020-07-01 16:33
|
||||
|
||||
* Copyright:(c)JIELI 2011-2020 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _BT_ATT_H_
|
||||
#define _BT_ATT_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "btstack/btstack_typedef.h"
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Minimum/default MTU
|
||||
#define ATT_DEFAULT_MTU 23
|
||||
|
||||
#define ATT_EVENT_MTU_EXCHANGE_COMPLETE 0xB5
|
||||
#define ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE 0xB6
|
||||
#define ATT_EVENT_CAN_SEND_NOW 0xB7
|
||||
|
||||
#define ATT_TRANSACTION_MODE_NONE 0x0
|
||||
#define ATT_TRANSACTION_MODE_ACTIVE 0x1
|
||||
#define ATT_TRANSACTION_MODE_EXECUTE 0x2
|
||||
#define ATT_TRANSACTION_MODE_CANCEL 0x3
|
||||
#define ATT_TRANSACTION_MODE_VALIDATE 0x4
|
||||
|
||||
#define ATT_PROPERTY_BROADCAST 0x01
|
||||
#define ATT_PROPERTY_READ 0x02
|
||||
#define ATT_PROPERTY_WRITE_WITHOUT_RESPONSE 0x04
|
||||
#define ATT_PROPERTY_WRITE 0x08
|
||||
#define ATT_PROPERTY_NOTIFY 0x10
|
||||
#define ATT_PROPERTY_INDICATE 0x20
|
||||
|
||||
|
||||
typedef enum {
|
||||
ATT_OP_AUTO_READ_CCC = 0, //server端 检查对方使能通知CCC来控制 notify or indicate发送
|
||||
ATT_OP_NOTIFY = 1, //server端 默认notify方式发送,不检查使能通知CCC (不需要对方回应答包,没有流控)
|
||||
ATT_OP_INDICATE = 2, //server端 默认INDICATE方式发送,不检查使能通知CCC (需要对方回应答包,有流控)
|
||||
ATT_OP_READ, //client端 单次读, 用于获取<=MTU 的数据包 (需要对方回应答包,有流控)
|
||||
ATT_OP_READ_LONG, //client端 多次读,用于支持获取>MTU 的数据包 (需要对方回应答包,有流控)
|
||||
ATT_OP_WRITE, //client端 写发送 (需要对方回应答包,有流控)
|
||||
ATT_OP_WRITE_WITHOUT_RESPOND,//client端 写发送 (不需要对方回应答包,没有流控)
|
||||
//add here
|
||||
|
||||
ATT_OP_CMD_MAX = 15,
|
||||
} att_op_type_e;
|
||||
|
||||
//------
|
||||
typedef struct {
|
||||
uint16_t start_group_handle;//
|
||||
uint16_t end_group_handle;
|
||||
uint16_t uuid16; //为0则是 uuid128
|
||||
uint8_t uuid128[16];
|
||||
} service_report_t; //==le_service_t
|
||||
|
||||
typedef struct {
|
||||
uint16_t start_handle;
|
||||
uint16_t value_handle; //属性操作handle
|
||||
uint16_t end_handle;
|
||||
uint16_t properties; //属性对应 ATT_PROPERTY_XXX
|
||||
uint16_t uuid16; //为0则是 uuid128
|
||||
uint8_t uuid128[16];
|
||||
} charact_report_t; //==le_characteristic_t
|
||||
|
||||
typedef struct {
|
||||
u16 packet_type; //数据包类型(notify,indicate,read_respone,...)
|
||||
u16 value_handle; //属性操作handle
|
||||
u16 value_offset; //包偏移
|
||||
u16 blob_length; //包长度
|
||||
u8 *blob; //包内容
|
||||
u16 conn_handle; //连接handle
|
||||
} att_data_report_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
service_report_t services;
|
||||
charact_report_t characteristic;
|
||||
u16 service_index;
|
||||
u16 characteristic_index;
|
||||
} search_result_t;
|
||||
|
||||
typedef struct {
|
||||
u16 handle;//descriptor's handle
|
||||
u16 uuid16;//为0则是 uuid128
|
||||
u8 uuid128[16];
|
||||
} charact_descriptor_t;
|
||||
|
||||
|
||||
void att_ccc_config_init(void);
|
||||
void att_set_ccc_config(uint16_t handle, uint16_t cfg);
|
||||
uint16_t att_get_ccc_config(uint16_t handle);
|
||||
void att_server_set_exchange_mtu(u16 con_handle);
|
||||
void att_set_db(uint8_t const *db);//change profile_data
|
||||
|
||||
//多机接口
|
||||
//初始化 CCC管理
|
||||
void multi_att_ccc_config_init(void);
|
||||
//设置CCC
|
||||
void multi_att_set_ccc_config(uint16_t conn_handle, uint16_t att_handle, uint16_t cfg);
|
||||
//获取CCC的值
|
||||
uint16_t multi_att_get_ccc_config(uint16_t conn_handle, uint16_t att_handle);
|
||||
//断开, 清链路CCC
|
||||
int multi_att_clear_ccc_config(uint16_t conn_handle);
|
||||
|
||||
// ATT Client Read Callback for Dynamic Data
|
||||
// - if buffer == NULL, don't copy data, just return size of value
|
||||
// - if buffer != NULL, copy data and return number bytes copied
|
||||
// @param con_handle of hci le connection
|
||||
// @param attribute_handle to be read
|
||||
// @param offset defines start of attribute value
|
||||
// @param buffer
|
||||
// @param buffer_size
|
||||
typedef uint16_t (*att_read_callback_t)(uint16_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
|
||||
// ATT Client Write Callback for Dynamic Data
|
||||
// @param con_handle of hci le connection
|
||||
// @param attribute_handle to be written
|
||||
// @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE
|
||||
// @param offset into the value - used for queued writes and long attributes
|
||||
// @param buffer
|
||||
// @param buffer_size
|
||||
// @param signature used for signed write commmands
|
||||
// @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer
|
||||
typedef int (*att_write_callback_t)(uint16_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
|
||||
void ble_att_server_setup_init(const u8 *profile_db, att_read_callback_t read_cbk, att_write_callback_t write_cbk);
|
||||
|
||||
void att_server_request_can_send_now_event(hci_con_handle_t con_handle);
|
||||
|
||||
int att_server_notify(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len);
|
||||
|
||||
int att_server_indicate(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len);
|
||||
|
||||
extern void att_server_init(uint8_t const *db, att_read_callback_t read_callback, att_write_callback_t write_callback);
|
||||
extern void att_server_register_packet_handler(btstack_packet_handler_t handler);
|
||||
|
||||
#endif
|
||||
1347
include_lib/btstack/le/ble_api.h
Normal file
1347
include_lib/btstack/le/ble_api.h
Normal file
File diff suppressed because it is too large
Load Diff
57
include_lib/btstack/le/ble_data_types.h
Normal file
57
include_lib/btstack/le/ble_data_types.h
Normal file
@ -0,0 +1,57 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : bluetooth_data_types.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author :
|
||||
*********************************************************************************************/
|
||||
|
||||
/**
|
||||
*/
|
||||
|
||||
#ifndef __BLUETOOTH_DATA_TYPES_H
|
||||
#define __BLUETOOTH_DATA_TYPES_H
|
||||
|
||||
#define BLUETOOTH_DATA_TYPE_FLAGS 0x01 // Flags
|
||||
#define BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS 0x02 // Incomplete List of 16-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS 0x03 // Complete List of 16-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_32_BIT_SERVICE_CLASS_UUIDS 0x04 // Incomplete List of 32-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_32_BIT_SERVICE_CLASS_UUIDS 0x05 // Complete List of 32-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS 0x06 // Incomplete List of 128-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS 0x07 // Complete List of 128-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_SHORTENED_LOCAL_NAME 0x08 // Shortened Local Name
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LOCAL_NAME 0x09 // Complete Local Name
|
||||
#define BLUETOOTH_DATA_TYPE_TX_POWER_LEVEL 0x0A // Tx Power Level
|
||||
#define BLUETOOTH_DATA_TYPE_CLASS_OF_DEVICE 0x0D // Class of Device
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C 0x0E // Simple Pairing Hash C
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C_192 0x0E // Simple Pairing Hash C-192
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F // Simple Pairing Randomizer R
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_192 0x0F // Simple Pairing Randomizer R-192
|
||||
#define BLUETOOTH_DATA_TYPE_DEVICE_ID 0x10 // Device ID
|
||||
#define BLUETOOTH_DATA_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 // Security Manager TK Value
|
||||
#define BLUETOOTH_DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS 0x11 // Security Manager Out of Band Flags
|
||||
#define BLUETOOTH_DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 // Slave Connection Interval Range
|
||||
#define BLUETOOTH_DATA_TYPE_LIST_OF_16_BIT_SERVICE_SOLICITATION_UUIDS 0x14 // List of 16-bit Service Solicitation UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_LIST_OF_32_BIT_SERVICE_SOLICITATION_UUIDS 0x1F // List of 32-bit Service Solicitation UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_LIST_OF_128_BIT_SERVICE_SOLICITATION_UUIDS 0x15 // List of 128-bit Service Solicitation UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA 0x16 // Service Data
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_16_BIT_UUID 0x16 // Service Data - 16-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_32_BIT_UUID 0x20 // Service Data - 32-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_128_BIT_UUID 0x21 // Service Data - 128-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE 0x22 // LE Secure Connections Confirmation Value
|
||||
#define BLUETOOTH_DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE 0x23 // LE Secure Connections Random Value
|
||||
#define BLUETOOTH_DATA_TYPE_URI 0x24 // URI
|
||||
#define BLUETOOTH_DATA_TYPE_INDOOR_POSITIONING 0x25 // Indoor Positioning
|
||||
#define BLUETOOTH_DATA_TYPE_TRANSPORT_DISCOVERY_DATA 0x26 // Transport Discovery Data
|
||||
#define BLUETOOTH_DATA_TYPE_PUBLIC_TARGET_ADDRESS 0x17 // Public Target Address
|
||||
#define BLUETOOTH_DATA_TYPE_RANDOM_TARGET_ADDRESS 0x18 // Random Target Address
|
||||
#define BLUETOOTH_DATA_TYPE_APPEARANCE 0x19 // Appearance
|
||||
#define BLUETOOTH_DATA_TYPE_ADVERTISING_INTERVAL 0x1A // Advertising Interval
|
||||
#define BLUETOOTH_DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B // LE Bluetooth Device Address
|
||||
#define BLUETOOTH_DATA_TYPE_LE_ROLE 0x1C // LE Role
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 0x1D // Simple Pairing Hash C-256
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 0x1E // Simple Pairing Randomizer R-256
|
||||
#define BLUETOOTH_DATA_TYPE_3D_INFORMATION_DATA 0x3D // 3D Information Data
|
||||
#define BLUETOOTH_DATA_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF // Manufacturer Specific Data
|
||||
|
||||
#endif
|
||||
58
include_lib/btstack/le/gatt.h
Normal file
58
include_lib/btstack/le/gatt.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : btstack_event.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Minxian
|
||||
|
||||
* Email : liminxian@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2020-07-01 16:23
|
||||
|
||||
* Copyright:(c)JIELI 2011-2020 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef __BT_GATT_H
|
||||
#define __BT_GATT_H
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
typedef struct {
|
||||
uint16_t start_group_handle;
|
||||
uint16_t end_group_handle;
|
||||
uint16_t uuid16;
|
||||
uint8_t uuid128[16];
|
||||
} le_service_t, gatt_client_service_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint16_t start_handle;
|
||||
uint16_t value_handle;
|
||||
uint16_t end_handle;
|
||||
uint16_t properties;
|
||||
uint16_t uuid16;
|
||||
uint8_t uuid128[16];
|
||||
} le_characteristic_t, gatt_client_characteristic_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t handle;
|
||||
uint16_t uuid16;
|
||||
uint8_t uuid128[16];
|
||||
} gatt_client_characteristic_descriptor_t;
|
||||
|
||||
void gatt_client_deserialize_service(const uint8_t *packet, int offset, gatt_client_service_t *service);
|
||||
|
||||
void gatt_client_deserialize_characteristic(const uint8_t *packet, int offset, gatt_client_characteristic_t *characteristic);
|
||||
|
||||
void gatt_client_deserialize_characteristic_descriptor(const uint8_t *packet, int offset, gatt_client_characteristic_descriptor_t *descriptor);
|
||||
|
||||
uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset);
|
||||
|
||||
uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t value_handle);
|
||||
|
||||
uint8_t gatt_client_write_value_of_characteristic_without_response(hci_con_handle_t con_handle, uint16_t value_handle, uint16_t value_length, uint8_t *value);
|
||||
|
||||
uint8_t gatt_client_write_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t value_handle, uint16_t value_length, uint8_t *data);
|
||||
|
||||
void gatt_client_request_can_send_now_event(hci_con_handle_t con_handle);
|
||||
|
||||
#endif
|
||||
201
include_lib/btstack/le/le_common_define.h
Normal file
201
include_lib/btstack/le/le_common_define.h
Normal file
@ -0,0 +1,201 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : le_counter.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2017-01-17 15:17
|
||||
|
||||
* Copyright:(c)JIELI 2011-2016 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
|
||||
#ifndef __LE_COMMON_DEFINE_H_
|
||||
#define __LE_COMMON_DEFINE_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include <stdint.h>
|
||||
#include "btstack/bluetooth.h"
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
#define ADV_SET_1M_PHY 1
|
||||
#define ADV_SET_2M_PHY 2
|
||||
#define ADV_SET_CODED_PHY 3
|
||||
|
||||
#define SCAN_SET_1M_PHY BIT(0)
|
||||
#define SCAN_SET_2M_PHY BIT(1)
|
||||
#define SCAN_SET_CODED_PHY BIT(2)
|
||||
|
||||
#define INIT_SET_1M_PHY BIT(0)
|
||||
#define INIT_SET_2M_PHY BIT(1)
|
||||
#define INIT_SET_CODED_PHY BIT(2)
|
||||
|
||||
#define CONN_SET_1M_PHY BIT(0)
|
||||
#define CONN_SET_2M_PHY BIT(1)
|
||||
#define CONN_SET_CODED_PHY BIT(2)
|
||||
|
||||
#define CONN_SET_PHY_OPTIONS_NONE 0
|
||||
#define CONN_SET_PHY_OPTIONS_S2 1
|
||||
#define CONN_SET_PHY_OPTIONS_S8 2
|
||||
|
||||
struct conn_param_t {
|
||||
u16 interval;
|
||||
u16 latency;
|
||||
u16 timeout;
|
||||
};
|
||||
|
||||
// #define NOTIFY_TYPE 1
|
||||
// #define INDICATION_TYPE 2
|
||||
// Minimum/default MTU
|
||||
|
||||
#define ATT_CTRL_BLOCK_SIZE (188) //note: fixed,libs use
|
||||
#define ATT_PACKET_HEAD_SIZE (6) //note: fixed,libs use
|
||||
|
||||
/*adv type*/
|
||||
enum {
|
||||
ADV_IND = 0, /*Connectable and scannable undirected advertising*/
|
||||
ADV_DIRECT_IND, /*Connectable high duty cycle directed advertising */
|
||||
ADV_SCAN_IND, /*Scannable undirected advertising*/
|
||||
ADV_NONCONN_IND, /*Non connectable undirected advertising*/
|
||||
ADV_DIRECT_IND_LOW, /*Connectable low duty cycle directed advertising*/
|
||||
};
|
||||
|
||||
|
||||
/*adv channel*/
|
||||
#define ADV_CHANNEL_37 BIT(0)
|
||||
#define ADV_CHANNEL_38 BIT(1)
|
||||
#define ADV_CHANNEL_39 BIT(2)
|
||||
#define ADV_CHANNEL_ALL (ADV_CHANNEL_37 | ADV_CHANNEL_38 | ADV_CHANNEL_39)
|
||||
|
||||
/*scan type*/
|
||||
enum {
|
||||
SCAN_PASSIVE = 0,
|
||||
SCAN_ACTIVE,
|
||||
};
|
||||
|
||||
/*advertising report,event type*/
|
||||
#define EVENT_ADV_IND ADV_IND
|
||||
#define EVENT_ADV_DIRECT_IND ADV_DIRECT_IND
|
||||
#define EVENT_ADV_SCAN_IND ADV_SCAN_IND
|
||||
#define EVENT_ADV_NONCONN_IND ADV_NONCONN_IND
|
||||
#define EVENT_SCAN_RSP (4)
|
||||
|
||||
#define EVENT_DEFAULT_REPORT_BITMAP (0x1f)
|
||||
|
||||
|
||||
/*flags*/
|
||||
#define FLAGS_LIMITED_DISCOVERABLE_MODE BIT(0)
|
||||
#define FLAGS_GENERAL_DISCOVERABLE_MODE BIT(1)
|
||||
#define FLAGS_EDR_NOT_SUPPORTED BIT(2)
|
||||
#define FLAGS_LE_AND_EDR_SAME_CONTROLLER BIT(3)
|
||||
#define FLAGS_LE_AND_EDR_SAME_HOST BIT(4)
|
||||
|
||||
/*eir packet_type*/
|
||||
typedef enum {
|
||||
HCI_EIR_DATATYPE_FLAGS = 0x01,
|
||||
HCI_EIR_DATATYPE_MORE_16BIT_SERVICE_UUIDS = 0x02,
|
||||
HCI_EIR_DATATYPE_COMPLETE_16BIT_SERVICE_UUIDS = 0x03,
|
||||
HCI_EIR_DATATYPE_MORE_32BIT_SERVICE_UUIDS = 0x04,
|
||||
HCI_EIR_DATATYPE_COMPLETE_32BIT_SERVICE_UUIDS = 0x05,
|
||||
HCI_EIR_DATATYPE_MORE_128BIT_SERVICE_UUIDS = 0x06,
|
||||
HCI_EIR_DATATYPE_COMPLETE_128BIT_SERVICE_UUIDS = 0x07,
|
||||
HCI_EIR_DATATYPE_SHORTENED_LOCAL_NAME = 0x08,
|
||||
HCI_EIR_DATATYPE_COMPLETE_LOCAL_NAME = 0x09,
|
||||
HCI_EIR_DATATYPE_TX_POWER_LEVEL = 0x0A,
|
||||
HCI_EIR_DATATYPE_CLASS_OF_DEVICE = 0x0D,
|
||||
HCI_EIR_DATATYPE_SIMPLE_PAIRING_HASH_C = 0x0E,
|
||||
HCI_EIR_DATATYPE_SIMPLE_PAIRING_RANDOMIZER_R = 0x0F,
|
||||
HCI_EIR_DATATYPE_SECURITY_MANAGER_TK_VALUE = 0x10,
|
||||
HCI_EIR_DATATYPE_SECURITY_MANAGER_OOB_FLAGS = 0x11,
|
||||
HCI_EIR_DATATYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 0x12,
|
||||
HCI_EIR_DATATYPE_16BIT_SERVICE_SOLICITATION_UUIDS = 0x14,
|
||||
HCI_EIR_DATATYPE_128BIT_SERVICE_SOLICITATION_UUIDS = 0x15,
|
||||
HCI_EIR_DATATYPE_SERVICE_DATA = 0x16,
|
||||
HCI_EIR_DATATYPE_APPEARANCE_DATA = 0x19,
|
||||
HCI_EIR_DATATYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF
|
||||
} HCI_EIR_datatype_t;
|
||||
|
||||
|
||||
//按(长度 + 类型 + 内容)这样的格,组合填入广播包数据
|
||||
static inline u8 make_eir_packet_data(u8 *buf, u16 offset, u8 data_type, u8 *data, u8 data_len)
|
||||
{
|
||||
if (ADV_RSP_PACKET_MAX - offset < data_len + 2) {
|
||||
return offset + data_len + 2;
|
||||
}
|
||||
|
||||
buf[0] = data_len + 1;
|
||||
buf[1] = data_type;
|
||||
memcpy(buf + 2, data, data_len);
|
||||
return data_len + 2;
|
||||
}
|
||||
|
||||
//按(长度 + 类型 + 内容)这样的格,组合填入广播包数据
|
||||
static inline u8 make_eir_packet_val(u8 *buf, u16 offset, u8 data_type, u32 val, u8 val_size)
|
||||
{
|
||||
if (ADV_RSP_PACKET_MAX - offset < val_size + 2) {
|
||||
return offset + val_size + 2;
|
||||
}
|
||||
|
||||
buf[0] = val_size + 1;
|
||||
buf[1] = data_type;
|
||||
memcpy(buf + 2, &val, val_size);
|
||||
return val_size + 2;
|
||||
}
|
||||
|
||||
#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */
|
||||
#define BLE_APPEARANCE_GENERIC_PHONE 64 /* Generic Phone. */
|
||||
#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /* Generic Computer. */
|
||||
#define BLE_APPEARANCE_GENERIC_WATCH 192 /* Generic Watch. */
|
||||
#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /* Watch: Sports Watch. */
|
||||
#define BLE_APPEARANCE_GENERIC_CLOCK 256 /* Generic Clock. */
|
||||
#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /* Generic Display. */
|
||||
#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /* Generic Remote Control. */
|
||||
#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /* Generic Eye-glasses. */
|
||||
#define BLE_APPEARANCE_GENERIC_TAG 512 /* Generic Tag. */
|
||||
#define BLE_APPEARANCE_GENERIC_KEYRING 576 /* Generic Keyring. */
|
||||
#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /* Generic Media Player. */
|
||||
#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /* Generic Barcode Scanner. */
|
||||
#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /* Generic Thermometer. */
|
||||
#define BLE_APPEARANCE_THERMOMETER_EAR 769 /* Thermometer: Ear. */
|
||||
#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /* Generic Heart rate Sensor. */
|
||||
#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /* Heart Rate Sensor: Heart Rate Belt. */
|
||||
#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /* Generic Blood Pressure. */
|
||||
#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /* Blood Pressure: Arm. */
|
||||
#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /* Blood Pressure: Wrist. */
|
||||
#define BLE_APPEARANCE_GENERIC_HID 960 /* Human Interface Device (HID). */
|
||||
#define BLE_APPEARANCE_HID_KEYBOARD 961 /* Keyboard (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_MOUSE 962 /* Mouse (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_JOYSTICK 963 /* Joystick (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_GAMEPAD 964 /* Gamepad (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /* Digitizer Tablet (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_CARD_READER 966 /* Card Reader (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /* Digital Pen (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_BARCODE 968 /* Barcode Scanner (HID Subtype). */
|
||||
#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /* Generic Glucose Meter. */
|
||||
#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /* Generic Running Walking Sensor. */
|
||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /* Running Walking Sensor: In-Shoe. */
|
||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /* Running Walking Sensor: On-Shoe. */
|
||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /* Running Walking Sensor: On-Hip. */
|
||||
#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /* Generic Cycling. */
|
||||
#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /* Cycling: Cycling Computer. */
|
||||
#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /* Cycling: Speed Sensor. */
|
||||
#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /* Cycling: Cadence Sensor. */
|
||||
#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /* Cycling: Power Sensor. */
|
||||
#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /* Cycling: Speed and Cadence Sensor. */
|
||||
#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /* Generic Pulse Oximeter. */
|
||||
#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /* Fingertip (Pulse Oximeter subtype). */
|
||||
#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /* Wrist Worn(Pulse Oximeter subtype). */
|
||||
#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /* Generic Weight Scale. */
|
||||
#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /* Generic Outdoor Sports Activity. */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /* Location Display Device (Outdoor Sports Activity subtype). */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /* Location and Navigation Display Device (Outdoor Sports Activity subtype). */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /* Location Pod (Outdoor Sports Activity subtype). */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /* Location and Navigation Pod (Outdoor Sports Activity subtype). */
|
||||
|
||||
extern void le_l2cap_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size));
|
||||
#endif
|
||||
|
||||
|
||||
140
include_lib/btstack/le/le_user.h
Normal file
140
include_lib/btstack/le/le_user.h
Normal file
@ -0,0 +1,140 @@
|
||||
|
||||
#ifndef _LE_USER_H_
|
||||
#define _LE_USER_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "btstack/btstack_typedef.h"
|
||||
#include "ble_api.h"
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define BT_NAME_LEN_MAX 29
|
||||
#define ADV_RSP_PACKET_MAX 31
|
||||
|
||||
// hci con handles (12 bit): 0x0000..0x0fff
|
||||
#define HCI_CON_HANDLE_INVALID 0xffff
|
||||
|
||||
#define BTSTACK_EVENT_STATE 0x60
|
||||
#define L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE 0x77
|
||||
|
||||
#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xD6
|
||||
|
||||
#define SM_EVENT_JUST_WORKS_REQUEST 0xD0
|
||||
#define SM_EVENT_JUST_WORKS_CANCEL 0xD1
|
||||
#define SM_EVENT_PASSKEY_DISPLAY_NUMBER 0xD2
|
||||
#define SM_EVENT_PASSKEY_DISPLAY_CANCEL 0xD3
|
||||
#define SM_EVENT_PASSKEY_INPUT_NUMBER 0xD4
|
||||
#define SM_EVENT_PASSKEY_INPUT_CANCEL 0xD5
|
||||
#define SM_EVENT_PAIR_PROCESS 0xDF
|
||||
//0xdf 's sub
|
||||
#define SM_EVENT_PAIR_SUB_RECONNECT_START 0x01
|
||||
#define SM_EVENT_PAIR_SUB_PIN_KEY_MISS 0x02
|
||||
#define SM_EVENT_PAIR_SUB_PAIR_FAIL 0x03
|
||||
#define SM_EVENT_PAIR_SUB_PAIR_TIMEOUT 0x04
|
||||
#define SM_EVENT_PAIR_SUB_ENCRYPTION_FAIL 0x05
|
||||
#define SM_EVENT_PAIR_SUB_SEND_DISCONN 0x0f
|
||||
#define SM_EVENT_PAIR_SUB_ADD_LIST_SUCCESS 0x10
|
||||
#define SM_EVENT_PAIR_SUB_ADD_LIST_FAILED 0x11
|
||||
|
||||
|
||||
#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE 0
|
||||
#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION 1
|
||||
#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION 2
|
||||
|
||||
|
||||
#define GATT_EVENT_NOTIFICATION 0xA7
|
||||
#define GATT_EVENT_INDICATION 0xA8
|
||||
#define GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT 0xA5
|
||||
#define GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT 0xA6
|
||||
// #define GATT_EVENT_SERVICE_QUERY_RESULT 0xA1
|
||||
// #define GATT_EVENT_CHARACTERISTIC_QUERY_RESULT 0xA2
|
||||
#define GATT_EVENT_QUERY_COMPLETE 0xA0
|
||||
#define GAP_EVENT_ADVERTISING_REPORT 0xE2
|
||||
|
||||
// Authentication requirement flags
|
||||
#define SM_AUTHREQ_NO_BONDING 0x00
|
||||
#define SM_AUTHREQ_BONDING 0x01
|
||||
#define SM_AUTHREQ_MITM_PROTECTION 0x04
|
||||
#define SM_AUTHREQ_SECURE_CONNECTION 0x08
|
||||
#define SM_AUTHREQ_KEYPRESS 0x10
|
||||
#define SM_AUTHREQ_CT2 0x20
|
||||
|
||||
|
||||
#define L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE 0x77
|
||||
|
||||
|
||||
#define BT_OP_SUCCESS 0x00
|
||||
#define BT_ERR_ADVERTISING_TIMEOUT 0x3C
|
||||
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
struct ble_server_operation_t {
|
||||
int(*adv_enable)(void *priv, u32 enable);
|
||||
int(*disconnect)(void *priv);
|
||||
int(*get_buffer_vaild)(void *priv);
|
||||
int(*send_data)(void *priv, void *buf, u16 len);
|
||||
int(*regist_wakeup_send)(void *priv, void *cbk);
|
||||
int(*regist_recieve_cbk)(void *priv, void *cbk);
|
||||
int(*regist_state_cbk)(void *priv, void *cbk);
|
||||
int(*latency_enable)(void *priv, u32 enable);
|
||||
};
|
||||
|
||||
void ble_get_server_operation_table(struct ble_server_operation_t **interface_pt);
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
struct ble_client_operation_t {
|
||||
int(*scan_enable)(void *priv, u32 enable);
|
||||
int(*disconnect)(void *priv);
|
||||
int(*get_buffer_vaild)(void *priv);
|
||||
int(*write_data)(void *priv, void *buf, u16 len);
|
||||
int(*read_do)(void *priv);
|
||||
int(*regist_wakeup_send)(void *priv, void *cbk);
|
||||
int(*regist_recieve_cbk)(void *priv, void *cbk);
|
||||
int(*regist_state_cbk)(void *priv, void *cbk);
|
||||
int (*init_config)(void *priv, void *cfg);
|
||||
int (*opt_comm_send)(u16 handle, u8 *data, u16 len, u8 att_op_type);
|
||||
int (*set_force_search)(u8 onoff, s8 rssi);
|
||||
int (*create_connect)(u8 *addr, u8 addr_type, u8 mode);
|
||||
int (*create_connect_cannel)(void);
|
||||
int (*get_work_state)(void);
|
||||
int (*opt_comm_send_ext)(u16 conn_handle, u16 handle, u8 *data, u16 len, u8 att_op_type);
|
||||
};
|
||||
|
||||
struct ble_client_operation_t *ble_get_client_operation_table(void);
|
||||
|
||||
|
||||
static inline uint32_t ble_min(uint32_t a, uint32_t b)
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
//----------------------------------------
|
||||
|
||||
|
||||
|
||||
extern int get_ble_btstack_state(void);
|
||||
extern int get_indicate_state(void);
|
||||
|
||||
|
||||
extern u8 get_ble_local_name(u8 *name_buf);
|
||||
extern u8 get_ble_local_name_len();
|
||||
|
||||
|
||||
|
||||
|
||||
extern void hci_event_callback_set(void(*cbk_ph)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size));
|
||||
extern void ll_hci_connection_updata(u8 *data);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
69
include_lib/btstack/le/sm.h
Normal file
69
include_lib/btstack/le/sm.h
Normal file
@ -0,0 +1,69 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : sm.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Minxian
|
||||
|
||||
* Email : liminxian@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2020-07-01 16:36
|
||||
|
||||
* Copyright:(c)JIELI 2011-2020 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _BT_SM_H_
|
||||
#define _BT_SM_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
// IO Capability Values
|
||||
typedef enum {
|
||||
IO_CAPABILITY_DISPLAY_ONLY = 0,
|
||||
IO_CAPABILITY_DISPLAY_YES_NO,
|
||||
IO_CAPABILITY_KEYBOARD_ONLY,
|
||||
IO_CAPABILITY_NO_INPUT_NO_OUTPUT,
|
||||
IO_CAPABILITY_KEYBOARD_DISPLAY, // not used by secure simple pairing
|
||||
} io_capability_t;
|
||||
|
||||
void ble_sm_setup_init(io_capability_t io_type, u8 auth_req, uint8_t min_key_size, u8 security_en);
|
||||
|
||||
void ble_cbk_handler_register(btstack_packet_handler_t packet_cbk, sm_stack_packet_handler_t sm_cbk);
|
||||
|
||||
void sm_just_works_confirm(hci_con_handle_t con_handle);
|
||||
|
||||
void sm_init(void);
|
||||
|
||||
/*接口同时设置master 和 slave的配置*/
|
||||
void sm_set_io_capabilities(io_capability_t io_capability);
|
||||
|
||||
/*接口只设置master配置*/
|
||||
void sm_set_master_io_capabilities(io_capability_t io_capability);
|
||||
|
||||
/*接口同时设置master 和 slave的配置*/
|
||||
void sm_set_authentication_requirements(uint8_t auth_req);
|
||||
|
||||
/*接口只设置master配置*/
|
||||
void sm_set_master_authentication_requirements(uint8_t auth_req);
|
||||
|
||||
void sm_set_encryption_key_size_range(uint8_t min_size, uint8_t max_size);
|
||||
|
||||
void sm_set_request_security(int enable);
|
||||
|
||||
void sm_event_callback_set(void(*cbk_sm_ph)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size));
|
||||
|
||||
//配从机默认发请求加密命令
|
||||
void sm_set_request_security(int enable);
|
||||
|
||||
//配主机默认发加密请求命令
|
||||
void sm_set_master_request_pair(int enable);
|
||||
|
||||
//指定链接发加密请求命令
|
||||
bool sm_api_request_pairing(hci_con_handle_t con_handle);
|
||||
|
||||
//设置回连出现key missing后,流程重新发起加密
|
||||
void sm_set_master_pair_redo(int enable);
|
||||
|
||||
//设置回连时,延时发起加密流程的时间,可用于兼容一些设备连接
|
||||
void sm_set_master_reconnect_enc_delay(u16 delay_ms);
|
||||
void sm_passkey_input(hci_con_handle_t con_handle, uint32_t passkey);
|
||||
#endif
|
||||
136
include_lib/btstack/third_party/app_protocol_event.h
vendored
Normal file
136
include_lib/btstack/third_party/app_protocol_event.h
vendored
Normal file
@ -0,0 +1,136 @@
|
||||
|
||||
|
||||
#ifndef _3TH_PROTOCOL_EVENT_H
|
||||
#define _3TH_PROTOCOL_EVENT_H
|
||||
|
||||
//该文件只定义库里面和库外面都需要用得的第三方APP协议的消息和状态
|
||||
#include<string.h>
|
||||
#include <stdint.h>
|
||||
#include "typedef.h"
|
||||
|
||||
#define DEMO_HANDLER_ID 0x300 /*作为一个使用的例子,同时也可作为客户自己添加协议的ID*/
|
||||
#define GMA_HANDLER_ID 0x400 /*阿里天猫协议接口ID*/
|
||||
#define MMA_HANDLER_ID 0x500 /*小米MMA协议接口ID*/
|
||||
#define DMA_HANDLER_ID 0x600 /*百度DMA协议接口ID*/
|
||||
#define TME_HANDLER_ID 0x700 /*腾讯酷狗TME协议接口ID*/
|
||||
#define AMA_HANDLER_ID 0x800 /*亚马逊的AMA协议接口ID*/
|
||||
#define GFPS_HANDLER_ID 0x900 /*谷歌快对的协议接口ID*/
|
||||
//app protocol公共消息
|
||||
enum {
|
||||
APP_PROTOCOL_COMMON_NOTICE = 0,
|
||||
APP_PROTOCOL_CONNECTING, /*保留,暂未使用*/
|
||||
APP_PROTOCOL_CONNECTED_BLE, /*APP通过BLE连接成功状态更新*/
|
||||
APP_PROTOCOL_CONNECTED_SPP, /*APP通过SPP连接成功状态更新*/
|
||||
APP_PROTOCOL_DISCONNECT, /*APP连接断开状态更新*/
|
||||
APP_PROTOCOL_AUTH_PASS, /*连接认证通过标识更新*/
|
||||
APP_PROTOCOL_SPEECH_ENCODER_TYPE,
|
||||
APP_PROTOCOL_SPEECH_START, /*语音识别功能启动状态*/
|
||||
APP_PROTOCOL_SPEECH_STOP, /*语音识别功能停止状态*/
|
||||
APP_PROTOCOL_SET_VOLUME, /*app配置音量*/
|
||||
APP_PROTOCOL_GET_VOLUME, /*app读取音量*/
|
||||
APP_PROTOCOL_GET_AUX_STATUS, /*保留,暂未使用*/
|
||||
APP_PROTOCOL_LIB_TWS_DATA_SYNC, /*需要更新给另一端tws数据*/
|
||||
APP_PROTOCOL_COMMON_NOTICE_END = 0x14F,
|
||||
};
|
||||
//OTA消息
|
||||
enum {
|
||||
APP_PROTOCOL_OTA_COMMON_NOTICE = APP_PROTOCOL_COMMON_NOTICE_END + 1,
|
||||
APP_PROTOCOL_OTA_CHECK,
|
||||
APP_PROTOCOL_OTA_GET_APP_VERSION,
|
||||
APP_PROTOCOL_OTA_CHECK_CRC,
|
||||
APP_PROTOCOL_OTA_BEGIN,
|
||||
APP_PROTOCOL_OTA_TRANS_DATA,
|
||||
APP_PROTOCOL_OTA_PERCENT,
|
||||
APP_PROTOCOL_OTA_END,
|
||||
APP_PROTOCOL_OTA_SUCCESS,
|
||||
APP_PROTOCOL_OTA_FAIL,
|
||||
APP_PROTOCOL_OTA_CANCLE,
|
||||
APP_PROTOCOL_OTA_REBOOT,
|
||||
APP_PROTOCOL_OTA_COMMON_NOTICE_END = 0x1FF,
|
||||
};
|
||||
//GMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_GMA_NOTICE_BEGIN = GMA_HANDLER_ID,
|
||||
APP_PROTOCOL_GMA_FMTX_SETFRE, /*样机支持FM功能的APP配置fm参数*/
|
||||
APP_PROTOCOL_GMA_FMTX_GETFRE, /*app获取当前的fm配置参数*/
|
||||
APP_PROTOCOL_GMA_NOTICE_END = GMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
//MMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_MMA_NOTICE = MMA_HANDLER_ID,
|
||||
APP_PROTOCOL_MMA_SAVE_INFO, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_MMA_READ_INFO,
|
||||
APP_PROTOCOL_MMA_SAVE_ADV_COUNTER,
|
||||
APP_PROTOCOL_MMA_READ_ADV_COUNTER,
|
||||
APP_PROTOCOL_MMA_NOTICE_END = MMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
|
||||
//DMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_DMA_NOTICE = DMA_HANDLER_ID,
|
||||
APP_PROTOCOL_DMA_SAVE_RAND, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_DMA_READ_RAND,
|
||||
APP_PROTOCOL_DMA_TWS_SNED_RAND,
|
||||
APP_PROTOCOL_DMA_TTS_TYPE,
|
||||
APP_PROTOCOL_DMA_SAVE_OTA_INFO, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_DMA_READ_OTA_INFO,
|
||||
APP_PROTOCOL_DMA_NOTICE_END = DMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
|
||||
// GFPS私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_GFPS_RING_STOP_ALL = GFPS_HANDLER_ID,
|
||||
APP_PROTOCOL_GFPS_RING_RIGHT,
|
||||
APP_PROTOCOL_GFPS_RING_LEFT,
|
||||
APP_PROTOCOL_GFPS_RING_ALL,
|
||||
APP_PROTOCOL_GFPS_HEARABLE_CONTROLS,
|
||||
};
|
||||
|
||||
#define GFP_TWS_ENABLE 1
|
||||
|
||||
//APP_PROTOCOL获取电量的类型
|
||||
#define APP_PROTOCOL_BAT_T_CHARGE_FLAG 0
|
||||
#define APP_PROTOCOL_BAT_T_MAIN 1
|
||||
#define APP_PROTOCOL_BAT_T_BOX 2
|
||||
#define APP_PROTOCOL_BAT_T_TWS_LEFT 3
|
||||
#define APP_PROTOCOL_BAT_T_TWS_RIGHT 4
|
||||
#define APP_PROTOCOL_BAT_T_TWS_SIBLING 5
|
||||
#define APP_PROTOCOL_BAT_T_LOW_POWER 6
|
||||
#define APP_PROTOCOL_BAT_T_MAX 8
|
||||
|
||||
typedef struct _ota_frame_info_t {
|
||||
u16 max_pkt_len;
|
||||
u16 frame_crc;
|
||||
u32 frame_size;
|
||||
} ota_frame_info;
|
||||
|
||||
//*****//
|
||||
typedef enum {
|
||||
USER_NOTIFY_STATE_CONNECTED = 0, /**< 手机APP与设备建立连接 */
|
||||
USER_NOTIFY_STATE_DISCONNECTED, /**< 手机APP与设备的连接断开 */
|
||||
USER_NOTIFY_STATE_MOBILE_CONNECTED, /**< 手机与设备建立BT连接(A2DP、HFP、AVRCP) */
|
||||
USER_NOTIFY_STATE_MOBILE_DISCONNECTED, /**< 手机与设备BT连接(A2DP、HFP、AVRCP)断开 */
|
||||
USER_NOTIFY_STATE_SEND_PREPARE_DONE, /**< 设备端进入可向手机发送数据的状态 */
|
||||
USER_NOTIFY_STATE_TWS_CONNECT, /**< TWS类设备两端连接成功 */
|
||||
USER_NOTIFY_STATE_TWS_DISCONNECT, /**< TWS类设备两端断开连接 */
|
||||
USER_NOTIFY_STATE_BOX_OPEN, /**< 盒仓开启 */
|
||||
USER_NOTIFY_STATE_BOX_CLOSE, /**< 盒仓关闭 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_START, /**< TWS类设备开始进入主从切换流程 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_FINISH, /**< TWS类设备主从切换完成 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_REQUEST, /**< TWS类设备向APP发起主从切换请求 */
|
||||
USER_NOTIFY_STATE_DOUBLE_CLICK, /**< 设备双击按键 */
|
||||
USER_NOTIFY_STATE_KEYWORD_DETECTED, /**< 设备语音唤醒 */
|
||||
USER_NOTIFY_STATE_BATTERY_LEVEL_UPDATE, /**< 通知耳机电量更新 */
|
||||
USER_NOTIFY_STATE_ONE_CLICK, /**< 设备单击按键 */
|
||||
} USER_NOTIFY_STATE;
|
||||
|
||||
typedef enum {
|
||||
/*尽量返回简单的1或者0*/
|
||||
CHECK_STATUS_TWS_MASTER,
|
||||
CHECK_STATUS_TWS_SLAVE,
|
||||
CHECK_STATUS_TWS_PAIR_STA, /*1是tws已经配对了,0是未配对*/
|
||||
CHECK_STATUS_TWS_SIDE, /*0是单耳,1是左耳,2是右耳*/
|
||||
CHECK_STATUS_TWS_REV,
|
||||
CHECK_STATUS_TWS_REV1,
|
||||
} CHECK_STATUS;
|
||||
#endif
|
||||
146
include_lib/btstack/third_party/app_protocol_libs_api.h
vendored
Normal file
146
include_lib/btstack/third_party/app_protocol_libs_api.h
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
|
||||
#ifndef __APP_PRO_LIBS_API_H__
|
||||
#define __APP_PRO_LIBS_API_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
///***************************************///
|
||||
//GMA的函数接口汇集,begin
|
||||
int gma_prev_init(void);
|
||||
int gma_opus_voice_mic_send(uint8_t *voice_buf, uint16_t voice_len);
|
||||
/*gma的总初始化函数**/
|
||||
void gma_all_init(void);
|
||||
/*gma的总的释放函数**/
|
||||
void gma_all_exit(void);
|
||||
bool gma_connect_success(void);
|
||||
void gma_set_active_ali_para(void *addr);
|
||||
/*TWS的公共地址配置*/
|
||||
void gma_set_sibling_mac_para(void *mac);
|
||||
void gma_ble_adv_enable(u8 enable);
|
||||
void gma_ble_ibeacon_adv(u8 enable);
|
||||
//gma接收的数据处理函数
|
||||
int gma_rx_loop(void);
|
||||
/*gma命令和数据发送处理*/
|
||||
int tm_data_send_process_thread(void);
|
||||
int gma_start_voice_recognition(int flag);
|
||||
|
||||
|
||||
int gma_disconnect(void *addr);
|
||||
|
||||
void gma_message_callback_register(int (*handler)(int opcode, u8 *data, u32 len));
|
||||
void gma_is_tws_master_callback_register(bool (*handler)(void));
|
||||
void gma_tx_resume_register(bool (*handler)(void));
|
||||
void gma_rx_resume_register(bool (*handler)(void));
|
||||
/*注册电量的获取回调函数*/
|
||||
void gma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
|
||||
//ota interface
|
||||
int gma_ota_requset_next_packet(void *priv, u32 offset, u16 len);
|
||||
void gma_replay_ota_result(u8 result);
|
||||
|
||||
int tws_ota_get_data_from_sibling(u8 opcode, u8 *data, u8 len);
|
||||
u8 tws_ota_control(int type, ...);
|
||||
void tws_ota_app_event_deal(u8 evevt);
|
||||
//gma apis ends
|
||||
|
||||
///***************************************///
|
||||
//DMA apis begin
|
||||
extern int dueros_process();
|
||||
extern int dma_all_init(void);
|
||||
extern int dma_all_exit(void);
|
||||
extern void dma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void dma_check_status_callback_register(int (*handler)(int state_flag));
|
||||
extern void dma_tx_resume_register(bool (*handler)(void));
|
||||
extern void dma_rx_resume_register(bool (*handler)(void));
|
||||
extern void dma_ble_adv_enable(u8 enable);
|
||||
extern u16 dma_speech_data_send(u8 *buf, u16 len);
|
||||
extern int dueros_send_process(void);
|
||||
extern void dma_set_product_id_key(void *data);
|
||||
extern bool dma_pair_state();
|
||||
extern int dma_start_voice_recognition(u8 en);
|
||||
extern void dueros_dma_manufacturer_info_init();
|
||||
extern int dma_disconnect(void *addr);
|
||||
extern int dma_update_tws_state_to_lib(int state);
|
||||
extern void dma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void dma_set_pid(u32 pid);
|
||||
extern void dma_tws_data_deal(u8 *data, int len);
|
||||
|
||||
|
||||
//DMA apis ends
|
||||
|
||||
///***************************************///
|
||||
//TME apis begins
|
||||
extern void tme_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void tme_message_callback_register(int (*handler)(int id, int opcode, const u8 *data, u32 len));
|
||||
extern void tme_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern void tme_tx_resume_register(bool (*handler)(void));
|
||||
extern void tme_rx_resume_register(bool (*handler)(void));
|
||||
extern void TME_protocol_process(void *parm);
|
||||
extern int tme_all_init(void);
|
||||
extern int tme_all_exit(void);
|
||||
/* extern u16 tme_speech_data_send(buf, len); */
|
||||
extern void tme_ble_adv_enable(u8 enable);
|
||||
extern void TME_send_packet_process(void);
|
||||
extern void TME_recieve_packet_parse_process(void);
|
||||
extern bool tme_connect_success(void);
|
||||
extern int tme_send_voice_data(void *buf, u16 len);
|
||||
extern int tme_start_voice_recognition(int flag);
|
||||
extern void tme_set_configuration_info(void *addr);
|
||||
extern int tme_protocol_disconnect(void *priv);
|
||||
extern void tme_set_pid(u32 pid);
|
||||
extern void tme_set_bid(u32 bid);
|
||||
extern u32 TME_request_ota_data(void *priv, u32 offset, u16 len);
|
||||
extern void TME_notify_file_size(u32 file_size);
|
||||
|
||||
//TME api ends
|
||||
|
||||
///***************************************///
|
||||
//MMA api begins
|
||||
extern void mma_all_init(void);
|
||||
extern void mma_all_exit(void);
|
||||
extern void mma_ble_adv_enable(u8 enable);
|
||||
extern int XM_speech_data_send(u8 *buf, u16 len);
|
||||
extern bool XM_protocal_auth_pass(void);
|
||||
extern int mma_start_voice_recognition(int ctrl);
|
||||
extern void mma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void mma_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern void mma_tx_resume_register(void (*handler)(void));
|
||||
extern void mma_rx_resume_register(void (*handler)(void));
|
||||
extern void mma_set_verdor_id(u16 pid);
|
||||
extern void mma_set_product_id(u16 pid);
|
||||
extern void mma_set_local_version(u16 version);
|
||||
extern int mma_protocol_loop_process();
|
||||
extern u32 mma_request_ota_data(void *priv, u32 offset, u16 len);
|
||||
extern int mma_notify_file_size(u32 size);
|
||||
extern u32 mma_report_ota_status(u8 state);
|
||||
extern int mma_disconnect(void *addr);
|
||||
extern void mma_tws_data_deal(u8 *data, int len);
|
||||
extern void mma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
|
||||
//MMA API END
|
||||
|
||||
///***************************************///
|
||||
//GFPS apis begins
|
||||
extern int gfps_all_init();
|
||||
extern int gfps_all_exit();
|
||||
extern int gfps_disconnect(void);
|
||||
extern int gfps_ble_adv_enable(int enable);
|
||||
extern void gfps_set_model_id(uint8_t *model_id);
|
||||
extern void gfps_set_anti_spoofing_public_key(char *public_key);
|
||||
extern void gfps_set_anti_spoofing_private_key(char *private_key);
|
||||
extern void gfps_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void gfps_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void gfps_set_pair_mode(void);
|
||||
extern void gfps_battery_update(void);
|
||||
extern void gfps_personalized_name_set(u8 *data, u8 len);
|
||||
extern void gfps_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern void gfps_tws_data_deal(u8 *data, int len);
|
||||
extern int gfps_update_tws_state_to_lib(int state);
|
||||
extern void gfps_factory_reset(void);
|
||||
extern void gfps_set_battery_ui_enable(uint8_t enable);
|
||||
extern void update_channel_map_do_in_irq_flag_set(uint8_t en);
|
||||
//GFPS API END
|
||||
#endif /* __APP_PRO_LIBS_API_H__ */
|
||||
|
||||
|
||||
15
include_lib/btstack/third_party/common/ble_config.h
vendored
Normal file
15
include_lib/btstack/third_party/common/ble_config.h
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef __BLE_CONFIG_H__
|
||||
#define __BLE_CONFIG_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "ble_user.h"
|
||||
|
||||
bool bt_3th_ble_ready(void *priv);
|
||||
s32 bt_3th_ble_send(void *priv, void *data, u16 len);
|
||||
void bt_3th_ble_callback_set(void (*resume)(void), void (*recieve)(void *, void *, u16), void (*status)(void *, ble_state_e));
|
||||
void bt_3th_ble_status_callback(void *priv, ble_state_e status);
|
||||
int bt_3th_ble_data_send(void *priv, u8 *buf, u16 len);
|
||||
void bt_3th_ble_get_operation_table(void);
|
||||
ble_state_e bt_3th_get_jl_ble_status(void);
|
||||
|
||||
#endif//__BLE_CONFG_H__
|
||||
43
include_lib/btstack/third_party/common/ble_user.h
vendored
Normal file
43
include_lib/btstack/third_party/common/ble_user.h
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
#ifndef __BLE_USER_H__
|
||||
#define __BLE_USER_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
typedef enum {
|
||||
BLE_ST_NULL = 0,
|
||||
BLE_ST_INIT_OK, //协议栈初始化ok
|
||||
BLE_ST_IDLE, //关闭广播或扫描状态
|
||||
BLE_ST_CONNECT, //链路刚连上
|
||||
BLE_ST_SEND_DISCONN, //发送断开命令,等待链路断开
|
||||
BLE_ST_DISCONN, //链路断开状态
|
||||
BLE_ST_CONNECT_FAIL, //连接失败
|
||||
BLE_ST_CONNECTION_UPDATE_OK,//更新连接参数完成
|
||||
|
||||
BLE_ST_ADV = 0x20, //设备处于广播状态
|
||||
BLE_ST_NOTIFY_IDICATE, //设备已连上,允许发数(已被主机使能通知)
|
||||
|
||||
BLE_ST_SCAN = 0x40, //设备处于搜索状态
|
||||
BLE_ST_CREATE_CONN, //发起设备连接
|
||||
BLE_ST_SEND_CREATE_CONN_CANNEL, //取消发起设备连接
|
||||
BLE_ST_SEARCH_COMPLETE, //链路连上,已搜索完profile,可以发送数据操作
|
||||
|
||||
BLE_ST_SEND_STACK_EXIT = 0x60, //发送退出协议栈命令,等待完成
|
||||
BLE_ST_STACK_EXIT_COMPLETE, //协议栈退出成功
|
||||
|
||||
} ble_state_e;
|
||||
|
||||
enum {
|
||||
APP_BLE_NO_ERROR = 0,
|
||||
APP_BLE_BUFF_FULL, //buffer 满,会丢弃当前发送的数据包
|
||||
APP_BLE_BUFF_ERROR, //
|
||||
APP_BLE_OPERATION_ERROR, //操作错误
|
||||
APP_BLE_IS_DISCONN, //链路已断开
|
||||
APP_BLE_NO_WRITE_CCC, //主机没有 write Client Characteristic Configuration
|
||||
};
|
||||
|
||||
struct BLE_CONFIG_VAR {
|
||||
ble_state_e JL_ble_status;
|
||||
struct ble_server_operation_t *rcsp_ble;
|
||||
};
|
||||
|
||||
#endif//__BLE_USER_H__
|
||||
72
include_lib/btstack/third_party/common/btstack_3th_protocol_user.h
vendored
Normal file
72
include_lib/btstack/third_party/common/btstack_3th_protocol_user.h
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
#ifndef __BTSTACK_3TH_PROTOCAL_H__
|
||||
#define __BTSTACK_3TH_PROTOCAL_H__
|
||||
|
||||
#include "spp_config.h"
|
||||
#include "ble_config.h"
|
||||
#include "JL_rcsp_api.h"
|
||||
#include "JL_rcsp_protocol.h"
|
||||
#include "JL_rcsp_packet.h"
|
||||
#include "attr.h"
|
||||
|
||||
|
||||
#define APP_TYPE_RCSP 0x01
|
||||
#define APP_TYPE_DUEROS 0x02
|
||||
#define APP_TYPE_BTSTACK 0xFF
|
||||
|
||||
|
||||
#define BT_CONFIG_BLE BIT(0)
|
||||
#define BT_CONFIG_SPP BIT(1)
|
||||
|
||||
typedef enum {
|
||||
BT_3TH_EVENT_COMMON_INIT,
|
||||
BT_3TH_EVENT_COMMON_BLE_STATUS,
|
||||
BT_3TH_EVENT_COMMON_SPP_STATUS,
|
||||
|
||||
BT_3TH_EVENT_RCSP_DEV_SELECT = 100,
|
||||
|
||||
|
||||
|
||||
|
||||
BT_3TH_EVENT_DUEROS_CONNECT = 200,
|
||||
|
||||
|
||||
} BT_3TH_EVENT_TYPE;
|
||||
|
||||
enum {
|
||||
RCSP_BLE,
|
||||
RCSP_SPP,
|
||||
};
|
||||
|
||||
|
||||
typedef struct __BT_3TH_USER_CB {
|
||||
int type;
|
||||
int bt_config;
|
||||
JL_PRO_CB bt_3th_handler;
|
||||
void (*BT_3TH_event_handler)(u16 opcode, u8 *packet, int size);
|
||||
void (*BT_3TH_data_handler)(u8 *packet, int size);
|
||||
int (*BT_3TH_spp_state_specific)(u8 type);
|
||||
} BT_3TH_USER_CB;
|
||||
|
||||
typedef struct __BT_3TH_PROTOCOL_CB {
|
||||
int type;
|
||||
void (*BT_3TH_type_dev_select)(u8 type);
|
||||
void (*resume)(void);
|
||||
void (*recieve)(void *, void *, u16);
|
||||
} BT_3TH_PROTOCOL_CB;
|
||||
|
||||
int btstack_3th_protocol_user_init(BT_3TH_USER_CB *protocol_callback);
|
||||
int btstack_3th_protocol_lib_init(BT_3TH_PROTOCOL_CB *protocol_lib_callback);
|
||||
|
||||
JL_PRO_CB *bt_3th_get_spp_callback(void);
|
||||
void bt_3th_set_spp_callback_priv(void *priv);
|
||||
JL_PRO_CB *bt_3th_get_ble_callback(void);
|
||||
void bt_3th_set_ble_callback_priv(void *priv);
|
||||
void bt_3th_dev_type_spp(void);
|
||||
void bt_3th_type_dev_select(u8 type);
|
||||
u8 bt_3th_get_cur_bt_channel_sel(void);
|
||||
void bt_3th_spp_state_handle(u8 type);
|
||||
void bt_3th_event_send_to_user(u16 opcode, u8 *packet, int size);
|
||||
void bt_3th_data_send_to_user(u8 *packet, int size);
|
||||
#endif// __BTSTACK_3TH_PROTOCAL_H__
|
||||
|
||||
|
||||
15
include_lib/btstack/third_party/common/spp_config.h
vendored
Normal file
15
include_lib/btstack/third_party/common/spp_config.h
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef __SPP_CONFIG_H__
|
||||
#define __SPP_CONFIG_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
bool bt_3th_spp_fw_ready(void *priv);
|
||||
s32 bt_3th_spp_send(void *priv, void *data, u16 len);
|
||||
void bt_3th_spp_callback_set(void (*resume)(void), void (*recieve)(void *, void *, u16), void (*status)(u8));
|
||||
u8 bt_3th_get_jl_spp_status(void);
|
||||
void bt_3th_spp_status_callback(u8 status);
|
||||
int bt_3th_spp_data_send(void *priv, u8 *buf, u16 len);
|
||||
void bt_3th_spp_init(void);
|
||||
void bt_3th_spp_get_operation_table(void);
|
||||
|
||||
#endif//__SPP_CONFIG_H__
|
||||
37
include_lib/btstack/third_party/common/spp_user.h
vendored
Normal file
37
include_lib/btstack/third_party/common/spp_user.h
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef __SPP_USER_H__
|
||||
#define __SPP_USER_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
extern void (*spp_state_cbk)(u8 state);
|
||||
extern void (*spp_recieve_cbk)(void *priv, u8 *buf, u16 len);
|
||||
extern void user_spp_data_handler(u8 packet_type, u16 ch, u8 *packet, u16 size);
|
||||
|
||||
struct spp_operation_t {
|
||||
int(*disconnect)(void *priv);
|
||||
int(*send_data)(void *priv, void *buf, u16 len);
|
||||
int(*regist_wakeup_send)(void *priv, void *cbk);
|
||||
int(*regist_recieve_cbk)(void *priv, void *cbk);
|
||||
int(*regist_state_cbk)(void *priv, void *cbk);
|
||||
int(*busy_state)(void);
|
||||
};
|
||||
|
||||
enum {
|
||||
SPP_USER_ERR_NONE = 0x0,
|
||||
SPP_USER_ERR_SEND_BUFF_BUSY,
|
||||
SPP_USER_ERR_SEND_OVER_LIMIT,
|
||||
SPP_USER_ERR_SEND_FAIL,
|
||||
};
|
||||
|
||||
enum {
|
||||
SPP_USER_ST_NULL = 0x0,
|
||||
SPP_USER_ST_CONNECT,
|
||||
SPP_USER_ST_DISCONN,
|
||||
SPP_USER_ST_WAIT_DISC,
|
||||
SPP_USER_ST_CONNECT_OTA,
|
||||
SPP_USER_ST_DISCONN_OTA,
|
||||
};
|
||||
|
||||
void spp_get_operation_table(struct spp_operation_t **interface_pt);
|
||||
|
||||
#endif//__SPP_USER_H__
|
||||
43
include_lib/btstack/third_party/rcsp/JL_rcsp_api.h
vendored
Normal file
43
include_lib/btstack/third_party/rcsp/JL_rcsp_api.h
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
|
||||
#ifndef _JL_RCSP_LIB_API_H_
|
||||
#define _JL_RCSP_LIB_API_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "uart.h"
|
||||
|
||||
#define USE_LITTLE_ENDIAN 0
|
||||
#define USE_BIG_ENDIAN 1
|
||||
|
||||
#define USE_ENDIAN_TYPE USE_LITTLE_ENDIAN
|
||||
|
||||
|
||||
#define AI_LICENCE_LEN 16
|
||||
|
||||
enum {
|
||||
TULING = 0,
|
||||
DEEPBRAIN,
|
||||
};
|
||||
|
||||
#pragma pack(1)
|
||||
struct _AI_platform {
|
||||
u8 platform;
|
||||
u8 license[AI_LICENCE_LEN];
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
u16 app_htons(u16 n);
|
||||
u16 app_ntohs(u16 n);
|
||||
|
||||
u32 app_htonl(u32 n);
|
||||
u32 app_ntohl(u32 n);
|
||||
|
||||
void JL_rcsp_auth_init(int (*send)(void *, u8 *, u16), u8 *link_key, u8 *addr);
|
||||
void JL_rcsp_auth_reset(void);
|
||||
u8 JL_rcsp_get_auth_flag(void);
|
||||
void JL_rcsp_set_auth_flag(u8 auth_flag);
|
||||
void JL_rcsp_auth_recieve(u8 *buffer, u16 len);
|
||||
|
||||
u8 get_rcsp_version(void);
|
||||
void get_ai_platform(struct _AI_platform *p, u8 platform);
|
||||
void smart_auth_res_pass(void);
|
||||
#endif //_JL_RCSP_LIB_H_
|
||||
102
include_lib/btstack/third_party/rcsp/JL_rcsp_packet.h
vendored
Normal file
102
include_lib/btstack/third_party/rcsp/JL_rcsp_packet.h
vendored
Normal file
@ -0,0 +1,102 @@
|
||||
#ifndef __JL_PACKET_H__
|
||||
#define __JL_PACKET_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
#define READ_BIG_U16(a) ((*((u8*)(a)) <<8) + *((u8*)(a)+1))
|
||||
#define READ_BIG_U32(a) ((*((u8*)(a)) <<24) + (*((u8*)(a)+1)<<16) + (*((u8*)(a)+2)<<8) + *((u8*)(a)+3))
|
||||
|
||||
#define READ_LIT_U16(a) (*((u8*)(a)) + (*((u8*)(a)+1)<<8))
|
||||
#define READ_LIT_U32(a) (*((u8*)(a)) + (*((u8*)(a)+1)<<8) + (*((u8*)(a)+2)<<16) + (*((u8*)(a)+3)<<24))
|
||||
|
||||
|
||||
#define WRITE_BIG_U16(a,src) {*((u8*)(a)+0) = (u8)(src>>8); *((u8*)(a)+1) = (u8)(src&0xff); }
|
||||
#define WRITE_BIG_U32(a,src) {*((u8*)(a)+0) = (u8)((src)>>24); *((u8*)(a)+1) = (u8)(((src)>>16)&0xff);*((u8*)(a)+2) = (u8)(((src)>>8)&0xff);*((u8*)(a)+3) = (u8)((src)&0xff);}
|
||||
|
||||
#define WRITE_LIT_U16(a,src) {*((u8*)(a)+1) = (u8)(src>>8); *((u8*)(a)+0) = (u8)(src&0xff); }
|
||||
#define WRITE_LIT_U32(a,src) {*((u8*)(a)+3) = (u8)((src)>>24); *((u8*)(a)+2) = (u8)(((src)>>16)&0xff);*((u8*)(a)+1) = (u8)(((src)>>8)&0xff);*((u8*)(a)+0) = (u8)((src)&0xff);}
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
typedef union __HEAD_BIT {
|
||||
struct {
|
||||
u16 _OpCode: 8; //OpCode val
|
||||
u16 _unsed : 6; //unsed
|
||||
u16 _resp : 1; //request for response
|
||||
u16 _type : 1; //command or response
|
||||
} _i;
|
||||
u16 _t;
|
||||
} HEAD_BIT;
|
||||
|
||||
struct __JL_PACKET {
|
||||
u8 tag[3];
|
||||
HEAD_BIT head;
|
||||
u16 length;
|
||||
u8 data[0];
|
||||
};
|
||||
#pragma pack()
|
||||
typedef struct __JL_PACKET JL_PACKET;
|
||||
|
||||
|
||||
#define JL_PACK_START_TAG0 (0xfe)
|
||||
#define JL_PACK_START_TAG1 (0xdc)
|
||||
#define JL_PACK_START_TAG2 (0xba)
|
||||
#define JL_PACK_END_TAG (0xef)
|
||||
#define JL_ONE_PACKET_LEN(n) (sizeof(JL_PACKET) + n + 1)
|
||||
|
||||
#ifdef JL_RCSP_UBOOT_LIB
|
||||
#define JL_MTU_RESV (540L)
|
||||
#define JL_MTU_SEND (128L)
|
||||
#define JL_RECIEVE_BUF_SIZE ((JL_MTU_RESV + sizeof(JL_PACKET))*2)
|
||||
#define JL_CMD_POOL_SIZE (JL_MTU_SEND)
|
||||
#define JL_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#define JL_WAIT_RESP_POOL_SIZE (JL_MTU_SEND)
|
||||
#else
|
||||
#define JL_MTU_RESV (540L)
|
||||
#define JL_MTU_SEND (128L)
|
||||
#define JL_RECIEVE_BUF_SIZE (JL_MTU_RESV + sizeof(JL_PACKET) + 128)
|
||||
#define JL_CMD_POOL_SIZE (JL_MTU_SEND*4)
|
||||
#define JL_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#define JL_WAIT_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#endif
|
||||
|
||||
void set_jl_rcsp_recieve_buf_size(u16 size);
|
||||
u16 rcsp_packet_write_alloc_len(void);
|
||||
|
||||
u32 rcsp_packet_need_buf_size(void);
|
||||
u32 rcsp_packet_buf_init(u8 *buf, u32 len);
|
||||
|
||||
u16 JL_packet_get_rx_max_mtu(void);
|
||||
u16 JL_packet_get_tx_max_mtu(void);
|
||||
u16 JL_packet_set_mtu(u16 mtu);
|
||||
void JL_packet_recieve(void *buf, u16 len);
|
||||
u32 JL_pack_data_read_all(void *buf, u16 len);
|
||||
void JL_packet_clear_all_data(void);
|
||||
bool JL_packet_find(u8 *r_buf, JL_PACKET **packet);
|
||||
void JL_packet_init(void);
|
||||
void JL_packet_clear(void);
|
||||
|
||||
void JL_packet_packing(
|
||||
JL_PACKET *packet,
|
||||
u8 OpCode,
|
||||
u8 type,
|
||||
u8 request_rsp,
|
||||
u8 *extra_param,
|
||||
u16 extra_len,
|
||||
u8 *data,
|
||||
u16 len);
|
||||
|
||||
void set_jl_mtu_resv(u16 jl_mtu_resv_var);
|
||||
void set_jl_mtu_send(u16 jl_mtu_send_var);
|
||||
|
||||
extern u16 jl_mtu_resv;
|
||||
extern u16 jl_mtu_send;
|
||||
extern u16 jl_recieve_buf_size;
|
||||
extern u16 jl_cmd_pool_size;
|
||||
extern u16 jl_rcsp_pool_size;
|
||||
extern u16 jl_wait_rcsp_pool_size;
|
||||
|
||||
#endif//__JL_PACKET_H__
|
||||
|
||||
|
||||
217
include_lib/btstack/third_party/rcsp/JL_rcsp_protocol.h
vendored
Normal file
217
include_lib/btstack/third_party/rcsp/JL_rcsp_protocol.h
vendored
Normal file
@ -0,0 +1,217 @@
|
||||
#ifndef __JL_PROTOCOL_H__
|
||||
#define __JL_PROTOCOL_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "JL_rcsp_packet.h"
|
||||
|
||||
#define ATTR_TYPE_PROTOCOL_VERSION (0)
|
||||
#define ATTR_TYPE_SYS_INFO (1)
|
||||
#define ATTR_TYPE_EDR_ADDR (2)
|
||||
#define ATTR_TYPE_PLATFORM (3)
|
||||
#define ATTR_TYPE_FUNCTION_INFO (4)
|
||||
#define ATTR_TYPE_DEV_VERSION (5)
|
||||
#define ATTR_TYPE_SDK_TYPE (6)
|
||||
#define ATTR_TYPE_UBOOT_VERSION (7)
|
||||
#define ATTR_TYPE_DOUBLE_PARITION (8)
|
||||
#define ATTR_TYPE_UPDATE_STATUS (9)
|
||||
#define ATTR_TYPE_DEV_VID_PID (10)
|
||||
#define ATTR_TYPE_DEV_AUTHKEY (11)
|
||||
#define ATTR_TYPE_DEV_PROCODE (12)
|
||||
#define ATTR_TYPE_DEV_MAX_MTU (13)
|
||||
#define ATTR_TEYP_BLE_ADDR (17)
|
||||
#define ATTR_TYPE_MD5_GAME_SUPPORT (19)
|
||||
|
||||
|
||||
|
||||
#define COMMON_INFO_ATTR_BATTERY (0)
|
||||
#define COMMON_INFO_ATTR_VOL (1)
|
||||
#define COMMON_INFO_ATTR_DEV (2)
|
||||
#define COMMON_INFO_ATTR_ERR_REPORT (3)
|
||||
#define COMMON_INFO_ATTR_EQ (4)
|
||||
#define COMMON_INFO_ATTR_FILE_BROWSE_TYPE (5)
|
||||
#define COMMON_INFO_ATTR_FUN_TYPE (6)
|
||||
#define COMMON_INFO_ATTR_LIGHT (7)
|
||||
#define COMMON_INFO_ATTR_FMTX (8)
|
||||
#define COMMON_INFO_ATTR_HIGH_LOW_SET (11)
|
||||
#define COMMON_INFO_ATTR_PRE_FETCH_ALL_EQ_INFO (12)
|
||||
#define COMMON_INFO_ATTR_ANC_VOICE (13)
|
||||
#define COMMON_INFO_ATTR_FETCH_ALL_ANC_VOICE (14)
|
||||
#define COMMON_INFO_ATTR_PHONE_SCO_STATE_INFO (15)
|
||||
#define COMMON_INFO_ATTR_ASSISTED_HEARING (20)
|
||||
#define COMMON_INFO_ATTR_ADAPTIVE_NOISE_REDUCTION (21)
|
||||
#define COMMON_INFO_ATTR_AI_NO_PICK (22)
|
||||
#define COMMON_INFO_ATTR_SCENE_NOISE_REDUCTION (23)
|
||||
#define COMMON_INFO_ATTR_WIND_NOISE_DETECTION (24)
|
||||
#define COMMON_INFO_ATTR_VOICE_ENHANCEMENT_MODE (25)
|
||||
|
||||
|
||||
|
||||
#define BT_INFO_ATTR_MUSIC_TITLE (0)
|
||||
#define BT_INFO_ATTR_MUSIC_ARTIST (1)
|
||||
#define BT_INFO_ATTR_MUSIC_ALBUM (2)
|
||||
#define BT_INFO_ATTR_MUSIC_NUMBER (3)
|
||||
#define BT_INFO_ATTR_MUSIC_TOTAL (4)
|
||||
#define BT_INFO_ATTR_MUSIC_GENRE (5)
|
||||
#define BT_INFO_ATTR_MUSIC_TIME (6)
|
||||
#define BT_INFO_ATTR_MUSIC_STATE (7)
|
||||
#define BT_INFO_ATTR_MUSIC_CURR_TIME (8)
|
||||
|
||||
#define BT_INFO_ATTR_01 (0)
|
||||
|
||||
#define MUSIC_INFO_ATTR_STATUS (0)
|
||||
#define MUSIC_INFO_ATTR_FILE_NAME (1)
|
||||
#define MUSIC_INFO_ATTR_FILE_PLAY_MODE (2)
|
||||
|
||||
#define RTC_INFO_ATTR_RTC_TIME (0)
|
||||
#define RTC_INFO_ATTR_RTC_ALRAM (1)
|
||||
|
||||
#define LINEIN_INFO_ATTR_STATUS (0)
|
||||
|
||||
|
||||
/***************************************/
|
||||
/* 注意:不能在这个枚举里加代码 */
|
||||
/* 注意:不能在这个枚举里加代码 */
|
||||
/* 注意:不能在这个枚举里加代码 */
|
||||
/***************************************/
|
||||
enum {
|
||||
JL_OPCODE_DATA = 0x01,
|
||||
JL_OPCODE_GET_TARGET_FEATURE_MAP = 0x02,
|
||||
JL_OPCODE_GET_TARGET_FEATURE = 0x03,
|
||||
// JL_OPCODE_SWITCH_DEVICE = 0x04,
|
||||
JL_OPCODE_DISCONNECT_EDR = 0x06,
|
||||
JL_OPCODE_SYS_INFO_GET = 0x07,
|
||||
JL_OPCODE_SYS_INFO_SET = 0x08,
|
||||
JL_OPCODE_SYS_INFO_AUTO_UPDATE = 0x09,
|
||||
JL_OPCODE_CALL_REQUEST = 0xa,
|
||||
JL_OPCODE_SWITCH_DEVICE = 0x0b,
|
||||
JL_OPCODE_FILE_BROWSE_REQUEST_START = 0x0C,
|
||||
JL_OPCODE_FILE_BROWSE_REQUEST_STOP = 0x0D,
|
||||
JL_OPCODE_FUNCTION_CMD = 0x0E,
|
||||
|
||||
JL_OPCODE_SYS_OPEN_BT_SCAN = 0x12,
|
||||
JL_OPCODE_SYS_UPDATE_BT_STATUS = 0X13,
|
||||
JL_OPCODE_SYS_STOP_BT_SCAN = 0X14,
|
||||
JL_OPCODE_SYS_BT_CONNECT_SPEC = 0X15,
|
||||
JL_OPCODE_SYS_EMITTER_BT_CONNECT_STATUS = 0XD3, // 临时调整, 被遗忘的指令
|
||||
JL_OPCODE_SYS_FIND_DEVICE = 0X19,
|
||||
|
||||
JL_OPCODE_EXTRA_FLASH_OPT = 0X1A,
|
||||
|
||||
//文件传输相关命令
|
||||
JL_OPCODE_FILE_TRANSFER_START = 0X1B,
|
||||
JL_OPCODE_FILE_TRANSFER_END = 0X1C,
|
||||
JL_OPCODE_FILE_TRANSFER = 0X1D,
|
||||
JL_OPCODE_FILE_TRANSFER_CANCEL = 0X1E,
|
||||
JL_OPCODE_FILE_DELETE = 0X1F,
|
||||
JL_OPCODE_FILE_RENAME = 0X20,
|
||||
|
||||
JL_OPCODE_ACTION_PREPARE = 0X21,//APP操作预处理
|
||||
JL_OPCODE_DEVICE_FORMAT = 0X22,//设备格式化
|
||||
JL_OPCODE_ONE_FILE_DELETE = 0x23,//删除一个文件
|
||||
JL_OPCODE_ONE_FILE_TRANS_BACK = 0x24,//回传一个文件
|
||||
JL_OPCODE_ALARM_EXTRA = 0x25,
|
||||
JL_OPCODE_FILE_BLUK_TRANSFER = 0x26,//批量大文件前准备
|
||||
JL_OPCODE_DEVICE_PARM_EXTRA = 0x27,//设备操作,如文件传输、文件删除、设备格式化参数扩展
|
||||
|
||||
JL_OPCODE_SIMPLE_FILE_TRANS = 0x28,
|
||||
|
||||
JL_OPCODE_SPORTS_DATA_INFO_GET = 0xA0,
|
||||
JL_OPCODE_SPORTS_DATA_INFO_SET = 0xA1,
|
||||
JL_OPCODE_SPORTS_DATA_INFO_AUTO_UPDATE = 0xA2,
|
||||
JL_OPCODE_SENSOR_LOG_DATA_AUTO_UPDATE = 0xA3,
|
||||
JL_OPCODE_SENSOR_NFC_FUNCTION_OPT = 0xA4,
|
||||
JL_OPCODE_SPORTS_DATA_INFO_OPT = 0xA5,
|
||||
JL_OPCODE_SPORTS_DATA_SYNC = 0xA6,
|
||||
|
||||
JL_OPCODE_NOTIFY_MTU = 0xD1,
|
||||
JL_OPCODE_GET_MD5 = 0xD4,
|
||||
JL_OPCODE_LOW_LATENCY_PARAM = 0xD5,
|
||||
JL_OPTCODE_EXTRA_FLASH_INFO = 0XD6,
|
||||
|
||||
JL_OPCODE_CUSTOMER_USER = 0xFF,
|
||||
};
|
||||
/***************************************/
|
||||
/***************************************/
|
||||
|
||||
enum {
|
||||
JL_NOT_NEED_RESPOND = 0,
|
||||
JL_NEED_RESPOND,
|
||||
};
|
||||
|
||||
enum {
|
||||
JL_AUTH_NOTPASS = 0,
|
||||
JL_AUTH_PASS,
|
||||
};
|
||||
|
||||
typedef enum __JL_ERR {
|
||||
JL_ERR_NONE = 0x0,
|
||||
JL_ERR_SEND_DATA_OVER_LIMIT,
|
||||
JL_ERR_SEND_BUSY,
|
||||
JL_ERR_SEND_NOT_READY,
|
||||
JL_ERR_EXIT,
|
||||
} JL_ERR;
|
||||
|
||||
typedef enum __JL_PRO_STATUS {
|
||||
JL_PRO_STATUS_SUCCESS = 0x0,
|
||||
JL_PRO_STATUS_FAIL,
|
||||
JL_PRO_STATUS_UNKOWN_CMD,
|
||||
JL_PRO_STATUS_BUSY,
|
||||
JL_PRO_STATUS_NO_RESPONSE,
|
||||
JL_PRO_STATUS_CRC_ERR,
|
||||
JL_PRO_STATUS_ALL_DATA_CRC_ERR,
|
||||
JL_PRO_STATUS_PARAM_ERR,
|
||||
JL_PRO_STATUS_RESP_DATA_OVER_LIMIT,
|
||||
|
||||
} JL_PRO_STATUS;
|
||||
|
||||
///*< JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response packet send functions>*/
|
||||
JL_ERR JL_CMD_send(u8 OpCode, u8 *data, u16 len, u8 request_rsp);
|
||||
JL_ERR JL_CMD_response_send(u8 OpCode, u8 status, u8 sn, u8 *data, u16 len);
|
||||
JL_ERR JL_DATA_send(u8 OpCode, u8 CMD_OpCode, u8 *data, u16 len, u8 request_rsp);
|
||||
JL_ERR JL_DATA_response_send(u8 OpCode, u8 status, u8 sn, u8 CMD_OpCode, u8 *data, u16 len);
|
||||
|
||||
///*<JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response recieve>*/
|
||||
typedef struct __JL_PRO_CB {
|
||||
/*send function callback, SPP or ble*/
|
||||
void *priv;
|
||||
bool (*fw_ready)(void *priv);
|
||||
s32(*fw_send)(void *priv, void *buf, u16 len);
|
||||
/*JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response packet recieve callback*/
|
||||
void (*CMD_resp)(void *priv, u8 OpCode, u8 OpCode_SN, u8 *data, u16 len);
|
||||
void (*DATA_resp)(void *priv, u8 OpCode_SN, u8 CMD_OpCode, u8 *data, u16 len);
|
||||
void (*CMD_no_resp)(void *priv, u8 OpCode, u8 *data, u16 len);
|
||||
void (*DATA_no_resp)(void *priv, u8 CMD_OpCode, u8 *data, u16 len);
|
||||
void (*CMD_recieve_resp)(void *priv, u8 OpCode, u8 status, u8 *data, u16 len);
|
||||
void (*DATA_recieve_resp)(void *priv, u8 status, u8 CMD_OpCode, u8 *data, u16 len);
|
||||
u8(*wait_resp_timeout)(void *priv, u8 OpCode, u8 counter);
|
||||
void (*auth_pass_callback)(void *priv);
|
||||
} JL_PRO_CB;
|
||||
|
||||
|
||||
extern u32 rcsp_fw_ready(void);
|
||||
extern u32 rcsp_protocol_need_buf_size(void);
|
||||
|
||||
extern void JL_protocol_init(u8 *buf, u32 len);
|
||||
extern void JL_protocol_exit(void);
|
||||
|
||||
extern void JL_protocol_dev_switch(const JL_PRO_CB *cb);
|
||||
|
||||
extern void JL_protocol_data_recieve(void *priv, void *buf, u16 len);
|
||||
extern void JL_protocol_resume(void);
|
||||
|
||||
extern void JL_protocol_process(void);
|
||||
|
||||
extern void set_auth_pass(u8 auth_pass);
|
||||
|
||||
extern void JL_set_cur_tick(u16 tick);
|
||||
|
||||
extern bool rcsp_send_list_is_empty(void);
|
||||
|
||||
|
||||
extern void JL_send_packet_process(void);
|
||||
extern void JL_recieve_packet_parse_process(void);
|
||||
|
||||
|
||||
#endif//__JL_PROTOCOL_H__
|
||||
|
||||
|
||||
15
include_lib/btstack/third_party/rcsp/attr.h
vendored
Normal file
15
include_lib/btstack/third_party/rcsp/attr.h
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef __ATTR_H__
|
||||
#define __ATTR_H__
|
||||
#include "typedef.h"
|
||||
|
||||
typedef u32(*attr_get_func)(void *priv, u8 attr, u8 *buf, u16 buf_size, u32 offset);
|
||||
typedef void (*attr_set_func)(void *priv, u8 attr, u8 *data, u16 len);
|
||||
|
||||
u16 add_one_attr_huge(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u16 size);
|
||||
u8 add_one_attr(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size);
|
||||
u8 add_one_attr_ex(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size, u8 att_size);
|
||||
u8 add_one_attr_continue(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size);
|
||||
u32 attr_get(void *priv, u8 *buf, u16 buf_size, const attr_get_func *func_tab, u8 attr_max, u32 mask);
|
||||
void attr_set(void *priv, u8 *data, u16 len, const attr_set_func *func_tab, u8 attr_max);
|
||||
|
||||
#endif//__ATTR_H__
|
||||
Reference in New Issue
Block a user