1 /*
2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited
3 */
4
5 #include <ble_os.h>
6 #include "mesh_hal_ble.h"
7 #include <bt_errno.h>
8 #include <aos/kernel.h>
9 #ifndef CONFIG_MESH_STACK_ALONE
10 #include <bluetooth/conn.h>
11 #include <bluetooth/gatt.h>
12 #include <bluetooth/bluetooth.h>
13
14 #include "provisioner_prov.h"
15
bt_mesh_adv_start(const struct bt_le_adv_param * param,const struct bt_data * ad,size_t ad_len,const struct bt_data * sd,size_t sd_len)16 int bt_mesh_adv_start(const struct bt_le_adv_param *param,
17 const struct bt_data *ad, size_t ad_len,
18 const struct bt_data *sd, size_t sd_len)
19 {
20 return bt_le_adv_start((const struct bt_le_adv_param *)param,
21 (const struct bt_data *)ad, ad_len,
22 (const struct bt_data *)sd, sd_len);
23 }
24
bt_mesh_adv_stop(void)25 int bt_mesh_adv_stop(void)
26 {
27 return bt_le_adv_stop();
28 }
29
bt_mesh_scan_start(const struct bt_le_scan_param * param,bt_le_scan_cb_t cb)30 int bt_mesh_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb)
31 {
32 return bt_le_scan_start((const struct bt_le_scan_param *)param, cb);
33 }
34
bt_mesh_scan_stop(void)35 int bt_mesh_scan_stop(void)
36 {
37 return bt_le_scan_stop();
38 }
39
40 struct bt_conn_cb conn_callbacks;
41
bt_mesh_conn_cb_register(struct bt_conn_cb * cb)42 void bt_mesh_conn_cb_register(struct bt_conn_cb *cb)
43 {
44 conn_callbacks.connected = cb->connected;
45 conn_callbacks.disconnected = cb->disconnected;
46 bt_conn_cb_register(&conn_callbacks);
47 }
48
bt_mesh_conn_ref(struct bt_conn * conn)49 struct bt_conn * bt_mesh_conn_ref(struct bt_conn * conn)
50 {
51 return bt_conn_ref((struct bt_conn *)conn);
52 }
53
bt_mesh_conn_unref(struct bt_conn * conn)54 void bt_mesh_conn_unref(struct bt_conn * conn)
55 {
56 bt_conn_unref((struct bt_conn *)conn);
57 }
58
bt_mesh_conn_disconnect(struct bt_conn * conn,uint8_t reason)59 int bt_mesh_conn_disconnect(struct bt_conn * conn, uint8_t reason)
60 {
61 return bt_conn_disconnect((struct bt_conn *)conn, reason);
62 }
63
64 #define SVC_ENTRY_MAX 16
65
66 struct svc_paire_node {
67 struct bt_gatt_service *msvc;
68 struct bt_gatt_service svc;
69 } _svc_paire[SVC_ENTRY_MAX] = {{0}};
70
71 /* TODO: manage the services in linked list. */
bt_mesh_gatt_service_register(struct bt_gatt_service * svc)72 int bt_mesh_gatt_service_register(struct bt_gatt_service *svc)
73 {
74 struct svc_paire_node *node = &_svc_paire[0];
75 int i = 0;
76
77 while (i < SVC_ENTRY_MAX) {
78 if (node->msvc != NULL) {
79 node++;
80 i++;
81 } else {
82 break;
83 }
84 }
85
86 if (i >= SVC_ENTRY_MAX) {
87 printf("Error: no space left for service register.");
88 return -1;
89 }
90
91 node->msvc = svc;
92 node->svc.attrs = (struct bt_gatt_attr *)svc->attrs;
93 node->svc.attr_count = svc->attr_count;
94
95 return bt_gatt_service_register(&(node->svc));
96 }
97
bt_mesh_gatt_service_unregister(struct bt_gatt_service * svc)98 int bt_mesh_gatt_service_unregister(struct bt_gatt_service *svc)
99 {
100 struct svc_paire_node *node = &_svc_paire[0];
101 int ret, i = 0;
102
103 while (i < SVC_ENTRY_MAX) {
104 if (node->msvc != svc) {
105 node++;
106 i++;
107 } else {
108 break;
109 }
110 }
111
112 if (i >= SVC_ENTRY_MAX) {
113 return 0;
114 }
115
116 ret = bt_gatt_service_unregister(&(node->svc));
117
118 return ret;
119 }
120
bt_mesh_gatt_notify(struct bt_conn * conn,const struct bt_gatt_attr * attr,const void * data,uint16_t len)121 int bt_mesh_gatt_notify(struct bt_conn * conn, const struct bt_gatt_attr *attr,
122 const void *data, uint16_t len)
123 {
124 return bt_gatt_notify((struct bt_conn *)conn, (const struct bt_gatt_attr *)attr, data, len);
125 }
126
bt_mesh_gatt_attr_read(struct bt_conn * conn,const struct bt_gatt_attr * attr,void * buf,uint16_t buf_len,uint16_t offset,const void * value,uint16_t value_len)127 int bt_mesh_gatt_attr_read(struct bt_conn * conn, const struct bt_gatt_attr *attr,
128 void *buf, uint16_t buf_len, uint16_t offset,
129 const void *value, uint16_t value_len)
130 {
131 return bt_gatt_attr_read((struct bt_conn *)conn, (const struct bt_gatt_attr *)attr, buf, buf_len, offset, value, value_len);
132 }
133
bt_mesh_gatt_get_mtu(struct bt_conn * conn)134 uint16_t bt_mesh_gatt_get_mtu(struct bt_conn * conn)
135 {
136 return bt_gatt_get_mtu((struct bt_conn *)conn);
137 }
138
bt_mesh_gatt_attr_read_service(struct bt_conn * conn,const struct bt_gatt_attr * attr,void * buf,uint16_t len,uint16_t offset)139 int bt_mesh_gatt_attr_read_service(struct bt_conn * conn,
140 const struct bt_gatt_attr *attr,
141 void *buf, uint16_t len, uint16_t offset)
142 {
143 return bt_gatt_attr_read_service((struct bt_conn *)conn, (const struct bt_gatt_attr *)attr, buf, len, offset);
144 }
145
bt_mesh_gatt_attr_read_chrc(struct bt_conn * conn,const struct bt_gatt_attr * attr,void * buf,uint16_t len,uint16_t offset)146 int bt_mesh_gatt_attr_read_chrc(struct bt_conn * conn,
147 const struct bt_gatt_attr *attr, void *buf,
148 uint16_t len, uint16_t offset)
149 {
150 return bt_gatt_attr_read_chrc((struct bt_conn *)conn, (const struct bt_gatt_attr *)attr, buf, len, offset);
151 }
152
153 #ifdef CONFIG_BT_MESH_PROVISIONER
154
155 typedef void (*gatt_open_complete_cb)(struct bt_conn *conn);
156
157 #define BT_MESH_GATTC_APP_UUID_BYTE 0x97
158 struct gattc_prov_info {
159 /* Service to be found depends on the type of adv pkt received */
160 u16_t srvc_uuid;
161 u8_t addr[6];
162 u8_t addr_type;
163 struct bt_conn *conn;
164 u16_t mtu;
165 bool wr_desc_done; /* Indicate if write char descriptor event is received */
166 u16_t start_handle; /* Service attribute start handle */
167 u16_t end_handle; /* Service attribute end handle */
168 u16_t data_in_handle; /* Data In Characteristic attribute handle */
169 u16_t data_out_handle; /* Data Out Characteristic attribute handle */
170 u16_t ccc_handle; /* Data Out Characteristic CCC attribute handle */
171 } gattc_info[CONFIG_BT_MESH_PBG_SAME_TIME];
172
173 static struct bt_conn *gatt_conn;
174 static struct bt_gatt_exchange_params mtu_param;
175 static struct bt_gatt_discover_params discov_param;
176 static struct bt_gatt_subscribe_params subscribe_param;
177 static gatt_open_complete_cb bt_mesh_gatt_open_complete;
178 static gatt_recv_cb bt_mesh_gatt_recv;
179
180 static struct bt_uuid_16 prov_primary_uuid = BT_UUID_INIT_16(0x1827);
181 static struct bt_uuid_16 prov_character_data_in_uuid = BT_UUID_INIT_16(0x2adb);
182 static struct bt_uuid_16 prov_descriptor_data_in_uuid = BT_UUID_INIT_16(0x2adb);
183 static struct bt_uuid_16 prov_character_data_out_uuid = BT_UUID_INIT_16(0x2adc);
184 //static struct bt_uuid_16 prov_descriptor_data_out_uuid = BT_UUID_INIT_16(0x2adc);
185 static struct bt_uuid_16 prov_descriptor_ccc_uuid = BT_UUID_INIT_16(0x2902);
186
187 static struct bt_uuid_16 proxy_primary_uuid = BT_UUID_INIT_16(0x1828);
188 static struct bt_uuid_16 proxy_character_data_in_uuid = BT_UUID_INIT_16(0x2add);
189 static struct bt_uuid_16 proxy_descriptor_data_in_uuid = BT_UUID_INIT_16(0x2add);
190 static struct bt_uuid_16 proxy_character_data_out_uuid = BT_UUID_INIT_16(0x2ade);
191 //static struct bt_uuid_16 proxy_descriptor_data_out_uuid = BT_UUID_INIT_16(0x2ade);
192 static struct bt_uuid_16 proxy_descriptor_ccc_uuid = BT_UUID_INIT_16(0x2902);
193
194
bt_prov_get_gattc_id(u8_t * addr)195 int bt_prov_get_gattc_id(u8_t *addr)
196 {
197 int i;
198
199 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
200 if (!memcmp(addr, gattc_info[i].addr, 6)) {
201 return i;
202 }
203 }
204
205 return -1;
206 }
207
bt_prov_check_gattc_id(int id,const bt_addr_le_t * addr)208 bool bt_prov_check_gattc_id(int id, const bt_addr_le_t *addr)
209 {
210 u8_t zero[6] = {0};
211
212 if (!addr || !memcmp(addr->a.val, zero, 6) || (addr->type > BT_ADDR_LE_RANDOM)) {
213 //BT_ERR("%s: invalid parameters", __func__);
214 return false;
215 }
216
217 memcpy(gattc_info[id].addr, addr->a.val, 6);
218 gattc_info[id].addr_type = addr->type;
219
220 return true;
221 }
222
set_my_addr(u8_t index,const u8_t * addr,u8_t type)223 void set_my_addr(u8_t index, const u8_t *addr, u8_t type)
224 {
225 gattc_info[index].addr_type = type;
226 memcpy(gattc_info[index].addr, addr, 6);
227 }
228
bt_gattc_conn_create(int id,u16_t srvc_uuid)229 int bt_gattc_conn_create(int id, u16_t srvc_uuid)
230 {
231 int err;
232 bt_addr_le_t peer;
233 struct bt_le_conn_param conn_param;
234 struct bt_conn *conn;
235
236 /** Min_interval: 250ms
237 * Max_interval: 250ms
238 * Slave_latency: 0x0
239 * Supervision_timeout: 32sec
240 */
241 conn_param.interval_min = 0xC8;
242 conn_param.interval_max = 0xC8;
243 conn_param.latency = 0x00;
244 conn_param.timeout = 0xC80;
245
246 peer.type = gattc_info[id].addr_type;
247
248 memcpy(peer.a.val, gattc_info[id].addr, 6);
249
250 //BT_DBG("type:%u addr: %02x, %02x\r\n", peer.type, peer.a.val[0], peer.a.val[1]);
251 extern int bt_mesh_scan_disable(void);
252 err = bt_mesh_scan_disable();
253 if (err && err != -EALREADY)
254 {
255 return err;
256 }
257 //add relay to ensure the scan has been disabled
258 aos_msleep(10);
259 conn = bt_conn_create_le(&peer, &conn_param);
260
261 if (conn == NULL) {
262 return -EIO;
263 }
264 else
265 {
266 bt_conn_unref(conn);
267 }
268
269 gattc_info[id].conn = conn;
270
271 /* Increment pbg_count */
272 provisioner_pbg_count_inc();
273
274 /* Service to be found after exhanging mtu size */
275 gattc_info[id].srvc_uuid = srvc_uuid;
276
277 gatt_conn = conn;
278
279 return 0;
280 }
281
bt_mesh_get_curr_conn(void)282 struct bt_conn * bt_mesh_get_curr_conn(void)
283 {
284 return gatt_conn;
285 }
286
bt_mesh_get_srvc_uuid(struct bt_conn * conn)287 u16_t bt_mesh_get_srvc_uuid(struct bt_conn *conn)
288 {
289 int i;
290
291 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
292 if (conn == gattc_info[i].conn) {
293 break;
294 }
295 }
296
297 if (i == CONFIG_BT_MESH_PBG_SAME_TIME) {
298 return 0;
299 }
300
301 return gattc_info[i].srvc_uuid;
302 }
303
bt_gatt_prov_set_mtu(struct bt_conn * conn,u16_t mtu)304 void bt_gatt_prov_set_mtu(struct bt_conn *conn, u16_t mtu)
305 {
306 int i;
307
308 if (mtu > 40) {
309 mtu = 40;
310 }
311
312 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
313 if (conn == gattc_info[i].conn) {
314 gattc_info[i].mtu = mtu;
315 }
316 }
317 }
318
bt_gatt_prov_get_mtu(struct bt_conn * conn)319 u16_t bt_gatt_prov_get_mtu(struct bt_conn *conn)
320 {
321 int i;
322
323 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
324 if (conn == gattc_info[i].conn) {
325 return gattc_info[i].mtu;
326 }
327 }
328
329 return 0;
330 }
331
bt_gatt_set_data_in_handle(struct bt_conn * conn,u16_t handle)332 void bt_gatt_set_data_in_handle(struct bt_conn *conn, u16_t handle)
333 {
334 int i;
335
336 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
337 if (conn == gattc_info[i].conn) {
338 gattc_info[i].data_in_handle = handle;
339
340 break;
341 }
342 }
343 }
344
bt_gatt_get_data_in_handle(struct bt_conn * conn)345 u16_t bt_gatt_get_data_in_handle(struct bt_conn *conn)
346 {
347 int i;
348
349 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
350 if (conn == gattc_info[i].conn) {
351 return gattc_info[i].data_in_handle;
352 }
353 }
354
355 return 0;
356 }
357
bt_gatt_set_data_out_handle(struct bt_conn * conn,u16_t handle)358 void bt_gatt_set_data_out_handle(struct bt_conn *conn, u16_t handle)
359 {
360 int i;
361
362 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
363 if (conn == gattc_info[i].conn) {
364 gattc_info[i].data_out_handle = handle;
365
366 break;
367 }
368 }
369 }
370
bt_gatt_get_data_out_handle(struct bt_conn * conn)371 u16_t bt_gatt_get_data_out_handle(struct bt_conn *conn)
372 {
373 int i;
374
375 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
376 if (conn == gattc_info[i].conn) {
377 return gattc_info[i].data_out_handle;
378 }
379 }
380
381 return 0;
382 }
383
bt_gatt_set_ccc_handle(struct bt_conn * conn,u16_t handle)384 void bt_gatt_set_ccc_handle(struct bt_conn *conn, u16_t handle)
385 {
386 int i;
387
388 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
389 if (conn == gattc_info[i].conn) {
390 gattc_info[i].ccc_handle = handle;
391 }
392 }
393 }
394
bt_gatt_get_ccc_handle(struct bt_conn * conn)395 u16_t bt_gatt_get_ccc_handle(struct bt_conn *conn)
396 {
397 int i;
398
399 for (i = 0; i < CONFIG_BT_MESH_PBG_SAME_TIME; i++) {
400 if (conn == gattc_info[i].conn) {
401 return gattc_info[i].ccc_handle;
402 }
403 }
404
405 return 0;
406 }
407
proxy_prov_notify_func(struct bt_conn * conn,struct bt_gatt_subscribe_params * param,const void * buf,u16_t len)408 static u8_t proxy_prov_notify_func(struct bt_conn *conn,
409 struct bt_gatt_subscribe_params *param,
410 const void *buf, u16_t len)
411 {
412 if (bt_mesh_gatt_recv) {
413 bt_mesh_gatt_recv(conn, NULL, buf, len, 0, 0);
414 }
415
416 return BT_GATT_ITER_CONTINUE;
417 }
418
proxy_prov_discover_func(struct bt_conn * conn,const struct bt_gatt_attr * attr,struct bt_gatt_discover_params * params)419 static u8_t proxy_prov_discover_func(struct bt_conn *conn,
420 const struct bt_gatt_attr *attr,
421 struct bt_gatt_discover_params *params)
422 {
423 if (params->uuid == &prov_primary_uuid.uuid) {
424 discov_param.uuid = &prov_character_data_in_uuid.uuid;
425 discov_param.start_handle = attr->handle + 1;
426 discov_param.type = BT_GATT_DISCOVER_CHARACTERISTIC;
427
428 bt_gatt_discover(conn, &discov_param);
429 } else if (params->uuid == &prov_character_data_in_uuid.uuid) {
430 discov_param.uuid = &prov_descriptor_data_in_uuid.uuid;
431 discov_param.start_handle = attr->handle + 1;
432 discov_param.type = BT_GATT_DISCOVER_DESCRIPTOR;
433
434 bt_gatt_discover(conn, &discov_param);
435 } else if (params->uuid == &prov_descriptor_data_in_uuid.uuid) {
436 discov_param.uuid = &prov_character_data_out_uuid.uuid;
437 discov_param.start_handle = attr->handle + 1;
438 discov_param.type = BT_GATT_DISCOVER_CHARACTERISTIC;
439
440 bt_gatt_set_data_in_handle(conn, attr->handle);
441
442 bt_gatt_discover(conn, &discov_param);
443 } else if (params->uuid == &prov_character_data_out_uuid.uuid) {
444 discov_param.uuid = &prov_descriptor_ccc_uuid.uuid;
445 discov_param.start_handle = attr->handle + 2;
446 discov_param.type = BT_GATT_DISCOVER_DESCRIPTOR;
447 subscribe_param.value_handle = attr->handle + 1;
448
449 bt_gatt_discover(conn, &discov_param);
450 } else if (params->uuid == &prov_descriptor_ccc_uuid.uuid) {
451 bt_gatt_set_ccc_handle(conn, attr->handle);
452
453 int err;
454
455 subscribe_param.notify = proxy_prov_notify_func;
456 subscribe_param.value = BT_GATT_CCC_NOTIFY;
457 subscribe_param.ccc_handle = attr->handle;
458
459 bt_gatt_set_ccc_handle(conn, attr->handle);
460
461 err = bt_gatt_subscribe(conn, &subscribe_param);
462 if (err) {
463 printf("Subscribe failed (err %d)\r\n", err);
464
465 return 0;
466 }
467
468 u16_t open_data = 0x0001;
469
470 bt_gatt_write_without_response(conn, bt_gatt_get_ccc_handle(conn), &open_data, 2, false);
471
472 if (bt_mesh_gatt_open_complete) {
473 bt_mesh_gatt_open_complete(conn);
474 }
475 }
476
477 return 0;
478 }
479
proxy_discover_func(struct bt_conn * conn,const struct bt_gatt_attr * attr,struct bt_gatt_discover_params * params)480 static u8_t proxy_discover_func(struct bt_conn *conn,
481 const struct bt_gatt_attr *attr,
482 struct bt_gatt_discover_params *params)
483 {
484 if (params->uuid == &proxy_primary_uuid.uuid) {
485 discov_param.uuid = &proxy_character_data_in_uuid.uuid;
486 discov_param.start_handle = attr->handle + 1;
487 discov_param.type = BT_GATT_DISCOVER_CHARACTERISTIC;
488
489 bt_gatt_discover(conn, &discov_param);
490 } else if (params->uuid == &proxy_character_data_in_uuid.uuid) {
491 discov_param.uuid = &proxy_descriptor_data_in_uuid.uuid;
492 discov_param.start_handle = attr->handle + 1;
493 discov_param.type = BT_GATT_DISCOVER_DESCRIPTOR;
494
495 bt_gatt_discover(conn, &discov_param);
496 } else if (params->uuid == &proxy_descriptor_data_in_uuid.uuid) {
497 discov_param.uuid = &proxy_character_data_out_uuid.uuid;
498 discov_param.start_handle = attr->handle + 1;
499 discov_param.type = BT_GATT_DISCOVER_CHARACTERISTIC;
500
501 bt_gatt_set_data_in_handle(conn, attr->handle);
502
503 bt_gatt_discover(conn, &discov_param);
504 } else if (params->uuid == &proxy_character_data_out_uuid.uuid) {
505 discov_param.uuid = &proxy_descriptor_ccc_uuid.uuid;
506 discov_param.start_handle = attr->handle + 2;
507 discov_param.type = BT_GATT_DISCOVER_DESCRIPTOR;
508 subscribe_param.value_handle = attr->handle + 1;
509
510 bt_gatt_discover(conn, &discov_param);
511 } else if (params->uuid == &proxy_descriptor_ccc_uuid.uuid) {
512 bt_gatt_set_ccc_handle(conn, attr->handle);
513
514 int err;
515
516 subscribe_param.notify = proxy_prov_notify_func;
517 subscribe_param.value = BT_GATT_CCC_NOTIFY;
518 subscribe_param.ccc_handle = attr->handle;
519
520 bt_gatt_set_ccc_handle(conn, attr->handle);
521
522 err = bt_gatt_subscribe(conn, &subscribe_param);
523 if (err) {
524 printf("Subscribe failed (err %d)\r\n", err);
525
526 return 0;
527 }
528
529 if (bt_mesh_gatt_open_complete) {
530 bt_mesh_gatt_open_complete(conn);
531 }
532 }
533
534 return 0;
535 }
536
proxy_prov_get_mtu_response(struct bt_conn * conn,u8_t err,struct bt_gatt_exchange_params * params)537 static void proxy_prov_get_mtu_response(struct bt_conn *conn, u8_t err,
538 struct bt_gatt_exchange_params *params)
539 {
540 u16_t mtu;
541 //u8_t i;
542
543 if (err) {
544 //printf("%s mtu response failed (err %u)\n", __func__, err);
545 } else {
546 mtu = bt_gatt_get_mtu(conn);
547
548 bt_gatt_prov_set_mtu(conn, mtu);
549
550 if (bt_mesh_get_srvc_uuid(conn) == BT_UUID_MESH_PROXY_VAL) {
551 discov_param.uuid = &proxy_primary_uuid.uuid;
552 discov_param.func = proxy_discover_func;
553 } else if (bt_mesh_get_srvc_uuid(conn) == BT_UUID_MESH_PROV_VAL) {
554 discov_param.uuid = &prov_primary_uuid.uuid;
555 discov_param.func = proxy_prov_discover_func;
556 }
557
558 discov_param.start_handle = 0x0001;
559 discov_param.end_handle = 0xffff;
560 discov_param.type = BT_GATT_DISCOVER_PRIMARY;
561
562 bt_gatt_discover(conn, &discov_param);
563 }
564 }
565
bt_mesh_gatt_conn_open(struct bt_conn * conn,void (* open_complete)(struct bt_conn * conn))566 void bt_mesh_gatt_conn_open(struct bt_conn *conn, void (*open_complete)(struct bt_conn *conn))
567 {
568 mtu_param.func = proxy_prov_get_mtu_response;
569
570 bt_mesh_gatt_open_complete = open_complete;
571
572 bt_gatt_exchange_mtu(conn, &mtu_param);
573
574 return;
575 }
576
bt_mesh_gatt_recv_callback(gatt_recv_cb recv_callback)577 void bt_mesh_gatt_recv_callback(gatt_recv_cb recv_callback)
578 {
579 bt_mesh_gatt_recv = recv_callback;
580
581 return;
582 }
583
584 #endif
585
586 #else
bt_mesh_conn_cb_register(struct bt_mesh_conn_cb * cb)587 void bt_mesh_conn_cb_register(struct bt_mesh_conn_cb *cb)
588 {
589 return;
590 }
591
bt_mesh_conn_ref(struct bt_conn * conn)592 struct bt_conn * bt_mesh_conn_ref(struct bt_conn * conn)
593 {
594 return conn;
595 }
596
bt_mesh_conn_unref(struct bt_conn * conn)597 void bt_mesh_conn_unref(struct bt_conn * conn)
598 {
599 return;
600 }
601
bt_mesh_conn_disconnect(struct bt_conn * conn,uint8_t reason)602 int bt_mesh_conn_disconnect(struct bt_conn * conn, uint8_t reason)
603 {
604 return 0;
605 }
606
bt_gatt_service_register(struct bt_gatt_service * svc)607 int bt_gatt_service_register(struct bt_gatt_service *svc)
608 {
609 return 0;
610 }
611
bt_gatt_service_unregister(struct bt_gatt_service * svc)612 int bt_gatt_service_unregister(struct bt_gatt_service *svc)
613 {
614 return 0;
615 }
616
bt_mesh_gatt_notify(struct bt_conn * conn,const struct bt_gatt_attr * attr,const void * data,uint16_t len)617 int bt_mesh_gatt_notify(struct bt_conn * conn, const struct bt_gatt_attr *attr,
618 const void *data, uint16_t len)
619 {
620 return 0;
621 }
622
bt_mesh_gatt_attr_read(struct bt_conn * conn,const struct bt_gatt_attr * attr,void * buf,uint16_t buf_len,uint16_t offset,const void * value,uint16_t value_len)623 int bt_mesh_gatt_attr_read(struct bt_conn * conn, const struct bt_gatt_attr *attr,
624 void *buf, uint16_t buf_len, uint16_t offset,
625 const void *value, uint16_t value_len)
626 {
627 return 0;
628 }
629
bt_mesh_gatt_get_mtu(struct bt_conn * conn)630 uint16_t bt_mesh_gatt_get_mtu(struct bt_conn * conn)
631 {
632 return 0;
633 }
634
bt_mesh_gatt_attr_read_service(struct bt_conn * conn,const struct bt_gatt_attr * attr,void * buf,uint16_t len,uint16_t offset)635 int bt_mesh_gatt_attr_read_service(struct bt_conn * conn,
636 const struct bt_gatt_attr *attr,
637 void *buf, uint16_t len, uint16_t offset)
638 {
639 return 0;
640 }
641
bt_mesh_gatt_attr_read_chrc(struct bt_conn * conn,const struct bt_gatt_attr * attr,void * buf,uint16_t len,uint16_t offset)642 int bt_mesh_gatt_attr_read_chrc(struct bt_conn * conn,
643 const struct bt_gatt_attr *attr, void *buf,
644 uint16_t len, uint16_t offset)
645 {
646 return 0;
647 }
648
bt_mesh_adv_start(const struct bt_le_adv_param * param,const struct bt_data * ad,size_t ad_len,const struct bt_data * sd,size_t sd_len)649 int bt_mesh_adv_start(const struct bt_le_adv_param *param,
650 const struct bt_data *ad, size_t ad_len,
651 const struct bt_data *sd, size_t sd_len)
652 {
653 return 0;
654 }
655
bt_mesh_adv_stop(void)656 int bt_mesh_adv_stop(void)
657 {
658 return 0;
659 }
660
bt_mesh_scan_start(const struct bt_le_scan_param * param,bt_mesh_le_scan_cb_t cb)661 int bt_mesh_scan_start(const struct bt_le_scan_param *param, bt_mesh_le_scan_cb_t cb)
662 {
663 return 0;
664 }
665
bt_mesh_scan_stop(void)666 int bt_mesh_scan_stop(void)
667 {
668 return 0;
669 }
670 #endif
671