blob: 1a1141383dbbb206c4a3e26a48bf7fdee12c52aa [file] [log] [blame]
/*
* Copyright (c) 2020 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @defgroup bt_mesh_rpr Remote Provisioning models
* @{
* @brief Common API for the Remote provisioning models.
*/
#ifndef ZEPHYR_INCLUDE_BT_MESH_RPR_H__
#define ZEPHYR_INCLUDE_BT_MESH_RPR_H__
#include <zephyr/kernel.h>
#include <zephyr/bluetooth/mesh/main.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Unprovisioned device has URI hash value */
#define BT_MESH_RPR_UNPROV_HASH BIT(0)
#define BT_MESH_RPR_UNPROV_ACTIVE BIT(1) /**< Internal */
#define BT_MESH_RPR_UNPROV_FOUND BIT(2) /**< Internal */
#define BT_MESH_RPR_UNPROV_REPORTED BIT(3) /**< Internal */
#define BT_MESH_RPR_UNPROV_EXT BIT(4) /**< Internal */
#define BT_MESH_RPR_UNPROV_HAS_LINK BIT(5) /**< Internal */
#define BT_MESH_RPR_UNPROV_EXT_ADV_RXD BIT(6) /**< Internal */
/** Minimum extended scan duration in seconds */
#define BT_MESH_RPR_EXT_SCAN_TIME_MIN 1
/** Maximum extended scan duration in seconds */
#define BT_MESH_RPR_EXT_SCAN_TIME_MAX 21
enum bt_mesh_rpr_status {
BT_MESH_RPR_SUCCESS,
BT_MESH_RPR_ERR_SCANNING_CANNOT_START,
BT_MESH_RPR_ERR_INVALID_STATE,
BT_MESH_RPR_ERR_LIMITED_RESOURCES,
BT_MESH_RPR_ERR_LINK_CANNOT_OPEN,
BT_MESH_RPR_ERR_LINK_OPEN_FAILED,
BT_MESH_RPR_ERR_LINK_CLOSED_BY_DEVICE,
BT_MESH_RPR_ERR_LINK_CLOSED_BY_SERVER,
BT_MESH_RPR_ERR_LINK_CLOSED_BY_CLIENT,
BT_MESH_RPR_ERR_LINK_CLOSED_AS_CANNOT_RECEIVE_PDU,
BT_MESH_RPR_ERR_LINK_CLOSED_AS_CANNOT_SEND_PDU,
BT_MESH_RPR_ERR_LINK_CLOSED_AS_CANNOT_DELIVER_PDU_REPORT,
};
enum bt_mesh_rpr_scan {
BT_MESH_RPR_SCAN_IDLE,
BT_MESH_RPR_SCAN_MULTI,
BT_MESH_RPR_SCAN_SINGLE,
};
enum bt_mesh_rpr_node_refresh {
/** Change the Device key. */
BT_MESH_RPR_NODE_REFRESH_DEVKEY,
/** Change the Device key and address. Device composition may change. */
BT_MESH_RPR_NODE_REFRESH_ADDR,
/** Change the Device key and composition. */
BT_MESH_RPR_NODE_REFRESH_COMPOSITION,
};
enum bt_mesh_rpr_link_state {
BT_MESH_RPR_LINK_IDLE,
BT_MESH_RPR_LINK_OPENING,
BT_MESH_RPR_LINK_ACTIVE,
BT_MESH_RPR_LINK_SENDING,
BT_MESH_RPR_LINK_CLOSING,
};
/** Remote provisioning actor, as seen across the mesh. */
struct bt_mesh_rpr_node {
/** Unicast address of the node. */
uint16_t addr;
/** Network index used when communicating with the node. */
uint16_t net_idx;
/** Time To Live value used when communicating with the node. */
uint8_t ttl;
};
/** Unprovisioned device. */
struct bt_mesh_rpr_unprov {
/** Unprovisioned device UUID. */
uint8_t uuid[16];
/** Flags, see @p BT_MESH_RPR_UNPROV_* flags. */
uint8_t flags;
/** RSSI of unprovisioned device, as received by server. */
int8_t rssi;
/** Out of band information. */
bt_mesh_prov_oob_info_t oob;
/** URI hash in unprovisioned beacon.
*
* Only valid if @c flags has @ref BT_MESH_RPR_UNPROV_HASH set.
*/
uint32_t hash;
};
/** Remote Provisioning Link status */
struct bt_mesh_rpr_link {
/** Link status */
enum bt_mesh_rpr_status status;
/** Link state */
enum bt_mesh_rpr_link_state state;
};
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_BT_MESH_RPR_H__ */
/** @} */