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