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 BLUEKITCHEN 24 * GMBH 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 #define MESH_SIG_MODEL_ID_GENERIC_LEVEL_SERVER 0x1002u 61 #define MESH_SIG_MODEL_ID_GENERIC_LEVEL_CLIENT 0x1003u 62 63 // Foundation Model Operations 64 #define MESH_FOUNDATION_OPERATION_APPKEY_ADD 0x00 65 #define MESH_FOUNDATION_OPERATION_APPKEY_UPDATE 0x01 66 #define MESH_FOUNDATION_OPERATION_COMPOSITION_DATA_STATUS 0x02 67 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_SET 0x03 68 #define MESH_FOUNDATION_OPERATION_HEALTH_CURRENT_STATUS 0x04 69 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_STATUS 0x05 70 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_STATUS 0x06 71 #define MESH_FOUNDATION_OPERATION_APPKEY_DELETE 0x8000 72 #define MESH_FOUNDATION_OPERATION_APPKEY_GET 0x8001 73 #define MESH_FOUNDATION_OPERATION_APPKEY_LIST 0x8002 74 #define MESH_FOUNDATION_OPERATION_APPKEY_STATUS 0x8003 75 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_GET 0x8004 76 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_SET 0x8005 77 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_SET_UNACKNOWLEDGED 0x8006 78 #define MESH_FOUNDATION_OPERATION_HEALTH_ATTENTION_STATUS 0x8007 79 #define MESH_FOUNDATION_OPERATION_COMPOSITION_DATA_GET 0x8008 80 #define MESH_FOUNDATION_OPERATION_BEACON_GET 0x8009 81 #define MESH_FOUNDATION_OPERATION_BEACON_SET 0x800a 82 #define MESH_FOUNDATION_OPERATION_BEACON_STATUS 0x800b 83 #define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_GET 0x800c 84 #define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_SET 0x800d 85 #define MESH_FOUNDATION_OPERATION_DEFAULT_TTL_STATUS 0x800e 86 #define MESH_FOUNDATION_OPERATION_FRIEND_GET 0x800f 87 #define MESH_FOUNDATION_OPERATION_FRIEND_SET 0x8010 88 #define MESH_FOUNDATION_OPERATION_FRIEND_STATUS 0x8011 89 #define MESH_FOUNDATION_OPERATION_GATT_PROXY_GET 0x8012 90 #define MESH_FOUNDATION_OPERATION_GATT_PROXY_SET 0x8013 91 #define MESH_FOUNDATION_OPERATION_GATT_PROXY_STATUS 0x8014 92 #define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_GET 0x8015 93 #define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_SET 0x8016 94 #define MESH_FOUNDATION_OPERATION_KEY_REFRESH_PHASE_STATUS 0x8017 95 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_GET 0x8018 96 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_STATUS 0x8019 97 #define MESH_FOUNDATION_OPERATION_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET 0x801a 98 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_ADD 0x801b 99 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_DELETE 0x801c 100 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_DELETE_ALL 0x801d 101 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_OVERWRITE 0x801e 102 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_STATUS 0x801f 103 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD 0x8020 104 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE 0x8021 105 #define MESH_FOUNDATION_OPERATION_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE 0x8022 106 #define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_GET 0x8023 107 #define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_SET 0x8024 108 #define MESH_FOUNDATION_OPERATION_NETWORK_TRANSMIT_STATUS 0x8025 109 #define MESH_FOUNDATION_OPERATION_RELAY_GET 0x8026 110 #define MESH_FOUNDATION_OPERATION_RELAY_SET 0x8027 111 #define MESH_FOUNDATION_OPERATION_RELAY_STATUS 0x8028 112 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_SUBSCRIPTION_GET 0x8029 113 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_SUBSCRIPTION_LIST 0x802a 114 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_SUBSCRIPTION_GET 0x802b 115 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_SUBSCRIPTION_LIST 0x802c 116 #define MESH_FOUNDATION_OPERATION_LOW_POWER_NODE_POLL_TIMEOUT_GET 0x802d 117 #define MESH_FOUNDATION_OPERATION_LOW_POWER_NODE_POLL_TIMEOUT_STATUS 0x802e 118 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_CLEAR 0x802f 119 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_CLEAR_UNACKNOWLEDGED 0x8030 120 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_GET 0x8031 121 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_TEST 0x8032 122 #define MESH_FOUNDATION_OPERATION_HEALTH_FAULT_TEST_UNACKNOWLEDGED 0x8033 123 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_GET 0x8034 124 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_SET 0x8035 125 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_SET_UNACKNOWLEDGED 0x8036 126 #define MESH_FOUNDATION_OPERATION_HEALTH_PERIOD_STATUS 0x8037 127 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_GET 0x8038 128 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_PUBLICATION_SET 0x8039 129 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_GET 0x803a 130 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_SET 0x803b 131 #define MESH_FOUNDATION_OPERATION_HEARTBEAT_SUBSCRIPTION_STATUS 0x803c 132 #define MESH_FOUNDATION_OPERATION_MODEL_APP_BIND 0x803d 133 #define MESH_FOUNDATION_OPERATION_MODEL_APP_STATUS 0x803e 134 #define MESH_FOUNDATION_OPERATION_MODEL_APP_UNBIND 0x803f 135 #define MESH_FOUNDATION_OPERATION_NETKEY_ADD 0x8040 136 #define MESH_FOUNDATION_OPERATION_NETKEY_DELETE 0x8041 137 #define MESH_FOUNDATION_OPERATION_NETKEY_GET 0x8042 138 #define MESH_FOUNDATION_OPERATION_NETKEY_LIST 0x8043 139 #define MESH_FOUNDATION_OPERATION_NETKEY_STATUS 0x8044 140 #define MESH_FOUNDATION_OPERATION_NETKEY_UPDATE 0x8045 141 #define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_GET 0x8046 142 #define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_SET 0x8047 143 #define MESH_FOUNDATION_OPERATION_NODE_IDENTITY_STATUS 0x8048 144 #define MESH_FOUNDATION_OPERATION_NODE_RESET 0x8049 145 #define MESH_FOUNDATION_OPERATION_NODE_RESET_STATUS 0x804a 146 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_APP_GET 0x804b 147 #define MESH_FOUNDATION_OPERATION_SIG_MODEL_APP_LIST 0x804c 148 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_APP_GET 0x804d 149 #define MESH_FOUNDATION_OPERATION_VENDOR_MODEL_APP_LIST 0x804e 150 151 // Foundation Models Status Codes 152 #define MESH_FOUNDATION_STATUS_SUCCESS 0x00 153 #define MESH_FOUNDATION_STATUS_INVALID_ADDRESS 0x01 154 #define MESH_FOUNDATION_STATUS_INVALID_MODEL 0x02 155 #define MESH_FOUNDATION_STATUS_INVALID_APPKEY_INDEX 0x03 156 #define MESH_FOUNDATION_STATUS_INVALID_NETKEY_INDEX 0x04 157 #define MESH_FOUNDATION_STATUS_INSUFFICIENT_RESOURCES 0x05 158 #define MESH_FOUNDATION_STATUS_KEY_INDEX_ALREADY_STORED 0x06 159 #define MESH_FOUNDATION_STATUS_INVALID_PUBLISH_PARAMETER 0x07 160 #define MESH_FOUNDATION_STATUS_NOT_A_SUBSCRIPTION_MODEL 0x08 161 #define MESH_FOUNDATION_STATUS_STORAGE_FAILURE 0x09 162 #define MESH_FOUNDATION_STATUS_FEATURE_NOT_SUPPORTED 0x0a 163 #define MESH_FOUNDATION_STATUS_CANNOT_UPDATE 0x0b 164 #define MESH_FOUNDATION_STATUS_CANNOT_REMOVE 0x0c 165 #define MESH_FOUNDATION_STATUS_CANNOT_BIND 0x0d 166 #define MESH_FOUNDATION_STATUS_TEMPORARILY_UNABLE_TO_CHANGE_STATE 0x0e 167 #define MESH_FOUNDATION_STATUS_CANNOT_SET 0x0f 168 #define MESH_FOUNDATION_STATUS_UNSPECIFIED_ERROR 0x10 169 #define MESH_FOUNDATION_STATUS_INVALID_BINDING 0x11 170 171 /** 172 * 173 * @param value on/off 174 */ 175 void mesh_foundation_gatt_proxy_set(uint8_t value); 176 177 /** 178 * 179 * @return 180 */ 181 uint8_t mesh_foundation_gatt_proxy_get(void); 182 183 /** 184 * 185 * @param value on/off 186 */ 187 void mesh_foundation_beacon_set(uint8_t value); 188 189 /** 190 * 191 * @return 192 */ 193 uint8_t mesh_foundation_beacon_get(void); 194 195 /** 196 * 197 * @param ttl 198 */ 199 void mesh_foundation_default_ttl_set(uint8_t ttl); 200 201 /** 202 * 203 * @return 204 */ 205 uint8_t mesh_foundation_default_ttl_get(void); 206 207 /** 208 * 209 * @param value on/off 210 */ 211 void mesh_foundation_friend_set(uint8_t value); 212 213 /** 214 * 215 * @return 216 */ 217 uint8_t mesh_foundation_friend_get(void); 218 219 /** 220 * 221 * @param value on/off 222 */ 223 void mesh_foundation_low_power_set(uint8_t value); 224 225 /** 226 * 227 * @return 228 */ 229 uint8_t mesh_foundation_low_power_get(void); 230 231 /** 232 * 233 * @param network_transmit 234 */ 235 void mesh_foundation_network_transmit_set(uint8_t network_transmit); 236 237 /** 238 * 239 * @return 240 */ 241 uint8_t mesh_foundation_network_transmit_get(void); 242 /** 243 * 244 * @param relay 245 */ 246 void mesh_foundation_relay_set(uint8_t relay); 247 248 /** 249 * 250 * @return 251 */ 252 uint8_t mesh_foundation_relay_get(void); 253 254 /** 255 * 256 * @param relay_retransmit 257 */ 258 void mesh_foundation_relay_retransmit_set(uint8_t relay_retransmit); 259 260 /** 261 * 262 * @return 263 */ 264 uint8_t mesh_foundation_relay_retransmit_get(void); 265 266 /** 267 * @brief Get Features map (Relay, Proxy, Friend, Low Power) 268 */ 269 uint16_t mesh_foundation_get_features(void); 270 271 #ifdef __cplusplus 272 } /* end of extern "C" */ 273 #endif 274 275 #endif 276