ble_api.h 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510
  1. /*********************************************************************************************
  2. * Filename : ble_api.h
  3. * Description :
  4. * Author : mx
  5. * Email : lmx@zh-jieli.com
  6. * Last modifiled : 2020-07-01 16:36
  7. * Copyright:(c)JIELI 2011-2020 @ , All Rights Reserved.
  8. *********************************************************************************************/
  9. #ifndef __BLE_API_H__
  10. #define __BLE_API_H__
  11. #include "typedef.h"
  12. #include "btstack/btstack_typedef.h"
  13. /*****注意:该文件的枚举与库编译密切相关,主要是给用户提供调用所用。用户不能自己在中间添加值.***/
  14. /*!
  15. * ----user (command) codes----
  16. *
  17. * @brief hci connection handle type
  18. */
  19. /*************************************************************************************************/
  20. typedef enum {
  21. /*
  22. */
  23. BLE_CMD_ADV_ENABLE = 1,
  24. BLE_CMD_ADV_PARAM,
  25. BLE_CMD_ADV_DATA,
  26. BLE_CMD_RSP_DATA,
  27. BLE_CMD_DISCONNECT,
  28. BLE_CMD_REGIEST_THREAD,
  29. BLE_CMD_ATT_SEND_INIT,
  30. BLE_CMD_ATT_MTU_SIZE,
  31. BLE_CMD_ATT_VAILD_LEN,
  32. BLE_CMD_ATT_SEND_DATA,
  33. BLE_CMD_REQ_CONN_PARAM_UPDATE,
  34. //12
  35. BLE_CMD_SCAN_ENABLE,
  36. BLE_CMD_SCAN_PARAM,
  37. BLE_CMD_STACK_EXIT,
  38. BLE_CMD_CREATE_CONN,
  39. BLE_CMD_CREATE_CONN_CANCEL,
  40. //17
  41. BLE_CMD_ADV_PARAM_EXT,
  42. BLE_CMD_SEND_TEST_KEY_NUM,
  43. BLE_CMD_LATENCY_HOLD_CNT,
  44. BLE_CMD_SET_DATA_LENGTH,
  45. BLE_CMD_SET_HCI_CFG,
  46. BLE_CMD_SCAN_ENABLE2,
  47. BLE_CMD_ATT_SERVER_REQ_RESUME,
  48. //MULTI API,多机接口,兼容单机默认的发送接口
  49. BLE_CMD_MULTI_ATT_SEND_INIT,
  50. BLE_CMD_MULTI_ATT_SET_CONN_HANDLE,
  51. BLE_CMD_MULTI_ATT_SEND_DATA,
  52. BLE_CMD_MULTI_ATT_MTU_SIZE,
  53. BLE_CMD_MULTI_ATT_VAILD_LEN,
  54. //sm
  55. BLE_CMD_SM_REQ_RESUME,
  56. //add here
  57. BLE_CMD_CREATE_CONN_EXT,
  58. BLE_CMD_DISCONNECT_EXT,
  59. BLE_CMD_ATT_CLEAR_SEND_DATA,
  60. //优先级高的发送缓存初始化和使用
  61. //基于原来的ATT发送机制,再添加1套发送缓存初始化;两套缓存要同时使用
  62. BLE_CMD_HIGH_ATT_SEND_INIT,
  63. BLE_CMD_HIGH_ATT_SEND_DATA,
  64. BLE_CMD_HIGH_ATT_VAILD_LEN,
  65. //< ble5
  66. BLE_CMD_EXT_ADV_PARAM = 0x40,
  67. BLE_CMD_EXT_ADV_DATA,
  68. BLE_CMD_EXT_RSP_DATA,
  69. BLE_CMD_EXT_ADV_ENABLE,
  70. BLE_CMD_SET_PHY,
  71. BLE_CMD_EXT_SCAN_PARAM,
  72. BLE_CMD_EXT_SCAN_ENABLE,
  73. BLE_CMD_EXT_CREATE_CONN,
  74. BLE_CMD_PERIODIC_ADV_PARAM,
  75. BLE_CMD_PERIODIC_ADV_DATA,
  76. BLE_CMD_PERIODIC_ADV_ENABLE,
  77. BLE_CMD_PERIODIC_ADV_CREAT_SYNC,
  78. BLE_CMD_PERIODIC_ADV_TERMINATE_SYNC,
  79. BLE_CMD_PERIODIC_ADV_CREATE_SYNC_CANCEL,
  80. //client
  81. BLE_CMD_SEARCH_PROFILE = 0x80,
  82. BLE_CMD_WRITE_CCC,
  83. BLE_CMD_ONNN_PARAM_UPDATA,
  84. } ble_cmd_type_e;
  85. typedef enum {
  86. BLE_CMD_RET_SUCESS = 0, //执行成功
  87. BLE_CMD_RET_BUSY = -100, //命令处理忙
  88. BLE_CMD_PARAM_OVERFLOW, //传数溢出
  89. BLE_CMD_OPT_FAIL, //操作失败
  90. BLE_BUFFER_FULL, //缓存满了
  91. BLE_BUFFER_ERROR, //缓存出错
  92. BLE_CMD_PARAM_ERROR, //传参出错
  93. BLE_CMD_STACK_NOT_RUN, //协议栈没有运行
  94. BLE_CMD_CCC_FAIL, //没有使能通知,导致NOTIFY或INDICATE发送失败,
  95. } ble_cmd_ret_e;
  96. //--------------------------------------------
  97. ble_cmd_ret_e ble_user_cmd_prepare(ble_cmd_type_e cmd, int argc, ...);
  98. struct conn_update_param_t {
  99. u16 interval_min; //连接周期范围最小值(unit:1.25ms)
  100. u16 interval_max; //连接周期范围最大值(unit:1.25ms)
  101. u16 latency; //忽略通信次数(unit: interval)
  102. u16 timeout; //(unit:10ms)
  103. };
  104. typedef enum {
  105. PFL_SERVER_UUID16 = 1, //指定16bit UUID搜索方式
  106. PFL_SERVER_UUID128, //指定128bit UUID搜索方式
  107. PFL_SERVER_ALL, //搜索所有的UUID
  108. } search_profile_type_e;
  109. //--------------------------------------------
  110. struct create_conn_param_t {
  111. u16 conn_interval; //连接周期(unit:1.25ms)
  112. u16 conn_latency; //忽略通信次数(unit: interval)
  113. u16 supervision_timeout; //(通信超时 unit:10ms)
  114. u8 peer_address_type; //对方地址类型:0--public address,1--random address
  115. u8 peer_address[6]; //对方地址address
  116. } _GNU_PACKED_;
  117. struct create_conn_param_ext_t {
  118. u16 le_scan_interval; /*scan 周期(unit: 0.625ms)*/
  119. u16 le_scan_window; /*scan 窗口(unit: 0.625ms)*/
  120. u8 initiator_filter_policy;/*过滤,set 0*/
  121. u8 peer_address_type; /*对方地址类型:0--public address,1--random address*/
  122. u8 peer_address[6]; /*对方地址*/
  123. u8 own_address_type; /*本地地址类型:0--public address,1--random address*/
  124. u16 conn_interval_min;/*连接周期最小值(unit:1.25ms)*/
  125. u16 conn_interval_max;/*连接周期最大值(unit:1.25ms)*/
  126. u16 conn_latency; /*忽略通信次数(unit: interval)*/
  127. u16 supervision_timeout;/*通信超时 unit:10ms*/
  128. u16 minimum_ce_length; /*set 1*/
  129. u16 maximum_ce_length; /*set 1*/
  130. } _GNU_PACKED_;
  131. typedef struct {
  132. u8 event_type; //对方广播包类型: 0--ADV_IND,1--ADV_DIRECT_IND,2--ADV_SCAN_IND,3--ADV_NONCONN_IND,4--SCAN_RSP
  133. u8 address_type; //对方地址类型:0--public address,1--random address
  134. u8 address[6]; //peer_address
  135. s8 rssi; //range:-127 ~128 dbm
  136. u8 length; //广播包长度
  137. u8 data[0]; //广播包内容
  138. } adv_report_t;
  139. typedef struct {
  140. //base info
  141. u8 type; //< See <btstack/hci_cmds.h> SM_...
  142. u8 size;
  143. u16 con_handle; //connection 's handle, >0
  144. u8 addr_type; //对方地址类型:0--public address,1--random address
  145. u8 address[6]; //对方地址
  146. //extend info
  147. u8 data[4];
  148. } sm_just_event_t;
  149. //BLE_CMD_SET_HCI_CFG
  150. typedef enum {
  151. HCI_CFG_OWN_ADDRESS_TYPE = 0, //
  152. HCI_CFG_ADV_FILTER_POLICY, //
  153. HCI_CFG_SCAN_FILTER_POLICY, //
  154. HCI_CFG_INITIATOR_FILTER_POLICY, //
  155. //add here
  156. } hci_cfg_par_e;
  157. typedef enum {
  158. REMOTE_TYPE_UNKNOWN = 0,//未查询or查询对方未响应
  159. REMOTE_TYPE_ANDROID, //安卓系统
  160. REMOTE_TYPE_IOS,//ios系统
  161. } remote_type_e;
  162. /*************************************************************************************************/
  163. /*!
  164. * \brief Gatt client角色初始化.
  165. */
  166. /*************************************************************************************************/
  167. void gatt_client_init(void);
  168. /*************************************************************************************************/
  169. /*!
  170. * \brief 注册gatt client角色,事件回调函数.
  171. *
  172. * \param [in] handler 事件处理函数.
  173. */
  174. /*************************************************************************************************/
  175. void gatt_client_register_packet_handler(btstack_packet_handler_t handler);
  176. /*************************************************************************************************/
  177. /*!
  178. * \brief 初始化配对表.
  179. *
  180. * \note 上电初始化一次.
  181. */
  182. /*************************************************************************************************/
  183. void le_device_db_init(void);
  184. /*************************************************************************************************/
  185. /*!
  186. * \brief 注册passkey输入回调.
  187. *
  188. * \param [in] reset_pk 复位按键输入.
  189. */
  190. /*************************************************************************************************/
  191. void reset_PK_cb_register(void (*reset_pk)(u32 *));
  192. /*************************************************************************************************/
  193. /*!
  194. * \brief 设置ble蓝牙的public地址.
  195. *
  196. * \param [in] addr public地址.
  197. *
  198. * \return 0->success ,非0->fail.
  199. *
  200. * \note 可以结合接口 ble_op_set_ownaddress_type 配置选择地址类型.
  201. * \note 修改地址必须在ble非工作状态下才能生效( 没有scan,没有adv,没有connected).
  202. */
  203. /*************************************************************************************************/
  204. int le_controller_set_mac(void *addr);
  205. /*************************************************************************************************/
  206. /*!
  207. * \brief 获取ble蓝牙的public地址.
  208. *
  209. * \param [out] addr pulic地址.
  210. *
  211. * \return 0->success ,非0->fail.
  212. */
  213. /*************************************************************************************************/
  214. int le_controller_get_mac(void *addr);
  215. /*************************************************************************************************/
  216. /*!
  217. * \brief 初始化ble蓝牙random地址.
  218. *
  219. * \param [in] addr random地址.
  220. *
  221. * \return 0->success ,非0->fail.
  222. *
  223. * \note 结合接口ble_op_set_own_address_type 配置选择地址类型.
  224. * \note 修改地址必须在ble非工作状态下才能生效(内有scan,没有adv,没connected).
  225. */
  226. /*************************************************************************************************/
  227. int le_controller_set_random_mac(void *addr);
  228. /*************************************************************************************************/
  229. /*!
  230. * \brief 提供自动生成 ble对应的random类型的地址
  231. *
  232. * \param [in] random_type
  233. 1--STATIC_DEVICE_ADDR
  234. 2--NON_RESOLVABLE_PRIVATE_ADDR
  235. 3--RESOLVABLE_PRIVATE_ADDR
  236. *
  237. * \return true or false
  238. *
  239. * \note 设置后可用le_controller_set_random_mac改变指定地址
  240. */
  241. /*************************************************************************************************/
  242. bool ble_set_make_random_address(uint8_t random_type);
  243. /*************************************************************************************************/
  244. /*!
  245. * \brief 获取ble蓝牙的random地址.
  246. *
  247. * \param [out] addr random地址.
  248. *
  249. * \return 0->success ,非0->fail.
  250. */
  251. /*************************************************************************************************/
  252. int le_controller_get_random_mac(void *addr);
  253. /*************************************************************************************************/
  254. /*!
  255. * \brief 配置协议栈 GATT 角色处理,default server.
  256. *
  257. * \param [in] role GATT role: 0--server ,1--client ,2--server + client.
  258. */
  259. /*************************************************************************************************/
  260. void ble_stack_gatt_role(u8 role);
  261. /*************************************************************************************************/
  262. /*!
  263. * \brief client 连接后初始化.
  264. *
  265. * \param [in] handle range :>0.
  266. * \param [in] buffer 配置缓存地址.
  267. * \param [in] buffer_size 缓存大小.
  268. */
  269. /*************************************************************************************************/
  270. void user_client_init(u16 handle, u8 *buffer, u16 buffer_size);
  271. /*************************************************************************************************/
  272. /*!
  273. * \brief 获取链路对方的信号强度.
  274. *
  275. * \param [in] con_handle range :>0.
  276. *
  277. * \return rssi 强度 ,range :-127 ~128 dbm.
  278. */
  279. /*************************************************************************************************/
  280. s8 ble_vendor_get_peer_rssi(u16 conn_handle);
  281. /*************************************************************************************************/
  282. /*!
  283. * \brief 使能周期interval事件上报.
  284. *
  285. * \param [in] con_handle range :>0.
  286. * \param [in] enable 1 or 0.
  287. *
  288. * \return true or false.
  289. */
  290. /*************************************************************************************************/
  291. bool ble_vendor_interval_event_enable(u16 conn_handle, int enable);
  292. /*************************************************************************************************/
  293. /*!
  294. * \brief 配置bt协议栈的 ATT协议交换MTU的大小
  295. *
  296. * \param [in] mtu_size 配置MTU大小 ,range :23 ~517.
  297. *
  298. * \return 配置后mtu_size的值.
  299. */
  300. /*************************************************************************************************/
  301. u16 ble_vendor_set_default_att_mtu(u16 mtu_size);
  302. /*************************************************************************************************/
  303. /*!
  304. * \brief 设置 client 搜索结束.
  305. */
  306. /*************************************************************************************************/
  307. void user_client_set_search_complete(void);
  308. /*************************************************************************************************/
  309. /*!
  310. * \brief 提供生成ble对应的类型地址.
  311. *
  312. * \param [out] address 类型对应地址.
  313. * \param [in] type ble_type
  314. * (eg:1.STATIC_DEVICE_ADDR.
  315. * 2.NON_RESOLVABLE_PRIVATE_ADDR.
  316. * 3.RESOLVABLE_PRIVATE_ADDR).
  317. *
  318. * \return true or false.
  319. *
  320. * \note 生成RESOLVABLE_PRIVATE_ADDR,需要等协议栈初始化IRK后才能生成.
  321. */
  322. /*************************************************************************************************/
  323. bool ble_vendor_random_address_generate(u8 *address, u8 type);
  324. /*************************************************************************************************/
  325. /*!
  326. * \brief 根据提供的edr地址生成唯一对应的ble地址.
  327. *
  328. * \param [out] ble_adress BLE_address.
  329. * \param [in] edr_adress EDR_address.
  330. *
  331. * \note 用户可以自定义edr和ble地址关联规则,重写这个接口
  332. */
  333. /*************************************************************************************************/
  334. void lib_make_ble_address(u8 *ble_address, u8 *edr_address);
  335. /*************************************************************************************************/
  336. /*!
  337. * \brief 配置设备的地址类型,默认为 0(public address).
  338. *
  339. * \function ble_cmd_ret_e ble_op_set_own_address_type(u8 address_type).
  340. *
  341. * \param [in] address_type Range: 0x00 to 0x03.
  342. *
  343. * \return see ble_cmd_ret_e.
  344. *
  345. * \note !!!注意:设置的时候必须在、设置广播参数、或者扫描参数、或者创建连接参数前配置好.
  346. */
  347. /*************************************************************************************************/
  348. /* ble_cmd_ret_e ble_op_set_own_address_type(u8 address_type) */
  349. #define ble_op_set_own_address_type(address_type) \
  350. ble_user_cmd_prepare(BLE_CMD_SET_HCI_CFG, 2,HCI_CFG_OWN_ADDRESS_TYPE,(int)address_type)
  351. /*************************************************************************************************/
  352. /*!
  353. * \brief 开关BLE广播.
  354. *
  355. * \function ble_cmd_ret_e ble_op_adv_enable(int enable).
  356. *
  357. * \param [in] enable 广播使能 :0(dis) or 1(en).
  358. *
  359. * \return see ble_cmd_ret_e.
  360. *
  361. * \note !!!注意:开广播前必现先配置好广播的参数.
  362. */
  363. /*************************************************************************************************/
  364. /* ble_cmd_ret_e ble_op_adv_enable(int enable) */
  365. #define ble_op_adv_enable(enable) \
  366. ble_user_cmd_prepare(BLE_CMD_ADV_ENABLE, 1, (int)enable)
  367. /*************************************************************************************************/
  368. /*!
  369. * \brief 配置广播过滤策略(决定链路层如何处理扫描、连接请求);默认为 0.
  370. *
  371. * \function ble_cmd_ret_e ble_op_set_adv_filter_policy(u8 type).
  372. *
  373. * \param [in] type 类型 :Range: 0x00 to 0x03.
  374. *
  375. * \return see ble_cmd_ret_e.
  376. *
  377. * \note !!!注意:设置的时候必须在“设置广播参数ble_op_set_adv_param前配置好.
  378. */
  379. /*************************************************************************************************/
  380. /* ble_cmd_ret_e ble_op_set_adv_filter_policy(u8 type) */
  381. #define ble_op_set_adv_filter_policy(type) \
  382. ble_user_cmd_prepare(BLE_CMD_SET_HCI_CFG, 2,HCI_CFG_ADV_FILTER_POLICY,type)
  383. /*************************************************************************************************/
  384. /*!
  385. * \brief 配置广播参数.
  386. *
  387. * \function ble_cmd_ret_e ble_op_set_adv_param(u16 adv_interval,u8 adv_type).
  388. *
  389. * \param [in] adv_interval 广播周期,Range: 0x0020 to 0x4000 (unit: 0.625ms).
  390. * \param [in] adv_type 广播类型,Range: 0x00 to 0x04.
  391. * \param [in] adv_channel 广播类型通道,range:Range: 0x01 to 0x07.
  392. *
  393. * \return see ble_cmd_ret_e.
  394. *
  395. * \note !!!注意:设置的时候必现在广播关闭的状态下.
  396. */
  397. /*************************************************************************************************/
  398. /* ble_cmd_ret_e ble_op_set_adv_param(u16 adv_interval,u8 adv_type) */
  399. #define ble_op_set_adv_param(adv_interval,adv_type,adv_channel) \
  400. ble_user_cmd_prepare(BLE_CMD_ADV_PARAM, 3, (int)adv_interval, (int)adv_type, (int)adv_channel)
  401. /*************************************************************************************************/
  402. /*!
  403. * \brief 配置广播参数+配对信息(相比配对广播参数,这个函数主要是针对定向广播使用).
  404. *
  405. * \function ble_cmd_ret_e ble_op_set_adv_param_ext(u16 adv_interval,u8 adv_type,u8 adv_channel,const u8 *peer_info).
  406. *
  407. * \param [in] adv_interval 广播周期,Range: 0x0020 to 0x4000 (unit: 0.625ms).
  408. * \param [in] adv_type 广播类型,Range: 0x00 to 0x04.
  409. * \param [in] adv_channel 广播类型通道,range:Range: 0x01 to 0x07.
  410. * \param [in] peer_info (全局变量地址),定向广播时,填入对方的地址信息.
  411. *
  412. * \return see ble_cmd_ret_e.
  413. *
  414. * \note !!!注意:设置的时候必现在广播关闭的状态下.
  415. */
  416. /*************************************************************************************************/
  417. /* ble_cmd_ret_e ble_op_set_adv_param_ext(u16 adv_interval,u8 adv_type,u8 adv_channel,const u8 *peer_info) */
  418. #define ble_op_set_adv_param_ext(adv_interval,adv_type,adv_channel,peer_info) \
  419. ble_user_cmd_prepare(BLE_CMD_ADV_PARAM_EXT, 4, (int)adv_interval, (int)adv_type, (int)adv_channel, (void*)peer_info)
  420. /*************************************************************************************************/
  421. /*!
  422. * \brief 配置广播 Advertising Data内容.
  423. *
  424. * \function ble_cmd_ret_e ble_op_set_adv_data(u8 adv_len,const *u8 adv_data).
  425. *
  426. * \param [in] adv_len adv 数据包长度,Range: 0x00 to 0x1f.
  427. * \param [in] adv_data (全局变量地址),adv数据包地址.
  428. *
  429. * \return see ble_cmd_ret_e.
  430. *
  431. * \note !!!注意:设置的时候必现在广播关闭的状态下.
  432. */
  433. /*************************************************************************************************/
  434. /* ble_cmd_ret_e ble_op_set_adv_data(u8 adv_len,const *u8 adv_data) */
  435. #define ble_op_set_adv_data(adv_len,adv_data) \
  436. ble_user_cmd_prepare(BLE_CMD_ADV_DATA, 2, (int)adv_len, (void*)adv_data)
  437. /*************************************************************************************************/
  438. /*!
  439. * \brief 配置广播 Scan Response Data内容.
  440. *
  441. * \function ble_cmd_ret_e ble_op_set_rsp_data(u8 rsp_len,const *u8 rsp_data).
  442. *
  443. * \param [in] rsp_len rsp 包长度,Range: 0x00 to 0x1f.
  444. * \param [in] adv_data (全局变量地址),rsp数据包地址.
  445. *
  446. * \return see ble_cmd_ret_e.
  447. *
  448. * \note !!!注意:设置的时候必现在广播关闭的状态下.
  449. */
  450. /*************************************************************************************************/
  451. /* ble_cmd_ret_e ble_op_set_rsp_data(u8 rsp_len,const *u8 rsp_data) */
  452. #define ble_op_set_rsp_data(rsp_len,rsp_data) \
  453. ble_user_cmd_prepare(BLE_CMD_RSP_DATA, 2, (int)rsp_len, (void*)rsp_data)
  454. /*************************************************************************************************/
  455. /*!
  456. * \brief 请求断开 ble 连接.
  457. *
  458. * \function ble_cmd_ret_e ble_op_disconnect(u16 con_handle).
  459. *
  460. * \param [in] con_handle range: >0.
  461. *
  462. * \return see ble_cmd_ret_e.
  463. */
  464. /*************************************************************************************************/
  465. /* ble_cmd_ret_e ble_op_disconnect(u16 con_handle) */
  466. #define ble_op_disconnect(con_handle) \
  467. ble_user_cmd_prepare(BLE_CMD_DISCONNECT, 1, (int)con_handle)
  468. /*************************************************************************************************/
  469. /*!
  470. * \brief 请求断开 ble 连接,by reason
  471. *
  472. * \function ble_cmd_ret_e ble_op_disconnect(u16 con_handle).
  473. *
  474. * \param [in] con_handle range: >0.
  475. * \param [in] reason range: see spec.
  476. *
  477. * \return see ble_cmd_ret_e.
  478. */
  479. /*************************************************************************************************/
  480. /* ble_cmd_ret_e ble_op_disconnect_ext(u16 con_handle,reason) */
  481. #define ble_op_disconnect_ext(con_handle,reason) \
  482. ble_user_cmd_prepare(BLE_CMD_DISCONNECT_EXT, 2, (int)con_handle, reason)
  483. /*************************************************************************************************/
  484. /*!
  485. * \brief 配置ATT发送模块RAM大小.
  486. *
  487. * \function ble_cmd_ret_e ble_op_att_send_init(u16 con_handle,u8 *att_ram_addr,int att_ram_size,int att_payload_size).
  488. *
  489. * \param [in] con_handle range: >0.
  490. * \param [in] att_ram_addr 传入ATT发送模块ram地址,地址按4字节对齐.
  491. * \param [in] att_ram_size 传入ATT发送模块ram大小.
  492. * \param [in] att_payload_size 发送ATT包payload的最大长度 <= MTU的payload,range:20 to MTU的payload size.
  493. *
  494. * \return see ble_cmd_ret_e.
  495. */
  496. /*************************************************************************************************/
  497. /* ble_cmd_ret_e ble_op_att_send_init(u16 con_handle,u8 *att_ram_addr,int att_ram_size,int att_payload_size) */
  498. #define ble_op_att_send_init(con_handle,att_ram_addr,att_ram_size,att_payload_size) \
  499. ble_user_cmd_prepare(BLE_CMD_ATT_SEND_INIT, 4, con_handle,att_ram_addr,att_ram_size,att_payload_size)
  500. /*************************************************************************************************/
  501. /*!
  502. * \brief MULTI API: 配置ATT发送模块初始化.
  503. *
  504. * \function ble_cmd_ret_e ble_op_multi_att_send_init(u8 *att_ram_addr,int att_ram_size,int att_payload_size).
  505. *
  506. * \param [in] att_ram_addr 传入ATT发送模块ram地址,地址按4字节对齐.
  507. * \param [in] att_ram_size 传入ATT发送模块ram大小.
  508. * \param [in] att_payload_size 发送ATT包payload的最大长度 <= MTU的payload,range:20 to MTU的payload size.
  509. *
  510. * \return see ble_cmd_ret_e.
  511. *
  512. * \note 多机处理,只需要初始化一次就可以.
  513. */
  514. /*************************************************************************************************/
  515. /* ble_cmd_ret_e ble_op_multi_att_send_init(u8 *att_ram_addr,int att_ram_size,int att_payload_size) */
  516. #define ble_op_multi_att_send_init(att_ram_addr,att_ram_size,att_payload_size) \
  517. ble_user_cmd_prepare(BLE_CMD_MULTI_ATT_SEND_INIT, 3, att_ram_addr,att_ram_size,att_payload_size)
  518. /*************************************************************************************************/
  519. /*!
  520. * \brief MULTI API: 配置ATT模块 使用的连接con_handle.
  521. *
  522. * \function ble_cmd_ret_e ble_op_multi_att_send_conn_handle(u16 con_handle,int handle_index,int0 rolev).
  523. *
  524. * \param [in] con_handle range:>0.
  525. * \param [in] handle_index range: 0~7 //多连接的hanlde id.
  526. * \param [in] role range: 0-gatt_sever,1-gatt_client.
  527. *
  528. * \return see ble_cmd_ret_e.
  529. *
  530. * \note 多机处理.
  531. */
  532. /*************************************************************************************************/
  533. /* ble_cmd_ret_e ble_op_multi_att_send_conn_handle(u16 con_handle,int handle_index,int0 rolev) */
  534. #define ble_op_multi_att_send_conn_handle(con_handle,handle_index,role) \
  535. ble_user_cmd_prepare(BLE_CMD_MULTI_ATT_SET_CONN_HANDLE, 3, con_handle,handle_index,role)
  536. /*************************************************************************************************/
  537. /*!
  538. * \brief 根据对方的接收MTU大小,配置本地可发送MTU的payload大小.
  539. *
  540. * \function ble_cmd_ret_e ble_op_att_set_send_mtu(u16 mtu_payload_size).
  541. *
  542. * \param [in] mtu_payload_size mtu的payload的大小; mtu_size-3
  543. *
  544. * \return see ble_cmd_ret_e.
  545. */
  546. /*************************************************************************************************/
  547. /* ble_cmd_ret_e ble_op_att_set_send_mtu(u16 mtu_payload_size)) */
  548. #define ble_op_att_set_send_mtu(mtu_payload_size) \
  549. ble_user_cmd_prepare(BLE_CMD_ATT_MTU_SIZE, 1, mtu_payload_size);
  550. /*************************************************************************************************/
  551. /*!
  552. * \brief MULTI API: 根据对方的接收MTU大小,配置本地可发送的MTU的大小.
  553. *
  554. * \function ble_cmd_ret_e ble_op_multi_att_set_send_mtu(u16 con_handle,u16 mtu_payload_size).
  555. *
  556. * \param [in] con_handle 连接 con_handle,range:>0.
  557. * \param [in] mtu_payload_size mtu的payload的大小; mtu_size-3
  558. *
  559. * \return see ble_cmd_ret_e.
  560. */
  561. /*************************************************************************************************/
  562. /* ble_cmd_ret_e ble_op_multi_att_set_send_mtu(u16 con_handle,u16 mtu_payload_size) */
  563. #define ble_op_multi_att_set_send_mtu(con_handle,mtu_payload_size) \
  564. ble_user_cmd_prepare(BLE_CMD_MULTI_ATT_MTU_SIZE, 2, con_handle,mtu_payload_size);
  565. /*************************************************************************************************/
  566. /*!
  567. * \brief 获取ATT发送模块,cbuffer可写入数据的长度.
  568. *
  569. * \function ble_cmd_ret_e ble_op_att_get_remain(int *remain_size_ptr).
  570. *
  571. * \param [out] remain_size_ptr 输出可写入长度值.
  572. *
  573. * \return see ble_cmd_ret_e.
  574. */
  575. /*************************************************************************************************/
  576. /* ble_cmd_ret_e ble_op_att_get_remain(int *remain_size_ptr) */
  577. #define ble_op_att_get_remain(remain_size_ptr) \
  578. ble_user_cmd_prepare(BLE_CMD_ATT_VAILD_LEN, 1, remain_size_ptr)
  579. /*************************************************************************************************/
  580. /*!
  581. * \brief MULTI API: 获取ATT发送模块,cbuffer 可写入数据的长度.
  582. *
  583. * \function ble_cmd_ret_e ble_op_multi_att_get_remain(u16 con_handle,int *remain_size_ptr).
  584. *
  585. * \param [in] con_handle range:>0.
  586. * \param [out] remain_size_ptr 输出可写入长度值.
  587. *
  588. * \return see ble_cmd_ret_e.
  589. */
  590. /*************************************************************************************************/
  591. /* ble_cmd_ret_e ble_op_multi_att_get_remain(u16 con_handle,int *remain_size_ptr) */
  592. #define ble_op_multi_att_get_remain(con_handle,remain_size_ptr) \
  593. ble_user_cmd_prepare(BLE_CMD_MULTI_ATT_VAILD_LEN, 2,con_handle, remain_size_ptr)
  594. /*************************************************************************************************/
  595. /*!
  596. * \brief ATT操作handle发送数据.
  597. *
  598. * \function ble_cmd_ret_e ble_op_att_send_data(u16 att_handle,u8 *data,u16 len, att_op_type_e att_op_type).
  599. *
  600. * \param [in] att_handle att操作的handle.
  601. * \param [in] data 数据地址.
  602. * \param [in] len 数据长度 <= cbuffer 可写入的长度.
  603. * \param [in] att_op_type see att_op_type_e (att.h).
  604. *
  605. * \return see ble_cmd_ret_e.
  606. */
  607. /*************************************************************************************************/
  608. /* ble_cmd_ret_e ble_op_att_send_data(u16 att_handle,u8 *data,u16 len, att_op_type_e att_op_type) */
  609. #define ble_op_att_send_data(att_handle,data,len,att_op_type) \
  610. ble_user_cmd_prepare(BLE_CMD_ATT_SEND_DATA, 4, att_handle, data, len, att_op_type)
  611. /*************************************************************************************************/
  612. /*!
  613. * \brief MULTI API: ATT操作handle发送数据.
  614. *
  615. * \function ble_cmd_ret_e ble_op_multi_att_send_data(u16 con_handle,u16 att_handle,u8 *data,u16 len, att_op_type_e att_op_type).
  616. *
  617. * \param [in] con_handle 连接 con_handle,range:>0.
  618. * \param [in] att_handle att操作handle.
  619. * \param [in] data 数据地址.
  620. * \param [in] len 数据长度 <= cbuffer 可写入的长度.
  621. * \param [in] att_op_type see att_op_type_e (att.h).
  622. *
  623. * \return see ble_cmd_ret_e.
  624. *
  625. * \note 多机处理.
  626. */
  627. /*************************************************************************************************/
  628. /* ble_cmd_ret_e ble_op_multi_att_send_data(u16 con_handle,u16 att_handle,u8 *data,u16 len, att_op_type_e att_op_type) */
  629. #define ble_op_multi_att_send_data(con_handle,att_handle,data,len,att_op_type) \
  630. ble_user_cmd_prepare(BLE_CMD_MULTI_ATT_SEND_DATA, 5, con_handle,att_handle, data, len, att_op_type)
  631. /*************************************************************************************************/
  632. /*!
  633. * \brief ATT操作,清默认缓存发送的数据缓存
  634. *
  635. * \function ble_op_att_clear_data(void).
  636. *
  637. * \return see ble_cmd_ret_e.
  638. */
  639. /*************************************************************************************************/
  640. /* ble_cmd_ret_e ble_op_att_clear_send_data(void) */
  641. #define ble_op_att_clear_send_data(void) \
  642. ble_user_cmd_prepare(BLE_CMD_ATT_CLEAR_SEND_DATA, 1, 1)
  643. /*************************************************************************************************/
  644. /*!
  645. * \brief 从机请求更新连接参数,走l2cap命令.
  646. *
  647. * \function ble_cmd_ret_e ble_op_conn_param_request(u16 con_handle,const struct conn_update_param_t *con_param).
  648. *
  649. * \param [in] con_handle 连接 con_handle,range:>0.
  650. * \param [in] con_param (全局变量地址),连接参数.
  651. *
  652. * \return see ble_cmd_ret_e.
  653. */
  654. /*************************************************************************************************/
  655. /* ble_cmd_ret_e ble_op_conn_param_request(u16 con_handle,const struct conn_update_param_t *con_param) */
  656. #define ble_op_conn_param_request(con_handle,con_param) \
  657. ble_user_cmd_prepare(BLE_CMD_REQ_CONN_PARAM_UPDATE, 2, con_handle, (void*)con_param)
  658. /*************************************************************************************************/
  659. /*!
  660. * \brief 发起data length 交换.(btctrl的feature打开支持DLE)
  661. *
  662. * \function ble_cmd_ret_e ble_op_set_data_length(u16 con_handle,u16 tx_octets,u16 tx_time).
  663. *
  664. * \param [in] tx_octets DLE发送长度.
  665. * \param [in] tx_time DLE发送事件.
  666. *
  667. * \return see ble_cmd_ret_e.
  668. */
  669. /*************************************************************************************************/
  670. /* ble_cmd_ret_e ble_op_set_data_length(u16 con_handle,u16 tx_octets,u16 tx_time) */
  671. #define ble_op_set_data_length(con_handle,tx_octets,tx_time) \
  672. ble_user_cmd_prepare(BLE_CMD_SET_DATA_LENGTH, 3, con_handle, tx_octets, tx_time)
  673. /*************************************************************************************************/
  674. /*!
  675. * \brief ble5.0 配置广播参数.
  676. *
  677. * \function ble_cmd_ret_e ble_op_set_ext_adv_param(u8 *param,u16 param_len).
  678. *
  679. * \param [in] param 广播参数.
  680. * \param [in] tx_time 参数长度.
  681. *
  682. * \return see ble_cmd_ret_e.
  683. */
  684. /*************************************************************************************************/
  685. /* ble_cmd_ret_e ble_op_set_ext_adv_param(u8 *param,u16 param_len) */
  686. #define ble_op_set_ext_adv_param(param,param_len) \
  687. ble_user_cmd_prepare(BLE_CMD_EXT_ADV_PARAM, 2, param, param_len)
  688. /*************************************************************************************************/
  689. /*!
  690. * \brief ble5.0 配置 adv 数据包.
  691. *
  692. * \function ble_cmd_ret_e ble_op_set_ext_adv_data(u8 *data,u16 data_len).
  693. *
  694. * \param [in] data 数据包内容.
  695. * \param [in] data_len 数据包长度.
  696. *
  697. * \return see ble_cmd_ret_e.
  698. */
  699. /*************************************************************************************************/
  700. /* ble_cmd_ret_e ble_op_set_ext_adv_data(u8 *data,u16 data_len) */
  701. #define ble_op_set_ext_adv_data(data,data_len) \
  702. ble_user_cmd_prepare(BLE_CMD_EXT_ADV_DATA, 2, data, data_len)
  703. /*************************************************************************************************/
  704. /*!
  705. * \brief ble5.0 配置 respond 数据包.
  706. *
  707. * \function ble_cmd_ret_e ble_op_set_ext_rsp_data(u8 *data,u16 data_len).
  708. *
  709. * \param [in] data 数据包内容.
  710. * \param [in] data_len 数据包长度.
  711. *
  712. * \return see ble_cmd_ret_e.
  713. */
  714. /*************************************************************************************************/
  715. /* ble_cmd_ret_e ble_op_set_ext_rsp_data(u8 *data,u16 data_len) */
  716. #define ble_op_set_ext_rsp_data(data,data_len) \
  717. ble_user_cmd_prepare(BLE_CMD_EXT_RSP_DATA, 2, data, data_len)
  718. /*************************************************************************************************/
  719. /*!
  720. * \brief ble5.0 开关广播.
  721. *
  722. * \function ble_cmd_ret_e ble_op_set_ext_adv_enable(u8 *cmd,u16 cmd_le).
  723. *
  724. * \param [in] cmd 命令信息.
  725. * \param [in] cmd_len 命令长度.
  726. *
  727. * \return see ble_cmd_ret_e.
  728. */
  729. /*************************************************************************************************/
  730. /* ble_cmd_ret_e ble_op_set_ext_adv_enable(u8 *cmd,u16 cmd_le) */
  731. #define ble_op_set_ext_adv_enable(cmd,cmd_len) \
  732. ble_user_cmd_prepare(BLE_CMD_EXT_ADV_ENABLE, 2, cmd, cmd_len)
  733. /*************************************************************************************************/
  734. /*!
  735. * \brief ble5.0 配置phy.
  736. *
  737. * \function ble_cmd_ret_e ble_op_set_ext_phy(u16 con_handle,u16 all_phys,u16 tx_phy,u16 rx_phy,u16 phy_options).
  738. *
  739. * \param [in] con_handle 连接 con_handle,range:>0.
  740. * \param [in] all_phys 0.
  741. * \param [in] tx_phy CONN_SET_CODED_PHY.
  742. * \param [in] rx_phy CONN_SET_CODED_PHY.
  743. * \param [in] phy_options CONN_SET_PHY_OPTIONS.
  744. *
  745. * \return see ble_cmd_ret_e.
  746. */
  747. /*************************************************************************************************/
  748. /* ble_cmd_ret_e ble_op_set_ext_phy(u16 con_handle,u16 all_phys,u16 tx_phy,u16 rx_phy,u16 phy_options) */
  749. #define ble_op_set_ext_phy(con_handle,all_phys,tx_phy,rx_phy,phy_options) \
  750. ble_user_cmd_prepare(BLE_CMD_SET_PHY, 5, con_handle, all_phys, tx_phy, rx_phy, phy_options)
  751. /*************************************************************************************************/
  752. /*!
  753. * \brief ble5.0 配置 主机scan 参数.
  754. *
  755. * \function ble_cmd_ret_e ble_op_set_ext_scan_param(u8 *param,u16 param_le).
  756. *
  757. * \param [in] param 参数内容.
  758. * \param [in] param_len 参数长度.
  759. *
  760. * \return see ble_cmd_ret_e.
  761. */
  762. /*************************************************************************************************/
  763. /* ble_cmd_ret_e ble_op_set_ext_scan_param(u8 *param,u16 param_le) */
  764. #define ble_op_set_ext_scan_param(param,param_len) \
  765. ble_user_cmd_prepare(BLE_CMD_EXT_SCAN_PARAM, 2, param, param_len)
  766. /*************************************************************************************************/
  767. /*!
  768. * \brief ble5.0 配置 主机scan 开关.
  769. *
  770. * \function ble_cmd_ret_e ble_op_ext_scan_enable(u8 *cmd,u16 cmd_le).
  771. *
  772. * \param [in] cmd 命令信息.
  773. * \param [in] cmd_len 命令长度.
  774. *
  775. * \return see ble_cmd_ret_e.
  776. */
  777. /*************************************************************************************************/
  778. /* ble_cmd_ret_e ble_op_ext_scan_enable(u8 *cmd,u16 cmd_le) */
  779. #define ble_op_ext_scan_enable(cmd,cmd_len) \
  780. ble_user_cmd_prepare(BLE_CMD_EXT_SCAN_ENABLE, 2, cmd, cmd_len)
  781. /*************************************************************************************************/
  782. /*!
  783. * \brief ble5.0 配置 主机创建连接监听.
  784. *
  785. * \function ble_cmd_ret_e ble_op_ext_create_conn(u8 *conn_param,u16 param_len_len).
  786. *
  787. * \param [in] conn_param 连接参数信息.
  788. * \param [in] param_len 参数长度.
  789. *
  790. * \return see ble_cmd_ret_e.
  791. */
  792. /*************************************************************************************************/
  793. /* ble_cmd_ret_e ble_op_ext_create_conn(u8 *conn_param,u16 param_len_len) */
  794. #define ble_op_ext_create_conn(conn_param,param_len) \
  795. ble_user_cmd_prepare(BLE_CMD_EXT_CREATE_CONN, 2, conn_param, param_len)
  796. /*************************************************************************************************/
  797. /*!
  798. * \brief 忽略进入latency 作用的次数
  799. *
  800. * \function ble_cmd_ret_e ble_op_latency_skip(u16 con_handle,u16 skip_interval).
  801. *
  802. * \param [in] con_handle range:>0.
  803. * \param [in] skip_interval 忽略的interval的次数.
  804. *
  805. * \return see ble_cmd_ret_e.
  806. *
  807. * \note !!!注意:让设备不进入latency模式,加快响应速度,但会耗电.
  808. */
  809. /*************************************************************************************************/
  810. /* ble_cmd_ret_e ble_op_latency_skip(u16 con_handle,u16 skip_interval) */
  811. #define ble_op_latency_skip(con_handle,skip_interval) \
  812. ble_user_cmd_prepare(BLE_CMD_LATENCY_HOLD_CNT, 2, con_handle, skip_interval)
  813. /*************************************************************************************************/
  814. /*!
  815. * \brief 测试盒识别按键测试.
  816. *
  817. * \function ble_cmd_ret_e ble_op_test_key_num(u16 con_handle,u8 key_num).
  818. *
  819. * \param [in] con_handle range:>0.
  820. * \param [in] key_num 按键.
  821. *
  822. * \return see ble_cmd_ret_e.
  823. */
  824. /*************************************************************************************************/
  825. /* ble_cmd_ret_e ble_op_test_key_num(u16 con_handle,u8 key_num) */
  826. #define ble_op_test_key_num(con_handle,key_num) \
  827. ble_user_cmd_prepare(BLE_CMD_SEND_TEST_KEY_NUM, 2, con_handle, key_num)
  828. /*************************************************************************************************/
  829. /*!
  830. * \brief 退出ble协议栈.
  831. *
  832. * \function ble_cmd_ret_e ble_op_stack_exit(u8 control).
  833. *
  834. * \param [in] control : 0--退出stack(默认),1--退出stack + controller.
  835. *
  836. * \return see ble_cmd_ret_e.
  837. *
  838. * \note 若已调用btstack_exit退出,则无需调用此接口
  839. */
  840. /*************************************************************************************************/
  841. /* ble_cmd_ret_e ble_op_stack_exit(u8 control) */
  842. #define ble_op_stack_exit(control) \
  843. ble_user_cmd_prepare(BLE_CMD_STACK_EXIT, 1, control)
  844. /*************************************************************************************************/
  845. /*!
  846. * \brief 挂载协议栈线程调用.
  847. *
  848. * \function ble_cmd_ret_e ble_op_regist_thread_call(void (*thread_callback)(void)).
  849. *
  850. * \param [in] thread_callback 回调函数.
  851. *
  852. * \return see ble_cmd_ret_e.
  853. *
  854. * \note 用于同步线程处理,慎用
  855. *
  856. */
  857. /*************************************************************************************************/
  858. /* ble_cmd_ret_e ble_op_regist_thread_call(void (*thread_callback)(void)) */
  859. #define ble_op_regist_thread_call(thread_callback) \
  860. ble_user_cmd_prepare(BLE_CMD_REGIEST_THREAD, 1, thread_callback)
  861. /*************************************************************************************************/
  862. /*!
  863. * \brief 开关BLE搜索扫描.
  864. *
  865. * \function ble_cmd_ret_e ble_op_scan_enable(u8 enable).
  866. *
  867. * \param [in] enable 0 or 1.
  868. *
  869. * \return see ble_cmd_ret_e.
  870. *
  871. * \note filter_duplicate 默认为 1.
  872. * \note !!!注意:开搜索前必现先配置好搜索的参数ble_op_set_scan_param.
  873. */
  874. /*************************************************************************************************/
  875. /* ble_cmd_ret_e ble_op_scan_enable(u8 enable) */
  876. #define ble_op_scan_enable(enable) \
  877. ble_user_cmd_prepare(BLE_CMD_SCAN_ENABLE, 1, enable)
  878. /*************************************************************************************************/
  879. /*!
  880. * \brief 开关BLE搜索扫描2.
  881. *
  882. * \function ble_cmd_ret_e ble_op_scan_enable2(u8 enable,u8 filter_duplicate).
  883. *
  884. * \param [in] enable 0 or 1.
  885. * \param [in] filter_duplicate 0 or 1.
  886. *
  887. * \return see ble_cmd_ret_e.
  888. *
  889. * \note filter_duplicate 默认为 1.
  890. * \note !!!注意:开搜索前必现先配置好搜索的参数ble_op_set_scan_param.
  891. */
  892. /*************************************************************************************************/
  893. /* ble_cmd_ret_e ble_op_scan_enable2(u8 enable,u8 filter_duplicate) */
  894. #define ble_op_scan_enable2(enable,filter_duplicate) \
  895. ble_user_cmd_prepare(BLE_CMD_SCAN_ENABLE2, 2, enable,filter_duplicate)
  896. /*************************************************************************************************/
  897. /*!
  898. * \brief 配置scan filter policy,默认type为0.
  899. *
  900. * \function ble_cmd_ret_e ble_op_set_scan_filter_policy(u8 type).
  901. *
  902. * \param [in] type Range: 0x00 to 0x03.
  903. *
  904. * \return see ble_cmd_ret_e.
  905. *
  906. * \note !!!注意:设置的时候必须在 设置扫描参数 ble_op_set_scan_param 前配置好.
  907. */
  908. /*************************************************************************************************/
  909. /* ble_cmd_ret_e ble_op_set_scan_filter_policy(u8 type) */
  910. #define ble_op_set_scan_filter_policy(type) \
  911. ble_user_cmd_prepare(BLE_CMD_SET_HCI_CFG, 2,HCI_CFG_SCAN_FILTER_POLICY,type)
  912. /*************************************************************************************************/
  913. /*!
  914. * \brief 配置搜索参数.
  915. *
  916. * \function ble_cmd_ret_e ble_op_set_scan_param(u8 scan_type,u16 scan_interval,u16 scan_window).
  917. *
  918. * \param [in] scan_type 搜索类型 Range: 0x00 to 0x01 (unit: 0.625ms).
  919. * \param [in] scan_interval 搜索周期 Range: 0x0004 to 0x4000 (unit: 0.625ms) >= scan_window.
  920. * \param [in] scan_window 搜索窗口 Range: 0x0004 to 0x4000 (unit: 0.625ms), <= scan_interval.
  921. *
  922. * \return see ble_cmd_ret_e.
  923. */
  924. /*************************************************************************************************/
  925. /* ble_cmd_ret_e ble_op_set_scan_param(u8 scan_type,u16 scan_interval,u16 scan_window) */
  926. #define ble_op_set_scan_param(scan_type,scan_interval,scan_window) \
  927. ble_user_cmd_prepare(BLE_CMD_SCAN_PARAM, 3, scan_type, scan_interval, scan_window)
  928. /*************************************************************************************************/
  929. /*!
  930. * \brief 配置creat filter policy,默认type: 0.
  931. *
  932. * \function ble_cmd_ret_e ble_op_set_create_filter_policy(u8 type).
  933. *
  934. * \param [in] type Range: 0x00 to 0x03.
  935. *
  936. * \return see ble_cmd_ret_e.
  937. *
  938. * \note !!!注意:设置的时候必须在 设置创建连接参数 ble_op_create_connection 前配置好.
  939. */
  940. /*************************************************************************************************/
  941. /* ble_cmd_ret_e ble_op_set_create_filter_policy(u8 type) */
  942. #define ble_op_set_create_filter_policy(type) \
  943. ble_user_cmd_prepare(BLE_CMD_SET_HCI_CFG, 2,HCI_CFG_INITIATOR_FILTER_POLICY,type)
  944. /*************************************************************************************************/
  945. /*!
  946. * \brief BLE创建连接监听.
  947. *
  948. * \function ble_cmd_ret_e ble_op_create_connection(struct create_conn_param_t * create_conn_param).
  949. *
  950. * \param [in] create_conn_param 连接参数.
  951. *
  952. * \return see ble_cmd_ret_e.
  953. */
  954. /*************************************************************************************************/
  955. /* ble_cmd_ret_e ble_op_create_connection(struct create_conn_param_t * create_conn_param) */
  956. #define ble_op_create_connection(create_conn_param) \
  957. ble_user_cmd_prepare(BLE_CMD_CREATE_CONN, 1, create_conn_param)
  958. /*************************************************************************************************/
  959. /*!
  960. * \brief BLE创建连接监听,扩展传入参数
  961. *
  962. * \function ble_cmd_ret_e ble_op_create_connection_ext(cosnt struct create_conn_param_ext_t * create_conn_param_ext).
  963. *
  964. * \param [in] create_conn_param_ext 连接参数.
  965. *
  966. * \return see ble_cmd_ret_e.
  967. */
  968. /*************************************************************************************************/
  969. /* ble_cmd_ret_e ble_op_create_connection_ext(const struct create_conn_param_ext_t * create_conn_param_ext) */
  970. #define ble_op_create_connection_ext(create_conn_param_ext) \
  971. ble_user_cmd_prepare(BLE_CMD_CREATE_CONN_EXT, 1, create_conn_param_ext)
  972. /*************************************************************************************************/
  973. /*!
  974. * \brief 取消BLE连接监听.
  975. *
  976. * \function ble_cmd_ret_e ble_op_create_connection_cancel(void).
  977. *
  978. * \return see ble_cmd_ret_e.
  979. */
  980. /*************************************************************************************************/
  981. /* ble_cmd_ret_e ble_op_create_connection_cancel(void) */
  982. #define ble_op_create_connection_cancel() \
  983. ble_user_cmd_prepare(BLE_CMD_CREATE_CONN_CANCEL,0)
  984. /*************************************************************************************************/
  985. /*!
  986. * \brief ble 主机搜索所有服务.
  987. *
  988. * \function ble_cmd_ret_e ble_op_search_profile_all(void).
  989. *
  990. * \return see ble_cmd_ret_e.
  991. */
  992. /*************************************************************************************************/
  993. /* ble_cmd_ret_e ble_op_search_profile_all(void) */
  994. #define ble_op_search_profile_all() \
  995. ble_user_cmd_prepare(BLE_CMD_SEARCH_PROFILE, 2, PFL_SERVER_ALL, 0)
  996. /*************************************************************************************************/
  997. /*!
  998. * \brief ble 主机搜索指定UUID16服务.
  999. *
  1000. * \function ble_cmd_ret_e ble_op_search_profile_uuid16(u16 uuid16).
  1001. *
  1002. * \param [in] uuid16 uuid.
  1003. *
  1004. * \return see ble_cmd_ret_e.
  1005. */
  1006. /*************************************************************************************************/
  1007. /* ble_cmd_ret_e ble_op_search_profile_uuid16(u16 uuid16) */
  1008. #define ble_op_search_profile_uuid16(uuid16) \
  1009. ble_user_cmd_prepare(BLE_CMD_SEARCH_PROFILE, 2, PFL_SERVER_UUID16, uuid16)
  1010. /*************************************************************************************************/
  1011. /*!
  1012. * \brief ble 主机搜索指定UUID128服务.
  1013. *
  1014. * \function ble_cmd_ret_e ble_op_search_profile_uuid128(const u8 *uuid128_pt).
  1015. *
  1016. * \param [in] uuid128_pt uuid.
  1017. *
  1018. * \return see ble_cmd_ret_e.
  1019. *
  1020. */
  1021. /*************************************************************************************************/
  1022. /* ble_cmd_ret_e ble_op_search_profile_uuid128(const u8 *uuid128_pt) */
  1023. #define ble_op_search_profile_uuid128(uuid128_pt) \
  1024. ble_user_cmd_prepare(BLE_CMD_SEARCH_PROFILE, 2, PFL_SERVER_UUID128, uuid128_pt)
  1025. /*************************************************************************************************/
  1026. /*!
  1027. * \brief ble 主机更新连接参数.
  1028. *
  1029. * \function ble_cmd_ret_e ble_op_conn_param_update(u16 con_handle,struct conn_update_param_t *con_param).
  1030. *
  1031. * \param [in] con_handle range:>0.
  1032. * \param [in] con_param (全局变量地址),连接参数.
  1033. *
  1034. * \return see ble_cmd_ret_e.
  1035. *
  1036. */
  1037. /*************************************************************************************************/
  1038. /* ble_cmd_ret_e ble_op_conn_param_update(u16 con_handle,struct conn_update_param_t *con_param) */
  1039. #define ble_op_conn_param_update(con_handle,con_param) \
  1040. ble_user_cmd_prepare(BLE_CMD_ONNN_PARAM_UPDATA, 2, con_handle, con_param)
  1041. /*************************************************************************************************/
  1042. /*!
  1043. * \brief API: 配置ATT,第二套缓存发送模块初始化(优先级比默认缓存高).
  1044. *
  1045. * \function ble_cmd_ret_e ble_op_high_att_send_init(u8 *att_ram_addr,int att_ram_size).
  1046. *
  1047. * \param [in] att_ram_addr 传入ATT发送模块ram地址,地址按4字节对齐.
  1048. * \param [in] att_ram_size 传入ATT发送模块ram大小.
  1049. *
  1050. * \return see ble_cmd_ret_e.
  1051. *
  1052. * \note 必须在原有的缓存初始化使用后,才能再初始化新的缓存使用.
  1053. */
  1054. /*************************************************************************************************/
  1055. /* ble_cmd_ret_e ble_op_high_att_send_init(u8 *att_ram_addr,int att_ram_size) */
  1056. #define ble_op_high_att_send_init(att_ram_addr,att_ram_size) \
  1057. ble_user_cmd_prepare(BLE_CMD_HIGH_ATT_SEND_INIT, 2, att_ram_addr,att_ram_size)
  1058. /*************************************************************************************************/
  1059. /*!
  1060. * \brief API: ATT操作high 缓存 handle发送数据.
  1061. *
  1062. * \function ble_cmd_ret_e ble_op_high_att_send_data(u16 con_handle,u16 att_handle,u8 *data,u16 len, att_op_type_e att_op_type).
  1063. *
  1064. * \param [in] con_handle 连接 con_handle,range:>0.
  1065. * \param [in] att_handle att操作handle.
  1066. * \param [in] data 数据地址.
  1067. * \param [in] len 数据长度 <= cbuffer 可写入的长度.
  1068. * \param [in] att_op_type see att_op_type_e (att.h).
  1069. *
  1070. * \return see ble_cmd_ret_e.
  1071. *
  1072. * \note
  1073. */
  1074. /*************************************************************************************************/
  1075. /* ble_cmd_ret_e ble_op_high_att_send_data(u16 con_handle,u16 att_handle,u8 *data,u16 len, att_op_type_e att_op_type) */
  1076. #define ble_op_high_att_send_data(con_handle,att_handle,data,len,att_op_type) \
  1077. ble_user_cmd_prepare(BLE_CMD_HIGH_ATT_SEND_DATA, 5, con_handle,att_handle, data, len, att_op_type)
  1078. /*************************************************************************************************/
  1079. /*!
  1080. * \brief ATT操作,清high缓存发送的数据缓存
  1081. *
  1082. * \function ble_op_high_att_clear_send_data(void).
  1083. *
  1084. * \return see ble_cmd_ret_e.
  1085. */
  1086. /*************************************************************************************************/
  1087. /* ble_cmd_ret_e ble_op_high_att_clear_send_data(void) */
  1088. #define ble_op_high_att_clear_send_data(void) \
  1089. ble_user_cmd_prepare(BLE_CMD_ATT_CLEAR_SEND_DATA, 1, 2)
  1090. /*************************************************************************************************/
  1091. /*!
  1092. * \brief API: 获取ATT发送模块,high 缓存cbuffer 可写入数据的长度.
  1093. *
  1094. * \function ble_cmd_ret_e ble_op_high_att_get_remain(u16 con_handle,int *remain_size_ptr).
  1095. *
  1096. * \param [in] con_handle range:>0.
  1097. * \param [out] remain_size_ptr 输出可写入长度值.
  1098. *
  1099. * \return see ble_cmd_ret_e.
  1100. */
  1101. /*************************************************************************************************/
  1102. /* ble_cmd_ret_e ble_op_high_att_get_remain(u16 con_handle,int *remain_size_ptr) */
  1103. #define ble_op_high_att_get_remain(con_handle,remain_size_ptr) \
  1104. ble_user_cmd_prepare(BLE_CMD_HIGH_ATT_VAILD_LEN, 2,con_handle, remain_size_ptr)
  1105. /*************************************************************************************************/
  1106. /*!
  1107. * \brief ble master&slave 配置配对表(可以不设置,使用sdk默认值).
  1108. *
  1109. * \param [in] pair_devices_count 记录配对设备,range: 0~10,默认10.若配置为0:则不使用配对表记录管理,不限制配对个数.
  1110. * \param [in] is_allow_cover 是否允许循环覆盖记录 1 or 0,默认1.
  1111. *
  1112. * \return true or false.
  1113. *
  1114. * \note 上电调用配置,若配置的个数跟之前不一样,默认清所有的配对表数据.
  1115. * \note VM 掉电记录保护.
  1116. * \note 主从机共用一个配对表.
  1117. */
  1118. /*************************************************************************************************/
  1119. void ble_list_config_reset(u8 pair_devices_count, u8 is_allow_cover);
  1120. /*************************************************************************************************/
  1121. /*!
  1122. * \brief 配置是否接受新设备请求配对,记录在VM,(可以不设置,使用sdk默认值).
  1123. *
  1124. * \param [in] enable 允许新设备配对开关,1 or 0,默认1.
  1125. *
  1126. * \return true or false.
  1127. *
  1128. * \note VM 掉电记录保护.
  1129. * \note 是否覆盖是由接口 ble_list_config_reset 的参数 is_allow_cover 决定.
  1130. */
  1131. /*************************************************************************************************/
  1132. bool ble_list_pair_accept(u8 enable);
  1133. /*************************************************************************************************/
  1134. /*!
  1135. * \brief 当前配置是否接受新设备请求配对
  1136. *
  1137. * \param [in] NULL
  1138. *
  1139. * \return true or false.
  1140. *
  1141. * \note VM 掉电记录保护.
  1142. */
  1143. /*************************************************************************************************/
  1144. bool ble_list_is_pair_accept(void);
  1145. /*************************************************************************************************/
  1146. /*!
  1147. * \brief 获取配对表已有配对个数.
  1148. *
  1149. * \return 0~10.
  1150. */
  1151. /*************************************************************************************************/
  1152. u16 ble_list_get_count(void);
  1153. /*************************************************************************************************/
  1154. /*!
  1155. * \brief 绑定已配对的指定设备,清除其他配对设备.
  1156. *
  1157. * \param [in] conn_addr 对方地址6bytes.
  1158. * \param [in] conn_addr_type 对方地址类型range: 0~1.
  1159. *
  1160. * \return true or false.
  1161. *
  1162. * \note VM 掉电记录保护.
  1163. */
  1164. /*************************************************************************************************/
  1165. bool ble_list_bonding_remote(u8 *conn_addr, u8 conn_addr_type);
  1166. /*************************************************************************************************/
  1167. /*!
  1168. * \brief ble 清空配对表(包括主从机).
  1169. *
  1170. * \return true or false.
  1171. * \note 执行效率快.
  1172. */
  1173. /*************************************************************************************************/
  1174. bool ble_list_clear_all(void);
  1175. /*************************************************************************************************/
  1176. /*!
  1177. * \brief ble 清除对应角色的配对列表
  1178. *
  1179. * \param [in] role, 本地设备的角色: 1--slave, 0--master
  1180. * \return true or false.
  1181. * \note 查找方式逐个删除,不区分主从删除建议使用接口 ble_list_clear_all
  1182. */
  1183. /*************************************************************************************************/
  1184. bool ble_list_role_clear_all(u8 role);
  1185. /*************************************************************************************************/
  1186. /*!
  1187. * \brief ble 检测连接地址是否在已配对表中.
  1188. *
  1189. * \param [in] conn_addr 对方地址6bytes.
  1190. * \param [in] conn_addr_type 对方地址类型range: 0~1.
  1191. *
  1192. * \return true or false.
  1193. */
  1194. /*************************************************************************************************/
  1195. bool ble_list_check_addr_is_exist(u8 *conn_addr, u8 conn_addr_type);
  1196. /*************************************************************************************************/
  1197. /*!
  1198. * \brief ble 把记录对方设备的信息从配对表中删除.
  1199. *
  1200. * \param [in] conn_addr 对方地址6bytes.
  1201. * \param [in] conn_addr_type 对方地址类型range: 0~1.
  1202. *
  1203. * \return true or false.
  1204. */
  1205. /*************************************************************************************************/
  1206. bool ble_list_delete_device(u8 *conn_addr, u8 conn_addr_type);
  1207. /*************************************************************************************************/
  1208. /*!
  1209. * \brief ble 根据记录本地地址的信息,从配对表中删除.(适用于不同通道本地地址不一样,清空通道记录信息)
  1210. *
  1211. * \param [in] local_addr 本地地址6bytes.
  1212. * \param [in] local_addr_type 本地地址类型range: 0~1.
  1213. *
  1214. * \return true or false.
  1215. */
  1216. /*************************************************************************************************/
  1217. bool ble_list_delete_device_by_local_address(u8 *local_addr, u8 local_addr_type);
  1218. /*************************************************************************************************/
  1219. /*!
  1220. * \brief ble 获取配对表中最后连接设备的 id_address (public address).
  1221. *
  1222. * \param [out] id_addr 输出最后连接设备的id地址.
  1223. *
  1224. * \return true or false.
  1225. */
  1226. /*************************************************************************************************/
  1227. bool ble_list_get_last_id_addr(u8 *id_addr);
  1228. /*************************************************************************************************/
  1229. /*!
  1230. * \brief ble 获取已配对设备连接地址对应的 id_address (public address or static address).
  1231. *
  1232. * \param [in] conn_addr 对方连接地址6bytes.
  1233. * \param [in] conn_addr_type 对方连接地址类型range: 0~1.
  1234. * \param [out] id_addr 输出已配对设备的id地址.
  1235. *
  1236. * \return true or false.
  1237. */
  1238. /*************************************************************************************************/
  1239. bool ble_list_get_id_addr(u8 *conn_addr, u8 conn_addr_type, u8 *id_addr);
  1240. /*************************************************************************************************/
  1241. /*!
  1242. * \brief ble 获取已配对设备的系统类型.
  1243. *
  1244. * \param [in] conn_addr 对方连接地址6bytes.
  1245. * \param [in] conn_addr_type 对方连接地址类型range: 0~1.
  1246. * \param [out] output_type 见 remote_type_e 定义.
  1247. *
  1248. * \return true or false.
  1249. *
  1250. * \note 只支持作为从机获取手机类型.
  1251. */
  1252. /*************************************************************************************************/
  1253. bool ble_list_get_remote_type(u8 *conn_addr, u8 conn_addr_type, u8 *output_type);
  1254. /*************************************************************************************************/
  1255. /*!
  1256. * \brief ble slave: att server 连接后主动发起请求MTU交换流程.
  1257. *
  1258. * \param [in] handle range:>0.
  1259. */
  1260. /*************************************************************************************************/
  1261. void att_server_set_exchange_mtu(u16 con_handle);
  1262. /*************************************************************************************************/
  1263. /*!
  1264. * \brief ble slave: att server 使能流控功能.
  1265. *
  1266. * \param [in] handle range:>0.
  1267. * \param [in] enable 1 or 0.
  1268. *
  1269. * \note 蓝牙初始化后可调用.
  1270. */
  1271. /*************************************************************************************************/
  1272. void att_server_flow_enable(u8 enable);
  1273. /*************************************************************************************************/
  1274. /*!
  1275. * \brief ble slave: att server 控制收数流控.
  1276. *
  1277. * \param [in] handle range:>0.
  1278. * \param [in] hold_flag 1--停止收发数据,0--开始正常收发数.
  1279. *
  1280. * \note 蓝牙初始化后可调用,对方client要使用write的方式发送数据才能有流控生效
  1281. */
  1282. /*************************************************************************************************/
  1283. void att_server_flow_hold(hci_con_handle_t con_handle, u8 hold_flag);
  1284. /*************************************************************************************************/
  1285. /*!
  1286. * \brief ble master: client 控制收数流控.
  1287. *
  1288. * \param [in] handle range:>0.
  1289. * \param [in] hold_flag 1--停止收发数据,0--开始正常收发数.
  1290. *
  1291. * \note 对方serverd要使用indication的方式发送数据才能有流控生效
  1292. * \return 0->success ,非0->fail.
  1293. */
  1294. /*************************************************************************************************/
  1295. int ble_att_client_set_flow(hci_con_handle_t con_handle, u8 hold_flag);
  1296. /*************************************************************************************************/
  1297. /*!
  1298. * \brief ble slave: server 配对连接时,检查对方操作系统.
  1299. *
  1300. * \param [in] handle range:>0.
  1301. * \param [in] callback 检查完回调.
  1302. *
  1303. * \note 在第一次配对连接时调用,HCI_EVENT_ENCRYPTION_CHANGE 事件后.
  1304. */
  1305. /*************************************************************************************************/
  1306. void att_server_set_check_remote(u16 con_handle, void (*callback)(u16 con_handle, remote_type_e remote_type));
  1307. /*************************************************************************************************/
  1308. /*!
  1309. * \brief 检测协议栈att模块是否支持多机.
  1310. *
  1311. * \param [in] server_max 传入判断的从机个数.
  1312. * \param [in] client_max 传入判断的主机个数·.
  1313. *
  1314. * \return 0->success ,非0->fail.
  1315. */
  1316. /*************************************************************************************************/
  1317. int att_send_check_multi_dev(u8 server_max, u8 client_max);
  1318. /*************************************************************************************************/
  1319. /*!
  1320. * \brief 可修改GATT服务的profile.
  1321. *
  1322. * \param [in] profile_data gatt profile.
  1323. *
  1324. * \return 0->success ,非0->fail.
  1325. *
  1326. * \note 蓝牙未连接状态下,可调用修改.
  1327. */
  1328. /*************************************************************************************************/
  1329. int att_server_change_profile(u8 const *profile_data);
  1330. /*************************************************************************************************/
  1331. /*!
  1332. * \brief 获取server的mtu大小.
  1333. *
  1334. * \param [in] con_handle range :>0.
  1335. *
  1336. * \return mtu size
  1337. *
  1338. * \note 蓝牙未连接状态下,可调用修改.
  1339. */
  1340. /*************************************************************************************************/
  1341. u16 ble_att_server_get_link_mtu(u16 con_handle);
  1342. /*************************************************************************************************/
  1343. /*!
  1344. * \brief 获取client的mtu大小.
  1345. *
  1346. * \param [in] con_handle range :>0.
  1347. *
  1348. * \return mtu size
  1349. *
  1350. * \note 蓝牙未连接状态下,可调用修改.
  1351. */
  1352. /*************************************************************************************************/
  1353. u16 ble_att_client_get_link_mtu(u16 con_handle);
  1354. #endif