bleSDK_expansion_board/mesh/api/mesh_def.h

258 lines
7.5 KiB
C

/**
****************************************************************************************
*
* @file mesh_def.h
*
* @brief Header file for Mesh Stack Defines
*
****************************************************************************************
*/
#ifndef _MESH_DEF_H_
#define _MESH_DEF_H_
/**
****************************************************************************************
* @defgroup MESH_DEFINES Mesh Defines
* @ingroup MESH
* @brief Mesh Defines
* @{
****************************************************************************************
*/
/*
* INCLUDES FILES
****************************************************************************************
*/
#include <stdint.h>
/*
* DEFINES
****************************************************************************************
*/
/// Unassigned address value
#define MESH_UNASSIGNED_ADDR (0x0000)
/// Fixed group address - All proxies
#define MESH_PROXIES_ADDR (0xFFFC)
/// Fixed group address - All friends
#define MESH_FRIENDS_ADDR (0xFFFD)
/// Fixed group address - All relays
#define MESH_RELAYS_ADDR (0xFFFE)
/// Fixed group address - All nodes
#define MESH_NODES_ADDR (0xFFFF)
/// Size of a key
#define MESH_KEY_LEN (16)
/// Size of value block when encrypting
#define MESH_ENC_VAL_LEN (16)
/// Public Key X coordinate length
#define MESH_PUB_KEY_X_LEN (32)
/// Public Key Y coordinate length
#define MESH_PUB_KEY_Y_LEN (32)
/// Size of Device UUID
#define MESH_DEV_UUID_LEN (16)
/// Length of the Private P-256 key
#define MESH_PRIVATE_KEY_LEN (32)
/// ECDH Secret size length
#define MESH_ECDH_SECRET_LEN (32)
/// Size of K1 result length value
#define MESH_K1_RES_LEN (16)
/// Size of K2 result length value - (263 bits)
#define MESH_K2_RES_LEN (33)
/// Size of K3 result length value - (64 bits)
#define MESH_K3_RES_LEN (8)
/// Size of K4 result length value - (6 bits)
#define MESH_K4_RES_LEN (1)
/// Size of the Nonce used for AES-CCM
#define MESH_NONCE_LEN (13)
/// Network identifier length
#define MESH_NET_ID_LEN (8)
/// Packet sequence number length
#define MESH_SEQ_LEN (3)
/// Address length
#define MESH_ADDR_LEN (2)
/// Key IDs length
#define MESH_KEY_ID_LEN (2)
/// Size of Label UUID
#define MESH_LABEL_UUID_LEN (16)
/// Length of Network MIC for an Access Message
#define MESH_NMIC_ACC_LEN (4)
/// Length of Network MIC for a Control Message
#define MESH_NMIC_CTL_LEN (8)
/// Authentication data OOB length
#define MESH_OOB_AUTH_DATA_LEN (16)
/// 64 bit random value
#define MESH_PROXY_RANDOM_LEN (8)
/// 64 bit HASH value
#define MESH_PROXY_HASH_LEN (8)
/// Perform Connectable Advertising during 60s
#define MESH_PROXY_CON_ADV_DUR (60000)
/// Maximum Publish TTL value
#define MESH_TTL_MAX (0x7F)
/// Publish TTL value indicating that Default TTL value must be used
#define MESH_TTL_USE_DEFAULT (0xFF)
/// Maximum number of subnets the node can belong to
#define MESH_SUBNET_NB_MAX (5)
/// Maximum number of models that can be registered on the node
#define MESH_MODEL_NB_MAX (8)
/// Invalid Local identifier - m_lid_t
#define MESH_INVALID_LID (0xFF)
/*
* MACROS
****************************************************************************************
*/
/// Check if access opcode is a 1 octet value
#define MESH_IS_1_OCT_OPCODE(opcode) (((opcode) & 0x80) == 0)
/// Check if access opcode is a 2 octets value
#define MESH_IS_2_OCT_OPCODE(opcode) (((opcode) & 0xC0) == 0x80)
/// Check if access opcode is a 3 octets value
#define MESH_IS_3_OCT_OPCODE(opcode) (((opcode) & 0xC0) == 0xC0)
/// Macro returning if a Model ID is a vendor Model ID
#define MESH_IS_VENDOR_MODEL(model_id) ((model_id & 0xFFFF0000) != 0)
/*
* ENUMERATIONS
****************************************************************************************
*/
/// Connection packet type
enum mesh_bearer_con_type
{
/// Network Message
MS_BEARER_CON_TYPE_NET = (0x00),
/// Mesh Beacon message
MS_BEARER_CON_TYPE_BEACON = (0x01),
/// Proxy configuration message
MS_BEARER_CON_TYPE_PROXY = (0x02),
/// Provisioning PDU message
MS_BEARER_CON_TYPE_PROV = (0x03),
};
/// Proxy connectable advertising control values
enum mesh_proxy_adv_ctl
{
/// Stop connectable advertising
MS_PROXY_ADV_CTL_STOP = 0,
/// Start connectable advertising with Node Identity (duration = 60s)
MS_PROXY_ADV_CTL_START_NODE,
/// Start connectable advertising with Network ID (duration = 60s)
MS_PROXY_ADV_CTL_START_NET,
};
/// Proxy connectable advertising state update types
enum mesh_proxy_adv_upd
{
/// Advertising with Node Identity stopped
MS_PROXY_ADV_NODE_STOP = 0,
/// Advertising with Node Identity started
MS_PROXY_ADV_NODE_START,
/// Advertising with Network ID stopped
MS_PROXY_ADV_NET_STOP,
/// Advertising with Node Identity started
MS_PROXY_ADV_NET_START,
};
/// Proxy connectable advertising state update reasons
enum mesh_proxy_adv_upd_reason
{
/// Stopped due to timeout (60s)
MS_PROXY_ADV_UPD_REASON_TIMEOUT = 0,
/// Stopped due to state update
MS_PROXY_ADV_UPD_REASON_STATE,
/// User request
MS_PROXY_ADV_UPD_REASON_USER,
/// Peer request
MS_PROXY_ADV_UPD_REASON_PEER,
/// Started due to provisioning using PB-GATT
MS_PROXY_ADV_UPD_REASON_PROV,
/// Disconnection
MS_PROXY_ADV_UPD_REASON_DISC,
};
/// State of the provisioning
enum mesh_prov_state
{
/// Provisioning started - procedure started by a provisioner
MS_PROV_STARTED,
/// Provisioning succeed
MS_PROV_SUCCEED,
/// Provisioning failed
MS_PROV_FAILED,
};
/// Authentication Method field values
enum mesh_prov_auth_method
{
/// No OOB authentication is used
MS_PROV_AUTH_NO_OOB,
/// Static OOB authentication is used
MS_PROV_AUTH_STATIC_OOB,
/// Output OOB authentication is used
MS_PROV_AUTH_OUTPUT_OOB,
/// Input OOB authentication is used
MS_PROV_AUTH_INPUT_OOB,
};
/// Output OOB Action field values
enum mesh_prov_out_oob
{
/// Bit[0]: Blink
MS_PROV_OUT_OOB_BLINK = 0x0001,
/// Bit[1]: Beep
MS_PROV_OUT_OOB_BEEP = 0x0002,
/// Bit[2]: Vibrate
MS_PROV_OUT_OOB_VIBRATE = 0x0004,
/// Bit[3]: Output Numeric
MS_PROV_OUT_OOB_NUMERIC = 0x0008,
/// Bit[4]: Output Alphanumeric
MS_PROV_OUT_OOB_ALPHANUMERIC = 0x0010,
/// Bit[5-15]: Reserved for Future Use
};
/// Input OOB Action field values
enum mesh_prov_in_oob
{
/// Bit[0]: Push
MS_PROV_IN_OOB_PUSH = 0x0001,
/// Bit[1]: Twist
MS_PROV_IN_OOB_TWIST = 0x0002,
/// Bit[2]: Input Numeric
MS_PROV_IN_OOB_NUMERIC = 0x0004,
/// Bit[3]: Input Alphanumeric
MS_PROV_IN_OOB_ALPHANUMERIC = 0x0008,
/// Bit[4-15]: Reserved for Future Use
};
enum mesh_prov_info
{
/// URI Hash present or not in the unprovisioned device beacon
MS_PROV_INFO_URI_HASH_PRESENT = (1 << 0),
};
/*
* TYPES
****************************************************************************************
*/
/// Local Identifier
typedef uint8_t m_lid_t;
/// @} MESH_DEFINES
#endif /* _MESH_DEF_H_ */