1 /*
2  * Copyright (C) 2019-2020 Alibaba Group Holding Limited
3  */
4 
5 #ifndef __MESH_NODE
6 #define __MESH_NODE
7 
8 #include <stdio.h>
9 #include <mesh_model/mesh_model.h>
10 #include "mesh_provisioner.h"
11 
12 #define DEVICE_NAME_MAX_LENGTH 28
13 #define RSSI_BEACON_REPORT_PERIOD 1000 //ms
14 #define DEF_ADD_APPKEY_DELAY (300)
15 #define DEF_ADD_APPKEY_TIMEOUT (5 * 1000)
16 #define DEF_AUTOCONFIG_STORE_CHECK_TIMEOUT (1 * 1000)
17 #define DEF_AUTOCONFIG_STORE_CHECK_RETRY 40
18 #define DEF_ADD_APPKEY_RETRY 10
19 
20 typedef struct {
21     uint16_t prim_unicast;
22     uint8_t  element_num;
23 } mesh_node_local_t;
24 
25 
26 typedef enum {
27     BT_MESH_EVENT_NODE_REST,
28     BT_MESH_EVENT_NODE_PROV_COMP,
29     BT_MESH_EVENT_NODE_OOB_INPUT_NUM,
30     BT_MESH_EVENT_NODE_OOB_INPUT_STRING,
31 } mesh_prov_event_en;
32 
33 typedef enum {
34     BT_MESH_AUTO_CONFIG_SUCCEED,
35     BT_MESH_AUTO_CONFIG_NOT_START,
36     BT_MESH_AUTO_CONFIG_START,
37     BT_MESH_AUTO_CONFIG_FAILD,
38 }meah_auto_config_status_en;
39 
40 typedef enum {
41   BT_MESH_STATUS_SUCCEED,
42   BT_MESH_STATUS_ERR,
43 } status_faild_en;
44 
45 typedef void (*prov_event_cb)(mesh_prov_event_en event, void *p_arg);
46 
47 typedef void (*attn_cb)(void);
48 
49 typedef struct {
50  attn_cb att_on;
51  attn_cb att_off;
52 }health_srv_cb;
53 
54 typedef enum {
55  ACTION_NULL,
56  ACTION_NUM,
57  ACTION_STR,
58 }oob_action_en;
59 
60 typedef enum {
61  PROVISIONER,
62  NODE,
63 }node_role_en;
64 
65 typedef struct {
66  uint8_t* static_oob_data;
67  oob_action_en input_action;
68  uint8_t input_max_size;
69  oob_action_en output_action;
70  uint8_t output_max_size;
71 }oob_method;
72 
73 typedef struct {
74     provisioner_config_t config;
75     uint16_t local_sub;
76     uint16_t local_pub;
77 } provisioner_node;
78 
79 typedef struct {
80     node_role_en role;
81 #ifdef CONFIG_BT_MESH_PROVISIONER
82     provisioner_node *provisioner_config;
83 #endif
84     uint8_t dev_uuid[16];
85     uint8_t dev_name[DEVICE_NAME_MAX_LENGTH];
86     model_event_cb user_model_cb;
87     prov_event_cb user_prov_cb;
88 #ifdef BT_MESH_BEACON_RSSI_REPORT
89     uint8_t rssi_report_enable;
90 #endif
91     health_srv_cb *health_cb;
92     oob_method node_oob;
93 } node_config_t;
94 
95 typedef struct {
96  uint16_t sub_addr;
97 }model_auto_config_t;
98 
99 
100 int ble_mesh_node_init(node_config_t *param);
101 int ble_mesh_node_OOB_input_num(uint32_t num);
102 int ble_mesh_node_OOB_input_string(const char *str);
103 
104 
105 #ifdef CONFIG_BT_MESH_PROVISIONER
106 int ble_mesh_node_appkey_add(uint16_t netkey_idx,uint16_t appkey_idx,uint16_t unicast_addr);
107 int ble_mesh_node_model_autoconfig(uint16_t netkey_idx,uint16_t appkey_idx, uint16_t unicast_addr, model_auto_config_t auto_conf);
108 #endif
109 
110 #endif
111