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