api_btstack.h 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  1. /*
  2. * api_btstack.h
  3. *
  4. * Created by zoro on 2017-8-24.
  5. */
  6. #ifndef _API_BTSTACK_H
  7. #define _API_BTSTACK_H
  8. //工作模式
  9. #define MODE_NORMAL 0 //正常连接模式,关闭DUT测试
  10. #define MODE_NORMAL_DUT 1 //正常连接模式,使能DUT测试
  11. #define MODE_FCC_TEST 2 //FCC测试模式,通过串口通信
  12. #define MODE_BQB_RF_BREDR 3 //BR/EDR DUT测试模式,通过蓝牙通信
  13. #define MODE_BQB_RF_BLE 4 //BLE DUT测试模式,通过串口通信
  14. #define MODE_IODM_TEST 5 //IODM测试模式,通过串口通信
  15. //包类型
  16. #define FCC_TYPE_MODE_UNDEFINE 0
  17. #define FCC_TYPE_MODE_BR 1
  18. #define FCC_TYPE_MODE_EDR 2
  19. #define FCC_TYPE_MODE_BLE1M 4
  20. #define FCC_TYPE_MODE_BLE2M 8
  21. //蓝牙功能
  22. #define PROF_A2DP 0x0007 //蓝牙音乐功能
  23. #define PROF_HID 0x0018 //蓝牙键盘功能
  24. #define PROF_HFP 0x0060 //蓝牙通话功能
  25. #define PROF_SPP 0x0080 //蓝牙串口功能
  26. #define PROF_PBAP 0x0100 //蓝牙电话本功能
  27. #define PROF_HSP 0x0200
  28. #define PROF_GATT 0x0800
  29. #define PROF_MAP 0x0400 //蓝牙短信功能
  30. //蓝牙特性
  31. #define HFP_BAT_REPORT 0x01 //是否支持手机电量显示
  32. #define HFP_3WAY_CALL 0x02 //是否支持三通电话
  33. #define HFP_INBAND_RING_TONE 0x04 //是否支持手机来电铃声
  34. #define HFP_CALL_PRIVATE 0x08 //是否打开强制私密接听
  35. #define HFP_SIRI_CMD 0x10 //是否打开siri控制命令
  36. #define HFP_EC_AND_NR 0x20 //是否打开手机端回音和降噪
  37. #define HFP_RING_NUMBER_EN 0x40 //是否支持来电报号
  38. #define A2DP_AVRCP_VOL_CTRL 0x01 //是否支持手机音量控制同步
  39. #define A2DP_AVRCP_PLAY_STATUS_IOS 0x02 //是否支持IOS手机播放状态同步,可加快播放暂停响应速度,蓝牙后台建议打开;注意:打开后微信小视频会无声
  40. #define A2DP_AVRCP_PLAY_STATUS 0x04 //是否支持手机播放状态同步,可加快播放暂停响应速度,蓝牙后台建议打开;
  41. #define A2DP_RESTORE_PLAYING 0x08 //是否支持掉线回连后恢复播放
  42. #define A2DP_AVDTP_DELAY_REPORT 0x10 //是否支持AVDTP delay report功能
  43. #define A2DP_AVDTP_DYN_LATENCY 0x20 //是否支持动态延迟控制功能
  44. #define A2DP_AVDTP_EXCEPT_REST_PLAY 0x40 //是否支持异常复位后恢复连接和播放状态功能
  45. //a2dp特性扩展1
  46. #define A2DP_AVRCP_RECORD_DEVICE_VOL 0x01 //分别记录不同连接设备的音量
  47. #define A2DP_RESET_DEVICE_VOL 0x02 //不支持音量同步手机,连接恢复音量
  48. #define A2DP_PLAY_SEQN_OPT 0x04 //是否支持不连续seqn pkt播放
  49. //hfp特性扩展
  50. #define HFP_RECORD_DEVICE_VOL 0x01 //分别记录不同连接设备的音量
  51. #define HFP_INBAND_RING_TONE_CHANGE 0x02 //是否接受远端inband状态改变
  52. //SPP rfcomm通道号
  53. #define SPP_RFCOMM_SERVER_CHANNEL0 1
  54. #define SPP_RFCOMM_SERVER_CHANNEL1 5
  55. #define SPP_RFCOMM_SERVER_CHANNEL2 6
  56. //蓝牙编解码
  57. #define CODEC_SBC 0x01
  58. #define CODEC_AAC 0x02
  59. #define CODEC_MSBC 0x04
  60. #define CODEC_PLC 0x08
  61. #define CODEC_LHDCV5 0x10
  62. #define CODEC_LHDCV4 0x20
  63. #define CODEC_LDAC 0x40
  64. //TWS feature
  65. #define TWS_FEAT_TSCO 0x0001 //双耳通话
  66. #define TWS_FEAT_TSCO_RING 0x0002 //同步铃声
  67. #define TWS_FEAT_CODEC_MSBC 0x0004 //MSBC高清通话
  68. #define TWS_FEAT_CODEC_AAC 0x0008 //AAC高清音频
  69. #define TWS_FEAT_MS_SWITCH 0x0010 //主从切换
  70. #define TWS_FEAT_NAME_MENU 0x0020 //蓝牙改名称菜单
  71. #define TWS_FEAT_MS_BONDING 0x0040 //主从绑定
  72. #define TWS_FEAT_PAIR_NOR_LINKINFO 0x0400 //TWS配对时判断是否存在手机信息,有信息的为主耳
  73. #define TWS_FEAT_VERSION_MASK 0x0380 //版本号, bit7~9
  74. #define TWS_FEAT_CODEC_HIRES 0x1000 //LHDC&LADC
  75. #define TWS_FEAT_PUBLIC_ADDR 0x2000 //TWS连接后主耳使用公共地址连接手机
  76. #define TWS_FEAT_SNATCH 0x4000 //TWS一拖一和一拖二是否支持抢连
  77. //一拖二特性
  78. #define BT_2ACL_SCAN_ALWAYS 0x0001 //连接第一个设备继续打开可被发现
  79. #define BT_2ACL_RECONN_ODEV 0x0002 //只回连最后一次连接的手机
  80. #define BT_2ACL_SNATCH 0x0004 //是否支持一拖一抢连和一拖二抢连
  81. //TWS pair
  82. #define TWS_PAIR_OP_MASK 0x0f
  83. #define TWS_PAIR_OP_AUTO 0x00
  84. #define TWS_PAIR_OP_API 0x01
  85. #define TWS_PAIR_MS_BONDING_MASK 0x20
  86. #define TWS_PAIR_MS_BONDING 0x20
  87. #define TWS_PAIR_MODE_MASK 0xc0
  88. #define TWS_PAIR_MODE_BTID 0x40
  89. #define TWS_PAIR_MODE_BTNAME 0x00
  90. #define BT_TWS_SYNC_TO 50 //BT同步等待,对齐到一个50ms,250ms超时
  91. //删除配对信息TAG
  92. #define BT_INFO_TAG_NOR "NULL" //删除手机
  93. #define BT_INFO_TAG_UNPAIR "UPAR" //删除TWS,并断开
  94. #define BT_INFO_TAG_QTEST "QTET" //快测删除TWS配对信息
  95. #define BT_INFO_TAG_IODM "IODM" //IODM删除TWS配对信息
  96. #define BT_INFO_TAG_CHARGE_BOX "CBOX" //充电仓删除TWS配对信息
  97. #define BT_INFO_TAG_USER "USER" //用户删除TWS配对信息
  98. //蓝牙状态
  99. enum {
  100. BT_STA_OFF, //蓝牙模块已关闭
  101. BT_STA_INITING, //初始化中
  102. BT_STA_IDLE, //蓝牙模块打开,未连接
  103. BT_STA_SCANNING, //扫描中
  104. BT_STA_DISCONNECTING, //断开中
  105. BT_STA_CONNECTING, //连接中
  106. BT_STA_CONNECTED, //已连接
  107. BT_STA_PLAYING, //播放
  108. BT_STA_INCOMING, //来电响铃
  109. BT_STA_OUTGOING, //正在呼出
  110. BT_STA_INCALL, //通话中
  111. BT_STA_RES, //保留
  112. BT_STA_OTA, //OTA升级中
  113. };
  114. //通话状态
  115. enum {
  116. BT_CALL_IDLE, //
  117. BT_CALL_INCOMING, //来电响铃
  118. BT_CALL_OUTGOING, //正在呼出
  119. BT_CALL_ACTIVE, //通话中
  120. BT_CALL_3WAY_CALL, //三通电话或两部手机通话
  121. };
  122. //蓝牙通知
  123. enum {
  124. BT_NOTICE_INIT_FINISH, //蓝牙初始化完成
  125. BT_NOTICE_CONNECT_START, //开始回连手机, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  126. BT_NOTICE_CONNECT_FAIL, //回连手机失败, param[0]=reason, param[1]=reason, param[7:2]=bd_addr
  127. BT_NOTICE_DISCONNECT, //蓝牙断开, param[0]=feat,index, param[1]=reason, param[7:2]=bd_addr
  128. BT_NOTICE_LOSTCONNECT, //蓝牙连接丢失, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  129. BT_NOTICE_CONNECTED, //蓝牙连接成功, param[0]=feat,index, param[1]=reason, param[7:2]=bd_addr
  130. BT_NOTICE_SCO_SETUP,
  131. BT_NOTICE_SCO_FAIL,
  132. BT_NOTICE_SCO_KILL,
  133. BT_NOTICE_INCOMING, //来电
  134. BT_NOTICE_RING, //来电响铃
  135. BT_NOTICE_OUTGOING, //去电
  136. BT_NOTICE_CALL_NUMBER, //来电/去电号码
  137. BT_NOTICE_CALL, //建立通话
  138. BT_NOTICE_SET_SPK_GAIN, //设置通话音量
  139. BT_NOTICE_CALL_CHANGE_DEV, //1拖2时改变了通话设备
  140. BT_NOTICE_MUSIC_PLAY, //蓝牙音乐开始播放
  141. BT_NOTICE_MUSIC_STOP, //蓝牙音乐停止播放
  142. BT_NOTICE_MUSIC_CHANGE_VOL, //手机端改变蓝牙音乐音量, param[0]=down/up, param[1]=index, param[7:2]=bd_addr
  143. BT_NOTICE_MUSIC_SET_VOL, //手机端设置蓝牙音乐音量, param[0]=a2dp_vol, param[1]=index, param[7:2]=bd_addr
  144. BT_NOTICE_MUSIC_CHANGE_DEV, //1拖2时改变了播放设备, 例如从A手机切换到B手机, param[0]=a2dp_vol, param[1]=index, param[7:2]=bd_addr
  145. BT_NOTICE_HID_CONN_EVT, //HID服务连接事件
  146. BT_NOTICE_RECON_FINISH, //回连完成, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  147. BT_NOTICE_ABORT_STATUS, //中止状态, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  148. BT_NOTICE_NORCONNECT_FAIL, //手机发起连接到一半失败, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  149. BT_NOTICE_LOW_LATENCY_STA, //低延时状态切换
  150. BT_NOTICE_TWS_SEARCH_FAIL = 0x40, //搜索TWS失败, param[0]=reason(0=timeout, 0x0B=conn_exists, 0x0C=cmd_disallow)
  151. BT_NOTICE_TWS_CONNECT_START, //开始回连TWS, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  152. BT_NOTICE_TWS_CONNECT_FAIL, //TWS回连失败, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  153. BT_NOTICE_TWS_DISCONNECT, //TWS牙断开, param[0]=feat,index, param[1]=reason, param[7:2]=bd_addr
  154. BT_NOTICE_TWS_LOSTCONNECT, //TWS连接丢失, param[0]=status, param[1]=reason, param[7:2]=bd_addr
  155. BT_NOTICE_TWS_CONNECTED, //TWS连接成功, param[0]=feat,index, param[1]=reason, param[7:2]=bd_addr
  156. BT_NOTICE_TWS_INIT_VOL, //TWS设置副耳初始音乐音量
  157. BT_NOTICE_TWS_HID_SHUTTER, //远端TWS拍照键
  158. BT_NOTICE_TWS_USER_KEY, //TWS自定义按键
  159. BT_NOTICE_TWS_SET_OPERATION,
  160. BT_NOTICE_TWS_STATUS_CHANGE,
  161. BT_NOTICE_TWS_ROLE_CHANGE, //主从角色变换
  162. BT_NOTICE_TWS_RES5,
  163. BT_NOTICE_TWS_RES6,
  164. BT_NOTICE_TWS_RES7,
  165. BT_NOTICE_TWS_WARNING,
  166. BT_NOTICE_PBAP_CONNECTED,
  167. BT_NOTICE_PBAP_GET_PHONEBOOK_SIZE_COMPLETE, //获取电话薄数量完成
  168. BT_NOTICE_PBAP_PULL_PHONEBOOK_COMPLETE, //获取电话薄完成
  169. BT_NOTICE_PBAP_DISCONNECT,
  170. BT_NOTICE_SNATCH_CON, //抢连
  171. };
  172. //param[0]=feat,index
  173. enum
  174. {
  175. FEAT_TWS_FLAG = 0x80,
  176. FEAT_TWS_ROLE = 0x40,
  177. FEAT_TWS_MUTE_FLAG = 0x20,
  178. FEAT_TWS_FIRST_ROLE = 0x10,
  179. FEAT_INCOME_CON = 0x08,
  180. FEAT_FIRST_CON = 0x04,
  181. FEAT_INDEX_MASK = 0x03,
  182. };
  183. //控制消息
  184. enum {
  185. BT_CTL_VOL_CHANGE = 0, //音量调整,之后通过回调函数设置音量
  186. BT_CTL_PLAY_PAUSE, //切换播放、暂停
  187. BT_CTL_VOL_UP, //音乐加音量,之后通过回调函数调节音量
  188. BT_CTL_VOL_DOWN, //音乐减音量,之后通过回调函数调节音量
  189. BT_CTL_2ACL_PALY_SWITCH, //一拖二播放切换
  190. BT_CTL_MSC_RES1,
  191. BT_CTL_MSC_RES2,
  192. BT_CTL_MSC_RES3,
  193. BT_CTL_CALL_REDIAL, //回拨电话(最后一次通话)
  194. BT_CTL_CALL_REDIAL_NUMBER, //回拨电话(从hfp_get_outgoing_number获取号码)
  195. BT_CTL_CALL_ANSWER_INCOM, //接听来电(三通时挂起当前通话)
  196. BT_CTL_CALL_ANSWER_INCOM_REJ_OTHER, //接听来电(三通时挂断当前通话)
  197. BT_CTL_CALL_TERMINATE, //挂断通话或来电
  198. BT_CTL_CALL_SWAP, //切换三通电话
  199. BT_CTL_CALL_PRIVATE_SWITCH, //切换私密通话
  200. BT_CTL_HFP_REPORT_BAT, //报告电池电量
  201. BT_CTL_HFP_SPK_GAIN, //设置通话扬声器音量
  202. BT_CTL_HFP_MIC_GAIN, //设置通话麦克风音量
  203. BT_CTL_HFP_AT_CMD, //发送AT命令(从hfp_get_at_cmd获取命令)
  204. BT_CTL_HFP_SIRI_SW, //唤出/关闭siri
  205. BT_CTL_HFP_CUSTOM_AT_CMD,
  206. BT_CTL_CALL_ANSWER_INCOM_HOLD_OTHER,
  207. BT_CTL_HFP_RES3,
  208. BT_CTL_TWS_SWITCH, //主从切换
  209. BT_CTL_NOR_CONNECT,
  210. BT_CTL_NOR_DISCONNECT,
  211. BT_CTL_HID_CONNECT,
  212. BT_CTL_HID_DISCONNECT,
  213. BT_CTL_ATT_CONNECT,
  214. BT_CTL_ATT_DISCONNECT,
  215. BT_CTL_BLE_ADV_DISABLE, //关闭BLE 广播
  216. BT_CTL_BLE_ADV_ENABLE, //打开BLE 广播
  217. BT_CTL_BLE_RES1,
  218. BT_CTL_BLE_RES2,
  219. BT_CTL_FOT_RESP,
  220. BT_CTL_FCC_TEST,
  221. BT_CTL_LOW_LATENCY_EN,
  222. BT_CTL_LOW_LATENCY_DIS,
  223. BT_CTL_EAR_STA_CHANGE,
  224. BT_CTL_NR_STA_CHANGE,
  225. BT_CTL_AAP_USER_DATA,
  226. BT_CTL_ID3_GET_ELE_ATT, //ID3获取歌曲信息(需打开ID3功能)
  227. BT_CTL_DUEROS_AI_START,
  228. BT_CTL_DUEROS_AI_STOP,
  229. BT_CTL_DUEROS_DMA_CTL,
  230. BT_CTL_MAX,
  231. BT_CTL_A2DP_VOLUME_UP = 0xff0041, //音量加
  232. BT_CTL_A2DP_VOLUME_DOWN = 0xff0042, //音量减
  233. BT_CTL_A2DP_MUTE = 0xff0043, //MUTE
  234. BT_CTL_A2DP_PLAY = 0xff0044, //播放
  235. BT_CTL_A2DP_STOP = 0xff0045, //停止
  236. BT_CTL_A2DP_PAUSE = 0xff0046, //暂停
  237. BT_CTL_A2DP_RECORD = 0xff0047,
  238. BT_CTL_A2DP_REWIND = 0xff0048, //快退
  239. BT_CTL_A2DP_FAST_FORWARD = 0xff0049, //快进
  240. BT_CTL_A2DP_EJECT = 0xff004a,
  241. BT_CTL_A2DP_FORWARD = 0xff004b, //下一曲
  242. BT_CTL_A2DP_BACKWARD = 0xff004c, //上一曲
  243. BT_CTL_A2DP_REWIND_END = 0xff00c8, //结束快退
  244. BT_CTL_A2DP_FAST_FORWARD_END = 0xff00c9, //结束快进
  245. BT_CTL_NO = 0xffffff,
  246. };
  247. enum bt_msg_comm_t {
  248. COMM_BT_CTL0, //无传参的消息
  249. COMM_BT_START_WORK, //蓝牙开始工作
  250. COMM_BT_SET_SCAN, //设置可被发现/可被连接
  251. COMM_BT_CONNECT, //连接蓝牙
  252. COMM_BT_DISCONNECT, //断开蓝牙
  253. COMM_BT_ABORT_RECONNECT, //中止回连
  254. COMM_BT_ATT_MSG,
  255. COMM_BT_SET_SCAN_INTV, //设置PAGE SCAN PARAM
  256. COMM_BT_ABORT_PAGE_PSCAN, //中止PAGE和PAGESCAN
  257. COMM_BT_ADD_VOL_SET_QUEUE, //添加音量到设置队列中
  258. COMM_BT_SET_SCAN_FORCE, //强制设置可被发现/可被连接
  259. };
  260. enum bt_msg_tws_t {
  261. TWS_SET_SCAN,
  262. TWS_SEARCH_SLAVE,
  263. TWS_USER_KEY, //用户自定义消息(主副互发)
  264. TWS_SYNC_INFO, //同步状态消息(主副同步)
  265. TWS_SET_STATUS, //tws_send_set_status
  266. TWS_RES_ADD,
  267. TWS_RES_DONE,
  268. TWS_ALARM_REQ, //同步ALARM请求(主发给副)
  269. TWS_DISCONNECT,
  270. TWS_CONNECT,
  271. };
  272. enum bt_msg_hid_t {
  273. HID_KEYBOARD,
  274. HID_CONSUMER,
  275. HID_TOUCH_SCREEN,
  276. HID_MOUSE,
  277. HID_DOUYIN,
  278. HID_SIMPLE_KEYBOARD,
  279. };
  280. enum bt_msg_pbap_t {
  281. BT_PBAP_CTRL,
  282. BT_PBAP_SELECT_PHONEBOOK,
  283. BT_PBAP_GET_PHONEBOOK_SIZE,
  284. BT_PBAP_PULL_PHONEBOOK,
  285. };
  286. //蓝牙消息
  287. enum bt_msg_t {
  288. BT_MSG_CTRL = 0, //蓝牙控制消息
  289. BT_MSG_COMM,
  290. BT_MSG_RES1,
  291. BT_MSG_TWS, //TWS消息
  292. BT_MSG_ADV0,
  293. BT_MSG_A2DP, //A2DP消息
  294. BT_MSG_HFP, //HFP消息
  295. BT_MSG_HSP, //HSP消息
  296. BT_MSG_HID, //HID消息,KEYPAD按键/CONSUMER按键/触摸屏
  297. BT_MSG_PBAP, //PBAP消息
  298. BT_MSG_MAX,
  299. BT_MSG_RES = 0xf0, //0xf0~0xff保留给传参较多的api
  300. };
  301. enum sync_info_enum {
  302. SYNC_INFO_SETTING, //VOL/LANG/EQ/BAT/...
  303. SYNC_INFO_LEDCNT, //同步 led cnt
  304. SYNC_INFO_EQPARAM,
  305. SYNC_INFO_FOT_DATA,
  306. SYNC_INFO_RING_STA,
  307. SYNC_INFO_CUSTOM_DATA,
  308. SYNC_INFO_DUEROS_DMA_DATA,
  309. };
  310. //tws_status
  311. enum
  312. {
  313. TWS_STA_FLAG = 0x80,
  314. TWS_STA_ROLE = 0x40,
  315. TWS_STA_NOR_FLAG = 0x01,
  316. TWS_STA_NOR_ACL_FLAG = 0x02,
  317. };
  318. //LE Addr Type, public or random(static or non resolvable or resolvable)
  319. enum {
  320. GAP_RANDOM_ADDRESS_TYPE_OFF = 0, //Public
  321. GAP_RANDOM_ADDRESS_TYPE_STATIC,
  322. GAP_RANDOM_ADDRESS_NON_RESOLVABLE,
  323. GAP_RANDOM_ADDRESS_RESOLVABLE,
  324. };
  325. //LE状态
  326. enum {
  327. LE_STA_STANDBY,
  328. LE_STA_ADVERTISING, //正在广播
  329. LE_STA_CONNECTION, //已连接
  330. };
  331. //LE GATT 服务相关
  332. /**
  333. BLE GATTS ERR return
  334. */
  335. #define BLE_GATTS_SUCCESS 0x00
  336. #define BLE_GATTS_SRVC_TYPE_ERR 0x01
  337. #define BLE_GATTS_SRVC_RULES_ERR 0x02
  338. #define BLE_GATTS_SRVC_PROPS_ERR 0x03
  339. #define BLE_GATTS_SRVC_ATT_FULL_ERR 0x04
  340. #define BLE_GATTS_SRVC_PROFILE_FULL_ERR 0x05
  341. /**
  342. att property flag
  343. */
  344. #define ATT_BROADCAST 0x01
  345. #define ATT_READ 0x02
  346. #define ATT_WRITE_WITHOUT_RESPONSE 0x04
  347. #define ATT_WRITE 0x08
  348. #define ATT_NOTIFY 0x10
  349. #define ATT_INDICATE 0x20
  350. #define ATT_AUTHENTICATED_SIGNED_WRITE 0x40
  351. #define ATT_EXTENDED_PROPERTIES 0x80
  352. #define ATT_DYNAMIC 0x100
  353. #define ATT_UUID128 0x200
  354. #define ATT_AUTHENTICATION_REQUIRED 0x400
  355. #define ATT_AUTHORIZATION_REQUIRED 0x800
  356. /**
  357. define group GATT Server Service Types
  358. */
  359. typedef enum {
  360. BLE_GATTS_SRVC_TYPE_PRIMARY = 0x00, //Primary Service
  361. BLE_GATTS_SRVC_TYPE_SEVONDARY= 0x01, //Secondary Service
  362. BLE_GATTS_SRVC_TYPE_INCLUDE = 0x02, //include Type
  363. }ble_gatts_service_type;
  364. /**
  365. define group GATT Server UUID Types
  366. */
  367. typedef enum {
  368. BLE_GATTS_UUID_TYPE_16BIT = 0x00, //UUID 16BIT
  369. BLE_GATTS_UUID_TYPE_128BIT = 0x01, //UUID 128BIT
  370. }ble_gatts_uuid_type;
  371. /**
  372. define GATT handler callback
  373. con_handle: connect handle
  374. handle : attribute handle
  375. flag : call back flag
  376. */
  377. #define ATT_CB_FALG_OFFSET (0xffff)
  378. #define ATT_CB_FALG_DIR_WRITE (0x10000)
  379. typedef int (*ble_gatt_callback_func)(uint16_t con_handle, uint16_t handle, uint32_t flag, uint8_t *ptr, uint16_t len);
  380. /**
  381. define GATT service base
  382. */
  383. typedef struct gatts_service_base{
  384. uint16_t handle;
  385. uint8_t att_index;
  386. }gatts_service_base_st;
  387. /**
  388. define GATT service uuid
  389. */
  390. typedef struct gatts_uuid_base{
  391. uint16_t props;
  392. uint8_t type;
  393. const uint8_t *uuid;
  394. }gatts_uuid_base_st;
  395. /**
  396. define GATT service call back info
  397. */
  398. typedef struct {
  399. uint16_t client_config; // att config 1:notify enable 2:indicate enable
  400. uint16_t value_len;
  401. ble_gatt_callback_func att_callback_func;
  402. uint8_t *value; //read return data when att_callback_func is NULL
  403. } ble_gatt_characteristic_cb_info_t;
  404. #define GATT_CLIENT_CONFIG_NOTIFY 1
  405. #define GATT_CLIENT_CONFIG_INDICATE 2
  406. /**
  407. define group GATT Server profile struct
  408. */
  409. typedef struct gatts_profile_list{
  410. void *item;
  411. uint16_t profile_start_handle;
  412. uint16_t profile_end_handle;
  413. const uint8_t *profile_date;
  414. uint16_t profile_date_size;
  415. }ble_gatts_profile_list_st;
  416. typedef struct {
  417. uint8_t callsetup;
  418. uint8_t callheld;
  419. uint8_t call;
  420. uint8_t ccwa;
  421. } hfp_indicators_status_t;
  422. extern uint8_t cfg_bt_work_mode;
  423. extern uint8_t cfg_bt_max_acl_link;
  424. extern bool cfg_bt_dual_mode;
  425. extern bool cfg_bt_tws_mode;
  426. extern uint8_t cfg_bt_scan_ctrl_mode;
  427. extern bool cfg_bt_simple_pair_mode;
  428. extern uint16_t cfg_bt_support_profile;
  429. extern uint16_t cfg_bt_support_codec;
  430. extern uint8_t cfg_bt_hid_type;
  431. extern const uint8_t cfg_bt_spp_rfcomm_server_ch0;
  432. extern const uint8_t cfg_bt_spp_rfcomm_server_ch1;
  433. extern const uint8_t cfg_bt_spp_rfcomm_server_ch2;
  434. extern uint8_t cfg_bt_connect_times;
  435. extern uint8_t cfg_bt_pwrup_connect_times;
  436. extern uint16_t cfg_bt_sup_to_connect_times;
  437. extern uint8_t cfg_bt_rf_def_txpwr;
  438. extern uint8_t cfg_bt_page_txpwr;
  439. extern uint8_t cfg_bt_inq_txpwr;
  440. extern uint8_t cfg_ble_page_txpwr;
  441. extern uint8_t cfg_ble_page_rssi_thr;
  442. extern uint8_t cfg_ble_rf_delta_gain;
  443. extern uint8_t cfg_bt_a2dp_feature;
  444. extern uint8_t cfg_bt_a2dp_feature1;
  445. extern uint8_t cfg_bt_hfp_feature;
  446. extern uint8_t cfg_bt_hfp_feature1;
  447. extern uint8_t cfg_bt_tws_pair_mode;
  448. extern uint16_t cfg_bt_tws_feat;
  449. extern uint8_t cfg_bt_tws_not_auto_connect;
  450. extern uint8_t cfg_bt_hci_disc_only_spp;
  451. extern uint8_t cfg_bt_hid_douyin_mode;
  452. extern uint8_t cfg_bt_hid_android_param;
  453. extern const uint16_t link_info_page_size;
  454. #if HLW_UI
  455. extern uint8_t connect_addr[6];
  456. extern uint16_t cfg_bt_2acl_feature;
  457. #endif // HLW_UI
  458. #define bt_is_scan_ctrl() cfg_bt_scan_ctrl_mode
  459. #define bt_a2dp_is_vol_ctrl() (cfg_bt_a2dp_feature & A2DP_AVRCP_VOL_CTRL)
  460. #define bt_hid_is_douyin_type() cfg_bt_hid_douyin_mode
  461. #define BT_OPT_AFH_UNKNOW_DIS BIT(0)
  462. #define BT_OPT_SCO_ACK_EN BIT(1)
  463. extern const uint8_t cfg_bb_bt_opt;
  464. //control
  465. void bb_run_loop(void);
  466. void bt_fcc_init(void);
  467. void bt_init(void); //初始化蓝牙变量
  468. int bt_setup(void); //打开蓝牙模块
  469. void bt_off(void); //关闭蓝牙模块
  470. void bt_wakeup(void); //唤醒蓝牙模块
  471. void bt_start_work(uint8_t opcode, uint8_t scan_en); //蓝牙开始工作,opcode: 0=回连, 1=不回连
  472. void bt_send_msg_do(uint msg); //蓝牙控制消息,参数详见bt_msg_t
  473. void bt_thread_check_trigger(void);
  474. void bt_audio_bypass(void); //蓝牙SBC/SCO通路关闭
  475. void bt_audio_enable(void); //蓝牙SBC/SCO通路使能
  476. void bt_get_stack_local_name(char* name);
  477. void bt_set_stack_local_name(const char* name);
  478. void bt_set_sco_far_delay(void *buf, uint size, uint delay);
  479. void bt_set_scan(uint8_t scan_en); //打开/关闭可被发现和可被连接, bit0=可被发现, bit1=可被连接
  480. uint8_t bt_get_scan(void); //获取设置的可被发现可被连接状态(已连接时设置完不会立即生效,需要等断开连接)
  481. void bt_set_scan_force(uint8_t scan_en); //强制打开/关闭可被发现和可被连接, bit0=可被发现, bit1=可被连接
  482. uint8_t bt_get_curr_scan(void); //获取当前可被发现可被连接状态
  483. void bt_connect(void); //蓝牙设备回连, 回连次数在cfg_bt_connect_times配置
  484. void bt_connect_address(void); //蓝牙设备回连地址, 回连地址在bt_get_connect_addr函数设置
  485. void bt_disconnect_address(void); //蓝牙设备断开地址, 断开地址在bt_get_disconnect_addr函数设置
  486. void bt_disconnect(uint reason); //蓝牙设备断开, reason: 0=单独断开(入仓); 1=断开并同步关机(按键/自动关机);用户单独调用断开,并不关机reason=0xff
  487. void bt_hid_connect(void); //蓝牙HID服务回连
  488. void bt_hid_disconnect(void); //蓝牙HID服务断开
  489. int bt_hid_is_connected(void);
  490. bool bt_hid_is_ready_to_discon(void);
  491. void bt_set_1to2_en(bool en); //蓝牙开关1拖二功能,连上两台手机时关闭会默认断开不在当前耳机音乐通道的手机,可以用bool bt_set_max_acl_link_hook(void)函数返回true重定义断开方式
  492. //status
  493. uint bt_get_disp_status(void); //获取蓝牙的当前显示状态, V060
  494. uint bt_get_status(void); //获取蓝牙的当前状态
  495. uint8_t bt_get_scan(void); //判断当前可被连接可被扫描状态
  496. uint8_t bt_get_curr_scan(void); //获取实时可被连接可被扫描状态
  497. uint bt_get_call_indicate(void); //获取通话的当前状态
  498. uint bt_get_siri_status(void); //获取SIRI当前状态, 0=SIRI已退出, 1=SIRI已唤出
  499. bool bt_is_calling(void); //判断是否正在通话
  500. bool bt_is_playing(void); //判断是否正在播放
  501. bool bt_is_testmode(void); //判断当前蓝牙是否处于测试模式
  502. bool bt_is_sleep(void); //判断蓝牙是否进入休眠状态
  503. bool bt_is_allow_sleep(void); //判断蓝牙是否允许进入休眠状态
  504. bool bt_is_connected(void); //判断蓝牙是否已连接(TWS副耳被连接,或主耳与手机已连接)
  505. bool bt_is_ios_device(void); //判断当前播放的是否ios设备
  506. bool bt_is_support_vol_ctrl(void); //判断当前播放的是否支持音量同步
  507. uint32_t bt_sleep_proc(void);
  508. void bt_enter_sleep(void);
  509. void bt_exit_sleep(void);
  510. void bt_updata_local_name(char *bt_name);
  511. bool sco_is_connected(void);
  512. bool bt_sco_is_msbc(void); //判断当前通话是否是宽带通话
  513. bool sbc_is_bypass(void);
  514. bool bt_is_low_latency(void); //判断蓝牙是否在低延时状态
  515. bool bt_is_silence(void);
  516. bool bt_decode_is_aac(void); //判断蓝牙解码是否是aac
  517. bool bt_decode_is_lhdc(void); //判断蓝牙解码是否是LHDC
  518. bool bt_decode_is_ldac(void); //判断蓝牙解码是否是LDAC
  519. uint8_t bt_get_connected_num(void); //一拖二获取当前连接了几台设备
  520. uint8_t bt_get_cur_a2dp_media_index(void); //一拖二获取当前播放设备的index
  521. u8 bt_call_get_ring_index(void); //一拖二获取当前响铃设备的index
  522. u8 bt_get_connect_status(u8 *bd_addr); //获取当前地址设备的连接状态,已连接返回BT_STA_CONNECTED,连接中BT_STA_CONNECTING,未连接BT_STA_DISCONNECTING
  523. //info
  524. bool bt_get_link_btname(uint8_t index, char *name, uint8_t max_size); //index: 0=link0, 1=link1, 0xff=auto(default link0)
  525. bool bt_get_link_btaddr(uint8_t index, u8 *addr); //index: 0=link0, 1=link1, 0xff=auto(default link0)
  526. void bt_get_local_bd_addr(u8 *addr);
  527. void bt_tws_put_link_info_addr(uint8_t *bd_addr, uint8_t *link_key);
  528. void bt_tws_put_link_info_feature(uint8_t *bd_addr, uint8_t feature);
  529. void bt_nor_link_ctrl_max_set(u8 max);
  530. void bt_nor_put_link_name(uint8_t *bd_addr, char *name);
  531. int bt_nor_reorder_for_addr(uint8_t *bd_addr); //将指定地址的连接信息放在链表最前面,回连时将优先回连该地址
  532. //tws api
  533. uint8_t bt_tws_get_status(void); //获取tws连接状态
  534. uint8_t bt_tws_get_scan(void); //tws是否已打开可被搜索与连接
  535. void bt_tws_set_scan(uint8_t scan_en); //打开/关闭tws可被搜索与连接, bit0=可被发现, bit1=可被连接
  536. void bt_tws_disconnect(void); //断开tws设备
  537. void bt_tws_connect(void); //回连tws设备,连接成功返回BT_NOTICE_TWS_CONNECTED,连接失败返回BT_NOTICE_TWS_CONNECT_FAIL
  538. void bt_tws_search_slave(uint timeout); //搜索tws设备,搜索失败返回BT_NOTICE_TWS_SEARCH_FAIL,搜索成功并建立连接返回BT_NOTICE_TWS_CONNECTED
  539. uint bt_tws_get_link_info(uint8_t *bd_addr); //获取tws配对信息,返回值(0=未连接过TWS,0x80=作为master连过副耳,0x81=作为slave连接过主耳),被连地址放在bd_addr
  540. void bt_tws_delete_link_info_with_tag(const char *tag, uint32_t ra_addr); //带参数删除tws配对信息,参数会保存在flash,方便追溯
  541. #define bt_tws_delete_link_info() bt_tws_delete_link_info_with_tag("USER", (uint32_t)__builtin_return_address(0)) //删除tws配对信息
  542. void bt_tws_unpair_device(void); //删除tws配对信息并断开
  543. uint8_t bt_tws_user_key(uint keycode); //发送tws自定义按键, 16bit有效; 返回值:0=成功,1=失败,2=缓冲区满
  544. void bt_tws_switch(void); //主从切换,例如通话时切主副MIC
  545. bool bt_tws_need_switch(bool calling); //查看是否需要切换
  546. void bt_nor_connect(void); //回连手机
  547. void bt_nor_disconnect(void); //断开手机
  548. bool bt_nor_get_link_info(uint8_t *bd_addr); //获取手机配对信息,bd_addr=NULL时仅查询是否存在回连信息
  549. uint8_t bt_nor_get_link_info_num(void); //获取配对记录中手机的个数
  550. bool bt_nor_get_link_info_addr(uint8_t *bd_addr, uint8_t order); //获取第n个手机配对信息,bd_addr=NULL时仅查询是否存在回连信息
  551. bool bt_nor_get_link_info_name(uint8_t *bd_addr, char *name, uint8_t max_size); //获取配对信息中的蓝牙名
  552. void bt_nor_delete_link_info_by_addr(uint8_t *bd_addr, bool ext); //根据地址删除手机配对信息
  553. void bt_nor_delete_link_info(void); //删除手机配对信息
  554. void bt_nor_unpair_device(void); //删除手机配对信息并断开
  555. u8 bt_tws_get_force_role(void);
  556. bool bt_tws_get_first_role(void);
  557. bool bt_tws_get_link_rssi(int8_t *buffer, bool left_channel);
  558. void bt_tws_report_dgb(void);
  559. uint32_t bt_tws_master_clock_get(void); //获取tws master的clock
  560. /**
  561. * @Desc: Switch the current device MIC as active MIC.
  562. * @return: 0-Switch MIC Success, 1-Switch MIC Fail
  563. */
  564. u8 bt_tws_switch_mic(void);
  565. /**
  566. * @Desc: Hold the current device MIC as active MIC, if not, switch to active MIC first
  567. * @return: 0-HOLD MIC Success, 1-HOLD MIC Fail
  568. */
  569. u8 bt_tws_hold_mic(void);
  570. /**
  571. * @Desc: Release the permission of the current device MIC as active MIC,
  572. * the MIC of other device can become active MIC.
  573. */
  574. void bt_tws_release_mic(void);
  575. /**
  576. * @Desc: Get the device of the active MIC
  577. * @return: 0-local device,1-remote device
  578. */
  579. u8 bt_tws_get_dev_of_active_mic(void);
  580. #define bt_tws_is_connected() (bool)(bt_tws_get_status() & TWS_STA_FLAG)
  581. #define bt_tws_is_slave() (bool)(bt_tws_get_status() & TWS_STA_ROLE)
  582. #define bt_nor_is_connected() (bool)(bt_tws_get_status() & TWS_STA_NOR_FLAG)
  583. #define bt_nor_acl_is_connected() (bool)(bt_tws_get_status() & TWS_STA_NOR_ACL_FLAG)
  584. #define bt_tws_is_ms_switch() ((cfg_bt_tws_feat & TWS_FEAT_MS_SWITCH) != 0)
  585. #define bt_tws_is_tsco() ((cfg_bt_tws_feat & TWS_FEAT_TSCO) != 0)
  586. #define bt_tws_is_name_menu() ((cfg_bt_tws_feat & TWS_FEAT_NAME_MENU) != 0)
  587. #define bt_send_msg(ogf, ocf) bt_send_msg_do((ogf<<24) | (ocf))
  588. #define bt_ctrl_msg(msg) bt_send_msg(BT_MSG_CTRL, msg)
  589. #define bt_comm_msg(msg, param) bt_send_msg(BT_MSG_COMM, (msg<<16) | (u16)(param))
  590. #define bt_tws_msg(msg, param) bt_send_msg(BT_MSG_TWS, (msg<<16) | (u16)(param))
  591. #define bt_hid_msg(msg, param) bt_send_msg(BT_MSG_HID, (msg<<16) | (u16)(param))
  592. #define bt_pbap_msg(msg, param) bt_send_msg(BT_MSG_PBAP, (msg<<16) | (u16)param)
  593. //蓝牙连接
  594. #define bt_scan_enable() bt_set_scan(0x03) //打开扫描
  595. #define bt_scan_disable() bt_set_scan(0x00) //关闭扫描
  596. #define bt_set_scan_param(ps_intv,is_intv) bt_comm_msg(COMM_BT_SET_SCAN_INTV, (ps_intv << 8) | is_intv) //设置scan 参数,0x100*(intv+1)
  597. #define bt_abort_reconnect() bt_comm_msg(COMM_BT_ABORT_RECONNECT, 0xffff) //终止回接
  598. #define bt_abort_reconnect_silence(feat) bt_comm_msg(COMM_BT_ABORT_RECONNECT, (u16)feat) //终止回接,没有消息回调。feat:0=手机, BT_FEAT_TWS=TWS
  599. //蓝牙音乐
  600. #define bt_music_play() bt_ctrl_msg(BT_CTL_A2DP_PLAY) //播放
  601. #define bt_music_pause() bt_ctrl_msg(BT_CTL_A2DP_PAUSE) //暂停
  602. #define bt_music_play_pause() bt_ctrl_msg(BT_CTL_PLAY_PAUSE) //切换播放/暂停
  603. #define bt_music_stop() bt_ctrl_msg(BT_CTL_A2DP_STOP) //停止
  604. #define bt_music_prev() bt_ctrl_msg(BT_CTL_A2DP_BACKWARD) //上一曲
  605. #define bt_music_next() bt_ctrl_msg(BT_CTL_A2DP_FORWARD) //下一曲
  606. #define bt_music_rewind() bt_ctrl_msg(BT_CTL_A2DP_REWIND) //开始快退
  607. #define bt_music_rewind_end() bt_ctrl_msg(BT_CTL_A2DP_REWIND_END) //结束快退
  608. #define bt_music_fast_forward() bt_ctrl_msg(BT_CTL_A2DP_FAST_FORWARD) //开始快进
  609. #define bt_music_fast_forward_end() bt_ctrl_msg(BT_CTL_A2DP_FAST_FORWARD_END) //结束快进
  610. #define bt_music_vol_change() bt_ctrl_msg(BT_CTL_VOL_CHANGE) //调节音乐音量,之后通过回调函数a2dp_vol_set_cb设置音量
  611. #define bt_music_vol_up() bt_ctrl_msg(BT_CTL_VOL_UP) //音乐加音量,之后通过回调函数a2dp_vol_adj_cb调节音量
  612. #define bt_music_vol_down() bt_ctrl_msg(BT_CTL_VOL_DOWN) //音乐减音量,之后通过回调函数a2dp_vol_adj_cb调节音量
  613. #define bt_music_play_switch() bt_ctrl_msg(BT_CTL_2ACL_PALY_SWITCH) //一拖二切换播放手机
  614. #define bt_low_latency_enable() bt_ctrl_msg(BT_CTL_LOW_LATENCY_EN) //蓝牙使能低延时
  615. #define bt_low_latency_disable() bt_ctrl_msg(BT_CTL_LOW_LATENCY_DIS) //蓝牙关闭低延时
  616. #define bt_fcc_test_start() bt_ctrl_msg(BT_CTL_FCC_TEST) //FCC test模式
  617. //蓝牙通话
  618. #define bt_call_redial_last_number() bt_ctrl_msg(BT_CTL_CALL_REDIAL) //电话回拨(最后一次通话)
  619. #define bt_call_answer_incoming() bt_ctrl_msg(BT_CTL_CALL_ANSWER_INCOM) //接听电话,三通时挂起当前通话
  620. #define bt_call_answer_incom_rej_other() bt_ctrl_msg(BT_CTL_CALL_ANSWER_INCOM_REJ_OTHER) //接听电话,三通时挂断当前通话,1拖2时挂断当前的手机通话
  621. #define bt_call_answer_incom_hold_other() bt_ctrl_msg(BT_CTL_CALL_ANSWER_INCOM_HOLD_OTHER) //接听电话,三通时挂起当前通话,1拖2时挂起当前的手机通话
  622. #define bt_call_terminate() bt_ctrl_msg(BT_CTL_CALL_TERMINATE) //挂断电话
  623. #define bt_call_swap() bt_ctrl_msg(BT_CTL_CALL_SWAP) //切换三通电话
  624. #define bt_call_private_switch() bt_ctrl_msg(BT_CTL_CALL_PRIVATE_SWITCH) //切换私密通话
  625. #define bt_call_redial_number() bt_ctrl_msg(BT_CTL_CALL_REDIAL_NUMBER)
  626. #define bt_hfp_siri_switch() bt_ctrl_msg(BT_CTL_HFP_SIRI_SW) //开关SIRI, android需要在语音助手中打开“蓝牙耳机按键启动”, ios需要打开siri功能
  627. #define bt_hfp_report_bat() bt_ctrl_msg(BT_CTL_HFP_REPORT_BAT)
  628. #define bt_hfp_set_spk_gain() bt_ctrl_msg(BT_CTL_HFP_SPK_GAIN)
  629. #define bt_hfp_send_at_cmd() bt_ctrl_msg(BT_CTL_HFP_AT_CMD)
  630. #define bt_hfp_send_custom_at_cmd() bt_ctrl_msg(BT_CTL_HFP_CUSTOM_AT_CMD)
  631. #define bt_ctl_nr_sta_change()
  632. void bt_update_ear_sta(void); //更新耳机入耳状态
  633. void bt_set_ear_sta(bool ear_sta); //设置耳机入耳状态
  634. #define bt_tws_vol_change()
  635. #define bt_tws_sync_setting() bt_tws_msg(TWS_SYNC_INFO, (SYNC_INFO_SETTING<<8))
  636. #define bt_tws_sync_led() bt_tws_msg(TWS_SYNC_INFO, (SYNC_INFO_LEDCNT<<8))
  637. #define bt_tws_sync_eq_param() bt_tws_msg(TWS_SYNC_INFO, (SYNC_INFO_EQPARAM<<8))
  638. #define bt_tws_sync_fot_data() bt_tws_msg(TWS_SYNC_INFO, (SYNC_INFO_FOT_DATA<<8))
  639. #define bt_tws_sync_ring_sta() bt_tws_msg(TWS_SYNC_INFO, (SYNC_INFO_RING_STA<<8))
  640. #define bt_tws_sync_custom_data() bt_tws_msg(TWS_SYNC_INFO, (SYNC_INFO_CUSTOM_DATA<<8))
  641. #define bt_tws_sync_dueros_dma_data() bt_tws_msg(TWS_SYNC_INFO, (SYNC_INFO_DUEROS_DMA_DATA<<8))
  642. #define bt_fot_tws_resp() bt_ctrl_msg(BT_CTL_FOT_RESP)
  643. //tws alarm
  644. enum {
  645. ALARM_RES,
  646. ALARM_TONE,
  647. ALARM_VOL,
  648. ALARM_ABP,
  649. ALARM_USER,
  650. };
  651. #define bt_tws_req_res(param)
  652. #define bt_tws_res_add(param) bt_tws_msg(TWS_RES_ADD, param)
  653. #define bt_tws_res_done(param) bt_tws_msg(TWS_RES_DONE, param)
  654. #define bt_tws_req_alarm(param) bt_tws_msg(TWS_ALARM_REQ, param)
  655. #define bt_tws_req_alarm_res(res_idx) bt_tws_req_alarm((ALARM_RES<<12) | (0x0fff & (res_idx)))
  656. #define bt_tws_req_alarm_tone(tone_idx) bt_tws_req_alarm((ALARM_TONE<<12) | (0x0fff & (tone_idx)))
  657. #define bt_tws_req_alarm_vol(vol, feat) bt_tws_req_alarm((ALARM_VOL<<12) | (0x00ff & (vol)) | ((0x000f & (feat))<<8))
  658. #define bt_tws_req_alarm_abp(mode) bt_tws_req_alarm((ALARM_ABP<<12) | (0x0fff & (mode)))
  659. #define bt_tws_req_alarm_user(value) bt_tws_req_alarm((ALARM_USER<<12) | (0x0fff & (value)))
  660. //pkt
  661. typedef void (*kick_func_t)(void);
  662. struct txbuf_tag {
  663. uint8_t *ptr;
  664. uint16_t len;
  665. uint16_t handle;
  666. } __attribute__ ((packed)) ;
  667. struct txpkt_tag
  668. {
  669. struct txbuf_tag *buf;
  670. uint16_t buf_size;
  671. uint8_t total;
  672. volatile uint8_t cnt;
  673. uint8_t rptr;
  674. volatile uint8_t wptr;
  675. kick_func_t send_kick;
  676. };
  677. typedef struct {
  678. uint8_t *rptr;
  679. uint8_t *wptr;
  680. uint8_t *start;
  681. uint8_t *end;
  682. volatile uint16_t total;
  683. uint16_t trig;
  684. } ring_buf_t;
  685. uint32_t txpkt_init(struct txpkt_tag *txpkt, void *mem_pool, uint8_t total, uint16_t buf_size);
  686. void ring_buf_init(ring_buf_t *pbuf, void *start, uint16_t size, uint16_t trig);
  687. bool ring_buf_put(ring_buf_t *pbuf, uint8_t *ptr, uint16_t len);
  688. bool ring_buf_get(ring_buf_t *pbuf, void (*callback)(uint8_t *, uint16_t), uint16_t len);
  689. bool ring_buf_peek(ring_buf_t *pbuf, void (*callback)(uint8_t *, uint16_t), uint16_t len);
  690. //init
  691. void hfp_hf_init(void);
  692. void a2dp_init(void);
  693. void aap_init(void);
  694. uint8_t sdp_add_service(void *item);
  695. uint bt_get_hfp_feature(void);
  696. //a2dp
  697. bool a2dp_is_playing_fast(void);
  698. uint8_t a2dp_vol_reverse(uint vol); //将系统音量转换为a2dp_vol
  699. uint8_t a2dp_vol_conver(uint8_t a2dp_vol); //将a2dp_vol转换为系统音量级数
  700. bool a2dp_is_connect(void);
  701. bool a2dp_is_avctp_connect(void);
  702. uint8_t a2dp_get_codec_type_by_index(uint8_t index); //根据index获取a2dp解码格式,sbc(0),aac(1),lhdc(2),ldac(3)
  703. //hfp
  704. bool hfp_is_connected(void);
  705. //spp
  706. enum {
  707. SPP_SERVICE_CH0, //channel0,是默认SPP UUID 服务通路
  708. SPP_SERVICE_CH1, //channel1,自定义UUID,默认用GFPS
  709. SPP_SERVICE_CH2, //channel2, 自定义UUID,未使用
  710. };
  711. void spp_init(void);
  712. extern struct txpkt_tag spp_tx_ch0;
  713. extern struct txpkt_tag spp_tx_ch1;
  714. extern struct txpkt_tag spp_tx_ch2;
  715. void spp_send_kick(void);
  716. int bt_spp_tx(uint8_t ch, uint8_t *packet, uint16_t len);
  717. void spp_support_mul_server(uint8_t support);
  718. bool spp_is_connect(void);
  719. bool spp_is_connected_with_channel(uint8_t ch); //判断某一个SPP通路是否连接,目前只有 0,1,2 共3个通路
  720. void spp_disconnect(void);
  721. //voice assistant
  722. enum {
  723. VA_STA_IDLE = 0,
  724. VA_STA_CONNECT,
  725. VA_STA_STOP,
  726. VA_STA_START,
  727. VA_STA_END,
  728. };
  729. #define bt_menu_va_stop() bt_comm_msg(COMM_BT_ATT_MSG, BIT(1))
  730. void bt_menu_va_operate(u8 enble);
  731. u8 bt_menu_va_is_connected(void);
  732. //hid
  733. void hid_device_init(void);
  734. bool bt_hid_send(void *buf, uint len, bool auto_release); //自定义HID数组
  735. bool bt_hid_send_key(uint type, uint keycode); //标准HID按键
  736. #define bt_hid_key(keycode) bt_hid_send_key(HID_KEYBOARD, keycode) //标准HID键, 如Enter
  737. #define bt_hid_consumer(keycode) bt_hid_send_key(HID_CONSUMER, keycode) //自定义HID键, 如VOL+ VOL-
  738. #define bt_hid_touch_screen(keycode) bt_hid_send_key(HID_TOUCH_SCREEN, keycode) //触屏
  739. bool bt_hid_touch_screen_set_key(void *ts);
  740. #define bt_hid_finger_select_ios() bt_hid_msg(HID_TOUCH_SCREEN, 1) //抖音视频选择IOS系统, 需要在bt连接前调用区分
  741. #define bt_hid_finger_select_andriod() bt_hid_msg(HID_TOUCH_SCREEN, 2) //抖音视频选择andriod系统, 需要在bt连接前调用区分
  742. /**
  743. * @brief 模拟触点函数
  744. 注意:IOS 范围是-2047-2048 ,安卓是0-4096;
  745. IOS设备,x,y是相对位置,比如10,10是相对当前位置移动10,10;
  746. 安卓设备,x,y是绝对位置,10,10是在手机10,10的位置上;
  747. * @param is_press 1按下,0抬起
  748. * @param x 模拟触点横坐标
  749. * @param y 模拟触点纵坐标
  750. **/
  751. void bt_hid_point_pos(bool is_press, s16 x, s16 y);
  752. //pbap
  753. #define bt_pbap_connect() bt_pbap_msg(BT_PBAP_CTRL, 1)
  754. #define bt_pbap_disconnect() bt_pbap_msg(BT_PBAP_CTRL, 0)
  755. #define bt_pbap_select_phonebook(book, sim) bt_pbap_msg(BT_PBAP_SELECT_PHONEBOOK, (sim<<8) | (u8)book)
  756. // sim - 1:选择SIM卡,0:本机
  757. // book- 0:pb, 1:fav, 2-ich, 3:och, 4-mch, 5-cch, 6-spd
  758. // 若不配置,则选择默认值为本机pb
  759. #define bt_pbap_get_phonebook_size() bt_pbap_msg(BT_PBAP_GET_PHONEBOOK_SIZE, 0)
  760. #define bt_pbap_pull_phonebook_whole() bt_pbap_msg(BT_PBAP_PULL_PHONEBOOK, 0)
  761. #define bt_pbap_pull_phonebook_single(idx) bt_pbap_msg(BT_PBAP_PULL_PHONEBOOK, idx)
  762. // 按编号获取联系人信息
  763. // idx不为零,如果为零则直接获取整个电话本信息
  764. void pbap_client_init(void);
  765. void map_client_init(void);
  766. void goep_client_init(void);
  767. //hsp
  768. void hsp_hs_init(void);
  769. void hsp_hs_init_var(void);
  770. void bt_hsp_call_switch(void); //挂断/接听
  771. void bt_hsp_sco_conn(void); //建立HSP SCO连接
  772. void bt_hsp_sco_disconn(void); //断开HSP SCO连接
  773. //latt
  774. void latt_send_kick(void);
  775. int latt_tx_notify(uint16_t att_handle, const uint8_t * value, uint16_t value_len);
  776. void bt_latt_connect(void);
  777. void bt_latt_disconnect(void);
  778. /*****************************************************************************
  779. * BLE连接相关(通道1,与BLE无连接广播相互独立)
  780. *****************************************************************************/
  781. struct att_hdl_t {
  782. u16 hdl; //att handle
  783. u8 cfg; //client config enable
  784. u8 res;
  785. };
  786. extern struct txpkt_tag notify_tx;
  787. extern struct txpkt_tag latt_notify_tx;
  788. //Dueros AI
  789. #define dueros_ai_speech_start() bt_ctrl_msg(BT_CTL_DUEROS_AI_START) //唤醒小度
  790. #define dueros_ai_speech_stop() bt_ctrl_msg(BT_CTL_DUEROS_AI_STOP) //未支持
  791. #define dueros_dma_key_msg_ctl() bt_ctrl_msg(BT_CTL_DUEROS_DMA_CTL) //同步从机key msg
  792. //BLE
  793. #define ble_adv_dis() bt_ctrl_msg(BT_CTL_BLE_ADV_DISABLE)
  794. #define ble_adv_en() bt_ctrl_msg(BT_CTL_BLE_ADV_ENABLE)
  795. #define ble_enable_adv() btstack_ble_adv_en() //蓝牙线程才可直接调用该函数
  796. #define ble_disable_adv() btstack_ble_adv_dis() //蓝牙线程才可直接调用该函数
  797. void btstack_ble_adv_en(void);
  798. void btstack_ble_adv_dis(void);
  799. void ble_set_adv(u8 chanel, u8 type);
  800. void ble_set_adv_interval(u16 interval);
  801. bool ble_set_adv_data(const u8 *adv_buf, u32 size);
  802. bool ble_set_scan_rsp_data(const u8 *scan_rsp_buf, u32 size);
  803. void ble_update_conn_param(u16 interval, u16 latency, u16 timeout);
  804. u8 ble_get_status(void);
  805. void ble_disconnect(void);
  806. bool ble_is_connect(void);
  807. bool ble_max_mtu_set(uint16_t max_mtu);
  808. void ble_init_att_for_handle(u16 handle, uint8_t *buf, uint16_t len);
  809. void ble_send_kick(void);
  810. u16 ble_get_gatt_mtu(void);
  811. int ble_tx_notify(u16 handle, u8* buf, u8 len);
  812. uint8_t ble_set_delta_gain(void);
  813. //init gatt
  814. //profile_table: profile cache buf
  815. //cb_info_table_p: call back info cache
  816. void ble_gatts_init(uint8_t *profile_table, uint16_t profile_table_size,
  817. ble_gatt_characteristic_cb_info_t **cb_info_table_p,
  818. uint16_t gatt_max_att);
  819. int ble_gatts_service_add(ble_gatts_service_type service_type, const uint8_t *service_uuid, ble_gatts_uuid_type uuid_type, uint16_t *service_handle);
  820. int ble_gatts_characteristic_add( const uint8_t *att_uuid, ble_gatts_uuid_type uuid_type, uint16_t props,
  821. uint16_t *att_handle, ble_gatt_characteristic_cb_info_t *cb_info);
  822. bool ble_gatt_init_att_info(uint16_t att_handle, ble_gatt_characteristic_cb_info_t *att_cb_info);
  823. int ble_gatts_inlcude_service_add(ble_gatts_uuid_type uuid_type, const uint8_t *service_uuid, uint16_t start_handle, uint16_t end_handle, uint16_t *att_handle);
  824. int ble_gatts_add_profile_date(ble_gatts_profile_list_st *gatts_profile);
  825. int ble_gatts_attribute_add(const uint8_t *att_data, uint16_t *att_handle);
  826. bool ble_gatts_profile_mg_alloc_att_num_check(uint8_t att_num);
  827. /*****************************************************************************
  828. * BLE通道0广播相关(通道0,与BLE连接相互独立)
  829. *****************************************************************************/
  830. #define BLE_ADV0_EN_BIT 0x01
  831. #define BLE_ADV0_MS_VAR_BIT 0x02
  832. #define BLE_ADV0_ADDR_PUBIC_BIT 0x04
  833. extern const uint8_t cfg_ble_adv0_en;
  834. void ble_adv0_set_intv(u16 intv); //设置广播间隔,单位625us
  835. void ble_adv0_set_ctrl(uint opcode); //0=关闭广播, 1=打开广播, 2=更新广播数据(打开时直接广播,关闭时仅更新buffer), 3=更新scan_rsp数据
  836. uint8_t ble_adv0_get_adv_en(void);
  837. void ble_adv0_update_adv(void);
  838. void ble_adv0_idx_update(void);
  839. /*****************************************************************************
  840. * BLE私有连接相关(与BLE连接相互独立)
  841. *****************************************************************************/
  842. uint8_t ble_priv_adv_get_adv_en(void);
  843. int ble_priv_tx_notify(u16 att_handle, u8* buf, u8 len);
  844. void ble_priv_adv_en(u16 opcode);
  845. bool ble_priv_is_connect(void);
  846. void ble_priv_con_discon(void);
  847. #endif //_API_BTSTACK_H