hilink_bt_api.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. /*
  2. * Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
  3. * Description: 蓝牙SDK API头文件
  4. */
  5. #ifndef HILINK_BT_API_H
  6. #define HILINK_BT_API_H
  7. #include "ble_cfg_net_api.h"
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. /* 广播最大长度 */
  12. #define ADV_VALUE_MAX_LEN 31
  13. /* 销毁蓝牙协议栈标志 */
  14. #define BLE_DEINIT_FALG 0x1234ABCD
  15. typedef enum {
  16. HILINK_BT_SDK_STATUS_SVC_RUNNING = 0, /* 正常运行 */
  17. HILINK_BT_SDK_STATUS_DEINIT, /* 注销 */
  18. HILINK_BT_SDK_STATUS_NAME_SET_ABNORM, /* 蓝牙名称设置异常 */
  19. HILINK_BT_SDK_STATUS_DISCOVER_MODE_SET_ABNORM, /* 蓝牙可发现模式设置异常 */
  20. HILINK_BT_SDK_STATUS_REG_APP_ABNORM, /* 注册BLE应用异常 */
  21. HILINK_BT_SDK_STATUS_SVC_CREATE_ABNORM, /* 服务创建异常 */
  22. HILINK_BT_SDK_STATUS_CHAR_ADD_ABNORM, /* 属性添加异常 */
  23. HILINK_BT_SDK_STATUS_DESC_ADD_ABNORM, /* 描述添加异常 */
  24. HILINK_BT_SDK_STATUS_SVC_START_ABNORM, /* 服务启动异常 */
  25. HILINK_BT_SDK_STATUS_ADV_PARA_SET_ABNORM, /* 广播参数设置异常 */
  26. HILINK_BT_SDK_STATUS_ADV_DATA_SET_ABNORM, /* 广播数据设置异常 */
  27. HILINK_BT_SDK_STATUS_ADV_START_ABNORM, /* 广播启动异常 */
  28. } HILINK_BT_SdkStatus;
  29. /* GATTS char属性取值 */
  30. typedef enum {
  31. HILINK_BT_CHAR_PROP_WRITE = 0x08,
  32. HILINK_BT_CHAR_PROP_READ = 0x02,
  33. HILINK_BT_CHAR_PROP_NOTIFY = 0x10,
  34. HILINK_BT_CHAR_PROP_INDICATE = 0x20
  35. } HILINK_BT_CharProperty;
  36. /* GATTS char权限取值 */
  37. typedef enum {
  38. HILINK_BT_CHAR_PERM_READ = 0x01,
  39. HILINK_BT_CHAR_PERM_READ_ENCRYPTED = 0x02,
  40. HILINK_BT_CHAR_PERM_READ_ENCRYPTED_MITM = 0x04,
  41. HILINK_BT_CHAR_PERM_WRITE = 0x10,
  42. HILINK_BT_CHAR_PERM_WRITE_ENCRYPTED = 0x20,
  43. HILINK_BT_CHAR_PERM_WRITE_ENCRYPTED_MITM = 0x40,
  44. HILINK_BT_CHAR_PERM_WRITE_SIGNED = 0x80,
  45. HILINK_BT_CHAR_PERM_WRITE_SIGNED_MITM = 0x100,
  46. } HILINK_BT_CharPermission;
  47. /* GATTS desc属性取值 */
  48. typedef enum {
  49. HILINK_BT_DESC_PERM_WRITE = 0x01,
  50. HILINK_BT_DESC_PERM_READ = 0x02
  51. } HILINK_BT_DescPermission;
  52. /* 属性值类型: 整型和属性 */
  53. typedef enum {
  54. HILINK_BT_CMD_DATA_TYPE_INT,
  55. HILINK_BT_CMD_DATA_TYPE_STR,
  56. } HILINK_BT_CmdDataType;
  57. /* hilink蓝牙应用层数据编码类型 */
  58. typedef enum {
  59. HILINK_BT_CMD_DATA_MODE_TLV = 0x00, /* TLV格式: 降低报文占用的空间 */
  60. HILINK_BT_CMD_DATA_MODE_JSON = 0x01 /* JSON格式: 扩展性更好,默认格式 */
  61. } HILINK_BT_CmdDataMode;
  62. /* 发送蓝牙SDK状态回调函数类型 */
  63. typedef void (*HILINK_BT_SdkEventCallBack)(HILINK_BT_SdkStatus event, const void *param);
  64. /* 发送蓝牙数据回调函数类型 */
  65. typedef int (*HILINK_BT_SendBtDataCallback)(const unsigned char *buf, unsigned int len);
  66. /* 自定义gatt服务读事件回调 */
  67. typedef int (*HILINK_BT_GattReadCallback)(unsigned char *out, unsigned int *outLen);
  68. /* 自定义gatt服务写事件回调 */
  69. typedef int (*HILINK_BT_GattWriteCallback)(const unsigned char *in, unsigned int inLen);
  70. /* 获取蓝牙mac地址的回调函数 */
  71. typedef int (*HILINK_BT_GetBtMacCallBack)(const unsigned char *buf, unsigned int len);
  72. /* 产品信息定义结构体 */
  73. typedef struct {
  74. char *manuName;
  75. char *devName;
  76. char *productId;
  77. char *sn;
  78. char *mac;
  79. char *subProductId;
  80. } HILINK_BT_DevInfo;
  81. /* 产品功能命令定义结构体 */
  82. typedef struct {
  83. unsigned char attrIdx;
  84. char *attr;
  85. HILINK_BT_CmdDataType dataType;
  86. int (*putFunc)(const void *data, unsigned int len);
  87. int (*getFunc)(void *buf, unsigned int *bufLen, unsigned int len);
  88. } HILINK_BT_AttrInfo;
  89. /* 产品功能定义结构体 */
  90. typedef struct {
  91. unsigned char svcIdx;
  92. char *service;
  93. int (*putFunc)(const void *svc, const unsigned char *in, unsigned int inLen,
  94. unsigned char **out, unsigned int *outLen);
  95. int (*getFunc)(const void *svc, const unsigned char *in, unsigned int inLen,
  96. unsigned char **out, unsigned int *outLen);
  97. unsigned char attrNum;
  98. HILINK_BT_AttrInfo *attrInfo;
  99. } HILINK_BT_SvcInfo;
  100. /* 产品Profile定义结构体 */
  101. typedef struct {
  102. unsigned int svcNum;
  103. HILINK_BT_SvcInfo *svcInfo;
  104. } HILINK_BT_Profile;
  105. /* 蓝牙gatt character描述 */
  106. typedef struct {
  107. char *descUuid;
  108. /* gatt属性描述读写权限:取值由HILINK_BT_DescPermission类型的成员或运算得出 */
  109. unsigned int descPermission;
  110. } HILINK_BT_GattProfileDesc;
  111. /* 蓝牙gatt character */
  112. typedef struct {
  113. char *charUuid;
  114. /* gatt char权限:取值由HILINK_BT_CharPermission类型的成员或运算得出 */
  115. unsigned int charPermission;
  116. /* gatt char属性:取值由HILINK_BT_CharProperty类型的成员或运算得出 */
  117. unsigned int charProperty;
  118. HILINK_BT_GattReadCallback readFunc;
  119. HILINK_BT_GattWriteCallback writeFunc;
  120. HILINK_BT_GattProfileDesc *desc;
  121. unsigned char descNum;
  122. } HILINK_BT_GattProfileChar;
  123. /* 蓝牙gatt 服务 */
  124. typedef struct {
  125. char *svcUuid;
  126. int isPrimary;
  127. HILINK_BT_GattProfileChar *character;
  128. unsigned char charNum;
  129. } HILINK_BT_GattProfileSvc;
  130. /* 厂商自定义蓝牙gatt服务列表 */
  131. typedef struct {
  132. HILINK_BT_GattProfileSvc *service;
  133. unsigned char serviceNum;
  134. } HILINK_BT_GattServiceList;
  135. /* 配置保存回调结构体 */
  136. typedef struct {
  137. int (*createItem)(const char *name, unsigned int size);
  138. int (*readItem)(const char *name, unsigned char *buf, unsigned int len);
  139. int (*writeItem)(const char *name, const unsigned char *buf, unsigned int len);
  140. int (*deleteItem)(const char *name);
  141. } HILINK_BT_ConfigInterface;
  142. /* 获取广播数据结构体 */
  143. typedef struct {
  144. unsigned int advSvcDataLen;
  145. unsigned char advSvcData[ADV_VALUE_MAX_LEN];
  146. unsigned int advRspDataLen;
  147. unsigned char advRspData[ADV_VALUE_MAX_LEN];
  148. } HILINK_BT_AdvertiseData;
  149. /* 设置应用层编码模式 */
  150. int HILINK_BT_SetEncodeMode(HILINK_BT_CmdDataMode mode);
  151. /* 查询应用层编码模式 */
  152. HILINK_BT_CmdDataMode HILINK_BT_GetEncodeMode(void);
  153. /* 初始化启动HiLink Bluetooth SDK */
  154. int HILINK_BT_Init(const HILINK_BT_Profile *profile);
  155. /* 启动HiLink BT SDK处理,调用HiLink协议栈 */
  156. int HILINK_BT_Process(void);
  157. /*
  158. * 结束HiLink Bluetooth SDK
  159. * flag为0:只销毁控制和调度线程,flag为1销毁蓝牙协议栈,该函数不可重入
  160. */
  161. int HILINK_BT_DeInit(unsigned int flag);
  162. /* 添加HiLink服务信息service信息 */
  163. int HILINK_BT_AddHiLilnkService(const HILINK_BT_SvcInfo *serviceArray, unsigned int serviceNum);
  164. /* 通知服务状态 */
  165. int HILINK_BT_ReportServiceState(const void *service, const void *buf, unsigned int len);
  166. /* 通知属性状态 */
  167. int HILINK_BT_ReportAttrState(const void *svc, const void *attr, const void *buf, unsigned int len);
  168. /* 处理蓝牙数据 */
  169. int HILINK_BT_ProcessBtData(const unsigned char *buf, unsigned int len);
  170. /* 注册蓝牙数据发送接口 */
  171. int HILINK_BT_RegisterBtDataSendCallback(HILINK_BT_SendBtDataCallback callback);
  172. /* 查询蓝牙数据发送接口 */
  173. HILINK_BT_SendBtDataCallback HILINK_BT_GetBtDataSendCallback(void);
  174. /* 初始化发送蓝牙mac地址的函数 */
  175. int HILINK_BT_BtMacSendInit(HILINK_BT_GetBtMacCallBack callback);
  176. /* 查询蓝牙mac地址的发送接口 */
  177. HILINK_BT_GetBtMacCallBack HILINK_BT_GetBtMacSendCallback(void);
  178. /* 设置蓝牙SDK事件处理函数 */
  179. int HILINK_BT_SetSdkEventCallback(HILINK_BT_SdkEventCallBack callback);
  180. /*
  181. * 设置BLE最大连接数量
  182. * 入参connNum的范围为[1,10]
  183. * 最大连接数上限为10,超过10个按10个执行
  184. * 最小连接数为1,小于1按1个执行
  185. * 若不调用该接口,默认最大连接数为1
  186. */
  187. void HILINK_BT_SetMaxConnNum(int connNum);
  188. /* 查询蓝牙SDK最大连接数量 */
  189. int HILINK_BT_GetMaxConnNum(void);
  190. /* 添加蓝牙SDK自定义gatt服务 */
  191. int HILINK_BT_SetGattProfile(HILINK_BT_GattServiceList *gattServiceList);
  192. /* 注册配置保存回调函数到HiLink Bluetooth SDK,若不调用该函数,则默认使用HiLink Bluetooth SDK保存配置实现 */
  193. int HILINK_BT_RegisterConfigInterface(const HILINK_BT_ConfigInterface *interface);
  194. /* 启动广播 */
  195. int HILINK_BT_StartAdvertise(void);
  196. /* 停止广播 */
  197. int HILINK_BT_StopAdvertise(void);
  198. /* 上报蓝牙反馈数据 */
  199. int HILINK_BT_IndicateSvcCharData(const char *svcUuid, const char *charUuid, const char *buf, unsigned int len);
  200. /*
  201. * 获取设备表面的最强点信号发射功率强度,最强点位置的确定以及功率测试方
  202. * 法,参照hilink认证蓝牙靠近发现功率设置及测试方法指导文档,power为出参
  203. * ,单位dbm,返回设备表面的最强信号强度值,如果厂商不想使用蓝牙靠近发现功
  204. * 能,接口直接返-1,如果需要使用蓝牙靠近发现,则接口返回0,如需及时生效,需
  205. * 调用HILINK_BT_StartAdvertise()方法启动广播
  206. */
  207. int HILINK_BT_GetDevSurfacePower(char *power);
  208. /*
  209. * 获取设备的子型号,长度固定两个字节
  210. * subProdId为保存子型号的缓冲区,len为缓冲区的长度
  211. * 如果产品定义有子型号,则填入两字节子型号,并以'\0'结束, 返回0
  212. * 没有定义子型号,则返回-1
  213. * 该接口需设备开发者实现
  214. * 与hilink sdk相同定义,双模组模式只需一份,已提供给第三方厂家,暂不按编程规范整改
  215. */
  216. int HILINK_GetSubProdId(char *subProdId, int len);
  217. /*
  218. * 获取设备SN
  219. * 与hilink sdk相同定义,双模组模式只需一份,已提供给第三方厂家,暂不按编程规范整改
  220. */
  221. void HilinkGetDeviceSn(unsigned int len, char *sn);
  222. /* 获取蓝牙SDK设备相关信息 */
  223. HILINK_BT_DevInfo *HILINK_BT_GetDevInfo(void);
  224. /* 获取靠近发现中广播数据 */
  225. int HILINK_BT_GetAdvertiseData(HILINK_BT_AdvertiseData *advertiseData);
  226. /* 获取BLE厂商注册的回调函数 */
  227. BLE_CfgNetCb *GetBleCfgNetCallback(void);
  228. /* 断开蓝牙连接时,释放通道占用资源 */
  229. void HILINK_BT_DisconnectFreeResource(void);
  230. /*
  231. * 厂家设置linux系统读写文件的路径,路径长度不能超过33个字节,包含结束符
  232. * 要求存储路径是非易失性的,版本升级不影响该路径文件
  233. */
  234. void HILINK_BT_SetConfigDirPath(const char *configDirPath);
  235. #ifdef __cplusplus
  236. }
  237. #endif
  238. #endif