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