Zephyr Project API 4.0.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
access.h File Reference

Access layer APIs. More...

Go to the source code of this file.

Data Structures

struct  bt_mesh_elem
 Abstraction that describes a Mesh Element. More...
 
struct  bt_mesh_elem::bt_mesh_elem_rt_ctx
 Mesh Element runtime information. More...
 
struct  bt_mesh_model_op
 Model opcode handler. More...
 
struct  bt_mesh_model_pub
 Model publication context. More...
 
struct  bt_mesh_models_metadata_entry
 Models Metadata Entry struct. More...
 
struct  bt_mesh_model_cb
 Model callback functions. More...
 
struct  bt_mesh_mod_id_vnd
 Vendor model ID. More...
 
struct  bt_mesh_model
 Abstraction that describes a Mesh Model instance. More...
 
struct  bt_mesh_model::bt_mesh_model_rt_ctx
 
struct  bt_mesh_send_cb
 Callback structure for monitoring model message sending. More...
 
struct  bt_mesh_comp
 Node Composition. More...
 
struct  bt_mesh_comp2_record
 Composition data page 2 record. More...
 
struct  bt_mesh_comp2
 Node Composition data page 2. More...
 

Macros

#define BT_MESH_KEY_UNUSED_ELT_(IDX, _)   BT_MESH_KEY_UNUSED
 
#define BT_MESH_ADDR_UNASSIGNED_ELT_(IDX, _)   BT_MESH_ADDR_UNASSIGNED
 
#define BT_MESH_UUID_UNASSIGNED_ELT_(IDX, _)   NULL
 
#define BT_MESH_MODEL_KEYS_UNUSED(_keys)    { LISTIFY(_keys, BT_MESH_KEY_UNUSED_ELT_, (,)) }
 
#define BT_MESH_MODEL_GROUPS_UNASSIGNED(_grps)    { LISTIFY(_grps, BT_MESH_ADDR_UNASSIGNED_ELT_, (,)) }
 
#define BT_MESH_MODEL_UUIDS_UNASSIGNED()
 
#define BT_MESH_MODEL_RUNTIME_INIT(_user_data)    .rt = &(struct bt_mesh_model_rt_ctx){ .user_data = (_user_data) },
 
#define BT_MESH_ADDR_IS_UNICAST(addr)   ((addr) && (addr) < 0x8000)
 Check if a Bluetooth Mesh address is a unicast address.
 
#define BT_MESH_ADDR_IS_GROUP(addr)   ((addr) >= 0xc000 && (addr) < 0xff00)
 Check if a Bluetooth Mesh address is a group address.
 
#define BT_MESH_ADDR_IS_FIXED_GROUP(addr)   ((addr) >= 0xff00 && (addr) < 0xffff)
 Check if a Bluetooth Mesh address is a fixed group address.
 
#define BT_MESH_ADDR_IS_VIRTUAL(addr)   ((addr) >= 0x8000 && (addr) < 0xc000)
 Check if a Bluetooth Mesh address is a virtual address.
 
#define BT_MESH_ADDR_IS_RFU(addr)   ((addr) >= 0xff00 && (addr) <= 0xfff8)
 Check if a Bluetooth Mesh address is an RFU address.
 
#define BT_MESH_IS_DEV_KEY(key)
 Check if a Bluetooth Mesh key is a device key.
 
#define BT_MESH_APP_SEG_SDU_MAX   12
 Maximum size of an access message segment (in octets).
 
#define BT_MESH_APP_UNSEG_SDU_MAX   15
 Maximum payload size of an unsegmented access message (in octets).
 
#define BT_MESH_RX_SEG_MAX   0
 Maximum number of segments supported for incoming messages.
 
#define BT_MESH_TX_SEG_MAX   0
 Maximum number of segments supported for outgoing messages.
 
#define BT_MESH_TX_SDU_MAX
 Maximum possible payload size of an outgoing access message (in octets).
 
#define BT_MESH_RX_SDU_MAX
 Maximum possible payload size of an incoming access message (in octets).
 
#define BT_MESH_ELEM(_loc, _mods, _vnd_mods)
 Helper to define a mesh element within an array.
 
#define BT_MESH_MODEL_OP_1(b0)   (b0)
 
#define BT_MESH_MODEL_OP_2(b0, b1)   (((b0) << 8) | (b1))
 
#define BT_MESH_MODEL_OP_3(b0, cid)   ((((b0) << 16) | 0xc00000) | (cid))
 
#define BT_MESH_LEN_EXACT(len)   (-len)
 Macro for encoding exact message length for fixed-length messages.
 
#define BT_MESH_LEN_MIN(len)   (len)
 Macro for encoding minimum message length for variable-length messages.
 
#define BT_MESH_MODEL_OP_END   { 0, 0, NULL }
 End of the opcode list.
 
#define BT_MESH_MODEL_NO_OPS
 Helper to define an empty opcode list.
 
#define BT_MESH_MODEL_NONE   ((const struct bt_mesh_model []){})
 Helper to define an empty model array.
 
#define BT_MESH_MODEL_CNT_CB(_id, _op, _pub, _user_data, _keys, _grps, _cb)
 Composition data SIG model entry with callback functions with specific number of keys & groups.
 
#define BT_MESH_MODEL_CNT_VND_CB(_company, _id, _op, _pub, _user_data, _keys, _grps, _cb)
 Composition data vendor model entry with callback functions with specific number of keys & groups.
 
#define BT_MESH_MODEL_CB(_id, _op, _pub, _user_data, _cb)
 Composition data SIG model entry with callback functions.
 
#define BT_MESH_MODEL_METADATA_CB(_id, _op, _pub, _user_data, _cb, _metadata)    BT_MESH_MODEL_CB(_id, _op, _pub, _user_data, _cb)
 Composition data SIG model entry with callback functions and metadata.
 
#define BT_MESH_MODEL_VND_CB(_company, _id, _op, _pub, _user_data, _cb)
 Composition data vendor model entry with callback functions.
 
#define BT_MESH_MODEL_VND_METADATA_CB(_company, _id, _op, _pub, _user_data, _cb, _metadata)    BT_MESH_MODEL_VND_CB(_company, _id, _op, _pub, _user_data, _cb)
 Composition data vendor model entry with callback functions and metadata.
 
#define BT_MESH_MODEL(_id, _op, _pub, _user_data)    BT_MESH_MODEL_CB(_id, _op, _pub, _user_data, NULL)
 Composition data SIG model entry.
 
#define BT_MESH_MODEL_VND(_company, _id, _op, _pub, _user_data)    BT_MESH_MODEL_VND_CB(_company, _id, _op, _pub, _user_data, NULL)
 Composition data vendor model entry.
 
#define BT_MESH_TRANSMIT(count, int_ms)   ((count) | (((int_ms / 10) - 1) << 3))
 Encode transmission count & interval steps.
 
#define BT_MESH_TRANSMIT_COUNT(transmit)   (((transmit) & (uint8_t)BIT_MASK(3)))
 Decode transmit count from a transmit value.
 
#define BT_MESH_TRANSMIT_INT(transmit)   ((((transmit) >> 3) + 1) * 10)
 Decode transmit interval from a transmit value.
 
#define BT_MESH_PUB_TRANSMIT(count, int_ms)
 Encode Publish Retransmit count & interval steps.
 
#define BT_MESH_PUB_TRANSMIT_COUNT(transmit)   BT_MESH_TRANSMIT_COUNT(transmit)
 Decode Publish Retransmit count from a given value.
 
#define BT_MESH_PUB_TRANSMIT_INT(transmit)   ((((transmit) >> 3) + 1) * 50)
 Decode Publish Retransmit interval from a given value.
 
#define BT_MESH_PUB_MSG_TOTAL(pub)   (BT_MESH_PUB_TRANSMIT_COUNT((pub)->retransmit) + 1)
 Get total number of messages within one publication interval including initial publication.
 
#define BT_MESH_PUB_MSG_NUM(pub)   (BT_MESH_PUB_TRANSMIT_COUNT((pub)->retransmit) + 1 - (pub)->count)
 Get message number within one publication interval.
 
#define BT_MESH_MODEL_PUB_DEFINE(_name, _update, _msg_len)
 Define a model publication context.
 
#define BT_MESH_MODELS_METADATA_ENTRY(_len, _id, _data)
 Initialize a Models Metadata entry structure in a list.
 
#define BT_MESH_MODELS_METADATA_NONE   NULL
 Helper to define an empty Models metadata array.
 
#define BT_MESH_MODELS_METADATA_END   { 0, 0, NULL }
 End of the Models Metadata list.
 
#define BT_MESH_TTL_DEFAULT   0xff
 Special TTL value to request using configured default TTL.
 
#define BT_MESH_TTL_MAX   0x7f
 Maximum allowed TTL value.
 
Group addresses
#define BT_MESH_ADDR_UNASSIGNED   0x0000
 unassigned
 
#define BT_MESH_ADDR_ALL_NODES   0xffff
 all-nodes
 
#define BT_MESH_ADDR_RELAYS   0xfffe
 all-relays
 
#define BT_MESH_ADDR_FRIENDS   0xfffd
 all-friends
 
#define BT_MESH_ADDR_PROXIES   0xfffc
 all-proxies
 
#define BT_MESH_ADDR_DFW_NODES   0xfffb
 all-directed-forwarding-nodes
 
#define BT_MESH_ADDR_IP_NODES   0xfffa
 all-ipt-nodes
 
#define BT_MESH_ADDR_IP_BR_ROUTERS   0xfff9
 all-ipt-border-routers
 
Predefined key indexes
#define BT_MESH_KEY_UNUSED   0xffff
 Key unused.
 
#define BT_MESH_KEY_ANY   0xffff
 Any key index.
 
#define BT_MESH_KEY_DEV   0xfffe
 Device key.
 
#define BT_MESH_KEY_DEV_LOCAL   BT_MESH_KEY_DEV
 Local device key.
 
#define BT_MESH_KEY_DEV_REMOTE   0xfffd
 Remote device key.
 
#define BT_MESH_KEY_DEV_ANY   0xfffc
 Any device key.
 
Foundation Models
#define BT_MESH_MODEL_ID_CFG_SRV   0x0000
 Configuration Server.
 
#define BT_MESH_MODEL_ID_CFG_CLI   0x0001
 Configuration Client.
 
#define BT_MESH_MODEL_ID_HEALTH_SRV   0x0002
 Health Server.
 
#define BT_MESH_MODEL_ID_HEALTH_CLI   0x0003
 Health Client.
 
#define BT_MESH_MODEL_ID_REMOTE_PROV_SRV   0x0004
 Remote Provisioning Server.
 
#define BT_MESH_MODEL_ID_REMOTE_PROV_CLI   0x0005
 Remote Provisioning Client.
 
#define BT_MESH_MODEL_ID_BRG_CFG_SRV   0x0008
 Bridge Configuration Sever.
 
#define BT_MESH_MODEL_ID_BRG_CFG_CLI   0x0009
 Bridge Configuration Client.
 
#define BT_MESH_MODEL_ID_PRIV_BEACON_SRV   0x000a
 Private Beacon Server.
 
#define BT_MESH_MODEL_ID_PRIV_BEACON_CLI   0x000b
 Private Beacon Client.
 
#define BT_MESH_MODEL_ID_SAR_CFG_SRV   0x000e
 SAR Configuration Server.
 
#define BT_MESH_MODEL_ID_SAR_CFG_CLI   0x000f
 SAR Configuration Client.
 
#define BT_MESH_MODEL_ID_OP_AGG_SRV   0x0010
 Opcodes Aggregator Server.
 
#define BT_MESH_MODEL_ID_OP_AGG_CLI   0x0011
 Opcodes Aggregator Client.
 
#define BT_MESH_MODEL_ID_LARGE_COMP_DATA_SRV   0x0012
 Large Composition Data Server.
 
#define BT_MESH_MODEL_ID_LARGE_COMP_DATA_CLI   0x0013
 Large Composition Data Client.
 
#define BT_MESH_MODEL_ID_SOL_PDU_RPL_SRV   0x0014
 Solicitation PDU RPL Configuration Client.
 
#define BT_MESH_MODEL_ID_SOL_PDU_RPL_CLI   0x0015
 Solicitation PDU RPL Configuration Server.
 
#define BT_MESH_MODEL_ID_ON_DEMAND_PROXY_SRV   0x000c
 Private Proxy Server.
 
#define BT_MESH_MODEL_ID_ON_DEMAND_PROXY_CLI   0x000d
 Private Proxy Client.
 
Models from the Mesh Model Specification
#define BT_MESH_MODEL_ID_GEN_ONOFF_SRV   0x1000
 Generic OnOff Server.
 
#define BT_MESH_MODEL_ID_GEN_ONOFF_CLI   0x1001
 Generic OnOff Client.
 
#define BT_MESH_MODEL_ID_GEN_LEVEL_SRV   0x1002
 Generic Level Server.
 
#define BT_MESH_MODEL_ID_GEN_LEVEL_CLI   0x1003
 Generic Level Client.
 
#define BT_MESH_MODEL_ID_GEN_DEF_TRANS_TIME_SRV   0x1004
 Generic Default Transition Time Server.
 
#define BT_MESH_MODEL_ID_GEN_DEF_TRANS_TIME_CLI   0x1005
 Generic Default Transition Time Client.
 
#define BT_MESH_MODEL_ID_GEN_POWER_ONOFF_SRV   0x1006
 Generic Power OnOff Server.
 
#define BT_MESH_MODEL_ID_GEN_POWER_ONOFF_SETUP_SRV   0x1007
 Generic Power OnOff Setup Server.
 
#define BT_MESH_MODEL_ID_GEN_POWER_ONOFF_CLI   0x1008
 Generic Power OnOff Client.
 
#define BT_MESH_MODEL_ID_GEN_POWER_LEVEL_SRV   0x1009
 Generic Power Level Server.
 
#define BT_MESH_MODEL_ID_GEN_POWER_LEVEL_SETUP_SRV   0x100a
 Generic Power Level Setup Server.
 
#define BT_MESH_MODEL_ID_GEN_POWER_LEVEL_CLI   0x100b
 Generic Power Level Client.
 
#define BT_MESH_MODEL_ID_GEN_BATTERY_SRV   0x100c
 Generic Battery Server.
 
#define BT_MESH_MODEL_ID_GEN_BATTERY_CLI   0x100d
 Generic Battery Client.
 
#define BT_MESH_MODEL_ID_GEN_LOCATION_SRV   0x100e
 Generic Location Server.
 
#define BT_MESH_MODEL_ID_GEN_LOCATION_SETUPSRV   0x100f
 Generic Location Setup Server.
 
#define BT_MESH_MODEL_ID_GEN_LOCATION_CLI   0x1010
 Generic Location Client.
 
#define BT_MESH_MODEL_ID_GEN_ADMIN_PROP_SRV   0x1011
 Generic Admin Property Server.
 
#define BT_MESH_MODEL_ID_GEN_MANUFACTURER_PROP_SRV   0x1012
 Generic Manufacturer Property Server.
 
#define BT_MESH_MODEL_ID_GEN_USER_PROP_SRV   0x1013
 Generic User Property Server.
 
#define BT_MESH_MODEL_ID_GEN_CLIENT_PROP_SRV   0x1014
 Generic Client Property Server.
 
#define BT_MESH_MODEL_ID_GEN_PROP_CLI   0x1015
 Generic Property Client.
 
#define BT_MESH_MODEL_ID_SENSOR_SRV   0x1100
 Sensor Server.
 
#define BT_MESH_MODEL_ID_SENSOR_SETUP_SRV   0x1101
 Sensor Setup Server.
 
#define BT_MESH_MODEL_ID_SENSOR_CLI   0x1102
 Sensor Client.
 
#define BT_MESH_MODEL_ID_TIME_SRV   0x1200
 Time Server.
 
#define BT_MESH_MODEL_ID_TIME_SETUP_SRV   0x1201
 Time Setup Server.
 
#define BT_MESH_MODEL_ID_TIME_CLI   0x1202
 Time Client.
 
#define BT_MESH_MODEL_ID_SCENE_SRV   0x1203
 Scene Server.
 
#define BT_MESH_MODEL_ID_SCENE_SETUP_SRV   0x1204
 Scene Setup Server.
 
#define BT_MESH_MODEL_ID_SCENE_CLI   0x1205
 Scene Client.
 
#define BT_MESH_MODEL_ID_SCHEDULER_SRV   0x1206
 Scheduler Server.
 
#define BT_MESH_MODEL_ID_SCHEDULER_SETUP_SRV   0x1207
 Scheduler Setup Server.
 
#define BT_MESH_MODEL_ID_SCHEDULER_CLI   0x1208
 Scheduler Client.
 
#define BT_MESH_MODEL_ID_LIGHT_LIGHTNESS_SRV   0x1300
 Light Lightness Server.
 
#define BT_MESH_MODEL_ID_LIGHT_LIGHTNESS_SETUP_SRV   0x1301
 Light Lightness Setup Server.
 
#define BT_MESH_MODEL_ID_LIGHT_LIGHTNESS_CLI   0x1302
 Light Lightness Client.
 
#define BT_MESH_MODEL_ID_LIGHT_CTL_SRV   0x1303
 Light CTL Server.
 
#define BT_MESH_MODEL_ID_LIGHT_CTL_SETUP_SRV   0x1304
 Light CTL Setup Server.
 
#define BT_MESH_MODEL_ID_LIGHT_CTL_CLI   0x1305
 Light CTL Client.
 
#define BT_MESH_MODEL_ID_LIGHT_CTL_TEMP_SRV   0x1306
 Light CTL Temperature Server.
 
#define BT_MESH_MODEL_ID_LIGHT_HSL_SRV   0x1307
 Light HSL Server.
 
#define BT_MESH_MODEL_ID_LIGHT_HSL_SETUP_SRV   0x1308
 Light HSL Setup Server.
 
#define BT_MESH_MODEL_ID_LIGHT_HSL_CLI   0x1309
 Light HSL Client.
 
#define BT_MESH_MODEL_ID_LIGHT_HSL_HUE_SRV   0x130a
 Light HSL Hue Server.
 
#define BT_MESH_MODEL_ID_LIGHT_HSL_SAT_SRV   0x130b
 Light HSL Saturation Server.
 
#define BT_MESH_MODEL_ID_LIGHT_XYL_SRV   0x130c
 Light xyL Server.
 
#define BT_MESH_MODEL_ID_LIGHT_XYL_SETUP_SRV   0x130d
 Light xyL Setup Server.
 
#define BT_MESH_MODEL_ID_LIGHT_XYL_CLI   0x130e
 Light xyL Client.
 
#define BT_MESH_MODEL_ID_LIGHT_LC_SRV   0x130f
 Light LC Server.
 
#define BT_MESH_MODEL_ID_LIGHT_LC_SETUPSRV   0x1310
 Light LC Setup Server.
 
#define BT_MESH_MODEL_ID_LIGHT_LC_CLI   0x1311
 Light LC Client.
 
Models from the Mesh Binary Large Object Transfer Model Specification
#define BT_MESH_MODEL_ID_BLOB_SRV   0x1400
 BLOB Transfer Server.
 
#define BT_MESH_MODEL_ID_BLOB_CLI   0x1401
 BLOB Transfer Client.
 
Models from the Mesh Device Firmware Update Model Specification
#define BT_MESH_MODEL_ID_DFU_SRV   0x1402
 Firmware Update Server.
 
#define BT_MESH_MODEL_ID_DFU_CLI   0x1403
 Firmware Update Client.
 
#define BT_MESH_MODEL_ID_DFD_SRV   0x1404
 Firmware Distribution Server.
 
#define BT_MESH_MODEL_ID_DFD_CLI   0x1405
 Firmware Distribution Client.
 

Functions

int bt_mesh_model_send (const struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct net_buf_simple *msg, const struct bt_mesh_send_cb *cb, void *cb_data)
 Send an Access Layer message.
 
int bt_mesh_model_publish (const struct bt_mesh_model *model)
 Send a model publication message.
 
static bool bt_mesh_model_pub_is_retransmission (const struct bt_mesh_model *model)
 Check if a message is being retransmitted.
 
const struct bt_mesh_elembt_mesh_model_elem (const struct bt_mesh_model *mod)
 Get the element that a model belongs to.
 
const struct bt_mesh_modelbt_mesh_model_find (const struct bt_mesh_elem *elem, uint16_t id)
 Find a SIG model.
 
const struct bt_mesh_modelbt_mesh_model_find_vnd (const struct bt_mesh_elem *elem, uint16_t company, uint16_t id)
 Find a vendor model.
 
static bool bt_mesh_model_in_primary (const struct bt_mesh_model *mod)
 Get whether the model is in the primary element of the device.
 
int bt_mesh_model_data_store (const struct bt_mesh_model *mod, bool vnd, const char *name, const void *data, size_t data_len)
 Immediately store the model's user data in persistent storage.
 
void bt_mesh_model_data_store_schedule (const struct bt_mesh_model *mod)
 Schedule the model's user data store in persistent storage.
 
int bt_mesh_model_extend (const struct bt_mesh_model *extending_mod, const struct bt_mesh_model *base_mod)
 Let a model extend another.
 
int bt_mesh_model_correspond (const struct bt_mesh_model *corresponding_mod, const struct bt_mesh_model *base_mod)
 Let a model correspond to another.
 
bool bt_mesh_model_is_extended (const struct bt_mesh_model *model)
 Check if model is extended by another model.
 
int bt_mesh_comp_change_prepare (void)
 Indicate that the composition data will change on next bootup.
 
int bt_mesh_models_metadata_change_prepare (void)
 Indicate that the metadata will change on next bootup.
 
int bt_mesh_comp2_register (const struct bt_mesh_comp2 *comp2)
 Register composition data page 2 of the device.
 

Detailed Description

Access layer APIs.

Macro Definition Documentation

◆ BT_MESH_ADDR_UNASSIGNED_ELT_

#define BT_MESH_ADDR_UNASSIGNED_ELT_ (   IDX,
 
)    BT_MESH_ADDR_UNASSIGNED

◆ BT_MESH_KEY_UNUSED_ELT_

#define BT_MESH_KEY_UNUSED_ELT_ (   IDX,
 
)    BT_MESH_KEY_UNUSED

◆ BT_MESH_MODEL_GROUPS_UNASSIGNED

#define BT_MESH_MODEL_GROUPS_UNASSIGNED (   _grps)     { LISTIFY(_grps, BT_MESH_ADDR_UNASSIGNED_ELT_, (,)) }

◆ BT_MESH_MODEL_KEYS_UNUSED

#define BT_MESH_MODEL_KEYS_UNUSED (   _keys)     { LISTIFY(_keys, BT_MESH_KEY_UNUSED_ELT_, (,)) }

◆ BT_MESH_MODEL_RUNTIME_INIT

#define BT_MESH_MODEL_RUNTIME_INIT (   _user_data)     .rt = &(struct bt_mesh_model_rt_ctx){ .user_data = (_user_data) },

◆ BT_MESH_MODEL_UUIDS_UNASSIGNED

#define BT_MESH_MODEL_UUIDS_UNASSIGNED ( )

◆ BT_MESH_UUID_UNASSIGNED_ELT_

#define BT_MESH_UUID_UNASSIGNED_ELT_ (   IDX,
 
)    NULL