• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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