1 /** @file 2 * @brief Runtime configuration APIs. 3 */ 4 5 /* 6 * Copyright (c) 2020 Nordic Semiconductor 7 * 8 * SPDX-License-Identifier: Apache-2.0 9 */ 10 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_H_ 11 #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_H_ 12 13 #include <stdbool.h> 14 #include <stddef.h> 15 16 #include <sys/types.h> 17 18 /** 19 * @brief Runtime Configuration 20 * @defgroup bt_mesh_cfg Runtime Configuration 21 * @ingroup bt_mesh 22 * @{ 23 */ 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 /** Bluetooth mesh feature states */ 30 enum bt_mesh_feat_state { 31 /** Feature is supported, but disabled. */ 32 BT_MESH_FEATURE_DISABLED, 33 /** Feature is supported and enabled. */ 34 BT_MESH_FEATURE_ENABLED, 35 /** Feature is not supported, and cannot be enabled. */ 36 BT_MESH_FEATURE_NOT_SUPPORTED, 37 }; 38 39 /* Key Refresh Phase */ 40 #define BT_MESH_KR_NORMAL 0x00 41 #define BT_MESH_KR_PHASE_1 0x01 42 #define BT_MESH_KR_PHASE_2 0x02 43 #define BT_MESH_KR_PHASE_3 0x03 44 45 /* Legacy feature defines */ 46 #define BT_MESH_RELAY_DISABLED BT_MESH_FEATURE_DISABLED 47 #define BT_MESH_RELAY_ENABLED BT_MESH_FEATURE_ENABLED 48 #define BT_MESH_RELAY_NOT_SUPPORTED BT_MESH_FEATURE_NOT_SUPPORTED 49 50 #define BT_MESH_BEACON_DISABLED BT_MESH_FEATURE_DISABLED 51 #define BT_MESH_BEACON_ENABLED BT_MESH_FEATURE_ENABLED 52 53 #define BT_MESH_PRIV_BEACON_DISABLED BT_MESH_FEATURE_DISABLED 54 #define BT_MESH_PRIV_BEACON_ENABLED BT_MESH_FEATURE_ENABLED 55 56 #define BT_MESH_GATT_PROXY_DISABLED BT_MESH_FEATURE_DISABLED 57 #define BT_MESH_GATT_PROXY_ENABLED BT_MESH_FEATURE_ENABLED 58 #define BT_MESH_GATT_PROXY_NOT_SUPPORTED BT_MESH_FEATURE_NOT_SUPPORTED 59 60 #define BT_MESH_PRIV_GATT_PROXY_DISABLED BT_MESH_FEATURE_DISABLED 61 #define BT_MESH_PRIV_GATT_PROXY_ENABLED BT_MESH_FEATURE_ENABLED 62 #define BT_MESH_PRIV_GATT_PROXY_NOT_SUPPORTED BT_MESH_FEATURE_NOT_SUPPORTED 63 64 #define BT_MESH_FRIEND_DISABLED BT_MESH_FEATURE_DISABLED 65 #define BT_MESH_FRIEND_ENABLED BT_MESH_FEATURE_ENABLED 66 #define BT_MESH_FRIEND_NOT_SUPPORTED BT_MESH_FEATURE_NOT_SUPPORTED 67 68 #define BT_MESH_NODE_IDENTITY_STOPPED BT_MESH_FEATURE_DISABLED 69 #define BT_MESH_NODE_IDENTITY_RUNNING BT_MESH_FEATURE_ENABLED 70 #define BT_MESH_NODE_IDENTITY_NOT_SUPPORTED BT_MESH_FEATURE_NOT_SUPPORTED 71 72 /** @brief Enable or disable sending of the Secure Network Beacon. 73 * 74 * @param beacon New Secure Network Beacon state. 75 */ 76 void bt_mesh_beacon_set(bool beacon); 77 78 /** @brief Get the current Secure Network Beacon state. 79 * 80 * @returns Whether the Secure Network Beacon feature is enabled. 81 */ 82 bool bt_mesh_beacon_enabled(void); 83 84 /** @brief Enable or disable sending of the Mesh Private beacon. 85 * 86 * Support for the Private beacon state must be enabled with @c 87 * CONFIG_BT_MESH_PRIV_BEACONS. 88 * 89 * @param priv_beacon New Mesh Private beacon state. Must be one of 90 * @ref BT_MESH_FEATURE_ENABLED and 91 * @ref BT_MESH_FEATURE_DISABLED. 92 * 93 * @retval 0 Successfully changed the Mesh Private beacon feature state. 94 * @retval -ENOTSUP The Mesh Private beacon feature is not supported. 95 * @retval -EINVAL Invalid parameter. 96 * @retval -EALREADY Already in the given state. 97 */ 98 int bt_mesh_priv_beacon_set(enum bt_mesh_feat_state priv_beacon); 99 100 /** @brief Get the current Mesh Private beacon state. 101 * 102 * @returns The Mesh Private beacon feature state. 103 */ 104 enum bt_mesh_feat_state bt_mesh_priv_beacon_get(void); 105 106 /** @brief Set the current Mesh Private beacon update interval. 107 * 108 * The Mesh Private beacon's randomization value is updated regularly to 109 * maintain the node's privacy. The update interval controls how often 110 * the beacon is updated, in 10 second increments. 111 * 112 * @param interval Private beacon update interval in 10 second steps, or 0 to 113 * update on every beacon transmission. 114 */ 115 void bt_mesh_priv_beacon_update_interval_set(uint8_t interval); 116 117 /** @brief Get the current Mesh Private beacon update interval. 118 * 119 * The Mesh Private beacon's randomization value is updated regularly to 120 * maintain the node's privacy. The update interval controls how often 121 * the beacon is updated, in 10 second increments. 122 * 123 * @returns The Private beacon update interval in 10 second steps, or 0 if 124 * the beacon is updated every time it's transmitted. 125 */ 126 uint8_t bt_mesh_priv_beacon_update_interval_get(void); 127 128 /** @brief Set the default TTL value. 129 * 130 * The default TTL value is used when no explicit TTL value is set. Models will 131 * use the default TTL value when @ref bt_mesh_msg_ctx::send_ttl is 132 * @ref BT_MESH_TTL_DEFAULT. 133 * 134 * @param default_ttl The new default TTL value. Valid values are 0x00 and 0x02 135 * to @ref BT_MESH_TTL_MAX. 136 * 137 * @retval 0 Successfully set the default TTL value. 138 * @retval -EINVAL Invalid TTL value. 139 */ 140 int bt_mesh_default_ttl_set(uint8_t default_ttl); 141 142 /** @brief Get the current default TTL value. 143 * 144 * @return The current default TTL value. 145 */ 146 uint8_t bt_mesh_default_ttl_get(void); 147 148 /** @brief Get the current Mesh On-Demand Private Proxy state. 149 * 150 * @retval 0 or positive value represents On-Demand Private Proxy feature state 151 * @retval -ENOTSUP The On-Demand Private Proxy feature is not supported. 152 */ 153 int bt_mesh_od_priv_proxy_get(void); 154 155 /** @brief Set state of Mesh On-Demand Private Proxy. 156 * 157 * Support for the On-Demand Private Proxy state must be enabled with @c 158 * BT_MESH_OD_PRIV_PROXY_SRV. 159 * 160 * @param on_demand_proxy New Mesh On-Demand Private Proxy state. Value of 0x00 means that 161 * advertising with Private Network Identity cannot be enabled on demand. 162 * Values in range 0x01 - 0xFF set interval of this advertising after 163 * valid Solicitation PDU is received or client disconnects. 164 * 165 * @retval 0 Successfully changed the Mesh On-Demand Private Proxy feature state. 166 * @retval -ENOTSUP The On-Demand Private Proxy feature is not supported. 167 * @retval -EINVAL Invalid parameter. 168 * @retval -EALREADY Already in the given state. 169 */ 170 int bt_mesh_od_priv_proxy_set(uint8_t on_demand_proxy); 171 172 /** @brief Set the Network Transmit parameters. 173 * 174 * The Network Transmit parameters determine the parameters local messages are 175 * transmitted with. 176 * 177 * @see BT_MESH_TRANSMIT 178 * 179 * @param xmit New Network Transmit parameters. Use @ref BT_MESH_TRANSMIT for 180 * encoding. 181 */ 182 void bt_mesh_net_transmit_set(uint8_t xmit); 183 184 /** @brief Get the current Network Transmit parameters. 185 * 186 * The @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT macros can be 187 * used to decode the Network Transmit parameters. 188 * 189 * @return The current Network Transmit parameters. 190 */ 191 uint8_t bt_mesh_net_transmit_get(void); 192 193 /** @brief Configure the Relay feature. 194 * 195 * Enable or disable the Relay feature, and configure the parameters to 196 * transmit relayed messages with. 197 * 198 * Support for the Relay feature must be enabled through the 199 * @c CONFIG_BT_MESH_RELAY configuration option. 200 * 201 * @see BT_MESH_TRANSMIT 202 * 203 * @param relay New Relay feature state. Must be one of 204 * @ref BT_MESH_FEATURE_ENABLED and 205 * @ref BT_MESH_FEATURE_DISABLED. 206 * @param xmit New Relay retransmit parameters. Use @ref BT_MESH_TRANSMIT for 207 * encoding. 208 * 209 * @retval 0 Successfully changed the Relay configuration. 210 * @retval -ENOTSUP The Relay feature is not supported. 211 * @retval -EINVAL Invalid parameter. 212 * @retval -EALREADY Already using the given parameters. 213 */ 214 int bt_mesh_relay_set(enum bt_mesh_feat_state relay, uint8_t xmit); 215 216 /** @brief Get the current Relay feature state. 217 * 218 * @returns The Relay feature state. 219 */ 220 enum bt_mesh_feat_state bt_mesh_relay_get(void); 221 222 /** @brief Get the current Relay Retransmit parameters. 223 * 224 * The @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT macros can be 225 * used to decode the Relay Retransmit parameters. 226 * 227 * @return The current Relay Retransmit parameters, or 0 if relay is not 228 * supported. 229 */ 230 uint8_t bt_mesh_relay_retransmit_get(void); 231 232 /** @brief Enable or disable the GATT Proxy feature. 233 * 234 * Support for the GATT Proxy feature must be enabled through the 235 * @c CONFIG_BT_MESH_GATT_PROXY configuration option. 236 * 237 * @note The GATT Proxy feature only controls a Proxy node's ability to relay 238 * messages to the mesh network. A node that supports GATT Proxy will 239 * still advertise Connectable Proxy beacons, even if the feature is 240 * disabled. The Proxy feature can only be fully disabled through compile 241 * time configuration. 242 * 243 * @param gatt_proxy New GATT Proxy state. Must be one of 244 * @ref BT_MESH_FEATURE_ENABLED and 245 * @ref BT_MESH_FEATURE_DISABLED. 246 * 247 * @retval 0 Successfully changed the GATT Proxy feature state. 248 * @retval -ENOTSUP The GATT Proxy feature is not supported. 249 * @retval -EINVAL Invalid parameter. 250 * @retval -EALREADY Already in the given state. 251 */ 252 int bt_mesh_gatt_proxy_set(enum bt_mesh_feat_state gatt_proxy); 253 254 /** @brief Get the current GATT Proxy state. 255 * 256 * @returns The GATT Proxy feature state. 257 */ 258 enum bt_mesh_feat_state bt_mesh_gatt_proxy_get(void); 259 260 /** @brief Enable or disable the Private GATT Proxy feature. 261 * 262 * Support for the Private GATT Proxy feature must be enabled through the 263 * @kconfig{CONFIG_BT_MESH_PRIV_BEACONS} and @kconfig{CONFIG_BT_MESH_GATT_PROXY} 264 * configuration options. 265 * 266 * @param priv_gatt_proxy New Private GATT Proxy state. Must be one of 267 * @ref BT_MESH_FEATURE_ENABLED and 268 * @ref BT_MESH_FEATURE_DISABLED. 269 * 270 * @retval 0 Successfully changed the Private GATT Proxy feature state. 271 * @retval -ENOTSUP The Private GATT Proxy feature is not supported. 272 * @retval -EINVAL Invalid parameter. 273 * @retval -EALREADY Already in the given state. 274 */ 275 int bt_mesh_priv_gatt_proxy_set(enum bt_mesh_feat_state priv_gatt_proxy); 276 277 /** @brief Get the current Private GATT Proxy state. 278 * 279 * @returns The Private GATT Proxy feature state. 280 */ 281 enum bt_mesh_feat_state bt_mesh_priv_gatt_proxy_get(void); 282 283 /** @brief Enable or disable the Friend feature. 284 * 285 * Any active friendships will be terminated immediately if the Friend feature 286 * is disabled. 287 * 288 * Support for the Friend feature must be enabled through the 289 * @c CONFIG_BT_MESH_FRIEND configuration option. 290 * 291 * @param friendship New Friend feature state. Must be one of 292 * @ref BT_MESH_FEATURE_ENABLED and 293 * @ref BT_MESH_FEATURE_DISABLED. 294 * 295 * @retval 0 Successfully changed the Friend feature state. 296 * @retval -ENOTSUP The Friend feature is not supported. 297 * @retval -EINVAL Invalid parameter. 298 * @retval -EALREADY Already in the given state. 299 */ 300 int bt_mesh_friend_set(enum bt_mesh_feat_state friendship); 301 302 /** @brief Get the current Friend state. 303 * 304 * @returns The Friend feature state. 305 */ 306 enum bt_mesh_feat_state bt_mesh_friend_get(void); 307 308 /** 309 * @brief Subnet Configuration 310 * @defgroup bt_mesh_cfg_subnet Subnet Configuration 311 * @{ 312 */ 313 314 /** @brief Add a Subnet. 315 * 316 * Adds a subnet with the given network index and network key to the list of 317 * known Subnets. All messages sent on the given Subnet will be processed by 318 * this node, and the node may send and receive Network Beacons on the given 319 * Subnet. 320 * 321 * @param net_idx Network index. 322 * @param key Root network key of the Subnet. All other keys are derived 323 * from this. 324 * 325 * @retval STATUS_SUCCESS The Subnet was successfully added. 326 * @retval STATUS_INSUFF_RESOURCES No room for this Subnet. 327 * @retval STATUS_UNSPECIFIED The Subnet couldn't be created for some reason. 328 */ 329 uint8_t bt_mesh_subnet_add(uint16_t net_idx, const uint8_t key[16]); 330 331 /** @brief Update the given Subnet. 332 * 333 * Starts the Key Refresh procedure for this Subnet by adding a second set of 334 * encryption keys. The Subnet will continue sending with the old key (but 335 * receiving messages using both) until the Subnet enters Key Refresh phase 2. 336 * 337 * This allows a network configurator to replace old network and application 338 * keys for the entire network, effectively removing access for all nodes that 339 * aren't given the new keys. 340 * 341 * @param net_idx Network index. 342 * @param key New root network key of the Subnet. 343 * 344 * @retval STATUS_SUCCESS The Subnet was updated with a second key. 345 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 346 * @retval STATUS_IDX_ALREADY_STORED The @c key value is the same as the 347 * current key. 348 * @retval STATUS_CANNOT_UPDATE The Subnet cannot be updated for some reason. 349 */ 350 uint8_t bt_mesh_subnet_update(uint16_t net_idx, const uint8_t key[16]); 351 352 /** @brief Delete a Subnet. 353 * 354 * Removes the Subnet with the given network index from the node. The node will 355 * stop sending Network Beacons with the given Subnet, and can no longer 356 * process messages on this Subnet. 357 * 358 * All Applications bound to this Subnet are also deleted. 359 * 360 * @param net_idx Network index. 361 * 362 * @retval STATUS_SUCCESS The Subnet was deleted. 363 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 364 */ 365 uint8_t bt_mesh_subnet_del(uint16_t net_idx); 366 367 /** @brief Check whether a Subnet is known. 368 * 369 * @param net_idx Network index 370 * 371 * @return true if a Subnet with the given index exists, false otherwise. 372 */ 373 bool bt_mesh_subnet_exists(uint16_t net_idx); 374 375 /** @brief Set the Subnet's Key Refresh phase. 376 * 377 * The Key Refresh procedure is started by updating the Subnet keys through 378 * @ref bt_mesh_subnet_update. This puts the Subnet in Key Refresh Phase 1. 379 * Once all nodes have received the new Subnet key, Key Refresh Phase 2 can be 380 * activated through this function to start transmitting with the new network 381 * key. Finally, to revoke the old key, set the Key Refresh Phase to 3. This 382 * removes the old keys from the node, and returns the Subnet back to normal 383 * single-key operation with the new key set. 384 * 385 * @param net_idx Network index. 386 * @param phase Pointer to the new Key Refresh phase. Will return the actual 387 * Key Refresh phase after updating. 388 * 389 * @retval STATUS_SUCCESS The Key Refresh phase of the Subnet was successfully 390 * changed. 391 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 392 * @retval STATUS_CANNOT_UPDATE The given phase change is invalid. 393 */ 394 uint8_t bt_mesh_subnet_kr_phase_set(uint16_t net_idx, uint8_t *phase); 395 396 /** @brief Get the Subnet's Key Refresh phase. 397 * 398 * @param net_idx Network index. 399 * @param phase Pointer to the Key Refresh variable to fill. 400 * 401 * @retval STATUS_SUCCESS Successfully populated the @c phase variable. 402 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 403 */ 404 uint8_t bt_mesh_subnet_kr_phase_get(uint16_t net_idx, uint8_t *phase); 405 406 /** @brief Set the Node Identity state of the Subnet. 407 * 408 * The Node Identity state of a Subnet determines whether the Subnet advertises 409 * connectable Node Identity beacons for Proxy Clients to connect to. 410 * Once started, the Node Identity beacon runs for 60 seconds, or until it is 411 * stopped. 412 * 413 * This function serves the same purpose as @ref bt_mesh_proxy_identity_enable, 414 * but only acts on a single Subnet. 415 * 416 * GATT Proxy support must be enabled through 417 * @kconfig{CONFIG_BT_MESH_GATT_PROXY}. 418 * 419 * @param net_idx Network index. 420 * @param node_id New Node Identity state, must be either @ref 421 * BT_MESH_FEATURE_ENABLED or @ref BT_MESH_FEATURE_DISABLED. 422 * 423 * @retval STATUS_SUCCESS Successfully set the Node Identity state of the 424 * Subnet. 425 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 426 * @retval STATUS_FEAT_NOT_SUPP The Node Identity feature is not supported. 427 * @retval STATUS_CANNOT_SET Couldn't set the Node Identity state. 428 */ 429 uint8_t bt_mesh_subnet_node_id_set(uint16_t net_idx, 430 enum bt_mesh_feat_state node_id); 431 432 /** @brief Get the Node Identity state of the Subnet. 433 * 434 * @param net_idx Network index. 435 * @param node_id Node Identity variable to fill. 436 * 437 * @retval STATUS_SUCCESS Successfully populated the @c node_id variable. 438 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 439 */ 440 uint8_t bt_mesh_subnet_node_id_get(uint16_t net_idx, 441 enum bt_mesh_feat_state *node_id); 442 443 /** @brief Set the Private Node Identity state of the Subnet. 444 * 445 * The Private Node Identity state of a Subnet determines whether the Subnet 446 * advertises connectable Private Node Identity beacons for Proxy Clients to 447 * connect to. Once started, the Node Identity beacon runs for 60 seconds, 448 * or until it is stopped. 449 * 450 * Private Node Identity can only be enabled if regular Node Identity is not 451 * enabled for any subnet. 452 * 453 * GATT Proxy and Private Beacon support must be enabled through 454 * @kconfig{CONFIG_BT_MESH_GATT_PROXY} and 455 * @kconfig{CONFIG_BT_MESH_PRIV_BEACONS}. 456 * 457 * @param net_idx Network index. 458 * @param priv_node_id New Private Node Identity state, must be either @ref 459 * BT_MESH_FEATURE_ENABLED or @ref BT_MESH_FEATURE_DISABLED. 460 * 461 * @retval STATUS_SUCCESS Successfully set the Private Node Identity state of the Subnet. 462 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 463 * @retval STATUS_FEAT_NOT_SUPP The Private Node Identity feature is not supported. 464 * @retval STATUS_TEMP_STATE_CHG_FAIL The Private Node Identity state cannot be enabled, because 465 * Node Identity state is already enabled. 466 * @retval STATUS_CANNOT_SET Couldn't set the Private Node Identity state. 467 */ 468 uint8_t bt_mesh_subnet_priv_node_id_set(uint16_t net_idx, 469 enum bt_mesh_feat_state priv_node_id); 470 471 /** @brief Get the Private Node Identity state of the Subnet. 472 * 473 * @param net_idx Network index. 474 * @param priv_node_id Private Node Identity variable to fill. 475 * 476 * @retval STATUS_SUCCESS Successfully populated the @c priv_node_id variable. 477 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 478 */ 479 uint8_t bt_mesh_subnet_priv_node_id_get(uint16_t net_idx, 480 enum bt_mesh_feat_state *priv_node_id); 481 482 /** @brief Get a list of all known Subnet indexes. 483 * 484 * Builds a list of all known Subnet indexes in the @c net_idxs array. 485 * If the @c net_idxs array is smaller than the list of known Subnets, this 486 * function fills all available entries and returns @c -ENOMEM. In this 487 * case, the next @c max entries of the list can be read out by calling 488 * @code 489 * bt_mesh_subnets_get(list, max, max); 490 * @endcode 491 * 492 * Note that any changes to the Subnet list between calls to this function 493 * could change the order and number of entries in the list. 494 * 495 * @param net_idxs Array to fill. 496 * @param max Max number of indexes to return. 497 * @param skip Number of indexes to skip. Enables batched processing of the 498 * list. 499 * 500 * @return The number of indexes added to the @c net_idxs array, or @c -ENOMEM 501 * if the number of known Subnets exceeds the @c max parameter. 502 */ 503 ssize_t bt_mesh_subnets_get(uint16_t net_idxs[], size_t max, off_t skip); 504 505 /** 506 * @} 507 */ 508 509 /** 510 * @brief Application Configuration 511 * @defgroup bt_mesh_cfg_app Application Configuration 512 * @{ 513 */ 514 515 /** @brief Add an Application key. 516 * 517 * Adds the Application with the given index to the list of known applications. 518 * Allows the node to send and receive model messages encrypted with this 519 * Application key. 520 * 521 * Every Application is bound to a specific Subnet. The node must know the 522 * Subnet the Application is bound to before it can add the Application. 523 * 524 * @param app_idx Application index. 525 * @param net_idx Network index the Application is bound to. 526 * @param key Application key value. 527 * 528 * @retval STATUS_SUCCESS The Application was successfully added. 529 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 530 * @retval STATUS_INSUFF_RESOURCES There's no room for storing this 531 * Application. 532 * @retval STATUS_INVALID_BINDING This AppIdx is already bound to another 533 * Subnet. 534 * @retval STATUS_IDX_ALREADY_STORED This AppIdx is already stored with a 535 * different key value. 536 * @retval STATUS_CANNOT_SET Cannot set the Application key for some reason. 537 */ 538 uint8_t bt_mesh_app_key_add(uint16_t app_idx, uint16_t net_idx, 539 const uint8_t key[16]); 540 541 /** @brief Update an Application key. 542 * 543 * Update an Application with a second Application key, as part of the 544 * Key Refresh procedure of the bound Subnet. The node will continue 545 * transmitting with the old application key (but receiving on both) until the 546 * Subnet enters Key Refresh phase 2. Once the Subnet enters Key Refresh phase 547 * 3, the old application key will be deleted. 548 * 549 * @note The Application key can only be updated if the bound Subnet is in Key 550 * Refresh phase 1. 551 * 552 * @param app_idx Application index. 553 * @param net_idx Network index the Application is bound to, or 554 * @ref BT_MESH_KEY_ANY to skip the binding check. 555 * @param key New key value. 556 * 557 * @retval STATUS_SUCCESS The Application key was successfully updated. 558 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 559 * @retval STATUS_INVALID_BINDING This AppIdx is not bound to the given NetIdx. 560 * @retval STATUS_CANNOT_UPDATE The Application key cannot be updated for some 561 * reason. 562 * @retval STATUS_IDX_ALREADY_STORED This AppIdx is already updated with a 563 * different key value. 564 */ 565 uint8_t bt_mesh_app_key_update(uint16_t app_idx, uint16_t net_idx, 566 const uint8_t key[16]); 567 568 /** @brief Delete an Application key. 569 * 570 * All models bound to this application will remove this binding. 571 * All models publishing with this application will stop publishing. 572 * 573 * @param app_idx Application index. 574 * @param net_idx Network index. 575 * 576 * @retval STATUS_SUCCESS The Application key was successfully deleted. 577 * @retval STATUS_INVALID_NETKEY The NetIdx is unknown. 578 * @retval STATUS_INVALID_BINDING This AppIdx is not bound to the given NetIdx. 579 */ 580 uint8_t bt_mesh_app_key_del(uint16_t app_idx, uint16_t net_idx); 581 582 /** @brief Check if an Application key is known. 583 * 584 * @param app_idx Application index. 585 * 586 * @return true if the Application is known, false otherwise. 587 */ 588 bool bt_mesh_app_key_exists(uint16_t app_idx); 589 590 /** @brief Get a list of all known Application key indexes. 591 * 592 * Builds a list of all Application indexes for the given network index in the 593 * @c app_idxs array. If the @c app_idxs array cannot fit all bound 594 * Applications, this function fills all available entries and returns @c 595 * -ENOMEM. In this case, the next @c max entries of the list can be read out 596 * by calling 597 * @code 598 * bt_mesh_app_keys_get(net_idx, list, max, max); 599 * @endcode 600 * 601 * Note that any changes to the Application key list between calls to this 602 * function could change the order and number of entries in the list. 603 * 604 * @param net_idx Network Index to get the Applications of, or @ref 605 * BT_MESH_KEY_ANY to get all Applications. 606 * @param app_idxs Array to fill. 607 * @param max Max number of indexes to return. 608 * @param skip Number of indexes to skip. Enables batched processing of the 609 * list. 610 * 611 * @return The number of indexes added to the @c app_idxs array, or @c -ENOMEM 612 * if the number of known Applications exceeds the @c max parameter. 613 */ 614 ssize_t bt_mesh_app_keys_get(uint16_t net_idx, uint16_t app_idxs[], size_t max, 615 off_t skip); 616 617 /** 618 * @} 619 */ 620 621 #ifdef __cplusplus 622 } 623 #endif 624 625 /** 626 * @} 627 */ 628 629 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_H_ */ 630