1 /*
2  * Copyright (C) 2019-2020 Alibaba Group Holding Limited
3  */
4 
5 #ifndef __MESH_PROVISIONER_H_
6 #define __MESH_PROVISIONER_H_
7 
8 
9 #define DEVICE_NAME_MAX_LENGTH 28
10 #define CID_NVAL 0xFFFF
11 #define DEF_MAX_PROV_RETRY 3
12 
13 
14 typedef struct {
15     uint8_t  uuid[16];
16     uint8_t  dev_addr[6];
17     uint8_t  addr_type;
18     uint16_t prim_unicast;
19     uint16_t oob_info;
20     uint16_t net_idx;
21     uint8_t  element_num;
22     uint8_t  bearer;
23     uint8_t flags;
24     uint32_t iv_index;
25     uint8_t *node_name;
26 } mesh_node_t;
27 
28 
29 typedef enum {
30     BT_MESH_EVENT_RECV_UNPROV_DEV_ADV,
31     BT_MESH_EVENT_PROV_COMP,
32     BT_MESH_EVENT_FOUND_DEV_TIMEOUT,
33     BT_MESH_EVENT_PROV_FAILD,
34     BT_MESH_EVENT_OOB_INPUT_NUM,
35     BT_MESH_EVENT_OOB_INPUT_STRING,
36     BT_MESH_EVENT_OOB_INPUT_STATIC_OOB,
37 } mesh_provisioner_event_en;
38 
39 
40 
41 typedef void (*provisioner_cb)(mesh_provisioner_event_en event, void *p_arg);
42 
43 typedef struct {
44     uint8_t *uuid;
45     uint8_t uuid_length;
46     uint8_t filter_start;
47 } uuid_filter_t;
48 
49 typedef struct {
50     uint16_t unicast_addr_local;
51     uint16_t unicast_addr_start;
52     uint8_t  attention_time;
53     provisioner_cb cb;
54 } provisioner_config_t;
55 
56 typedef struct {
57     const struct bt_mesh_provisioner *provisioner;
58 } ble_mesh_provisioner_t;
59 
60 int ble_mesh_provisioner_init(provisioner_config_t *param);
61 
62 int ble_mesh_provisioner_enable();
63 
64 int ble_mesh_provisioner_disable();
65 
66 int ble_mesh_provisioner_dev_filter(uint8_t enable, uuid_filter_t *filter);
67 
68 int ble_mesh_provisioner_show_dev(uint8_t enable, uint32_t timeout);
69 
70 int ble_mesh_provisioner_dev_add(mesh_node_t *node, uint8_t add_appkey);
71 
72 int ble_mesh_provisioner_get_add_appkey_flag(u16_t unicast_addr);
73 
74 int ble_mesh_provisioner_dev_del(uint8_t addr[6], uint8_t addr_type, uint8_t uuid[16]);
75 
76 int ble_mesh_provisioner_OOB_input_num(uint32_t num);
77 
78 int ble_mesh_provisioner_OOB_input_string(const char *str);
79 
80 int ble_mesh_provisioner_static_OOB_set(const uint8_t *oob, uint16_t oob_size);
81 
82 mesh_node_t *ble_mesh_provisioner_get_node_info(u16_t unicast_addr);
83 
84 const ble_mesh_provisioner_t *ble_mesh_provisioner_get_provisioner_data();
85 
86 #endif
87 
88