avctp_user.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. #ifndef __AVCTP_USER_H__
  2. #define __AVCTP_USER_H__
  3. #include "typedef.h"
  4. #include "btstack_typedef.h"
  5. ///***注意:该文件的枚举与库编译密切相关,主要是给用户提供调用所用。用户不能自己在中间添加值。*/
  6. ////----user (command) codes----////
  7. typedef enum {
  8. /*
  9. 使用user_send_cmd_prepare(USER_CMD_TYPE cmd,u16 param_len,u8 *param)发送命令
  10. //返回0表支持参数个数正确,返回1表不支持,2是参数错误
  11. 要三个参数,没参数说明的命令参数param_len传0,param传NULL
  12. 例子A、USER_CTRL_HFP_CALL_SET_VOLUME命令需要1个参数的使用例子:
  13. u8 vol = 8;
  14. user_send_cmd_prepare(USER_CTRL_HFP_CALL_SET_VOLUME,1, &vol);
  15. 例子B、USER_CTRL_DIAL_NUMBER 参数要用数组先存起来,param_len是号码长度,param可传参数数组指针,
  16. user_val->income_phone_num已经存好号码
  17. user_send_cmd_prepare(USER_CTRL_DIAL_NUMBER,user_val->phone_num_len,user_val->income_phone_num);
  18. */
  19. //链路操作部分
  20. //回连,使用的是VM的地址,一般按键操作不使用该接口
  21. USER_CTRL_START_CONNECTION,
  22. //通过地址去连接,如果知道地址想去连接使用该接口
  23. USER_CTRL_START_CONNEC_VIA_ADDR,
  24. //通过指定地址手动回连,该地址是最后一个断开设备的地址
  25. USER_CTRL_START_CONNEC_VIA_ADDR_MANUALLY,
  26. //通过地址去连接spp,如果知道地址想去连接使用该接口
  27. USER_CTRL_START_CONNEC_SPP_VIA_ADDR,
  28. //断开连接,断开当前所有蓝牙连接
  29. USER_CTRL_DISCONNECTION_HCI,
  30. //取消链接
  31. USER_CTRL_CONNECTION_CANCEL,
  32. //读取远端名字
  33. USER_CTRL_READ_REMOTE_NAME,
  34. //连接或断开SCO或esco,选择这个命令会自动判断要断开还是连接sco
  35. USER_CTRL_PAUSE_MUSIC,
  36. //连接或断开SCO或esco,选择这个命令会自动判断要断开还是连接sco
  37. USER_CTRL_SCO_LINK,
  38. //连接SCO或esco
  39. USER_CTRL_CONN_SCO,
  40. //断开sco或esco
  41. USER_CTRL_DISCONN_SCO,
  42. //断开SDP,一般按键操作不使用该接口
  43. USER_CTRL_DISCONN_SDP_MASTER,
  44. //关闭蓝牙可发现
  45. USER_CTRL_WRITE_SCAN_DISABLE,
  46. //打开蓝牙可发现
  47. USER_CTRL_WRITE_SCAN_ENABLE,
  48. // USER_CTRL_WRITE_SCAN_ENABLE_KEY ,
  49. //关闭蓝牙可连接
  50. USER_CTRL_WRITE_CONN_DISABLE,
  51. //打开蓝牙可连接
  52. USER_CTRL_WRITE_CONN_ENABLE,
  53. // USER_CTRL_WRITE_CONN_ENABLE_KEY ,
  54. //控制蓝牙搜索,需要搜索附件设备做功能的连续说明情况在补充完善功能
  55. USER_CTRL_SEARCH_DEVICE,
  56. //取消搜索
  57. USER_CTRL_INQUIRY_CANCEL,
  58. //取消配对
  59. USER_CTRL_PAGE_CANCEL,
  60. ///进入sniff模式,一般按键操作不使用该接口
  61. USER_CTRL_SNIFF_IN,
  62. USER_CTRL_SNIFF_EXIT,
  63. USER_CTRL_ALL_SNIFF_EXIT,
  64. //hfp链路部分
  65. //控制打电话音量,注意可能有些手机进度条有变化音量大小没变化,同步要设置样机DAC音量
  66. /*跟电话音量操作有关的操作最终都执行回调函数call_vol_change*/
  67. USER_CTRL_HFP_CMD_BEGIN, /* 接口扩展用来做HFP 连接 */
  68. USER_CTRL_HFP_CALL_VOLUME_UP, /*音量加1,手机可以同步显示*/
  69. USER_CTRL_HFP_CALL_VOLUME_DOWN, /*音量减1,手机可以同步显示*/
  70. USER_CTRL_HFP_CALL_SET_VOLUME, /*设置固定值,手机可以同步显示,需要传1个音量值*/
  71. USER_CTRL_HFP_CALL_GET_VOLUME, /*获取音量,默认从call_vol_change返回*/
  72. //来电接听电话
  73. USER_CTRL_HFP_CALL_ANSWER,
  74. //挂断电话
  75. USER_CTRL_HFP_CALL_HANGUP,
  76. //回拨上一个打出电话
  77. USER_CTRL_HFP_CALL_LAST_NO,
  78. //获取当前通话电话号码
  79. USER_CTRL_HFP_CALL_CURRENT,
  80. //通话过程中根据提示输入控制
  81. /*例子
  82. char num = '1';
  83. user_send_cmd_prepare(USER_CTRL_HFP_DTMF_TONES,1,(u8 *)&num);
  84. */
  85. //发送打电话时的信号选择DTMF tones ,有一个参数,参数支持{0-9, *, #, A, B, C, D}
  86. USER_CTRL_HFP_DTMF_TONES,
  87. //根据电话号码拨号
  88. /**USER_CTRL_DIAL_NUMBER命令有参数,参数要用数组先存起来,
  89. param_len是号码长度,param可传参数数组指针*/
  90. USER_CTRL_DIAL_NUMBER,
  91. //发送电量 /**要连接上HFP才有用*/
  92. USER_CTRL_SEND_BATTERY,
  93. //*控制siri状态*//*可以注册回调函数获取返回值*/
  94. USER_CTRL_HFP_GET_SIRI_STATUS,
  95. //*开启siri*/
  96. USER_CTRL_HFP_GET_SIRI_OPEN,
  97. //*关闭siri,一般说完话好像自动关闭了,如果要提前终止可调用*/
  98. USER_CTRL_HFP_GET_SIRI_CLOSE,
  99. /*获取手机的日期和时间,苹果可以,一般安卓机好像都不行*/
  100. USER_CTRL_HFP_GET_PHONE_DATE_TIME,
  101. USER_CTRL_HFP_CMD_SEND_BIA,
  102. /*获取手机厂商的命令 */
  103. USER_CTRL_HFP_CMD_GET_MANUFACTURER,
  104. /*更新当前的电量给手机*/
  105. USER_CTRL_HFP_CMD_UPDATE_BATTARY,
  106. //三方通话操作
  107. //应答
  108. USER_CTRL_HFP_THREE_WAY_ANSWER1, //挂断当前去听另一个(未接听或者在保留状态都可以)
  109. USER_CTRL_HFP_THREE_WAY_ANSWER2, //保留当前去接听, 或者用于两个通话的切换
  110. USER_CTRL_HFP_THREE_WAY_ANSWER1X, //目前没有用
  111. USER_CTRL_HFP_THREE_WAY_ANSWER2X, //目前没有用
  112. USER_CTRL_HFP_THREE_WAY_ANSWER3, //可以发完USER_CTRL_HFP_THREE_WAY_ANSWER2,又发ANSWER3,自己看看效果
  113. //拒听
  114. USER_CTRL_HFP_THREE_WAY_REJECT, //拒绝后台来电
  115. USER_CTRL_HFP_DISCONNECT, //断开HFP连接
  116. USER_CTRL_HFP_CMD_END,
  117. //音乐控制部分
  118. USER_CTRL_AVCTP_CMD_BEGIN,
  119. //音乐播放
  120. USER_CTRL_AVCTP_OPID_PLAY,
  121. //音乐暂停
  122. USER_CTRL_AVCTP_OPID_PAUSE,
  123. //音乐停止
  124. USER_CTRL_AVCTP_OPID_STOP,
  125. //音乐下一首
  126. USER_CTRL_AVCTP_OPID_NEXT,
  127. //音乐上一首
  128. USER_CTRL_AVCTP_OPID_PREV,
  129. //音乐快进
  130. USER_CTRL_AVCTP_OPID_FORWARD,
  131. //音乐快退
  132. USER_CTRL_AVCTP_OPID_REWIND,
  133. //音乐循环模式
  134. USER_CTRL_AVCTP_OPID_REPEAT_MODE,
  135. USER_CTRL_AVCTP_OPID_SHUFFLE_MODE,
  136. //获取播放歌曲总时间和当前时间接口
  137. USER_CTRL_AVCTP_OPID_GET_PLAY_TIME,
  138. //同步音量接口
  139. USER_CTRL_AVCTP_OPID_SEND_VOL,
  140. // //AVCTP断开,是音乐控制链路,一般不使用
  141. USER_CTRL_AVCTP_DISCONNECT,
  142. // //AVCTP连接,是音乐控制链路,一般不使用
  143. USER_CTRL_AVCTP_CONN,
  144. USER_CTRL_AVCTP_CMD_END,
  145. //高级音频部分
  146. USER_CTRL_A2DP_CMD_BEGIN,
  147. //有判断条件的,回连过程连接高级音频,避免手机连也自动发起连接,一般按键操作不使用该接口
  148. USER_CTRL_AUTO_CONN_A2DP,
  149. //连接高级音频,回来最后一个断开设备的地址
  150. USER_CTRL_CONN_A2DP,
  151. //断开高级音频,只断开高级音频链路,如果有电话还会保留
  152. USER_CTRL_DISCONN_A2DP,
  153. //maybe BQB test will use
  154. USER_CTRL_A2DP_CMD_START ,
  155. USER_CTRL_A2DP_CMD_CLOSE ,
  156. USER_CTRL_A2DP_CMD_SUSPEND ,
  157. USER_CTRL_A2DP_CMD_GET_CONFIGURATION ,
  158. USER_CTRL_A2DP_CMD_ABORT ,
  159. USER_CTRL_A2DP_CMD_END,
  160. //蓝牙关闭
  161. USER_CTRL_POWER_OFF,
  162. //蓝牙开启
  163. USER_CTRL_POWER_ON,
  164. ///*hid操作定义*/
  165. USER_CTRL_HID_CMD_BEGIN,
  166. //按键连接
  167. USER_CTRL_HID_CONN,
  168. // //只发一个按键,安卓手机使用
  169. USER_CTRL_HID_ANDROID,
  170. //只发一个按键,苹果和部分安卓手机适用
  171. USER_CTRL_HID_IOS,
  172. // //发两个拍照按键
  173. USER_CTRL_HID_BOTH,
  174. //HID断开
  175. USER_CTRL_HID_DISCONNECT,
  176. //Home Key,apply to IOS and Android
  177. USER_CTRL_HID_HOME ,
  178. //Return Key,only support Android
  179. USER_CTRL_HID_RETURN ,
  180. //LeftArrow Key
  181. USER_CTRL_HID_LEFTARROW ,
  182. //RightArrow Key
  183. USER_CTRL_HID_RIGHTARROW ,
  184. //Volume Up
  185. USER_CTRL_HID_VOL_UP ,
  186. //Volume Down
  187. USER_CTRL_HID_VOL_DOWN ,
  188. USER_CTRL_HID_SEND_DATA ,
  189. USER_CTRL_HID_CMD_END,
  190. /**有TWS命名的都不用了*/
  191. /*对箱操作命令*/
  192. USER_CTRL_TWS_CMD_BEGIN,
  193. USER_CTRL_SYNC_TRAIN,
  194. USER_CTRL_SYNC_TRAIN_SCAN,
  195. USER_CTRL_MONITOR,
  196. USER_CTRL_TWS_CONNEC_VIA_ADDR,
  197. USER_CTRL_TWS_COTROL_CDM,
  198. //清除对箱连接信息
  199. USER_CTRL_TWS_CLEAR_INFO,
  200. //断开对箱连接
  201. USER_CTRL_TWS_DISCONNECTION_HCI,
  202. //发起对箱连接
  203. USER_CTRL_TWS_START_CONNECTION,
  204. USER_CTRL_TWS_SYNC_CDM,
  205. USER_CTRL_TWS_SYNC_SBC_CDM,
  206. USER_CTRL_TWS_RESTART_SBC_CDM,
  207. USER_CTRL_SYNC_TRAIN_CANCEL,
  208. USER_CTRL_SYNC_TRAIN_SCAN_CANCEL,
  209. USER_CTRL_TWS_SYNC_CDM_FUN,
  210. USER_CTRL_TWS_LINEIN_START,
  211. USER_CTRL_TWS_LINEIN_CLOSE,
  212. USER_CTRL_TWS_CMD_END,
  213. ///蓝牙串口发送命令
  214. USER_CTRL_SPP_CMD_BEGIN,
  215. /**USER_CTRL_SPP_SEND_DATA命令有参数,参数会先存起来,
  216. param_len是数据长度,param发送数据指针
  217. 返回0,表示准备成功,会PENDing发完才返回
  218. 3表示上一包数据没发完,*/
  219. USER_CTRL_SPP_SEND_DATA, //len <= 512
  220. USER_CTRL_SPP_TRY_SEND_DATA,//
  221. USER_CTRL_SPP_UPDATA_DATA,
  222. //serial port profile disconnect command
  223. USER_CTRL_SPP_DISCONNECT,
  224. USER_CTRL_SPP_CMD_END,
  225. ///pbg发送命令
  226. USER_CTRL_PBG_CMD_BEGIN,
  227. USER_CTRL_PBG_SEND_DATA,//len <= 512
  228. USER_CTRL_PBG_TRY_SEND_DATA,//
  229. USER_CTRL_PBG_CMD_END,
  230. ///adt 发送命令
  231. USER_CTRL_ADT_CMD_BEGIN,
  232. USER_CTRL_ADT_CONNECT,
  233. USER_CTRL_ADT_KEY_MIC_OPEN,
  234. USER_CTRL_ADT_SEND_DATA,//len <= 512
  235. USER_CTRL_ADT_TRY_SEND_DATA,//
  236. USER_CTRL_ADT_CMD_END,
  237. ///蓝牙电话本功能发送命令
  238. USER_CTRL_PBAP_CMD_BEGIN,
  239. //电话本功能读取通话记录的前n条
  240. USER_CTRL_PBAP_READ_PART,
  241. //电话本功能读全部记录
  242. USER_CTRL_PBAP_READ_ALL,
  243. //电话本功能中断读取记录
  244. USER_CTRL_PBAP_STOP_READING,
  245. USER_CTRL_PBAP_CMD_END,
  246. //蓝牙其他操作
  247. // //删除最新的一个设备记忆
  248. // USER_CTRL_DEL_LAST_REMOTE_INFO ,
  249. // //删除所有设备记忆
  250. USER_CTRL_DEL_ALL_REMOTE_INFO,
  251. USER_CTRL_TEST_KEY,
  252. USER_CTRL_SEND_USER_INFO,
  253. USER_CTRL_KEYPRESS,
  254. USER_CTRL_PAIR,
  255. USER_CTRL_AFH_CHANNEL,
  256. USER_CTRL_HALF_SEC_LOOP_CREATE,
  257. USER_CTRL_HALF_SEC_LOOP_DEL,
  258. /**音量同步接口,自动选择通过HID还是AVRCP来发送*/
  259. USER_CTRL_CMD_SYNC_VOL_INC,
  260. /**音量同步接口,自动选择通过HID还是AVRCP来发送*/
  261. USER_CTRL_CMD_SYNC_VOL_DEC,
  262. /*单独HID和普通蓝牙模式的切换接口,音箱SDK才有完整流程*/
  263. USER_CTRL_CMD_CHANGE_PROFILE_MODE,
  264. USER_CTRL_CMD_RESERVE_INDEX4,
  265. USER_CTRL_CMD_RESUME_STACK,
  266. //获取当前音乐的一些信息
  267. USER_CTRL_AVCTP_OPID_GET_MUSIC_INFO,
  268. //MAP功能发送命令
  269. USER_CTRL_MAP_CMD_BEGIN,
  270. //MAP读取时间
  271. USER_CTRL_MAP_READ_TIME,
  272. //MAP读取未读短信
  273. USER_CTRL_MAP_READ_INBOX,
  274. //MAP读取已读短信
  275. USER_CTRL_MAP_READ_OUTBOX,
  276. //MAP读取已发读短信
  277. USER_CTRL_MAP_READ_SENT,
  278. //MAP读取删除短信
  279. USER_CTRL_MAP_READ_DELETED,
  280. //MAP读取草稿箱短信
  281. USER_CTRL_MAP_READ_DRAFT,
  282. //MAP停止读取
  283. USER_CTRL_MAP_STOP_READING,
  284. USER_CTRL_MAP_CMD_END,
  285. USER_CTRL_LAST
  286. } USER_CMD_TYPE;
  287. ////----反馈给客户使用的状态----////
  288. typedef enum {
  289. /*下面是一些即时反馈的状态,无法重复获取的状态*/
  290. BT_STATUS_POWER_ON = 1, /*上电*/
  291. BT_STATUS_POWER_OFF = 2,
  292. BT_STATUS_INIT_OK, /*初始化完成*/
  293. BT_STATUS_EXIT_OK, /*蓝牙退出完成*/
  294. BT_STATUS_START_CONNECTED, /*开始连接*/
  295. BT_STATUS_FIRST_CONNECTED, /*连接成功*/
  296. BT_STATUS_SECOND_CONNECTED, /*连接成功*/
  297. BT_STATUS_ENCRY_COMPLETE, /*加密完成*/
  298. BT_STATUS_FIRST_DISCONNECT, /*断开连接*/
  299. BT_STATUS_SECOND_DISCONNECT, /*断开连接*/
  300. BT_STATUS_PHONE_INCOME, /*来电*/
  301. BT_STATUS_PHONE_NUMBER, /*来电话号码*/
  302. BT_STATUS_PHONE_MANUFACTURER, /*获取手机的厂商*/
  303. BT_STATUS_PHONE_OUT, /*打出电话*/
  304. BT_STATUS_PHONE_ACTIVE, /*接通电话*/
  305. BT_STATUS_PHONE_HANGUP, /*挂断电话*/
  306. BT_STATUS_BEGIN_AUTO_CON, /*发起回连*/
  307. BT_STATUS_MUSIC_SOUND_COME, /*库中加入auto mute判断音乐播放开始*/
  308. BT_STATUS_MUSIC_SOUND_GO, /*库中加入auto mute判断音乐播放暂停*/
  309. BT_STATUS_RESUME, /*后台有效,手动切回蓝牙*/
  310. BT_STATUS_RESUME_BTSTACK, /*后台有效,后台时来电切回蓝牙*/
  311. BT_STATUS_SUSPEND, /*蓝牙挂起,退出蓝牙*/
  312. BT_STATUS_LAST_CALL_TYPE_CHANGE, /*最后拨打电话的类型,只区分打入和打出两种状态*/
  313. BT_STATUS_CALL_VOL_CHANGE, /*通话过程中设置音量会产生这个状态变化*/
  314. BT_STATUS_SCO_STATUS_CHANGE, /*当esco/sco连接或者断开时会产生这个状态变化*/
  315. BT_STATUS_CONNECT_WITHOUT_LINKKEY, /*判断是首次连接还是配对后的连接,主要依据要不要简易配对或者pin code*/
  316. BT_STATUS_PHONE_BATTERY_CHANGE, /*电话电量变化,该状态仅6个等级,0-5*/
  317. BT_STATUS_RECONNECT_LINKKEY_LOST, /*回连时发现linkkey丢失了,即手机取消配对了*/
  318. BT_STATUS_RECONN_OR_CONN, /*回连成功还是被连接*/
  319. BT_STATUS_BT_TEST_BOX_CMD, /*蓝牙收到测试盒消息。1-升级,2-fast test*/
  320. BT_STATUS_BT_TWS_CONNECT_CMD,
  321. BT_STATUS_SNIFF_STATE_UPDATE, /*SNIFF STATE UPDATE*/
  322. BT_STATUS_TONE_BY_FILE_NAME, /*直接使用文件名播放提示音*/
  323. BT_STATUS_PHONE_DATE_AND_TIME, /*获取到手机的时间和日期,注意会有兼容性问题*/
  324. BT_STATUS_INBAND_RINGTONE,
  325. BT_STATUS_VOICE_RECOGNITION,
  326. BT_STATUS_AVRCP_INCOME_OPID, /*收到远端设备发过来的AVRCP命令*/
  327. BT_STATUS_HFP_SERVICE_LEVEL_CONNECTION_OK,
  328. BT_STATUS_CONN_A2DP_CH,
  329. BT_STATUS_CONN_HFP_CH,
  330. BT_STATUS_INQUIRY_TIMEOUT,
  331. /*下面是1个持续的状态,是get_stereo_bt_connect_status获取*/
  332. /*下面是6个持续的状态,是get_bt_connect_status()获取*/
  333. BT_STATUS_INITING, /*正在初始化*/
  334. BT_STATUS_WAITINT_CONN, /*等待连接*/
  335. BT_STATUS_AUTO_CONNECTINT, /*正在回连*/
  336. BT_STATUS_CONNECTING, /*已连接,没有电话和音乐在活动*/
  337. BT_STATUS_TAKEING_PHONE, /*正在电话*/
  338. BT_STATUS_PLAYING_MUSIC, /*正在音乐*/
  339. BT_STATUS_A2DP_MEDIA_START,
  340. BT_STATUS_A2DP_MEDIA_STOP,
  341. BT_STATUS_BROADCAST_STATE,/*braoadcaset中*/
  342. BT_STATUS_TRIM_OVER, /*测试盒TRIM完成*/
  343. BT_STATUS_CONN_HCRP_CH, //HCRP连接成功
  344. BT_STATUS_DISCONN_HCRP_CH, //HCRP通道断开
  345. } STATUS_FOR_USER;
  346. typedef enum {
  347. BT_CALL_BATTERY_CHG = 0, //电池电量改变
  348. BT_CALL_SIGNAL_CHG, //网络信号改变
  349. BT_CALL_INCOMING, //电话打入
  350. BT_CALL_OUTGOING, //电话打出
  351. BT_CALL_ACTIVE, //接通电话
  352. BT_CALL_HANGUP, //电话挂断
  353. BT_CALL_ALERT, //远端reach
  354. BT_CALL_VOL_CHANGED,
  355. } BT_CALL_IND_STA;
  356. typedef enum {
  357. BT_MUSIC_STATUS_IDLE = 0,
  358. BT_MUSIC_STATUS_STARTING,
  359. BT_MUSIC_STATUS_SUSPENDING,
  360. } BT_MUSIC_STATE; //音乐状态
  361. #define SYS_BT_EVENT_TYPE_CON_STATUS (('C' << 24) | ('O' << 16) | ('N' << 8) | '\0')
  362. #define SYS_BT_EVENT_TYPE_HCI_STATUS (('H' << 24) | ('C' << 16) | ('I' << 8) | '\0')
  363. #define REMOTE_DEFAULT 0x00
  364. #define REMOTE_SINK 0x01
  365. #define REMOTE_SOURCE 0x02
  366. #define SPP_CH 0x01
  367. #define HFP_CH 0x02
  368. #define A2DP_CH 0x04 //media
  369. #define AVCTP_CH 0x08
  370. #define HID_CH 0x10
  371. #define AVDTP_CH 0x20
  372. #define PBAP_CH 0x40
  373. #define HFP_AG_CH 0x80
  374. #define A2DP_SRC_CH 0x2000
  375. #define HCRP_CH 0x10000
  376. struct sniff_ctrl_config_t {
  377. u16 sniff_max_interval;
  378. u16 sniff_mix_interval;
  379. u16 sniff_attemp;
  380. u16 sniff_timeout;
  381. u8 sniff_addr[6];
  382. };
  383. extern u32 user_send_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param);
  384. /**发射器操作的几个接口*/
  385. extern u32 user_emitter_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param);
  386. u8 get_emitter_connect_status(void);
  387. u16 get_emitter_curr_channel_state();
  388. u8 get_emitter_a2dp_status(void);
  389. /*
  390. u16 get_curr_channel_state(); 与 channel 判断区分
  391. 主动获取当前链路的连接状态,可以用来判断有哪些链路连接上了
  392. */
  393. extern u16 get_curr_channel_state();
  394. /*
  395. u8 get_call_status(); 与BT_CALL_IND_STA 枚举的值判断
  396. 用于获取当前蓝牙电话的状态
  397. */
  398. extern u8 get_call_status();
  399. extern void user_cmd_ctrl_init(void *var);
  400. /******当前连接的设备是jl测试盒**********/
  401. extern bool get_remote_test_flag();
  402. extern void set_remote_test_flag(u8 own_remote_test);
  403. extern void bt_fast_test_handle_register(void (*handle)(void));
  404. extern void bt_dut_test_handle_register(void (*handle)(u8));
  405. extern void inquiry_result_handle_register(void (*handle)(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi));
  406. /*个性化参数设置*/
  407. /*用户调试设置地址,6个byte*/
  408. extern void __set_bt_mac_addr(u8 *addr);
  409. /*用户调试设置name,最长32个字符*/
  410. extern void __set_host_name(const char *name, u8 len);
  411. /*用户调试设置pin code*/
  412. extern void __set_pin_code(const char *code);
  413. /*该接口用于设置上电回连需要依次搜索设备的个数。*/
  414. extern void __set_auto_conn_device_num(u8 num);
  415. /*//回连的超时设置。ms单位。但是对手机发起的连接是没作用的*/
  416. extern void __set_super_timeout_value(u16 time);
  417. /*外部设置支持什么协议*/
  418. extern void bt_cfg_default_init(u8 support);
  419. /*设置电量显示发送更新的周期时间,为0表示关闭电量显示功能*/
  420. extern void __bt_set_update_battery_time(u8 time);
  421. /*给用户设置蓝牙支持连接的个数,主要用于控制控制可发现可连接和回连流程*/
  422. extern void __set_user_ctrl_conn_num(u8 num);
  423. /*提供接口外部设置要保留hfp不要蓝牙通话*/
  424. extern void __set_disable_sco_flag(bool flag);
  425. /*提供接口外部设置简易配对参数*/
  426. extern void __set_simple_pair_param(u8 io_cap, u8 oob_data, u8 mitm);
  427. /*有些自选接口用来实现个性化功能流程,回调函数注册,记得常来看看哟*/
  428. extern void get_battery_value_register(int (*handle)(void)); /*电量发送时获取电量等级的接口注册*/
  429. extern void music_vol_change_handle_register(void (*handle)(int vol), int (*handle2)(void)); /*手机更样机音乐模式的音量同步*/
  430. extern void read_remote_name_handle_register(void (*handle)(u8 status, u8 *addr, u8 *name)); /*获取到名字后的回调函数接口注册函数*/
  431. extern void spp_data_deal_handle_register(void (*handler)(u8 packet_type, u16 channel, u8 *packet, u16 size)); /*支持串口功能的数据处理接口*/
  432. extern void discon_complete_handle_register(void (*handle)(u8 *addr, int reason)); /*断开或者连接上会调用的函数,给客户反馈信息*/
  433. extern void update_bt_current_status(u8 *addr, u8 new_status, u8 conn_status);
  434. extern u8 get_bt_connect_status(void);
  435. extern u8 a2dp_get_status(void);
  436. /*//回连的超时设置。ms单位。但是对手机发起的连接是没作用的*/
  437. extern void __set_super_timeout_value(u16 time);
  438. /*//回连page的超时设置。ms单位*/
  439. extern void __set_page_timeout_value(u16 time);
  440. /*上电自动搜索设备的个数*/
  441. extern u8 get_current_poweron_memory_search_index(u8 *temp_mac_addr);
  442. extern void clear_current_poweron_memory_search_index(u8 inc);
  443. extern void __set_user_background_goback(u8 en);
  444. extern bool user_sniff_check_req(u8 sniff_cnt_time);
  445. extern int tws_updata_phone_wait_con_addr(u8 *addr);
  446. extern int tws_updata_internal_addr(u8 *internal_addr_local, u8 *internal_addr_remote);
  447. extern void bt_discon_complete_handle(u8 *addr, int reason);
  448. /*这个接口只用来判断回连或者开可发现可连接的状态*/
  449. extern bool is_1t2_connection(void);
  450. /*用来获取蓝牙连接的设备个数,不包含page状态的计数*/
  451. extern u8 get_total_connect_dev(void);
  452. /*可以通过地址查询HFP的状态*/
  453. extern u8 is_bt_conn_hfp_hangup(u8 *addr);
  454. extern void infor_2_user_handle_register(int (*handle)(u8 *info, u16 len), u8 *buffer_ptr);
  455. /*音乐的ID3信息返回接口注册函数*/
  456. extern void bt_music_info_handle_register(void (*handler)(u8 type, u32 time, u8 *info, u16 len));
  457. /*用户层不需要用了*/
  458. extern void set_bt_vm_interface(u32 vm_index, void *interface);
  459. extern void bredr_stack_init(void);
  460. /*sniff 的计数查询*/
  461. extern bool bt_api_conn_mode_check(u8 enable, u8 *addr);
  462. extern u8 bt_api_enter_sniff_status_check(u16 time_cnt, u8 *addr);
  463. extern void user_cmd_timer_init();
  464. extern void remove_user_cmd_timer();
  465. //get_auto_connect_state有时效性,一般不用。可以用消息BT_STATUS_RECONN_OR_CONN
  466. extern u8 get_auto_connect_state(u8 *addr);
  467. //判断SCO/esco有没有正在使用,两个接口一样的
  468. extern u8 get_esco_coder_busy_flag();
  469. extern bool get_esco_busy_flag();
  470. /*有可能低层刚开始走了连接,但是上层还没有消息,不维护蓝牙的不要随便用*/
  471. extern u8 hci_standard_connect_check(void);
  472. /*设置一个标识给库里面说明正在退出蓝牙*/
  473. extern void set_stack_exiting(u8 exit);
  474. /*根据规则生产BLE的随机地址*/
  475. extern void lib_make_ble_address(u8 *ble_address, u8 *edr_address);
  476. /*查询最后一个VM记录的地址进行回连*/
  477. extern u8 connect_last_device_from_vm();
  478. /*配置协议栈支持HID功能,为了兼容以前的HID独立模式,音箱SDK有使用流程*/
  479. extern void __bt_set_hid_independent_flag(bool flag);
  480. extern int btstack_exit();
  481. /*能量检测之后有一些判断流程要走,非蓝牙开发不用*/
  482. extern int sbc_energy_check(u8 *packet, u16 size);
  483. /**发射器和接收器按键切换的时候要申请和释放资源**/
  484. extern int a2dp_source_init(void *buf, u16 len, int deal_flag);
  485. /**发射器和接收器按键切换的时候要申请和释放资源**/
  486. extern int hfp_ag_buf_init(void *buf, int size, int deal_flag);
  487. /*配置蓝牙协议栈处于发射器流程*/
  488. extern void __set_emitter_enable_flag(u8 flag);
  489. /*用户使用USER_CTRL_INQUIRY_CANCEL就行,下面的用户层不直接使用*/
  490. extern void hci_cancel_inquiry();
  491. /*发射器启动还是暂停数据发送的接口,会发start和suspend命令*/
  492. extern void __emitter_send_media_toggle(u8 *addr, u8 toggle);
  493. /*查询当前有没有a2dp source(发射器的音频发送链路)在连接状态*/
  494. extern u8 is_a2dp_source_dev_null();
  495. /*选择用哪一块VM存储信息,非蓝牙维护人员不用*/
  496. extern u8 get_remote_dev_info_index();
  497. extern u8 check_tws_le_aa(void);
  498. extern void tws_api_set_connect_aa(int);
  499. extern void tws_le_acc_generation_init(void);
  500. extern void tws_api_clear_connect_aa();
  501. extern void clear_sniff_cnt(void);
  502. /**删除VM记录的最后一个设备信息*/
  503. extern u8 delete_last_device_from_vm();
  504. #define BD_CLASS_WEARABLE_HEADSET 0x240404/*ios10.2 display headset icon*/
  505. #define BD_CLASS_HANDS_FREE 0x240408/*ios10.2 display bluetooth icon*/
  506. #define BD_CLASS_MICROPHONE 0x240410
  507. #define BD_CLASS_LOUDSPEAKER 0x240414
  508. #define BD_CLASS_HEADPHONES 0x240418
  509. #define BD_CLASS_CAR_AUDIO 0x240420
  510. #define BD_CLASS_HIFI_AUDIO 0x240428
  511. #define BD_CLASS_PHONEBOOK 0x340404
  512. #define BD_CLASS_PAN_DEV 0X020118
  513. #define BD_CLASS_MOUSE 0x002580
  514. #define BD_CLASS_KEYBOARD 0x002540
  515. #define BD_CLASS_KEYBOARD_MOUSE 0x0025C0
  516. #define BD_CLASS_REMOTE_CONTROL 0x00254C
  517. #define BD_CLASS_GAMEPAD 0x002508
  518. #define BD_CLASS_TRANSFER_HEALTH 0x10091C
  519. #define BD_CLASS_PRINTING 0x140680
  520. /*修改什么的类型,会影响到手机显示的图标*/
  521. extern void __change_hci_class_type(u32 class);
  522. /*配置通话使用16k的msbc还是8k的cvsd*/
  523. extern void __set_support_msbc_flag(bool flag);
  524. /*配置协议栈使用支持AAC的信息*/
  525. extern void __set_support_aac_flag(bool flag);
  526. /*设置1拖2时电话是否抢断标识*/
  527. extern void __set_hfp_switch(u8 switch_en);
  528. /*
  529. *设置1拖2时电话是否恢复标识
  530. *通话结束的时候,如果还有手机在通话,自动切到蓝牙端
  531. */
  532. extern void __set_hfp_restore(u8 restore_en);
  533. /*当前设备被打断时是否自动暂停*/
  534. extern void __set_auto_pause_flag(u8 flag);
  535. /*当前设备被打断时是否自动暂停*/
  536. extern void __set_auto_pause_flag(u8 flag);
  537. /*高级音频设置标志是否允许后者打断前者*/
  538. extern void __set_music_break_in_flag(u8 flag);
  539. /*高级音频打断检测数据包阈值设置*/
  540. extern void __set_a2dp_sound_detect_counter(u8 sound_come, u8 sound_go);
  541. /*pan的控制接口和发数接口,
  542. addr指定就按指定的查找,NULL就默认正在使用那个
  543. cmd 下面定义的宏用户可以使用
  544. param 传参数需要的值或者data包的长度
  545. data 传的是要发数据的包指针
  546. */
  547. #define USER_PAN_CMD_SEND_DATA 0xff
  548. int user_pan_send_cmd(u8 *addr, u32 cmd, u32 param, u8 *data);
  549. enum {
  550. BD_ESCO_IDLE = 0, /*当前没有设备通话中*/
  551. BD_ESCO_BUSY_CURRENT, /*当前地址对应的设备通话中*/
  552. BD_ESCO_BUSY_OTHER, /*通话中的设备非当前地址*/
  553. };
  554. extern u8 check_esco_state_via_addr(u8 *addr);
  555. /*判断是否主动回连*/
  556. extern u8 get_auto_connect_state(u8 *addr);
  557. typedef struct __hid_sdp_info {
  558. u16 vid_private;
  559. u16 pid_private;
  560. u16 ver_private;
  561. u8 sub_class;
  562. u8 country_code;
  563. bool virtual_cable;
  564. bool reconnect_initiate;
  565. bool sdp_disable;
  566. bool battery_power;
  567. bool remote_wake;
  568. bool normally_connectable;
  569. bool boot_device;
  570. u16 version;
  571. u16 parser_version;
  572. u16 profile_version;
  573. u16 supervision_timeout;
  574. u16 language;
  575. u16 bt_string_offset;
  576. u16 descriptor_len;
  577. u8 *descriptor;
  578. char *service_name;
  579. char *service_description;
  580. char *provide_name;
  581. void (*sdp_request_respone_callback)(u8 type);
  582. u8 *extra_buf;
  583. u8 extra_len;
  584. } hid_sdp_info_t;
  585. typedef struct {
  586. u16 chl_id;
  587. u16 data_len;
  588. u8 *data_ptr;
  589. } hid_s_param_t;
  590. void sdp_diy_set_config_hid_info(const hid_sdp_info_t *hid_info);
  591. u16 sdp_create_diy_device_ID_service(u8 *buffer, u16 buffer_size);
  592. u16 sdp_create_diy_hid_service(u8 *buffer, u16 buffer_size, const u8 *hid_descriptor, u16 hid_descriptor_size);
  593. u8 get_remote_vol_sync(void);
  594. void set_start_search_spp_device(u8 spp);
  595. u8 restore_remote_device_info_opt(bd_addr_t *mac_addr, u8 conn_device_num, u8 id);
  596. u8 restore_remote_device_info_profile(bd_addr_t *mac_addr, u8 device_num, u8 id, u8 profile);
  597. /*remote dev type*/
  598. /*0:unknow,1-android,2:apple_inc,0x03-xiaomi*/
  599. enum {
  600. REMOTE_DEV_UNKNOWN = 0,
  601. REMOTE_DEV_ANDROID ,
  602. REMOTE_DEV_IOS ,
  603. REMOTE_DEV_XIAOMI ,
  604. };
  605. u8 remote_dev_company_ioctrl(bd_addr_t dev_addr, u8 op_flag, u8 value);
  606. u8 hci_standard_link_check(void);
  607. #endif