xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/host/mesh/src/foundation.h (revision 042d53a763ad75cb1465103098bb88c245d95138)
1*042d53a7SEvalZero /*  Bluetooth Mesh */
2*042d53a7SEvalZero 
3*042d53a7SEvalZero /*
4*042d53a7SEvalZero  * Copyright (c) 2017 Intel Corporation
5*042d53a7SEvalZero  *
6*042d53a7SEvalZero  * SPDX-License-Identifier: Apache-2.0
7*042d53a7SEvalZero  */
8*042d53a7SEvalZero 
9*042d53a7SEvalZero #ifndef __FUNDATION_H__
10*042d53a7SEvalZero #define __FUNDATION_H__
11*042d53a7SEvalZero 
12*042d53a7SEvalZero #define OP_APP_KEY_ADD                     BT_MESH_MODEL_OP_1(0x00)
13*042d53a7SEvalZero #define OP_APP_KEY_UPDATE                  BT_MESH_MODEL_OP_1(0x01)
14*042d53a7SEvalZero #define OP_DEV_COMP_DATA_STATUS            BT_MESH_MODEL_OP_1(0x02)
15*042d53a7SEvalZero #define OP_MOD_PUB_SET                     BT_MESH_MODEL_OP_1(0x03)
16*042d53a7SEvalZero #define OP_HEALTH_CURRENT_STATUS           BT_MESH_MODEL_OP_1(0x04)
17*042d53a7SEvalZero #define OP_HEALTH_FAULT_STATUS             BT_MESH_MODEL_OP_1(0x05)
18*042d53a7SEvalZero #define OP_HEARTBEAT_PUB_STATUS            BT_MESH_MODEL_OP_1(0x06)
19*042d53a7SEvalZero #define OP_APP_KEY_DEL                     BT_MESH_MODEL_OP_2(0x80, 0x00)
20*042d53a7SEvalZero #define OP_APP_KEY_GET                     BT_MESH_MODEL_OP_2(0x80, 0x01)
21*042d53a7SEvalZero #define OP_APP_KEY_LIST                    BT_MESH_MODEL_OP_2(0x80, 0x02)
22*042d53a7SEvalZero #define OP_APP_KEY_STATUS                  BT_MESH_MODEL_OP_2(0x80, 0x03)
23*042d53a7SEvalZero #define OP_ATTENTION_GET                   BT_MESH_MODEL_OP_2(0x80, 0x04)
24*042d53a7SEvalZero #define OP_ATTENTION_SET                   BT_MESH_MODEL_OP_2(0x80, 0x05)
25*042d53a7SEvalZero #define OP_ATTENTION_SET_UNREL             BT_MESH_MODEL_OP_2(0x80, 0x06)
26*042d53a7SEvalZero #define OP_ATTENTION_STATUS                BT_MESH_MODEL_OP_2(0x80, 0x07)
27*042d53a7SEvalZero #define OP_DEV_COMP_DATA_GET               BT_MESH_MODEL_OP_2(0x80, 0x08)
28*042d53a7SEvalZero #define OP_BEACON_GET                      BT_MESH_MODEL_OP_2(0x80, 0x09)
29*042d53a7SEvalZero #define OP_BEACON_SET                      BT_MESH_MODEL_OP_2(0x80, 0x0a)
30*042d53a7SEvalZero #define OP_BEACON_STATUS                   BT_MESH_MODEL_OP_2(0x80, 0x0b)
31*042d53a7SEvalZero #define OP_DEFAULT_TTL_GET                 BT_MESH_MODEL_OP_2(0x80, 0x0c)
32*042d53a7SEvalZero #define OP_DEFAULT_TTL_SET                 BT_MESH_MODEL_OP_2(0x80, 0x0d)
33*042d53a7SEvalZero #define OP_DEFAULT_TTL_STATUS              BT_MESH_MODEL_OP_2(0x80, 0x0e)
34*042d53a7SEvalZero #define OP_FRIEND_GET                      BT_MESH_MODEL_OP_2(0x80, 0x0f)
35*042d53a7SEvalZero #define OP_FRIEND_SET                      BT_MESH_MODEL_OP_2(0x80, 0x10)
36*042d53a7SEvalZero #define OP_FRIEND_STATUS                   BT_MESH_MODEL_OP_2(0x80, 0x11)
37*042d53a7SEvalZero #define OP_GATT_PROXY_GET                  BT_MESH_MODEL_OP_2(0x80, 0x12)
38*042d53a7SEvalZero #define OP_GATT_PROXY_SET                  BT_MESH_MODEL_OP_2(0x80, 0x13)
39*042d53a7SEvalZero #define OP_GATT_PROXY_STATUS               BT_MESH_MODEL_OP_2(0x80, 0x14)
40*042d53a7SEvalZero #define OP_KRP_GET                         BT_MESH_MODEL_OP_2(0x80, 0x15)
41*042d53a7SEvalZero #define OP_KRP_SET                         BT_MESH_MODEL_OP_2(0x80, 0x16)
42*042d53a7SEvalZero #define OP_KRP_STATUS                      BT_MESH_MODEL_OP_2(0x80, 0x17)
43*042d53a7SEvalZero #define OP_MOD_PUB_GET                     BT_MESH_MODEL_OP_2(0x80, 0x18)
44*042d53a7SEvalZero #define OP_MOD_PUB_STATUS                  BT_MESH_MODEL_OP_2(0x80, 0x19)
45*042d53a7SEvalZero #define OP_MOD_PUB_VA_SET                  BT_MESH_MODEL_OP_2(0x80, 0x1a)
46*042d53a7SEvalZero #define OP_MOD_SUB_ADD                     BT_MESH_MODEL_OP_2(0x80, 0x1b)
47*042d53a7SEvalZero #define OP_MOD_SUB_DEL                     BT_MESH_MODEL_OP_2(0x80, 0x1c)
48*042d53a7SEvalZero #define OP_MOD_SUB_DEL_ALL                 BT_MESH_MODEL_OP_2(0x80, 0x1d)
49*042d53a7SEvalZero #define OP_MOD_SUB_OVERWRITE               BT_MESH_MODEL_OP_2(0x80, 0x1e)
50*042d53a7SEvalZero #define OP_MOD_SUB_STATUS                  BT_MESH_MODEL_OP_2(0x80, 0x1f)
51*042d53a7SEvalZero #define OP_MOD_SUB_VA_ADD                  BT_MESH_MODEL_OP_2(0x80, 0x20)
52*042d53a7SEvalZero #define OP_MOD_SUB_VA_DEL                  BT_MESH_MODEL_OP_2(0x80, 0x21)
53*042d53a7SEvalZero #define OP_MOD_SUB_VA_OVERWRITE            BT_MESH_MODEL_OP_2(0x80, 0x22)
54*042d53a7SEvalZero #define OP_NET_TRANSMIT_GET                BT_MESH_MODEL_OP_2(0x80, 0x23)
55*042d53a7SEvalZero #define OP_NET_TRANSMIT_SET                BT_MESH_MODEL_OP_2(0x80, 0x24)
56*042d53a7SEvalZero #define OP_NET_TRANSMIT_STATUS             BT_MESH_MODEL_OP_2(0x80, 0x25)
57*042d53a7SEvalZero #define OP_RELAY_GET                       BT_MESH_MODEL_OP_2(0x80, 0x26)
58*042d53a7SEvalZero #define OP_RELAY_SET                       BT_MESH_MODEL_OP_2(0x80, 0x27)
59*042d53a7SEvalZero #define OP_RELAY_STATUS                    BT_MESH_MODEL_OP_2(0x80, 0x28)
60*042d53a7SEvalZero #define OP_MOD_SUB_GET                     BT_MESH_MODEL_OP_2(0x80, 0x29)
61*042d53a7SEvalZero #define OP_MOD_SUB_LIST                    BT_MESH_MODEL_OP_2(0x80, 0x2a)
62*042d53a7SEvalZero #define OP_MOD_SUB_GET_VND                 BT_MESH_MODEL_OP_2(0x80, 0x2b)
63*042d53a7SEvalZero #define OP_MOD_SUB_LIST_VND                BT_MESH_MODEL_OP_2(0x80, 0x2c)
64*042d53a7SEvalZero #define OP_LPN_TIMEOUT_GET                 BT_MESH_MODEL_OP_2(0x80, 0x2d)
65*042d53a7SEvalZero #define OP_LPN_TIMEOUT_STATUS              BT_MESH_MODEL_OP_2(0x80, 0x2e)
66*042d53a7SEvalZero #define OP_HEALTH_FAULT_CLEAR              BT_MESH_MODEL_OP_2(0x80, 0x2f)
67*042d53a7SEvalZero #define OP_HEALTH_FAULT_CLEAR_UNREL        BT_MESH_MODEL_OP_2(0x80, 0x30)
68*042d53a7SEvalZero #define OP_HEALTH_FAULT_GET                BT_MESH_MODEL_OP_2(0x80, 0x31)
69*042d53a7SEvalZero #define OP_HEALTH_FAULT_TEST               BT_MESH_MODEL_OP_2(0x80, 0x32)
70*042d53a7SEvalZero #define OP_HEALTH_FAULT_TEST_UNREL         BT_MESH_MODEL_OP_2(0x80, 0x33)
71*042d53a7SEvalZero #define OP_HEALTH_PERIOD_GET               BT_MESH_MODEL_OP_2(0x80, 0x34)
72*042d53a7SEvalZero #define OP_HEALTH_PERIOD_SET               BT_MESH_MODEL_OP_2(0x80, 0x35)
73*042d53a7SEvalZero #define OP_HEALTH_PERIOD_SET_UNREL         BT_MESH_MODEL_OP_2(0x80, 0x36)
74*042d53a7SEvalZero #define OP_HEALTH_PERIOD_STATUS            BT_MESH_MODEL_OP_2(0x80, 0x37)
75*042d53a7SEvalZero #define OP_HEARTBEAT_PUB_GET               BT_MESH_MODEL_OP_2(0x80, 0x38)
76*042d53a7SEvalZero #define OP_HEARTBEAT_PUB_SET               BT_MESH_MODEL_OP_2(0x80, 0x39)
77*042d53a7SEvalZero #define OP_HEARTBEAT_SUB_GET               BT_MESH_MODEL_OP_2(0x80, 0x3a)
78*042d53a7SEvalZero #define OP_HEARTBEAT_SUB_SET               BT_MESH_MODEL_OP_2(0x80, 0x3b)
79*042d53a7SEvalZero #define OP_HEARTBEAT_SUB_STATUS            BT_MESH_MODEL_OP_2(0x80, 0x3c)
80*042d53a7SEvalZero #define OP_MOD_APP_BIND                    BT_MESH_MODEL_OP_2(0x80, 0x3d)
81*042d53a7SEvalZero #define OP_MOD_APP_STATUS                  BT_MESH_MODEL_OP_2(0x80, 0x3e)
82*042d53a7SEvalZero #define OP_MOD_APP_UNBIND                  BT_MESH_MODEL_OP_2(0x80, 0x3f)
83*042d53a7SEvalZero #define OP_NET_KEY_ADD                     BT_MESH_MODEL_OP_2(0x80, 0x40)
84*042d53a7SEvalZero #define OP_NET_KEY_DEL                     BT_MESH_MODEL_OP_2(0x80, 0x41)
85*042d53a7SEvalZero #define OP_NET_KEY_GET                     BT_MESH_MODEL_OP_2(0x80, 0x42)
86*042d53a7SEvalZero #define OP_NET_KEY_LIST                    BT_MESH_MODEL_OP_2(0x80, 0x43)
87*042d53a7SEvalZero #define OP_NET_KEY_STATUS                  BT_MESH_MODEL_OP_2(0x80, 0x44)
88*042d53a7SEvalZero #define OP_NET_KEY_UPDATE                  BT_MESH_MODEL_OP_2(0x80, 0x45)
89*042d53a7SEvalZero #define OP_NODE_IDENTITY_GET               BT_MESH_MODEL_OP_2(0x80, 0x46)
90*042d53a7SEvalZero #define OP_NODE_IDENTITY_SET               BT_MESH_MODEL_OP_2(0x80, 0x47)
91*042d53a7SEvalZero #define OP_NODE_IDENTITY_STATUS            BT_MESH_MODEL_OP_2(0x80, 0x48)
92*042d53a7SEvalZero #define OP_NODE_RESET                      BT_MESH_MODEL_OP_2(0x80, 0x49)
93*042d53a7SEvalZero #define OP_NODE_RESET_STATUS               BT_MESH_MODEL_OP_2(0x80, 0x4a)
94*042d53a7SEvalZero #define OP_SIG_MOD_APP_GET                 BT_MESH_MODEL_OP_2(0x80, 0x4b)
95*042d53a7SEvalZero #define OP_SIG_MOD_APP_LIST                BT_MESH_MODEL_OP_2(0x80, 0x4c)
96*042d53a7SEvalZero #define OP_VND_MOD_APP_GET                 BT_MESH_MODEL_OP_2(0x80, 0x4d)
97*042d53a7SEvalZero #define OP_VND_MOD_APP_LIST                BT_MESH_MODEL_OP_2(0x80, 0x4e)
98*042d53a7SEvalZero 
99*042d53a7SEvalZero #define STATUS_SUCCESS                     0x00
100*042d53a7SEvalZero #define STATUS_INVALID_ADDRESS             0x01
101*042d53a7SEvalZero #define STATUS_INVALID_MODEL               0x02
102*042d53a7SEvalZero #define STATUS_INVALID_APPKEY              0x03
103*042d53a7SEvalZero #define STATUS_INVALID_NETKEY              0x04
104*042d53a7SEvalZero #define STATUS_INSUFF_RESOURCES            0x05
105*042d53a7SEvalZero #define STATUS_IDX_ALREADY_STORED          0x06
106*042d53a7SEvalZero #define STATUS_NVAL_PUB_PARAM              0x07
107*042d53a7SEvalZero #define STATUS_NOT_SUB_MOD                 0x08
108*042d53a7SEvalZero #define STATUS_STORAGE_FAIL                0x09
109*042d53a7SEvalZero #define STATUS_FEAT_NOT_SUPP               0x0a
110*042d53a7SEvalZero #define STATUS_CANNOT_UPDATE               0x0b
111*042d53a7SEvalZero #define STATUS_CANNOT_REMOVE               0x0c
112*042d53a7SEvalZero #define STATUS_CANNOT_BIND                 0x0d
113*042d53a7SEvalZero #define STATUS_TEMP_STATE_CHG_FAIL         0x0e
114*042d53a7SEvalZero #define STATUS_CANNOT_SET                  0x0f
115*042d53a7SEvalZero #define STATUS_UNSPECIFIED                 0x10
116*042d53a7SEvalZero #define STATUS_INVALID_BINDING             0x11
117*042d53a7SEvalZero 
118*042d53a7SEvalZero int bt_mesh_cfg_srv_init(struct bt_mesh_model *model, bool primary);
119*042d53a7SEvalZero int bt_mesh_health_srv_init(struct bt_mesh_model *model, bool primary);
120*042d53a7SEvalZero 
121*042d53a7SEvalZero int bt_mesh_cfg_cli_init(struct bt_mesh_model *model, bool primary);
122*042d53a7SEvalZero int bt_mesh_health_cli_init(struct bt_mesh_model *model, bool primary);
123*042d53a7SEvalZero 
124*042d53a7SEvalZero void bt_mesh_cfg_reset(void);
125*042d53a7SEvalZero 
126*042d53a7SEvalZero void bt_mesh_heartbeat(u16_t src, u16_t dst, u8_t hops, u16_t feat);
127*042d53a7SEvalZero 
128*042d53a7SEvalZero void bt_mesh_attention(struct bt_mesh_model *model, u8_t time);
129*042d53a7SEvalZero 
130*042d53a7SEvalZero u8_t *bt_mesh_label_uuid_get(u16_t addr);
131*042d53a7SEvalZero 
132*042d53a7SEvalZero struct bt_mesh_hb_pub *bt_mesh_hb_pub_get(void);
133*042d53a7SEvalZero struct bt_mesh_cfg_srv *bt_mesh_cfg_get(void);
134*042d53a7SEvalZero 
135*042d53a7SEvalZero u8_t bt_mesh_net_transmit_get(void);
136*042d53a7SEvalZero u8_t bt_mesh_relay_get(void);
137*042d53a7SEvalZero u8_t bt_mesh_friend_get(void);
138*042d53a7SEvalZero u8_t bt_mesh_relay_retransmit_get(void);
139*042d53a7SEvalZero u8_t bt_mesh_beacon_get(void);
140*042d53a7SEvalZero u8_t bt_mesh_gatt_proxy_get(void);
141*042d53a7SEvalZero u8_t bt_mesh_default_ttl_get(void);
142*042d53a7SEvalZero 
143*042d53a7SEvalZero void bt_mesh_subnet_del(struct bt_mesh_subnet *sub, bool store);
144*042d53a7SEvalZero 
145*042d53a7SEvalZero struct bt_mesh_app_key *bt_mesh_app_key_alloc(u16_t app_idx);
146*042d53a7SEvalZero void bt_mesh_app_key_del(struct bt_mesh_app_key *key, bool store);
147*042d53a7SEvalZero 
key_idx_pack(struct os_mbuf * buf,u16_t idx1,u16_t idx2)148*042d53a7SEvalZero static inline void key_idx_pack(struct os_mbuf *buf,
149*042d53a7SEvalZero 				u16_t idx1, u16_t idx2)
150*042d53a7SEvalZero {
151*042d53a7SEvalZero 	net_buf_simple_add_le16(buf, idx1 | ((idx2 & 0x00f) << 12));
152*042d53a7SEvalZero 	net_buf_simple_add_u8(buf, idx2 >> 4);
153*042d53a7SEvalZero }
154*042d53a7SEvalZero 
key_idx_unpack(struct os_mbuf * buf,u16_t * idx1,u16_t * idx2)155*042d53a7SEvalZero static inline void key_idx_unpack(struct os_mbuf *buf,
156*042d53a7SEvalZero 				  u16_t *idx1, u16_t *idx2)
157*042d53a7SEvalZero {
158*042d53a7SEvalZero 	*idx1 = sys_get_le16(&buf->om_data[0]) & 0xfff;
159*042d53a7SEvalZero 	*idx2 = sys_get_le16(&buf->om_data[1]) >> 4;
160*042d53a7SEvalZero 	net_buf_simple_pull(buf, 3);
161*042d53a7SEvalZero }
162*042d53a7SEvalZero 
163*042d53a7SEvalZero #endif
164