• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: BLE辅助配网SDK API头文件(此文件为DEMO,需集成方适配修改)
15  */
16 
17 #ifndef BLE_CFG_NET_API_H
18 #define BLE_CFG_NET_API_H
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 /* WIFI信息长度宏定义 */
25 #define WIFI_SSID_MAX_LEN 32
26 #define WIFI_PWD_MAX_LEN 64
27 #define WIFI_PSK_LEN 32
28 #define WIFI_BSSID_LEN 6
29 
30 #define BLE_UUID_LEN 16
31 
32 /* 用户发送的数据类型 */
33 typedef enum {
34     NETCFG_DATA,
35     CUSTOM_DATA,
36     CUSTOM_SEC_DATA,
37     DATA_TYPE_BUTT
38 } BLE_DataType;
39 
40 /* 属性类型定义 */
41 typedef enum {
42     ATTR_TYPE_SERVICE = 0,
43     ATTR_TYPE_CHAR,
44     ATTR_TYPE_CHAR_VALUE,
45     ATTR_TYPE_CHAR_CLIENT_CONFIG,
46     ATTR_TYPE_CHAR_USER_DESC,
47 } BLE_AttrType;
48 
49 /* UUID长度定义 */
50 typedef enum {
51     UUID_TYPE_NULL = 0,
52     UUID_TYPE_16_BIT,
53     UUID_TYPE_32_BIT,
54     UUID_TYPE_128_BIT,
55 } BLE_UuidType;
56 
57 /* BLE辅助配网状态定义 */
58 typedef enum {
59     CFG_NET_PROCESS_SUCCESS = 0x00,
60     CFG_NET_BLE_CONNECT,
61     CFG_NET_BLE_DIS_CONNECT,
62     CFG_NET_SPEKE_SUCCESS,
63     CFG_NET_PROCESS_START,
64     CFG_NET_RECEIVE_PARA,
65     CFG_NET_WIFI_CONNECT,
66     CFG_NET_SESSIONKEY_SUCCESS,
67     CFG_NET_FAIL_UNKUNOWN = 0x100,
68     CFG_NET_FAIL_WIFI_SSID,
69     CFG_NET_FAIL_WIFI_PWD,
70     CFG_NET_FAIL_SESSIONKEY,
71     OTA_WRITE_TASK_START,
72     OTA_WRITE_TASK_FINISH,
73     CFG_CLEAR_DEV_REG_INFO,
74 } BLE_CfgNetStatus;
75 
76 /* BLE广播类型定义 */
77 typedef enum {
78     BLE_ADV_DEFAULT,
79     BLE_ADV_NEARBY_V0,
80     BLE_ADV_ONEHOP,
81     BLE_ADV_LOCAL_NAME,
82     BLE_ADV_CUSTOM
83 } BLE_AdvType;
84 
85 /*
86  * 获取设备PIN码函数类型
87  * pincode: 存放pin码的缓冲区
88  * size: 缓冲区的长度
89  * len: 返回的pin码实际长度
90  */
91 typedef int (*BLE_GetDevPinCode)(unsigned char *pinCode, unsigned int size, unsigned int *len);
92 
93 /*
94  * 获取设备信息函数类型,len即是入参也是出参,入参代表buff缓冲区长度,出参代表获取的设备信息实际长度
95  * 格式要求:{"productId":"%s", "sn":"%s", "vendor":"%s"}
96  */
97 typedef int (*BLE_GetDeviceInfo)(unsigned char *devInfo, unsigned int *len);
98 
99 /*
100  * 设置配网信息函数类型
101 .* 数据格式:{"ssid":"%s","password":"%s","devId":"%s","psk":"%s","code":"%s","random":"%s","vendorData":"%s"}
102  */
103 typedef int (*BLE_SetCfgNetInfo)(const unsigned char *netInfo, unsigned int len);
104 
105 /* 接收用户数据函数类型 */
106 typedef int (*BLE_RcvCustomData)(unsigned char *buff, unsigned int len);
107 
108 /* 配网过程状态处理函数类型 */
109 typedef int (*BLE_CfgNetProcess)(BLE_CfgNetStatus status);
110 
111 /* BLE GATT服务读函数类型 */
112 typedef int (*BLE_GattRead)(unsigned char *buff, unsigned int *len);
113 
114 /* BLE GATT服务写函数类型 */
115 typedef int (*BLE_GattWrite)(const unsigned char *buff, unsigned int len);
116 
117 /* BLE GATT服务指示函数类型 */
118 typedef int (*BLE_GattIndicate)(unsigned char *buff, unsigned int len);
119 
120 /* BLE 短距发现开启 */
121 typedef int (*BLE_NearDiscoveryStart)(void);
122 
123 /* BLE 短距发现关闭 */
124 typedef int (*BLE_NearDiscoveryClose)(void);
125 
126 /* BLE 短距发现回调函数指针 */
127 typedef struct {
128     BLE_NearDiscoveryStart startCb;
129     BLE_NearDiscoveryClose closeCb;
130 } BLE_NearDiscoveryCb;
131 
132 /* BLE GATT回调函数指针 */
133 typedef struct {
134     BLE_GattRead readCb;
135     BLE_GattWrite writeCb;
136     BLE_GattIndicate indicateCb;
137 } BLE_GattOperateFunc;
138 
139 /* BLE配置参数 */
140 typedef struct {
141     int isBlePair;
142     int isDeinitBleStack;
143     int data1; /* 为后期配置参数预留,暂不使用 */
144     int data2; /* 为后期配置参数预留,暂不使用 */
145     int data3; /* 为后期配置参数预留,暂不使用 */
146 } BLE_ConfPara;
147 
148 /* BLE GATT服务 */
149 typedef struct {
150     BLE_AttrType attrType;
151     unsigned int permission;
152     BLE_UuidType uuidType;
153     unsigned char uuid[BLE_UUID_LEN];
154     unsigned char *value;
155     unsigned char valLen;
156     unsigned char properties;
157     BLE_GattOperateFunc func;
158 } BLE_GattAttr;
159 
160 /* GATT服务(单个service及其下挂的全部characteristics和descriptions) */
161 typedef struct {
162     unsigned int attrNum;
163     BLE_GattAttr *attrList;
164 } BLE_GattService;
165 
166 /* GATT列表(包含多个services和返回的handle) */
167 typedef struct {
168     unsigned int num;
169     BLE_GattService *service;
170     int *handle;
171 } BLE_GattList;
172 
173 /* GATT句柄列表 */
174 typedef struct {
175     unsigned int num;
176     int *handle;
177 } BLE_GattHandleList;
178 
179 /* BLE的广播数据和扫描应答数据 */
180 typedef struct {
181     unsigned char *advData;
182     unsigned int advDataLen;
183     unsigned char *rspData;
184     unsigned int rspDataLen;
185 } BLE_AdvData;
186 
187 /* BLE的广播参数 */
188 typedef struct {
189     unsigned char advType;
190     unsigned char discMode;
191     unsigned char connMode;
192     unsigned int minInterval;
193     unsigned int maxInterval;
194     unsigned int channelMap;
195     unsigned int timeout;
196     int txPower;
197 } BLE_AdvPara;
198 
199 /* 广播参数和数据 */
200 typedef struct {
201     BLE_AdvPara *advPara;
202     BLE_AdvData *advData;
203 } BLE_AdvInfo;
204 
205 /* BLE初始化参数 */
206 typedef struct {
207     BLE_ConfPara *confPara;
208     BLE_AdvInfo *advInfo;
209     BLE_GattList *gattList;
210 } BLE_InitPara;
211 
212 /* BLE配网回调函数 */
213 typedef struct {
214     BLE_GetDevPinCode getDevPinCodeCb;
215     BLE_GetDeviceInfo getDeviceInfoCb;
216     BLE_SetCfgNetInfo setCfgNetInfoCb;
217     BLE_RcvCustomData rcvCustomDataCb;
218     BLE_CfgNetProcess cfgNetProcessCb;
219 } BLE_CfgNetCb;
220 
221 /*
222  * BLE配网资源申请:BLE协议栈启动、配网回调函数挂接
223  * 如为厂家实现协议栈para传NULL,如需华为实现协议栈则需赋值para结构体内容
224  */
225 int BLE_CfgNetInit(const BLE_InitPara *para, const BLE_CfgNetCb *cb);
226 
227 /*
228  * BLE配网资源注销:配网回调函数清理、BLE协议栈销毁
229  * flag为0:只销毁控制和调度线程,flag为1销毁蓝牙协议栈
230  */
231 int BLE_CfgNetDeInit(const BLE_GattHandleList *handleList, unsigned int flag);
232 
233 /* BLE配网广播控制:参数代表广播时间,0:停止;0xFFFFFFFF:一直广播,其他:广播指定时间后停止,单位秒 */
234 int BLE_CfgNetAdvCtrl(unsigned int advSecond);
235 
236 /*
237  * 更新广播参数,更新完成后需调用BLE_CfgNetAdvCtrl启动广播
238  * 传入空值时可启动hilink构造的广播
239  */
240 int BLE_CfgNetAdvUpdate(const BLE_AdvInfo *advInfo);
241 
242 /* BLE配网断开连接:防止其他任务长时间占用BLE连接 */
243 int BLE_CfgNetDisConnect(void);
244 
245 /* BLE发送用户数据:用户数据发送,与接收回调函数配套使用 */
246 int BLE_SendCustomData(BLE_DataType dataType, const unsigned char *buff, unsigned int len);
247 
248 /* BLE获取蓝牙广播类型 */
249 int BLE_GetAdvType(void);
250 
251 /*
252  * BLE设置蓝牙广播类型:
253  * type:BLE_ADV_DEFAULT表示新蓝牙靠近发现类型;
254  * type:BLE_ADV_ONEHOP表示蓝牙碰一碰类型;
255  * type:BLE_ADV_LOCAL_NAME表示常态广播类型
256  */
257 void BLE_SetAdvType(int type);
258 
259 /*
260  * 设置蓝牙广播名称中的MPP字段,参考“BLE设备接入规范”文档中蓝牙设备名称描述,按需设置
261  * 入参含义:mpp
262  * m: 1个字节:0x00—0xFF,可选,如果发送该参数,则pp为必传,如果设备侧不携带mpp字段,则网关默认不回连该BLE设备。
263  *    bit0: 0心跳广播报文; 1设备主动回连请求广播报文(比如设备有数据上报需要连接网关)
264  *    bit1: 心跳时长间隔单位,0单位毫秒,  1 单位为秒。
265  * pp: 采用小端格式传输,2个字节 unsigned int 类型参数,16进制。标识设备心跳间隔时长,例如5000ms。
266  * len: 长度固定为3个字节 。
267  */
268 int BLE_SetAdvNameMpp(const unsigned char *mpp, unsigned int len);
269 
270 /*
271  * BLE 短距发现注册函数
272  * 入参含义:
273  *   cb:BLE 短距发现回调函数指针
274  *   "BLE_NearDiscoveryStart": 短距功能开启
275  *   "BLE_NearDiscoveryClose": 短距功能关闭
276  * 返回:
277  *   0成功,非0失败
278  */
279 int BLE_NearDiscoveryInit(const BLE_NearDiscoveryCb *cb);
280 
281 /*
282  * BLE 短距发现功能使能
283  * 入参含义:
284  *   waitTime: 进入短距发现等待时间,单位为秒,设置范围[1, 0XFFFFFFFF)。建议设置600s。
285  * 返回:
286  *   0成功,非0失败
287  * 说明:
288  *   蓝牙短距发现功能默认关闭,调用此接口设置等待时间并使能蓝牙短距发现功能;
289  *   调用此接口前,先调用“BLE_NearDiscoveryInit”注册“BLE_NearDiscoveryCb”;
290  *   使能此功能后,“waitTime”时间内用户没有发起配网,SDK调用“BLE_NearDiscoveryStart”开启短距发现模式,蓝牙
291  *   辅助WiFi配网有效发现距离1~2m;
292  *   开启短距发现模式后,用户发起配网,SDK调用“BLE_NearDiscoveryClose”关闭短距发现模式,确保配网流程可靠进行;
293  *   此功能只影响待配网状态下的蓝牙广播,其它广播形态不受影响;
294  */
295 int BLE_NearDiscoveryEnable(unsigned long waitTime);
296 
297 /**
298  * @brief 根据蓝牙sdk里的任务名获取任务栈大小
299  *
300  * @param name [IN] 任务名
301  * name              | Description
302  * "BtScheduleTask"  | 蓝牙sdk调度任务
303  * "BtCtrlTask"      | 蓝牙sdk控制任务
304  * "BtOtaWriteTask"  | 蓝牙sdk升级写数据任务
305  * "BtOtaTimeTask"   | 蓝牙sdk升级时间判断任务
306  * "BtAdvCtrlTask"   | 蓝牙sdk广播定时控制任务
307  * @param stackSize [OUT] 任务栈大小
308  * @return 0成功,非0失败
309  */
310 int HILINK_BT_GetTaskStackSize(const char *name, unsigned long *stackSize);
311 
312 /**
313  * @brief 根据蓝牙sdk的任务名设置任务栈大小
314  *
315  * @param name [IN] 任务名
316  * name              | Description
317  * "BtScheduleTask"  | 蓝牙sdk调度任务
318  * "BtCtrlTask"      | 蓝牙sdk控制任务
319  * "BtOtaWriteTask"  | 蓝牙sdk升级写数据任务
320  * "BtOtaTimeTask"   | 蓝牙sdk升级时间判断任务
321  * "BtAdvCtrlTask"   | 蓝牙sdk广播定时控制任务
322  * @param stackSize [IN] 任务栈大小
323  * @return 0成功,非0失败
324  * @note 当任务栈不够时,厂商可以先调用HILINK_BT_GetTaskStackSize接口查看hilink
325  *       内部的默认值,再根据情况增加栈空间。此函数需要在蓝牙sdk初始化接口
326  *       BLE_CfgNetInit之前调用才生效。
327  */
328 int HILINK_BT_SetTaskStackSize(const char *name, unsigned long stackSize);
329 
330 #ifdef __cplusplus
331 }
332 #endif
333 #endif
334