xref: /btstack/src/mesh/mesh_foundation.h (revision b6fc147f78a37f3479b846963ca40c9b931f6e2f)
1 /*
2  * Copyright (C) 2018 BlueKitchen GmbH
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the copyright holders nor the names of
14  *    contributors may be used to endorse or promote products derived
15  *    from this software without specific prior written permission.
16  * 4. Any redistribution, use, or modification is done solely for
17  *    personal benefit and not for any commercial purpose or for
18  *    monetary gain.
19  *
20  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
24  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  * Please inquire about commercial licensing options at
34  * [email protected]
35  *
36  */
37 
38 #ifndef __MESH_FOUNDATION_H
39 #define __MESH_FOUNDATION_H
40 
41 #include <stdint.h>
42 
43 #include "mesh/mesh_network.h"
44 
45 #ifdef __cplusplus
46 extern "C"
47 {
48 #endif
49 
50 #define MESH_TTL_MAX 0x7f
51 #define MESH_FOUNDATION_STATE_NOT_SUPPORTED 2
52 
53 // Mesh Model Identifiers
54 #define MESH_SIG_MODEL_ID_CONFIGURATION_SERVER  0x0000u
55 #define MESH_SIG_MODEL_ID_CONFIGURATION_CLIENT  0x0001u
56 #define MESH_SIG_MODEL_ID_HEALTH_SERVER         0x0002u
57 #define MESH_SIG_MODEL_ID_HEALTH_CLIENT         0x0003u
58 #define MESH_SIG_MODEL_ID_GENERIC_ON_OFF_SERVER 0x1000u
59 #define MESH_SIG_MODEL_ID_GENERIC_ON_OFF_CLIENT 0x1001u
60 
61 // Foundation Model Operations
62 #define MESH_FOUNDATION_OPERATION_APPKEY_ADD                                      0x00
63 #define MESH_FOUNDATION_OPERATION_APPKEY_UPDATE                                   0x01
64 #define MESH_FOUNDATION_OPERATION_COMPOSITION_DATA_STATUS                         0x02
65 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_SET                           0x03
66 #define MESH_FOUNDATION_OPERATION_HEALTH_CURRENT_STATUS                           0x04
67 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_STATUS                             0x05
68 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_STATUS                    0x06
69 #define MESH_FOUNDATION_OPERATION_APPKEY_DELETE                                 0x8000
70 #define MESH_FOUNDATION_OPERATION_APPKEY_GET                                    0x8001
71 #define MESH_FOUNDATION_OPERATION_APPKEY_LIST                                   0x8002
72 #define MESH_FOUNDATION_OPERATION_APPKEY_STATUS                                 0x8003
73 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_GET                          0x8004
74 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_SET                          0x8005
75 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_SET_UNACKNOWLEDGED           0x8006
76 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_STATUS                       0x8007
77 #define MESH_FOUNDATION_OPERATION_COMPOSITION_DATA_GET                          0x8008
78 #define MESH_FOUNDATION_OPERATION_BEACON_GET                                    0x8009
79 #define MESH_FOUNDATION_OPERATION_BEACON_SET                                    0x800a
80 #define MESH_FOUNDATION_OPERATION_BEACON_STATUS                                 0x800b
81 #define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_GET                               0x800c
82 #define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_SET                               0x800d
83 #define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_STATUS                            0x800e
84 #define MESH_FOUNDATION_OPERATION_FRIEND_GET                                    0x800f
85 #define MESH_FOUNDATION_OPERATION_FRIEND_SET                                    0x8010
86 #define MESH_FOUNDATION_OPERATION_FRIEND_STATUS                                 0x8011
87 #define MESH_FOUNDATION_OPERATION_GATT_PROXY_GET                                0x8012
88 #define MESH_FOUNDATION_OPERATION_GATT_PROXY_SET                                0x8013
89 #define MESH_FOUNDATION_OPERATION_GATT_PROXY_STATUS                             0x8014
90 #define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_GET                         0x8015
91 #define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_SET                         0x8016
92 #define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_STATUS                      0x8017
93 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_GET                         0x8018
94 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_STATUS                      0x8019
95 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET         0x801a
96 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_ADD                        0x801b
97 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_DELETE                     0x801c
98 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_DELETE_ALL                 0x801d
99 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_OVERWRITE                  0x801e
100 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_STATUS                     0x801f
101 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD        0x8020
102 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE     0x8021
103 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE  0x8022
104 #define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_GET                          0x8023
105 #define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_SET                          0x8024
106 #define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_STATUS                       0x8025
107 #define MESH_FOUNDATION_OPERATION_RELAY_GET                                     0x8026
108 #define MESH_FOUNDATION_OPERATION_RELAY_SET                                     0x8027
109 #define MESH_FOUNDATION_OPERATION_RELAY_STATUS                                  0x8028
110 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_SUBSCRIPTION_GET                    0x8029
111 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_SUBSCRIPTION_LIST                   0x802a
112 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_SUBSCRIPTION_GET                 0x802b
113 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_SUBSCRIPTION_LIST                0x802c
114 #define MESH_FOUNDATION_OPERATION_LOW_POWER_NODE_POLL_TIMEOUT_GET               0x802d
115 #define MESH_FOUNDATION_OPERATION_LOW_POWER_NODE_POLL_TIMEOUT_STATUS            0x802e
116 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_CLEAR                            0x802f
117 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_CLEAR_UNACKNOWLEDGED             0x8030
118 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_GET                              0x8031
119 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_TEST                             0x8032
120 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_TEST_UNACKNOWLEDGED              0x8033
121 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_GET                             0x8034
122 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_SET                             0x8035
123 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_SET_UNACKNOWLEDGED              0x8036
124 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_STATUS                          0x8037
125 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_GET                     0x8038
126 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_SET                     0x8039
127 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_GET                    0x803a
128 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_SET                    0x803b
129 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_STATUS                 0x803c
130 #define MESH_FOUNDATION_OPERATION_MODEL_APP_BIND                                0x803d
131 #define MESH_FOUNDATION_OPERATION_MODEL_APP_STATUS                              0x803e
132 #define MESH_FOUNDATION_OPERATION_MODEL_APP_UNBIND                              0x803f
133 #define MESH_FOUNDATION_OPERATION_NETKEY_ADD                                    0x8040
134 #define MESH_FOUNDATION_OPERATION_NETKEY_DELETE                                 0x8041
135 #define MESH_FOUNDATION_OPERATION_NETKEY_GET                                    0x8042
136 #define MESH_FOUNDATION_OPERATION_NETKEY_LIST                                   0x8043
137 #define MESH_FOUNDATION_OPERATION_NETKEY_STATUS                                 0x8044
138 #define MESH_FOUNDATION_OPERATION_NETKEY_UPDATE                                 0x8045
139 #define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_GET                             0x8046
140 #define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_SET                             0x8047
141 #define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_STATUS                          0x8048
142 #define MESH_FOUNDATION_OPERATION_NODE_RESET                                    0x8049
143 #define MESH_FOUNDATION_OPERATION_NODE_RESET_STATUS                             0x804a
144 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_APP_GET                             0x804b
145 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_APP_LIST                            0x804c
146 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_APP_GET                          0x804d
147 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_APP_LIST                         0x804e
148 
149 // Foundation Models Status Codes
150 #define MESH_FOUNDATION_STATUS_SUCCESS                                           0x00
151 #define MESH_FOUNDATION_STATUS_INVALID_ADDRESS                                   0x01
152 #define MESH_FOUNDATION_STATUS_INVALID_MODEL                                     0x02
153 #define MESH_FOUNDATION_STATUS_INVALID_APPKEY_INDEX                              0x03
154 #define MESH_FOUNDATION_STATUS_INVALID_NETKEY_INDEX                              0x04
155 #define MESH_FOUNDATION_STATUS_INSUFFICIENT_RESOURCES                            0x05
156 #define MESH_FOUNDATION_STATUS_KEY_INDEX_ALREADY_STORED                          0x06
157 #define MESH_FOUNDATION_STATUS_INVALID_PUBLISH_PARAMETER                         0x07
158 #define MESH_FOUNDATION_STATUS_NOT_A_SUBSCRIPTION_MODEL                          0x08
159 #define MESH_FOUNDATION_STATUS_STORAGE_FAILURE                                   0x09
160 #define MESH_FOUNDATION_STATUS_FEATURE_NOT_SUPPORTED                             0x0a
161 #define MESH_FOUNDATION_STATUS_CANNOT_UPDATE                                     0x0b
162 #define MESH_FOUNDATION_STATUS_CANNOT_REMOVE                                     0x0c
163 #define MESH_FOUNDATION_STATUS_CANNOT_BIND                                       0x0d
164 #define MESH_FOUNDATION_STATUS_TEMPORARILY_UNABLE_TO_CHANGE_STATE                0x0e
165 #define MESH_FOUNDATION_STATUS_CANNOT_SET                                        0x0f
166 #define MESH_FOUNDATION_STATUS_UNSPECIFIED_ERROR                                 0x10
167 #define MESH_FOUNDATION_STATUS_INVALID_BINDING                                   0x11
168 
169 /**
170  *
171  * @param value on/off
172  */
173 void mesh_foundation_gatt_proxy_set(uint8_t value);
174 
175 /**
176  *
177  * @return
178  */
179 uint8_t mesh_foundation_gatt_proxy_get(void);
180 
181 /**
182  *
183  * @param value on/off
184  */
185 void mesh_foundation_beacon_set(uint8_t value);
186 
187 /**
188  *
189  * @return
190  */
191 uint8_t mesh_foundation_beacon_get(void);
192 
193 /**
194  *
195  * @param ttl
196  */
197 void mesh_foundation_default_ttl_set(uint8_t ttl);
198 
199 /**
200  *
201  * @return
202  */
203 uint8_t mesh_foundation_default_ttl_get(void);
204 
205 /**
206  *
207  * @param value on/off
208  */
209 void mesh_foundation_friend_set(uint8_t value);
210 
211 /**
212  *
213  * @return
214  */
215 uint8_t mesh_foundation_friend_get(void);
216 
217 /**
218  *
219  * @param value on/off
220  */
221 void mesh_foundation_low_power_set(uint8_t value);
222 
223 /**
224  *
225  * @return
226  */
227 uint8_t mesh_foundation_low_power_get(void);
228 
229 /**
230  *
231  * @param network_transmit
232  */
233 void mesh_foundation_network_transmit_set(uint8_t network_transmit);
234 
235 /**
236  *
237  * @return
238  */
239 uint8_t mesh_foundation_network_transmit_get(void);
240 /**
241  *
242  * @param relay
243  */
244 void mesh_foundation_relay_set(uint8_t relay);
245 
246 /**
247  *
248  * @return
249  */
250 uint8_t mesh_foundation_relay_get(void);
251 
252 /**
253  *
254  * @param relay_retransmit
255  */
256 void mesh_foundation_relay_retransmit_set(uint8_t relay_retransmit);
257 
258 /**
259  *
260  * @return
261  */
262 uint8_t mesh_foundation_relay_retransmit_get(void);
263 
264 /**
265  * @brief Get Features map (Relay, Proxy, Friend, Low Power)
266  */
267 uint16_t mesh_foundation_get_features(void);
268 
269 #ifdef __cplusplus
270 } /* end of extern "C" */
271 #endif
272 
273 #endif
274