1 // Copyright (C) 2022 Beken Corporation
2 //
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
15 #include <string.h>
16 #include <stdio.h>
17 #include <stdbool.h>
18
19 #include "ohos_bt_def.h"
20 #include "ohos_bt_gatt.h"
21 #include "ohos_bt_gatt_server.h"
22 #include "common/bk_typedef.h"
23
24
25
26
27 #define BLE_ADV_ENABLE 1
28
29 static const uint8_t ohos_adv_data[]={0x2,0x1,0x6,0x15,0x16,0xee,0xfd,0x1,0x1,0x7,0x4,0x0,0x11,0xf8,0x12,0x32,0x37,0x33,0x44,0xff,0x0,0x5,0x2,0x34,0x38};
30 static const uint8_t ohos_adv_rsp_data[]={0x11,0x9,0x48,0x69,0x2d,0x42,0x65,0x6b,0x65,0x6e,0x2d,0x31,0x32,0x37,0x33,0x44,0x30,0x30};
31
32
33
34 //static const uint8_t ohos_adv_data[]={0x02,0x01,0x06,0xb,0x9,'7','2','3','1','N','_','B','L','E',0x0};
35 //static const uint8_t ohos_adv_rsp_data[]={0x7,0x8,'7','2','3','1','N',0x0};
36 static const uint8_t ntf_ind_data[6]={0x11,0x22,0x33,0x44,0x55,0x66};
37 #if 1
38 static const uint8_t BK_ATT_SVC_UUID_1[]={0x00,0x91,0x8A,0xEF,0x39,0xDD,0x84,0xA4,0xFC,0x43,0x77,0xA2,0x00,0xE4,0xF1,0x15};
39 static const uint8_t BK_ATT_SVC_UUID_2[]={0x00,0x91,0x8A,0xEF,0x39,0xDD,0x84,0xA4,0xFC,0x43,0x77,0xA2,0x00,0xE5,0xF1,0x15};
40 static const uint8_t BK_ATT_SVC_UUID_3[]={0x00,0x91,0x8A,0xEF,0x39,0xDD,0x84,0xA4,0xFC,0x43,0x77,0xA2,0x00,0xE6,0xF1,0x15};
41
42 #define WRITE_REQ_CHARACTERISTIC_1 {0x00,0x91,0x8A,0xEF,0x39,0xDD,0x84,0xA4,0xFC,0x43,0x77,0xA2,0x01,0xE4,0xF1,0x15}
43
44 #define WRITE_REQ_CHARACTERISTIC_2 {0x00,0x91,0x8A,0xEF,0x39,0xDD,0x84,0xA4,0xFC,0x43,0x77,0xA2,0x01,0xE5,0xF1,0x15}
45
46 #define WRITE_REQ_CHARACTERISTIC_3 {0x00,0x91,0x8A,0xEF,0x39,0xDD,0x84,0xA4,0xFC,0x43,0x77,0xA2,0x02,0xE6,0xF1,0x15}
47 #define INDICATE_CHARACTERISTIC_3 {0x00,0x91,0x8A,0xEF,0x39,0xDD,0x84,0xA4,0xFC,0x43,0x77,0xA2,0x01,0xE6,0xF1,0x15}
48
49 #define BK_ATT_DECL_PRIMARY_SERVICE {0x00,0x28,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
50 #define BK_ATT_DECL_CHARACTERISTIC {0x03,0x28,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
51 #define BK_ATT_DESC_CLIENT_CHAR_CFG {0x02,0x29,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
52
53 enum
54 {
55 TEST_IDX_SVC1,
56 TEST_IDX_E400_VAL_CHAR,
57 TEST_IDX_E400_VAL_VALUE,
58 TEST_IDX_NB1,
59 };
60 enum
61 {
62 TEST_IDX_SVC2,
63 TEST_IDX_E500_VAL_CHAR,
64 TEST_IDX_E500_VAL_VALUE,
65 TEST_IDX_NB2,
66 };
67 enum
68 {
69 TEST_IDX_SVC3,
70 TEST_IDX_E600_VAL_CHAR3_1,
71 TEST_IDX_E600_VAL_VALUE3_1,
72 TEST_IDX_E600_VAL_CHAR3_2,
73 TEST_IDX_E600_VAL_VALUE3_2,
74 TEST_IDX_NB3,
75 };
76
77
78 BleGattAttr attrList1[TEST_IDX_NB1]={
79
80 // Service Declaration
81 [TEST_IDX_SVC1] = {OHOS_BLE_ATTRIB_TYPE_SERVICE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_PRIMARY_SERVICE,0,0,0,{0}},
82
83 // Level Characteristic Declaration
84 [TEST_IDX_E400_VAL_CHAR] = {OHOS_BLE_ATTRIB_TYPE_CHAR, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_CHARACTERISTIC, 0,0,0,{0}},
85 // Level Characteristic Value
86 [TEST_IDX_E400_VAL_VALUE] = {OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, WRITE_REQ_CHARACTERISTIC_1, 0,0,OHOS_GATT_CHARACTER_PROPERTY_BIT_READ|OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE,{0}},
87
88 };
89 BleGattAttr attrList2[TEST_IDX_NB2]={
90
91 // Service Declaration
92 [TEST_IDX_SVC2] = {OHOS_BLE_ATTRIB_TYPE_SERVICE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_PRIMARY_SERVICE,0,0,0,{0}},
93
94 // Level Characteristic Declaration
95 [TEST_IDX_E500_VAL_CHAR] = {OHOS_BLE_ATTRIB_TYPE_CHAR, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_CHARACTERISTIC, 0,0,0,{0}},
96 // Level Characteristic Value
97 [TEST_IDX_E500_VAL_VALUE] = {OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, WRITE_REQ_CHARACTERISTIC_2, 0,0,OHOS_GATT_CHARACTER_PROPERTY_BIT_READ|OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE,{0}},
98
99 };
100 BleGattAttr attrList3[TEST_IDX_NB3]={
101
102 // Service Declaration
103 [TEST_IDX_SVC3] = {OHOS_BLE_ATTRIB_TYPE_SERVICE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_PRIMARY_SERVICE,0,0,0,{0}},
104
105 // Level Characteristic Declaration
106 [TEST_IDX_E600_VAL_CHAR3_1] = {OHOS_BLE_ATTRIB_TYPE_CHAR, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_CHARACTERISTIC, 0,0,0,{0}},
107 // Level Characteristic Value
108 [TEST_IDX_E600_VAL_VALUE3_1] = {OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, WRITE_REQ_CHARACTERISTIC_3, 0,0,OHOS_GATT_CHARACTER_PROPERTY_BIT_NOTIFY,{0}},
109 // Level Characteristic Declaration
110 [TEST_IDX_E600_VAL_CHAR3_2] = {OHOS_BLE_ATTRIB_TYPE_CHAR, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_CHARACTERISTIC, 0,0,0,{0}},
111 // Level Characteristic - Client Characteristic Configuration Descriptor
112 [TEST_IDX_E600_VAL_VALUE3_2] = {OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, INDICATE_CHARACTERISTIC_3, 0,0,OHOS_GATT_CHARACTER_PROPERTY_BIT_NOTIFY,{0}},
113
114 };
115
116 //#else
117
118 #define BK_ATT_DECL_PRIMARY_SERVICE {0x00,0x28,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
119 #define BK_ATT_DECL_CHARACTERISTIC {0x03,0x28,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
120 #define BK_ATT_DESC_CLIENT_CHAR_CFG {0x02,0x29,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
121
122 #define WRITE_REQ_CHARACTERISTIC {0x01,0xFF,0,0,0x34,0x56,0,0,0,0,0x28,0x37,0,0,0,0}
123 #define INDICATE_CHARACTERISTIC {0x02,0xFF,0,0,0x34,0x56,0,0,0,0,0x28,0x37,0,0,0,0}
124 #define NOTIFY_CHARACTERISTIC {0x03,0xFF,0,0,0x34,0x56,0,0,0,0,0x28,0x37,0,0,0,0}
125
126
127 enum
128 {
129 TEST_IDX_SVC,
130 TEST_IDX_FF01_VAL_CHAR,
131 TEST_IDX_FF01_VAL_VALUE,
132 TEST_IDX_FF02_VAL_CHAR,
133 TEST_IDX_FF02_VAL_VALUE,
134 TEST_IDX_FF02_VAL_IND_CFG,
135 TEST_IDX_FF03_VAL_CHAR,
136 TEST_IDX_FF03_VAL_VALUE,
137 TEST_IDX_FF03_VAL_NTF_CFG,
138 TEST_IDX_NB,
139 };
140
141
142 BleGattAttr attrList[TEST_IDX_NB]={
143
144 // Service Declaration
145 [TEST_IDX_SVC] = {OHOS_BLE_ATTRIB_TYPE_SERVICE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_PRIMARY_SERVICE,0,0,0,{0}},
146
147 // Level Characteristic Declaration
148 [TEST_IDX_FF01_VAL_CHAR] = {OHOS_BLE_ATTRIB_TYPE_CHAR, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_CHARACTERISTIC, 0,0,0,{0}},
149 // Level Characteristic Value
150 [TEST_IDX_FF01_VAL_VALUE] = {OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, WRITE_REQ_CHARACTERISTIC, 0,0,OHOS_GATT_CHARACTER_PROPERTY_BIT_READ|OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE,{0}},
151
152 // Level Characteristic Declaration
153 [TEST_IDX_FF02_VAL_CHAR] = {OHOS_BLE_ATTRIB_TYPE_CHAR, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_CHARACTERISTIC, 0,0,0,{0}},
154 // Level Characteristic Value
155 [TEST_IDX_FF02_VAL_VALUE] = {OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, INDICATE_CHARACTERISTIC, 0,0,OHOS_GATT_CHARACTER_PROPERTY_BIT_INDICATE,{0}},
156 // Level Characteristic - Client Characteristic Configuration Descriptor
157 [TEST_IDX_FF02_VAL_IND_CFG] = {OHOS_BLE_ATTRIB_TYPE_CHAR_CLIENT_CONFIG, OHOS_GATT_PERMISSION_READ|OHOS_GATT_PERMISSION_WRITE, OHOS_UUID_TYPE_128_BIT, BK_ATT_DESC_CLIENT_CHAR_CFG, 0,0,0,{0}},
158
159 // Level Characteristic Declaration
160 [TEST_IDX_FF03_VAL_CHAR] = {OHOS_BLE_ATTRIB_TYPE_CHAR, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, BK_ATT_DECL_CHARACTERISTIC, 0,0,0,{0}},
161 // Level Characteristic Value
162 [TEST_IDX_FF03_VAL_VALUE] = {OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE, OHOS_GATT_PERMISSION_READ, OHOS_UUID_TYPE_128_BIT, NOTIFY_CHARACTERISTIC, 0,0,OHOS_GATT_CHARACTER_PROPERTY_BIT_NOTIFY,{0}},
163 // Level Characteristic - Client Characteristic Configuration Descriptor
164 [TEST_IDX_FF03_VAL_NTF_CFG] = {OHOS_BLE_ATTRIB_TYPE_CHAR_CLIENT_CONFIG, OHOS_GATT_PERMISSION_READ|OHOS_GATT_PERMISSION_WRITE, OHOS_UUID_TYPE_128_BIT, BK_ATT_DESC_CLIENT_CHAR_CFG, 0,0,0,{0}},
165
166 };
167 #endif
ohos_advEnable_callback(int advId,int status)168 void ohos_advEnable_callback(int advId, int status)
169 {
170 bk_printf("fun:%s,advId:%d,status:%d\r\n",__FUNCTION__,advId,status);
171 }
172
ohos_advDisable_callback(int advId,int status)173 void ohos_advDisable_callback(int advId, int status)
174 {
175 bk_printf("fun:%s,advId:%d,status:%d\r\n",__FUNCTION__,advId,status);
176 }
177
ohos_advData_callback(int advId,int status)178 void ohos_advData_callback(int advId, int status)
179 {
180 bk_printf("fun:%s,advId:%d,status:%d\r\n",__FUNCTION__,advId,status);
181 }
182
ohos_advUpdate_callback(int advId,int status)183 void ohos_advUpdate_callback(int advId, int status)
184 {
185 bk_printf("fun:%s,advId:%d,status:%d\r\n",__FUNCTION__,advId,status);
186 }
187
ohos_securityRespond_callback(const BdAddr * bdAddr)188 void ohos_securityRespond_callback(const BdAddr *bdAddr)
189 {
190 bk_printf("fun:%s,line:%d\r\n",__FUNCTION__,__LINE__);
191 }
192
ohos_scanResult_callback(BtScanResultData * scanResultdata)193 void ohos_scanResult_callback(BtScanResultData *scanResultdata)
194 {
195 bk_printf("fun:%s,line:%d\r\n",__FUNCTION__,__LINE__);
196 }
197
ohos_scanParamSet_callback(int clientId,int status)198 void ohos_scanParamSet_callback(int clientId, int status)
199 {
200 bk_printf("fun:%s,line:%d,status:%d\r\n",__FUNCTION__,__LINE__,status);
201 }
202
ohos_registerServerCb_callback(int status,int serverId,BtUuid * appUuid)203 void ohos_registerServerCb_callback(int status, int serverId, BtUuid *appUuid)
204 {
205 bk_printf("fun:%s,serverId:%d,status:%d\r\n",__FUNCTION__,serverId,status);
206 }
207
ohos_connectServerCb_callback(int connId,int serverId,const BdAddr * bdAddr)208 void ohos_connectServerCb_callback(int connId, int serverId, const BdAddr *bdAddr)
209 {
210 bk_printf("fun:%s,serverId:%d,connId:%d\r\n",__FUNCTION__,serverId,connId);
211 }
212
ohos_disconnectServerCb_callback(int connId,int serverId,const BdAddr * bdAddr)213 void ohos_disconnectServerCb_callback(int connId, int serverId, const BdAddr *bdAddr)
214 {
215 bk_printf("fun:%s,serverId:%d,connId:%d\r\n",__FUNCTION__,serverId,connId);
216 }
217
ohos_ServiceAdd_callback(int status,int serverId,BtUuid * appUuid,int srvcHandle)218 void ohos_ServiceAdd_callback(int status, int serverId, BtUuid *appUuid,int srvcHandle)
219 {
220 bk_printf("fun:%s,serverId:%d,status:%d\r\n",__FUNCTION__,serverId,status);
221 }
222
ohos_characteristicAddCb_callback(int status,int serverId,BtUuid * uuid,int srvcHandle,int characteristicHandle)223 void ohos_characteristicAddCb_callback(int status, int serverId, BtUuid *uuid,int srvcHandle, int characteristicHandle)
224 {
225 bk_printf("fun:%s,serverId:%d,status:%d\r\n",__FUNCTION__,serverId,status);
226 }
227
ohos_descriptorAddCb_callback(int status,int serverId,BtUuid * uuid,int srvcHandle,int descriptorHandle)228 void ohos_descriptorAddCb_callback(int status, int serverId, BtUuid *uuid,int srvcHandle, int descriptorHandle)
229 {
230 bk_printf("fun:%s,serverId:%d,status:%d\r\n",__FUNCTION__,serverId,status);
231 }
232
ohos_serviceStartCb_callback(int status,int serverId,int srvcHandle)233 void ohos_serviceStartCb_callback(int status, int serverId, int srvcHandle)
234 {
235 bk_printf("fun:%s,serverId:%d,status:%d\r\n",__FUNCTION__,serverId,status);
236 }
237
238
ohos_requestReadCb_callback(BtReqReadCbPara readCbPara)239 void ohos_requestReadCb_callback(BtReqReadCbPara readCbPara)
240 {
241 bk_printf("fun:%s\r\n",__FUNCTION__);
242 }
243
ohos_requestWriteCb_callback(BtReqWriteCbPara writeCbPara)244 void ohos_requestWriteCb_callback(BtReqWriteCbPara writeCbPara)
245 {
246 bk_printf("fun:%s,peer_addr:%02x:%02x:%02x:%02x:%02x:%02x\r\n",__FUNCTION__,writeCbPara.bdAddr->addr[0], writeCbPara.bdAddr->addr[1],writeCbPara.bdAddr->addr[2], writeCbPara.bdAddr->addr[3], writeCbPara.bdAddr->addr[4], writeCbPara.bdAddr->addr[5]);
247 for(int index=0;index<writeCbPara.length;index++)
248 {
249 bk_printf("%02x ",writeCbPara.value[index]);
250 }
251 bk_printf("\r\n");
252 }
253
254
ohos_responseConfirmationCb_callback(int status,int handle)255 void ohos_responseConfirmationCb_callback(int status, int handle)
256 {
257 bk_printf("fun:%s,handle:%d,status:%d\r\n",__FUNCTION__,handle,status);
258 }
259
ohos_indicationSentCb_callback(int connId,int status)260 void ohos_indicationSentCb_callback(int connId, int status)
261 {
262 bk_printf("fun:%s,serverId:%d,connId:%d\r\n",__FUNCTION__,connId,status);
263 }
264
ble_test_main(void)265 void ble_test_main(void)
266 {
267 /******* init ble stack **********/
268
269 InitBtStack();
270 #if 1
271 EnableBtStack();
272
273
274 BtGattCallbacks gatt_func={
275 .advEnableCb=ohos_advEnable_callback,
276 .advDisableCb=ohos_advDisable_callback,
277 .advDataCb=ohos_advData_callback,
278 .advUpdateCb=ohos_advUpdate_callback,
279 .securityRespondCb=ohos_securityRespond_callback,
280 .scanResultCb=ohos_scanResult_callback,
281 .scanParamSetCb=ohos_scanParamSet_callback
282 };
283
284
285 BleGattRegisterCallbacks(&gatt_func);
286
287 #if 1
288
289 BtGattServerCallbacks gatt_server_func={
290 .registerServerCb=ohos_registerServerCb_callback,
291 .connectServerCb=ohos_connectServerCb_callback,
292 .disconnectServerCb=ohos_disconnectServerCb_callback,
293 .serviceAddCb=ohos_ServiceAdd_callback,
294 .characteristicAddCb=ohos_characteristicAddCb_callback,
295 .descriptorAddCb=ohos_descriptorAddCb_callback,
296 .serviceStartCb=ohos_serviceStartCb_callback,
297 .requestReadCb=ohos_requestReadCb_callback,
298 .requestWriteCb=ohos_requestWriteCb_callback,
299 .responseConfirmationCb=ohos_responseConfirmationCb_callback,
300 .indicationSentCb=ohos_indicationSentCb_callback
301 };
302 #endif
303
304 BleGattsRegisterCallbacks(&gatt_server_func);
305
306
307 #if 1
308 /******* create db server **********/
309 BtUuid server_uuid;
310 BleGattService srvcInfo;
311 int srv_hdl;
312 server_uuid.uuidLen=16;
313 server_uuid.uuid=os_malloc(server_uuid.uuidLen);
314 printf("server_uuid.uuid:%x\r\n",server_uuid.uuid);
315
316 memcpy(server_uuid.uuid,BK_ATT_SVC_UUID_1,server_uuid.uuidLen);
317 BleGattsRegister(server_uuid);
318
319
320 srvcInfo.attrNum=TEST_IDX_NB1;
321 srvcInfo.attrList=attrList1;
322 srv_hdl = 0;
323
324 BleGattsStartServiceEx(&srv_hdl, &srvcInfo);
325
326
327 server_uuid.uuidLen=16;
328 server_uuid.uuid=os_malloc(server_uuid.uuidLen);
329
330
331 memcpy(server_uuid.uuid,BK_ATT_SVC_UUID_2,server_uuid.uuidLen);
332 BleGattsRegister(server_uuid);
333
334
335 srvcInfo.attrNum=TEST_IDX_NB2;
336 srvcInfo.attrList=attrList2;
337
338 srv_hdl = 1;
339
340 BleGattsStartServiceEx(&srv_hdl, &srvcInfo);
341
342 server_uuid.uuidLen=16;
343 server_uuid.uuid=os_malloc(server_uuid.uuidLen);
344
345 memcpy(server_uuid.uuid,BK_ATT_SVC_UUID_3,server_uuid.uuidLen);
346 BleGattsRegister(server_uuid);
347
348
349 srvcInfo.attrNum=TEST_IDX_NB3;
350 srvcInfo.attrList=attrList3;
351
352 srv_hdl = 2;
353
354 BleGattsStartServiceEx(&srv_hdl, &srvcInfo);
355
356 #elif 1
357 /******* create db server **********/
358 BtUuid server_uuid;
359 server_uuid.uuidLen=2;
360 server_uuid.uuid=os_malloc(server_uuid.uuidLen);
361
362 server_uuid.uuid[0]=0xee;
363 server_uuid.uuid[1]=0xff;
364
365 BleGattsRegister(server_uuid);
366
367
368 BleGattService srvcInfo;
369 srvcInfo.attrNum=9;
370 srvcInfo.attrList=attrList;
371
372 BleGattsStartServiceEx(NULL, &srvcInfo);
373 #else
374 server_uuid.uuid[0]=0xaa;
375 server_uuid.uuid[1]=0xbb;
376 BleGattsAddService(0,server_uuid,0,9);
377
378 server_uuid.uuid[0]=0x11;
379 server_uuid.uuid[1]=0x22;
380 BleGattsAddCharacteristic(0,0,server_uuid,OHOS_GATT_CHARACTER_PROPERTY_BIT_READ|OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE,0);
381
382 server_uuid.uuid[0]=0x33;
383 server_uuid.uuid[1]=0x44;
384 BleGattsAddCharacteristic(0,0,server_uuid,OHOS_GATT_CHARACTER_PROPERTY_BIT_INDICATE,0);
385
386 server_uuid.uuid[0]=0x02;
387 server_uuid.uuid[1]=0x29;
388 BleGattsAddDescriptor(0,0,server_uuid,OHOS_GATT_PERMISSION_READ|OHOS_GATT_PERMISSION_WRITE);
389
390
391 server_uuid.uuid[0]=0x55;
392 server_uuid.uuid[1]=0x66;
393 BleGattsAddCharacteristic(0,0,server_uuid,OHOS_GATT_CHARACTER_PROPERTY_BIT_NOTIFY,0);
394
395
396 server_uuid.uuid[0]=0x02;
397 server_uuid.uuid[1]=0x29;
398 BleGattsAddDescriptor(0,0,server_uuid,OHOS_GATT_PERMISSION_READ|OHOS_GATT_PERMISSION_WRITE);
399
400 BleGattsStartService(0,0);
401 #endif
402
403
404 #if BLE_ADV_ENABLE
405
406 #if 0
407 /*****set adv data */
408 BleConfigAdvData adv;
409 adv.advLength=sizeof(ohos_adv_data);
410 adv.scanRspLength=sizeof(ohos_adv_rsp_data);
411 adv.advData= malloc(adv.advLength);
412 memcpy(adv.advData,ohos_adv_data,adv.advLength);
413 adv.scanRspData= malloc(adv.scanRspLength);
414 memcpy(adv.scanRspData,ohos_adv_rsp_data,adv.scanRspLength);
415
416 BleSetAdvData(0,&adv);
417
418 /******* start ble adv **********/
419 BleAdvParams adv_para;
420 adv_para.minInterval=160;
421 adv_para.maxInterval=160;
422 adv_para.channelMap=7;
423 adv_para.duration = 0;
424
425 BleStartAdv(0,&adv_para);
426
427 #else
428 int advId=0;
429
430 StartAdvRawData rawData;
431 rawData.advDataLen=sizeof(ohos_adv_data);
432 rawData.rspDataLen=sizeof(ohos_adv_rsp_data);
433 rawData.advData= os_malloc(rawData.advDataLen);
434 memcpy(rawData.advData,ohos_adv_data,rawData.advDataLen);
435 rawData.rspData= os_malloc(rawData.rspDataLen);
436 memcpy(rawData.rspData,ohos_adv_rsp_data,rawData.rspDataLen);
437
438
439 BleAdvParams advParam;
440 advParam.minInterval=160;
441 advParam.maxInterval=160;
442 advParam.channelMap=7;
443 advParam.duration = 0;
444
445 BleStartAdvEx(&advId, rawData, advParam);
446 #endif
447
448 #endif
449
450
451 #if BLE_SCAN_ENABLE
452 BleScanParams scan_param={.scanInterval=100,.scanWindow=50};
453 BleSetScanParameters(0, &scan_param);
454
455 BleStartScan();
456
457 rtos_delay_milliseconds(5000);
458 BleStopScan();
459 #endif
460
461
462 rtos_delay_milliseconds(20000);
463
464 GattsSendIndParam send_param;
465 send_param.confirm=1;
466 send_param.valueLen=sizeof(ntf_ind_data);
467 send_param.value=(char *)ntf_ind_data;
468 send_param.attrHandle=TEST_IDX_E400_VAL_VALUE;
469
470 BleGattsSendIndication(0, &send_param);
471
472 rtos_delay_milliseconds(2000);
473
474 send_param.confirm=0;
475 send_param.valueLen=sizeof(ntf_ind_data);
476 send_param.value=(char *)ntf_ind_data;
477 send_param.attrHandle=TEST_IDX_E400_VAL_VALUE;
478
479 BleGattsSendIndication(0, &send_param);
480 #endif
481
482 }
483