blob: eefb0e86e7366e5c4004c31c7bb167560b65449a [file] [log] [blame]
/** @file
* @brief Configuration Client Model APIs.
*/
/*
* Copyright (c) 2017 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_CLI_H_
#define ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_CLI_H_
/**
* @brief Configuration Client Model
* @defgroup bt_mesh_cfg_cli Configuration Client Model
* @ingroup bt_mesh
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
struct bt_mesh_cfg_cli;
/** Mesh Configuration Client Status messages callback */
struct bt_mesh_cfg_cli_cb {
/** @brief Optional callback for Model Sub Status messages.
*
* Handles received Model Sub Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
* @param elem_addr The unicast address of the element.
* @param sub_addr The sub address.
* @param mod_id The model ID within the element.
*/
void (*mod_sub_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status, uint16_t elem_addr,
uint16_t sub_addr, uint32_t mod_id);
/** @brief Optional callback for Node Reset Status messages.
*
* Handles received Node Reset Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
*/
void (*node_reset_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr);
/** @brief Optional callback for Beacon Status messages.
*
* Handles received Beacon Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
*/
void (*beacon_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status);
/** @brief Optional callback for Default TTL Status messages.
*
* Handles received Default TTL Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
*/
void (*ttl_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status);
/** @brief Optional callback for Friend Status messages.
*
* Handles received Friend Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
*/
void (*friend_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status);
/** @brief Optional callback for GATT Proxy Status messages.
*
* Handles received GATT Proxy Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
*/
void (*gatt_proxy_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status);
/** @brief Optional callback for Network Transmit Status messages.
*
* Handles received Network Transmit Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
*/
void (*network_transmit_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status);
/** @brief Optional callback for Relay Status messages.
*
* Handles received Relay Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
* @param transmit The relay retransmit count and interval steps.
*/
void (*relay_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status, uint8_t transmit);
/** @brief Optional callback for NetKey Status messages.
*
* Handles received NetKey Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
* @param net_idx The index of the NetKey.
*/
void (*net_key_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status, uint16_t net_idx);
/** @brief Optional callback for AppKey Status messages.
*
* Handles received AppKey Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
* @param net_idx The index of the NetKey.
* @param app_idx The index of the AppKey.
*/
void (*app_key_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status, uint16_t net_idx,
uint16_t app_idx);
/** @brief Optional callback for Model App Status messages.
*
* Handles received Model App Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
* @param elem_addr The unicast address of the element.
* @param app_idx The sub address.
* @param mod_id The model ID within the element.
*/
void (*mod_app_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status, uint16_t elem_addr,
uint16_t app_idx, uint32_t mod_id);
/** @brief Optional callback for Node Identity Status messages.
*
* Handles received Node Identity Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param status Status Code for requesting message.
* @param net_idx The index of the NetKey.
* @param identity The node identity state.
*/
void (*node_identity_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint8_t status, uint16_t net_idx,
uint8_t identity);
/** @brief Optional callback for LPN PollTimeout Status messages.
*
* Handles received LPN PollTimeout Status messages from a server.
*
* @param cli Client that received the status message.
* @param addr Address of the sender.
* @param elem_addr The unicast address of the LPN.
* @param timeout Current value of PollTimeout timer of the LPN.
*/
void (*lpn_timeout_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
uint16_t elem_addr, uint32_t timeout);
};
/** Mesh Configuration Client Model Context */
struct bt_mesh_cfg_cli {
/** Composition data model entry pointer. */
struct bt_mesh_model *model;
/** Optional callback for Mesh Configuration Client Status messages. */
const struct bt_mesh_cfg_cli_cb *cb;
/* Internal parameters for tracking message responses. */
struct bt_mesh_msg_ack_ctx ack_ctx;
};
/**
* @brief Generic Configuration Client model composition data entry.
*
* @param cli_data Pointer to a @ref bt_mesh_cfg_cli instance.
*/
#define BT_MESH_MODEL_CFG_CLI(cli_data) \
BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_CFG_CLI, bt_mesh_cfg_cli_op, NULL, \
cli_data, &bt_mesh_cfg_cli_cb)
/** @brief Reset the target node and remove it from the network.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_node_reset(uint16_t net_idx, uint16_t addr, bool *status);
/** @brief Get the target node's composition data.
*
* If the other device does not have the given composition data page, it will
* return the largest page number it supports that is less than the requested
* page index. The actual page the device responds with is returned in @c rsp.
*
* This method can be used asynchronously by setting @p rsp and @p comp
* as NULL. This way the method will not wait for response and will return
* immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param page Composition data page, or 0xff to request the first available
* page.
* @param rsp Return parameter for the returned page number, or NULL.
* @param comp Composition data buffer to fill.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_comp_data_get(uint16_t net_idx, uint16_t addr, uint8_t page,
uint8_t *rsp, struct net_buf_simple *comp);
/** @brief Get the target node's network beacon state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter, returns one of
* @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED
* on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_beacon_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
/** @brief Get the target node's network key refresh phase state.
*
* This method can be used asynchronously by setting @p status and @p phase
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param status Status response parameter.
* @param phase Pointer to the Key Refresh variable to fill.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_krp_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t *status, uint8_t *phase);
/** @brief Set the target node's network key refresh phase parameters.
*
* This method can be used asynchronously by setting @p status and @p phase
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param transition Transition parameter.
* @param status Status response parameter.
* @param phase Pointer to the new Key Refresh phase. Will return the actual
* Key Refresh phase after updating.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_krp_set(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t transition, uint8_t *status, uint8_t *phase);
/** @brief Set the target node's network beacon state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New network beacon state, should be one of
* @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED
* on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_beacon_set(uint16_t net_idx, uint16_t addr, uint8_t val,
uint8_t *status);
/** @brief Get the target node's Time To Live value.
*
* This method can be used asynchronously by setting @p ttl
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param ttl TTL response buffer.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_ttl_get(uint16_t net_idx, uint16_t addr, uint8_t *ttl);
/** @brief Set the target node's Time To Live value.
*
* This method can be used asynchronously by setting @p ttl
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New Time To Live value.
* @param ttl TTL response buffer.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_ttl_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *ttl);
/** @brief Get the target node's Friend feature status.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_FRIEND_DISABLED, @ref BT_MESH_FRIEND_ENABLED or
* @ref BT_MESH_FRIEND_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_friend_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
/** @brief Set the target node's Friend feature state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New Friend feature state. Should be one of
* @ref BT_MESH_FRIEND_DISABLED or
* @ref BT_MESH_FRIEND_ENABLED.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_FRIEND_DISABLED, @ref BT_MESH_FRIEND_ENABLED or
* @ref BT_MESH_FRIEND_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_friend_set(uint16_t net_idx, uint16_t addr, uint8_t val,
uint8_t *status);
/** @brief Get the target node's Proxy feature state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_GATT_PROXY_DISABLED,
* @ref BT_MESH_GATT_PROXY_ENABLED or
* @ref BT_MESH_GATT_PROXY_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_gatt_proxy_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
/** @brief Set the target node's Proxy feature state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New Proxy feature state. Must be one of
* @ref BT_MESH_GATT_PROXY_DISABLED or
* @ref BT_MESH_GATT_PROXY_ENABLED.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_GATT_PROXY_DISABLED,
* @ref BT_MESH_GATT_PROXY_ENABLED or
* @ref BT_MESH_GATT_PROXY_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_gatt_proxy_set(uint16_t net_idx, uint16_t addr, uint8_t val,
uint8_t *status);
/** @brief Get the target node's network_transmit state.
*
* This method can be used asynchronously by setting @p transmit
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param transmit Network transmit response parameter. Returns the encoded
* network transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_net_transmit_get(uint16_t net_idx, uint16_t addr, uint8_t *transmit);
/** @brief Set the target node's network transmit parameters.
*
* This method can be used asynchronously by setting @p transmit
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New encoded network transmit parameters.
* @see BT_MESH_TRANSMIT.
* @param transmit Network transmit response parameter. Returns the encoded
* network transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_net_transmit_set(uint16_t net_idx, uint16_t addr, uint8_t val,
uint8_t *transmit);
/** @brief Get the target node's Relay feature state.
*
* This method can be used asynchronously by setting @p status and @p transmit
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_RELAY_DISABLED, @ref BT_MESH_RELAY_ENABLED or
* @ref BT_MESH_RELAY_NOT_SUPPORTED on success.
* @param transmit Transmit response parameter. Returns the encoded relay
* transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_relay_get(uint16_t net_idx, uint16_t addr, uint8_t *status,
uint8_t *transmit);
/** @brief Set the target node's Relay parameters.
*
* This method can be used asynchronously by setting @p status
* and @p transmit as NULL. This way the method will not wait for
* response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param new_relay New relay state. Must be one of
* @ref BT_MESH_RELAY_DISABLED or
* @ref BT_MESH_RELAY_ENABLED.
* @param new_transmit New encoded relay transmit parameters.
* @see BT_MESH_TRANSMIT.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_RELAY_DISABLED, @ref BT_MESH_RELAY_ENABLED
* or @ref BT_MESH_RELAY_NOT_SUPPORTED on success.
* @param transmit Transmit response parameter. Returns the encoded relay
* transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and
* @ref BT_MESH_TRANSMIT_INT.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_relay_set(uint16_t net_idx, uint16_t addr, uint8_t new_relay,
uint8_t new_transmit, uint8_t *status, uint8_t *transmit);
/** @brief Add a network key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param net_key Network key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_net_key_add(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
const uint8_t net_key[16], uint8_t *status);
/** @brief Get a list of the target node's network key indexes.
*
* This method can be used asynchronously by setting @p keys
* or @p key_cnt as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param keys Net key index list response parameter. Will be filled with
* all the returned network key indexes it can fill.
* @param key_cnt Net key index list length. Should be set to the
* capacity of the @c keys list when calling. Will return the
* number of returned network key indexes upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_net_key_get(uint16_t net_idx, uint16_t addr, uint16_t *keys,
size_t *key_cnt);
/** @brief Delete a network key from the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_net_key_del(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t *status);
/** @brief Add an application key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param key_app_idx Application key index.
* @param app_key Application key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_app_key_add(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint16_t key_app_idx, const uint8_t app_key[16],
uint8_t *status);
/** @brief Get a list of the target node's application key indexes for a
* specific network key.
*
* This method can be used asynchronously by setting @p status and
* ( @p keys or @p key_cnt ) as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index to request the app key indexes of.
* @param status Status response parameter.
* @param keys App key index list response parameter. Will be filled
* with all the returned application key indexes it can
* fill.
* @param key_cnt App key index list length. Should be set to the
* capacity of the @c keys list when calling. Will return
* the number of returned application key indexes upon
* success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_app_key_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t *status, uint16_t *keys, size_t *key_cnt);
/** @brief Delete an application key from the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param key_app_idx Application key index.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_app_key_del(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint16_t key_app_idx, uint8_t *status);
/** @brief Bind an application to a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to bind.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_app_bind(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint8_t *status);
/** @brief Unbind an application from a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to unbind.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_app_unbind(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint8_t *status);
/** @brief Bind an application to a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to bind.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_app_bind_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Unbind an application from a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to unbind.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_app_unbind_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Get a list of all applications bound to a SIG model on the target
* node.
*
* This method can be used asynchronously by setting @p status
* and ( @p apps or @p app_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param status Status response parameter.
* @param apps App index list response parameter. Will be filled with all
* the returned application key indexes it can fill.
* @param app_cnt App index list length. Should be set to the capacity of the
* @c apps list when calling. Will return the number of
* returned application key indexes upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_app_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint8_t *status, uint16_t *apps,
size_t *app_cnt);
/** @brief Get a list of all applications bound to a vendor model on the target
* node.
*
* This method can be used asynchronously by setting @p status
* and ( @p apps or @p app_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
* @param apps App index list response parameter. Will be filled with all
* the returned application key indexes it can fill.
* @param app_cnt App index list length. Should be set to the capacity of the
* @c apps list when calling. Will return the number of
* returned application key indexes upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_app_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid, uint8_t *status,
uint16_t *apps, size_t *app_cnt);
/**
*
* @brief Helper macro to encode model publication period in units of 100ms
*
* @param steps Number of 100ms steps.
*
* @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
*/
#define BT_MESH_PUB_PERIOD_100MS(steps) ((steps) & BIT_MASK(6))
/**
* @brief Helper macro to encode model publication period in units of 1 second
*
* @param steps Number of 1 second steps.
*
* @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
*/
#define BT_MESH_PUB_PERIOD_SEC(steps) (((steps) & BIT_MASK(6)) | (1 << 6))
/**
*
* @brief Helper macro to encode model publication period in units of 10
* seconds
*
* @param steps Number of 10 second steps.
*
* @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
*/
#define BT_MESH_PUB_PERIOD_10SEC(steps) (((steps) & BIT_MASK(6)) | (2 << 6))
/**
*
* @brief Helper macro to encode model publication period in units of 10
* minutes
*
* @param steps Number of 10 minute steps.
*
* @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
*/
#define BT_MESH_PUB_PERIOD_10MIN(steps) (((steps) & BIT_MASK(6)) | (3 << 6))
/** Model publication configuration parameters. */
__deprecated struct bt_mesh_cfg_mod_pub {
/** Publication destination address. */
uint16_t addr;
/** Virtual address UUID, or NULL if this is not a virtual address. */
const uint8_t *uuid;
/** Application index to publish with. */
uint16_t app_idx;
/** Friendship credential flag. */
bool cred_flag;
/** Time To Live to publish with. */
uint8_t ttl;
/**
* Encoded publish period.
* @see BT_MESH_PUB_PERIOD_100MS, BT_MESH_PUB_PERIOD_SEC,
* BT_MESH_PUB_PERIOD_10SEC,
* BT_MESH_PUB_PERIOD_10MIN
*/
uint8_t period;
/**
* Encoded transmit parameters.
* @see BT_MESH_TRANSMIT
*/
uint8_t transmit;
};
/** Model publication configuration parameters. */
struct bt_mesh_cfg_cli_mod_pub {
/** Publication destination address. */
uint16_t addr;
/** Virtual address UUID, or NULL if this is not a virtual address. */
const uint8_t *uuid;
/** Application index to publish with. */
uint16_t app_idx;
/** Friendship credential flag. */
bool cred_flag;
/** Time To Live to publish with. */
uint8_t ttl;
/**
* Encoded publish period.
* @see BT_MESH_PUB_PERIOD_100MS, BT_MESH_PUB_PERIOD_SEC,
* BT_MESH_PUB_PERIOD_10SEC,
* BT_MESH_PUB_PERIOD_10MIN
*/
uint8_t period;
/**
* Encoded transmit parameters.
* @see BT_MESH_TRANSMIT
*/
uint8_t transmit;
};
/** @brief Get publish parameters for a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status and
* @p pub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param pub Publication parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_pub_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, struct bt_mesh_cfg_mod_pub *pub,
uint8_t *status);
/** @brief Get publish parameters for a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* and @p pub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param pub Publication parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_pub_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid,
struct bt_mesh_cfg_mod_pub *pub, uint8_t *status);
/** @brief Set publish parameters for a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p pub shall not be NULL.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param pub Publication parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_pub_set(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, struct bt_mesh_cfg_mod_pub *pub,
uint8_t *status);
/** @brief Set publish parameters for a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p pub shall not be NULL.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param pub Publication parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_pub_set_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid,
struct bt_mesh_cfg_mod_pub *pub, uint8_t *status);
/** @brief Add a group address to a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_add(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
/** @brief Add a group address to a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_add_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Delete a group address in a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_del(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
/** @brief Delete a group address in a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_del_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Overwrite all addresses in a SIG model's subscription list with a
* group address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_overwrite(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
/** @brief Overwrite all addresses in a vendor model's subscription list with a
* group address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_overwrite_vnd(uint16_t net_idx, uint16_t addr,
uint16_t elem_addr, uint16_t sub_addr,
uint16_t mod_id, uint16_t cid, uint8_t *status);
/** @brief Add a virtual address to a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_va_add(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id,
uint16_t *virt_addr, uint8_t *status);
/** @brief Add a virtual address to a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_va_add_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id,
uint16_t cid, uint16_t *virt_addr, uint8_t *status);
/** @brief Delete a virtual address in a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address parameter to add to the subscription list.
* @param mod_id Model ID.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_va_del(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id,
uint16_t *virt_addr, uint8_t *status);
/** @brief Delete a virtual address in a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_va_del_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id,
uint16_t cid, uint16_t *virt_addr, uint8_t *status);
/** @brief Overwrite all addresses in a SIG model's subscription list with a
* virtual address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_va_overwrite(uint16_t net_idx, uint16_t addr,
uint16_t elem_addr, const uint8_t label[16],
uint16_t mod_id, uint16_t *virt_addr,
uint8_t *status);
/** @brief Overwrite all addresses in a vendor model's subscription list with a
* virtual address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_va_overwrite_vnd(uint16_t net_idx, uint16_t addr,
uint16_t elem_addr, const uint8_t label[16],
uint16_t mod_id, uint16_t cid,
uint16_t *virt_addr, uint8_t *status);
/** @brief Get the subscription list of a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status and
* ( @p subs or @p sub_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param status Status response parameter.
* @param subs Subscription list response parameter. Will be filled with
* all the returned subscriptions it can fill.
* @param sub_cnt Subscription list element count. Should be set to the
* capacity of the @c subs list when calling. Will return the
* number of returned subscriptions upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint8_t *status, uint16_t *subs,
size_t *sub_cnt);
/** @brief Get the subscription list of a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status and
* ( @p subs or @p sub_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
* @param subs Subscription list response parameter. Will be filled with
* all the returned subscriptions it can fill.
* @param sub_cnt Subscription list element count. Should be set to the
* capacity of the @c subs list when calling. Will return the
* number of returned subscriptions upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid, uint8_t *status,
uint16_t *subs, size_t *sub_cnt);
/** Heartbeat subscription configuration parameters. */
__deprecated struct bt_mesh_cfg_hb_sub {
/** Source address to receive Heartbeat messages from. */
uint16_t src;
/** Destination address to receive Heartbeat messages on. */
uint16_t dst;
/**
* Logarithmic subscription period to keep listening for.
* The decoded subscription period is (1 << (period - 1)) seconds, or 0
* seconds if period is 0.
*/
uint8_t period;
/**
* Logarithmic Heartbeat subscription receive count.
* The decoded Heartbeat count is (1 << (count - 1)) if count is
* between 1 and 0xfe, 0 if count is 0 and 0xffff if count is 0xff.
*
* Ignored in Heartbeat subscription set.
*/
uint8_t count;
/**
* Minimum hops in received messages, ie the shortest registered path
* from the publishing node to the subscribing node. A Heartbeat
* received from an immediate neighbor has hop count = 1.
*
* Ignored in Heartbeat subscription set.
*/
uint8_t min;
/**
* Maximum hops in received messages, ie the longest registered path
* from the publishing node to the subscribing node. A Heartbeat
* received from an immediate neighbor has hop count = 1.
*
* Ignored in Heartbeat subscription set.
*/
uint8_t max;
};
/** Heartbeat subscription configuration parameters. */
struct bt_mesh_cfg_cli_hb_sub {
/** Source address to receive Heartbeat messages from. */
uint16_t src;
/** Destination address to receive Heartbeat messages on. */
uint16_t dst;
/**
* Logarithmic subscription period to keep listening for.
* The decoded subscription period is (1 << (period - 1)) seconds, or 0
* seconds if period is 0.
*/
uint8_t period;
/**
* Logarithmic Heartbeat subscription receive count.
* The decoded Heartbeat count is (1 << (count - 1)) if count is
* between 1 and 0xfe, 0 if count is 0 and 0xffff if count is 0xff.
*
* Ignored in Heartbeat subscription set.
*/
uint8_t count;
/**
* Minimum hops in received messages, ie the shortest registered path
* from the publishing node to the subscribing node. A Heartbeat
* received from an immediate neighbor has hop count = 1.
*
* Ignored in Heartbeat subscription set.
*/
uint8_t min;
/**
* Maximum hops in received messages, ie the longest registered path
* from the publishing node to the subscribing node. A Heartbeat
* received from an immediate neighbor has hop count = 1.
*
* Ignored in Heartbeat subscription set.
*/
uint8_t max;
};
/** @brief Set the target node's Heartbeat subscription parameters.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p sub shall not be null.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param sub New Heartbeat subscription parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_hb_sub_set(uint16_t net_idx, uint16_t addr,
struct bt_mesh_cfg_hb_sub *sub, uint8_t *status);
/** @brief Get the target node's Heartbeat subscription parameters.
*
* This method can be used asynchronously by setting @p status
* and @p sub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param sub Heartbeat subscription parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_hb_sub_get(uint16_t net_idx, uint16_t addr,
struct bt_mesh_cfg_hb_sub *sub, uint8_t *status);
/** Heartbeat publication configuration parameters. */
__deprecated struct bt_mesh_cfg_hb_pub {
/** Heartbeat destination address. */
uint16_t dst;
/**
* Logarithmic Heartbeat count. Decoded as (1 << (count - 1)) if count
* is between 1 and 0x11, 0 if count is 0, or "indefinitely" if count is
* 0xff.
*
* When used in Heartbeat publication set, this parameter denotes the
* number of Heartbeat messages to send.
*
* When returned from Heartbeat publication get, this parameter denotes
* the number of Heartbeat messages remaining to be sent.
*/
uint8_t count;
/**
* Logarithmic Heartbeat publication transmit interval in seconds.
* Decoded as (1 << (period - 1)) if period is between 1 and 0x11.
* If period is 0, Heartbeat publication is disabled.
*/
uint8_t period;
/** Publication message Time To Live value. */
uint8_t ttl;
/**
* Bitmap of features that trigger Heartbeat publications.
* Legal values are @ref BT_MESH_FEAT_RELAY,
* @ref BT_MESH_FEAT_PROXY, @ref BT_MESH_FEAT_FRIEND and
* @ref BT_MESH_FEAT_LOW_POWER
*/
uint16_t feat;
/** Network index to publish with. */
uint16_t net_idx;
};
/** Heartbeat publication configuration parameters. */
struct bt_mesh_cfg_cli_hb_pub {
/** Heartbeat destination address. */
uint16_t dst;
/**
* Logarithmic Heartbeat count. Decoded as (1 << (count - 1)) if count
* is between 1 and 0x11, 0 if count is 0, or "indefinitely" if count is
* 0xff.
*
* When used in Heartbeat publication set, this parameter denotes the
* number of Heartbeat messages to send.
*
* When returned from Heartbeat publication get, this parameter denotes
* the number of Heartbeat messages remaining to be sent.
*/
uint8_t count;
/**
* Logarithmic Heartbeat publication transmit interval in seconds.
* Decoded as (1 << (period - 1)) if period is between 1 and 0x11.
* If period is 0, Heartbeat publication is disabled.
*/
uint8_t period;
/** Publication message Time To Live value. */
uint8_t ttl;
/**
* Bitmap of features that trigger Heartbeat publications.
* Legal values are @ref BT_MESH_FEAT_RELAY,
* @ref BT_MESH_FEAT_PROXY, @ref BT_MESH_FEAT_FRIEND and
* @ref BT_MESH_FEAT_LOW_POWER
*/
uint16_t feat;
/** Network index to publish with. */
uint16_t net_idx;
};
/** @brief Set the target node's Heartbeat publication parameters.
*
* @note The target node must already have received the specified network key.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p pub shall not be NULL;
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param pub New Heartbeat publication parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_hb_pub_set(uint16_t net_idx, uint16_t addr,
const struct bt_mesh_cfg_hb_pub *pub, uint8_t *status);
/** @brief Get the target node's Heartbeat publication parameters.
*
* This method can be used asynchronously by setting @p status
* and @p pub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param pub Heartbeat publication parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_hb_pub_get(uint16_t net_idx, uint16_t addr,
struct bt_mesh_cfg_hb_pub *pub, uint8_t *status);
/** @brief Delete all group addresses in a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_del_all(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint8_t *status);
/** @brief Delete all group addresses in a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_mod_sub_del_all_vnd(uint16_t net_idx, uint16_t addr,
uint16_t elem_addr, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Update a network key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param net_key Network key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_net_key_update(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
const uint8_t net_key[16], uint8_t *status);
/** @brief Update an application key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param key_app_idx Application key index.
* @param app_key Application key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_app_key_update(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint16_t key_app_idx, const uint8_t app_key[16],
uint8_t *status);
/** @brief Set the Node Identity parameters.
*
* This method can be used asynchronously by setting @p status
* and @p identity as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param new_identity New identity state. Must be one of
* @ref BT_MESH_NODE_IDENTITY_STOPPED or
* @ref BT_MESH_NODE_IDENTITY_RUNNING
* @param key_net_idx Network key index the application key belongs to.
* @param status Status response parameter.
* @param identity Identity response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_node_identity_set(uint16_t net_idx, uint16_t addr,
uint16_t key_net_idx, uint8_t new_identity,
uint8_t *status, uint8_t *identity);
/** @brief Get the Node Identity parameters.
*
* This method can be used asynchronously by setting @p status
* and @p identity as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param status Status response parameter.
* @param identity Identity response parameter. Must be one of
* @ref BT_MESH_NODE_IDENTITY_STOPPED or
* @ref BT_MESH_NODE_IDENTITY_RUNNING
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_node_identity_get(uint16_t net_idx, uint16_t addr,
uint16_t key_net_idx, uint8_t *status,
uint8_t *identity);
/** @brief Get the Low Power Node Polltimeout parameters.
*
* This method can be used asynchronously by setting @p polltimeout
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param unicast_addr LPN unicast address.
* @param polltimeout Poll timeout response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
__deprecated int bt_mesh_cfg_lpn_timeout_get(uint16_t net_idx, uint16_t addr, uint16_t unicast_addr,
int32_t *polltimeout);
/** @brief Reset the target node and remove it from the network.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_node_reset(uint16_t net_idx, uint16_t addr, bool *status);
/** @brief Get the target node's composition data.
*
* If the other device does not have the given composition data page, it will
* return the largest page number it supports that is less than the requested
* page index. The actual page the device responds with is returned in @c rsp.
*
* This method can be used asynchronously by setting @p rsp and @p comp
* as NULL. This way the method will not wait for response and will return
* immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param page Composition data page, or 0xff to request the first available
* page.
* @param rsp Return parameter for the returned page number, or NULL.
* @param comp Composition data buffer to fill.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_comp_data_get(uint16_t net_idx, uint16_t addr, uint8_t page, uint8_t *rsp,
struct net_buf_simple *comp);
/** @brief Get the target node's network beacon state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter, returns one of
* @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED
* on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_beacon_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
/** @brief Get the target node's network key refresh phase state.
*
* This method can be used asynchronously by setting @p status and @p phase
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param status Status response parameter.
* @param phase Pointer to the Key Refresh variable to fill.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_krp_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx, uint8_t *status,
uint8_t *phase);
/** @brief Set the target node's network key refresh phase parameters.
*
* This method can be used asynchronously by setting @p status and @p phase
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param transition Transition parameter.
* @param status Status response parameter.
* @param phase Pointer to the new Key Refresh phase. Will return the actual
* Key Refresh phase after updating.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_krp_set(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t transition, uint8_t *status, uint8_t *phase);
/** @brief Set the target node's network beacon state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New network beacon state, should be one of
* @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED
* on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_beacon_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *status);
/** @brief Get the target node's Time To Live value.
*
* This method can be used asynchronously by setting @p ttl
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param ttl TTL response buffer.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_ttl_get(uint16_t net_idx, uint16_t addr, uint8_t *ttl);
/** @brief Set the target node's Time To Live value.
*
* This method can be used asynchronously by setting @p ttl
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New Time To Live value.
* @param ttl TTL response buffer.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_ttl_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *ttl);
/** @brief Get the target node's Friend feature status.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_FRIEND_DISABLED, @ref BT_MESH_FRIEND_ENABLED or
* @ref BT_MESH_FRIEND_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_friend_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
/** @brief Set the target node's Friend feature state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New Friend feature state. Should be one of
* @ref BT_MESH_FRIEND_DISABLED or
* @ref BT_MESH_FRIEND_ENABLED.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_FRIEND_DISABLED, @ref BT_MESH_FRIEND_ENABLED or
* @ref BT_MESH_FRIEND_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_friend_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *status);
/** @brief Get the target node's Proxy feature state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_GATT_PROXY_DISABLED,
* @ref BT_MESH_GATT_PROXY_ENABLED or
* @ref BT_MESH_GATT_PROXY_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_gatt_proxy_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
/** @brief Set the target node's Proxy feature state.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New Proxy feature state. Must be one of
* @ref BT_MESH_GATT_PROXY_DISABLED or
* @ref BT_MESH_GATT_PROXY_ENABLED.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_GATT_PROXY_DISABLED,
* @ref BT_MESH_GATT_PROXY_ENABLED or
* @ref BT_MESH_GATT_PROXY_NOT_SUPPORTED on success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_gatt_proxy_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *status);
/** @brief Get the target node's network_transmit state.
*
* This method can be used asynchronously by setting @p transmit
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param transmit Network transmit response parameter. Returns the encoded
* network transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_net_transmit_get(uint16_t net_idx, uint16_t addr, uint8_t *transmit);
/** @brief Set the target node's network transmit parameters.
*
* This method can be used asynchronously by setting @p transmit
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param val New encoded network transmit parameters.
* @see BT_MESH_TRANSMIT.
* @param transmit Network transmit response parameter. Returns the encoded
* network transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_net_transmit_set(uint16_t net_idx, uint16_t addr, uint8_t val,
uint8_t *transmit);
/** @brief Get the target node's Relay feature state.
*
* This method can be used asynchronously by setting @p status and @p transmit
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_RELAY_DISABLED, @ref BT_MESH_RELAY_ENABLED or
* @ref BT_MESH_RELAY_NOT_SUPPORTED on success.
* @param transmit Transmit response parameter. Returns the encoded relay
* transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_relay_get(uint16_t net_idx, uint16_t addr, uint8_t *status, uint8_t *transmit);
/** @brief Set the target node's Relay parameters.
*
* This method can be used asynchronously by setting @p status
* and @p transmit as NULL. This way the method will not wait for
* response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param new_relay New relay state. Must be one of
* @ref BT_MESH_RELAY_DISABLED or
* @ref BT_MESH_RELAY_ENABLED.
* @param new_transmit New encoded relay transmit parameters.
* @see BT_MESH_TRANSMIT.
* @param status Status response parameter. Returns one of
* @ref BT_MESH_RELAY_DISABLED, @ref BT_MESH_RELAY_ENABLED
* or @ref BT_MESH_RELAY_NOT_SUPPORTED on success.
* @param transmit Transmit response parameter. Returns the encoded relay
* transmission parameters on success. Decoded with
* @ref BT_MESH_TRANSMIT_COUNT and
* @ref BT_MESH_TRANSMIT_INT.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_relay_set(uint16_t net_idx, uint16_t addr, uint8_t new_relay,
uint8_t new_transmit, uint8_t *status, uint8_t *transmit);
/** @brief Add a network key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param net_key Network key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_net_key_add(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
const uint8_t net_key[16], uint8_t *status);
/** @brief Get a list of the target node's network key indexes.
*
* This method can be used asynchronously by setting @p keys
* or @p key_cnt as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param keys Net key index list response parameter. Will be filled with
* all the returned network key indexes it can fill.
* @param key_cnt Net key index list length. Should be set to the
* capacity of the @c keys list when calling. Will return the
* number of returned network key indexes upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_net_key_get(uint16_t net_idx, uint16_t addr, uint16_t *keys, size_t *key_cnt);
/** @brief Delete a network key from the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_net_key_del(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t *status);
/** @brief Add an application key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param key_app_idx Application key index.
* @param app_key Application key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_app_key_add(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint16_t key_app_idx, const uint8_t app_key[16], uint8_t *status);
/** @brief Get a list of the target node's application key indexes for a
* specific network key.
*
* This method can be used asynchronously by setting @p status and
* ( @p keys or @p key_cnt ) as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index to request the app key indexes of.
* @param status Status response parameter.
* @param keys App key index list response parameter. Will be filled
* with all the returned application key indexes it can
* fill.
* @param key_cnt App key index list length. Should be set to the
* capacity of the @c keys list when calling. Will return
* the number of returned application key indexes upon
* success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_app_key_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t *status, uint16_t *keys, size_t *key_cnt);
/** @brief Delete an application key from the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param key_app_idx Application key index.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_app_key_del(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint16_t key_app_idx, uint8_t *status);
/** @brief Bind an application to a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to bind.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_app_bind(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint8_t *status);
/** @brief Unbind an application from a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to unbind.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_app_unbind(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint8_t *status);
/** @brief Bind an application to a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to bind.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_app_bind_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Unbind an application from a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response and will
* return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_app_idx Application index to unbind.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_app_unbind_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_app_idx, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Get a list of all applications bound to a SIG model on the target
* node.
*
* This method can be used asynchronously by setting @p status
* and ( @p apps or @p app_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param status Status response parameter.
* @param apps App index list response parameter. Will be filled with all
* the returned application key indexes it can fill.
* @param app_cnt App index list length. Should be set to the capacity of the
* @c apps list when calling. Will return the number of
* returned application key indexes upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_app_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint8_t *status, uint16_t *apps, size_t *app_cnt);
/** @brief Get a list of all applications bound to a vendor model on the target
* node.
*
* This method can be used asynchronously by setting @p status
* and ( @p apps or @p app_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
* @param apps App index list response parameter. Will be filled with all
* the returned application key indexes it can fill.
* @param app_cnt App index list length. Should be set to the capacity of the
* @c apps list when calling. Will return the number of
* returned application key indexes upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_app_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid, uint8_t *status, uint16_t *apps,
size_t *app_cnt);
/** @brief Get publish parameters for a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status and
* @p pub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param pub Publication parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_pub_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, struct bt_mesh_cfg_cli_mod_pub *pub,
uint8_t *status);
/** @brief Get publish parameters for a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* and @p pub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param pub Publication parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_pub_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid,
struct bt_mesh_cfg_cli_mod_pub *pub, uint8_t *status);
/** @brief Set publish parameters for a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p pub shall not be NULL.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param pub Publication parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_pub_set(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, struct bt_mesh_cfg_cli_mod_pub *pub,
uint8_t *status);
/** @brief Set publish parameters for a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p pub shall not be NULL.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param pub Publication parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_pub_set_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid,
struct bt_mesh_cfg_cli_mod_pub *pub, uint8_t *status);
/** @brief Add a group address to a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_add(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
/** @brief Add a group address to a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_add_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Delete a group address in a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_del(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
/** @brief Delete a group address in a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_del_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Overwrite all addresses in a SIG model's subscription list with a
* group address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_overwrite(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
/** @brief Overwrite all addresses in a vendor model's subscription list with a
* group address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param sub_addr Group address to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_overwrite_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
uint8_t *status);
/** @brief Add a virtual address to a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_va_add(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id, uint16_t *virt_addr,
uint8_t *status);
/** @brief Add a virtual address to a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_va_add_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id, uint16_t cid,
uint16_t *virt_addr, uint8_t *status);
/** @brief Delete a virtual address in a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address parameter to add to the subscription list.
* @param mod_id Model ID.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_va_del(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id, uint16_t *virt_addr,
uint8_t *status);
/** @brief Delete a virtual address in a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_va_del_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id, uint16_t cid,
uint16_t *virt_addr, uint8_t *status);
/** @brief Overwrite all addresses in a SIG model's subscription list with a
* virtual address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_va_overwrite(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id,
uint16_t *virt_addr, uint8_t *status);
/** @brief Overwrite all addresses in a vendor model's subscription list with a
* virtual address.
*
* Deletes all subscriptions in the model's subscription list, and adds a
* single group address instead.
*
* This method can be used asynchronously by setting @p status
* and @p virt_addr as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param label Virtual address label to add to the subscription list.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param virt_addr Virtual address response parameter.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_va_overwrite_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
const uint8_t label[16], uint16_t mod_id, uint16_t cid,
uint16_t *virt_addr, uint8_t *status);
/** @brief Get the subscription list of a SIG model on the target node.
*
* This method can be used asynchronously by setting @p status and
* ( @p subs or @p sub_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param status Status response parameter.
* @param subs Subscription list response parameter. Will be filled with
* all the returned subscriptions it can fill.
* @param sub_cnt Subscription list element count. Should be set to the
* capacity of the @c subs list when calling. Will return the
* number of returned subscriptions upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint8_t *status, uint16_t *subs, size_t *sub_cnt);
/** @brief Get the subscription list of a vendor model on the target node.
*
* This method can be used asynchronously by setting @p status and
* ( @p subs or @p sub_cnt ) as NULL. This way the method will
* not wait for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
* @param subs Subscription list response parameter. Will be filled with
* all the returned subscriptions it can fill.
* @param sub_cnt Subscription list element count. Should be set to the
* capacity of the @c subs list when calling. Will return the
* number of returned subscriptions upon success.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid, uint8_t *status, uint16_t *subs,
size_t *sub_cnt);
/** @brief Set the target node's Heartbeat subscription parameters.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p sub shall not be null.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param sub New Heartbeat subscription parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_hb_sub_set(uint16_t net_idx, uint16_t addr, struct bt_mesh_cfg_cli_hb_sub *sub,
uint8_t *status);
/** @brief Get the target node's Heartbeat subscription parameters.
*
* This method can be used asynchronously by setting @p status
* and @p sub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param sub Heartbeat subscription parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_hb_sub_get(uint16_t net_idx, uint16_t addr, struct bt_mesh_cfg_cli_hb_sub *sub,
uint8_t *status);
/** @brief Set the target node's Heartbeat publication parameters.
*
* @note The target node must already have received the specified network key.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @p pub shall not be NULL;
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param pub New Heartbeat publication parameters.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_hb_pub_set(uint16_t net_idx, uint16_t addr,
const struct bt_mesh_cfg_cli_hb_pub *pub, uint8_t *status);
/** @brief Get the target node's Heartbeat publication parameters.
*
* This method can be used asynchronously by setting @p status
* and @p pub as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param pub Heartbeat publication parameter return buffer.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_hb_pub_get(uint16_t net_idx, uint16_t addr, struct bt_mesh_cfg_cli_hb_pub *pub,
uint8_t *status);
/** @brief Delete all group addresses in a SIG model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_del_all(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint8_t *status);
/** @brief Delete all group addresses in a vendor model's subscription list.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param elem_addr Element address the model is in.
* @param mod_id Model ID.
* @param cid Company ID of the model.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_mod_sub_del_all_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
uint16_t mod_id, uint16_t cid, uint8_t *status);
/** @brief Update a network key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index.
* @param net_key Network key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_net_key_update(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
const uint8_t net_key[16], uint8_t *status);
/** @brief Update an application key to the target node.
*
* This method can be used asynchronously by setting @p status
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param key_app_idx Application key index.
* @param app_key Application key.
* @param status Status response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_app_key_update(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint16_t key_app_idx, const uint8_t app_key[16],
uint8_t *status);
/** @brief Set the Node Identity parameters.
*
* This method can be used asynchronously by setting @p status
* and @p identity as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param new_identity New identity state. Must be one of
* @ref BT_MESH_NODE_IDENTITY_STOPPED or
* @ref BT_MESH_NODE_IDENTITY_RUNNING
* @param key_net_idx Network key index the application key belongs to.
* @param status Status response parameter.
* @param identity Identity response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_node_identity_set(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t new_identity, uint8_t *status, uint8_t *identity);
/** @brief Get the Node Identity parameters.
*
* This method can be used asynchronously by setting @p status
* and @p identity as NULL. This way the method will not wait
* for response and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param key_net_idx Network key index the application key belongs to.
* @param status Status response parameter.
* @param identity Identity response parameter. Must be one of
* @ref BT_MESH_NODE_IDENTITY_STOPPED or
* @ref BT_MESH_NODE_IDENTITY_RUNNING
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_node_identity_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
uint8_t *status, uint8_t *identity);
/** @brief Get the Low Power Node Polltimeout parameters.
*
* This method can be used asynchronously by setting @p polltimeout
* as NULL. This way the method will not wait for response
* and will return immediately after sending the command.
*
* @param net_idx Network index to encrypt with.
* @param addr Target node address.
* @param unicast_addr LPN unicast address.
* @param polltimeout Poll timeout response parameter.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_cfg_cli_lpn_timeout_get(uint16_t net_idx, uint16_t addr, uint16_t unicast_addr,
int32_t *polltimeout);
/** @brief Get the current transmission timeout value.
*
* @return The configured transmission timeout in milliseconds.
*/
int32_t bt_mesh_cfg_cli_timeout_get(void);
/** @brief Set the transmission timeout value.
*
* @param timeout The new transmission timeout.
*/
void bt_mesh_cfg_cli_timeout_set(int32_t timeout);
/** Parsed Composition data page 0 representation.
*
* Should be pulled from the return buffer passed to
* @ref bt_mesh_cfg_cli_comp_data_get using
* @ref bt_mesh_comp_p0_get.
*/
struct bt_mesh_comp_p0 {
/** Company ID */
uint16_t cid;
/** Product ID */
uint16_t pid;
/** Version ID */
uint16_t vid;
/** Replay protection list size */
uint16_t crpl;
/** Supported features, see @ref BT_MESH_FEAT_SUPPORTED. */
uint16_t feat;
struct net_buf_simple *_buf;
};
/** Composition data page 0 element representation */
struct bt_mesh_comp_p0_elem {
/** Element location */
uint16_t loc;
/** The number of SIG models in this element */
size_t nsig;
/** The number of vendor models in this element */
size_t nvnd;
uint8_t *_buf;
};
/** @brief Create a composition data page 0 representation from a buffer.
*
* The composition data page object will take ownership over the buffer, which
* should not be manipulated directly after this call.
*
* This function can be used in combination with @ref bt_mesh_cfg_cli_comp_data_get
* to read out composition data page 0 from other devices:
*
* @code
* NET_BUF_SIMPLE_DEFINE(buf, BT_MESH_RX_SDU_MAX);
* struct bt_mesh_comp_p0 comp;
*
* err = bt_mesh_cfg_cli_comp_data_get(net_idx, addr, 0, &page, &buf);
* if (!err) {
* bt_mesh_comp_p0_get(&comp, &buf);
* }
* @endcode
*
* @param buf Network buffer containing composition data.
* @param comp Composition data structure to fill.
*
* @return 0 on success, or (negative) error code on failure.
*/
int bt_mesh_comp_p0_get(struct bt_mesh_comp_p0 *comp,
struct net_buf_simple *buf);
/** @brief Pull a composition data page 0 element from a composition data page 0
* instance.
*
* Each call to this function will pull out a new element from the composition
* data page, until all elements have been pulled.
*
* @param comp Composition data page
* @param elem Element to fill.
*
* @return A pointer to @c elem on success, or NULL if no more elements could
* be pulled.
*/
struct bt_mesh_comp_p0_elem *bt_mesh_comp_p0_elem_pull(const struct bt_mesh_comp_p0 *comp,
struct bt_mesh_comp_p0_elem *elem);
/** @brief Get a SIG model from the given composition data page 0 element.
*
* @param elem Element to read the model from.
* @param idx Index of the SIG model to read.
*
* @return The Model ID of the SIG model at the given index, or 0xffff if the
* index is out of bounds.
*/
uint16_t bt_mesh_comp_p0_elem_mod(struct bt_mesh_comp_p0_elem *elem, int idx);
/** @brief Get a vendor model from the given composition data page 0 element.
*
* @param elem Element to read the model from.
* @param idx Index of the vendor model to read.
*
* @return The model ID of the vendor model at the given index, or
* {0xffff, 0xffff} if the index is out of bounds.
*/
struct bt_mesh_mod_id_vnd bt_mesh_comp_p0_elem_mod_vnd(struct bt_mesh_comp_p0_elem *elem, int idx);
/** @cond INTERNAL_HIDDEN */
extern const struct bt_mesh_model_op bt_mesh_cfg_cli_op[];
extern const struct bt_mesh_model_cb bt_mesh_cfg_cli_cb;
/** @endcond */
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_CLI_H_ */