zephyr/subsys/bluetooth/mesh/transport.h
Trond Einar Snekvik 20ce680d79 Bluetooth: Mesh: Make internal virtual addr pointers const
Adds the const qualifier to the internal api for adding and removing
virtual addresses, to allow them to accept const hardcoded values in
tests.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-03-12 16:17:27 +02:00

113 lines
3.0 KiB
C

/* Bluetooth Mesh */
/*
* Copyright (c) 2017 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#define TRANS_SEQ_AUTH_NVAL 0xffffffffffffffff
#define BT_MESH_SDU_UNSEG_MAX 11
#define BT_MESH_CTL_SEG_SDU_MAX 8
#define BT_MESH_RX_CTL_MAX (CONFIG_BT_MESH_RX_SEG_MAX * BT_MESH_CTL_SEG_SDU_MAX)
#define TRANS_SEQ_ZERO_MASK ((uint16_t)BIT_MASK(13))
#define TRANS_CTL_OP_MASK ((uint8_t)BIT_MASK(7))
#define TRANS_CTL_OP(data) ((data)[0] & TRANS_CTL_OP_MASK)
#define TRANS_CTL_HDR(op, seg) ((op & TRANS_CTL_OP_MASK) | (seg << 7))
#define TRANS_CTL_OP_ACK 0x00
#define TRANS_CTL_OP_FRIEND_POLL 0x01
#define TRANS_CTL_OP_FRIEND_UPDATE 0x02
#define TRANS_CTL_OP_FRIEND_REQ 0x03
#define TRANS_CTL_OP_FRIEND_OFFER 0x04
#define TRANS_CTL_OP_FRIEND_CLEAR 0x05
#define TRANS_CTL_OP_FRIEND_CLEAR_CFM 0x06
#define TRANS_CTL_OP_FRIEND_SUB_ADD 0x07
#define TRANS_CTL_OP_FRIEND_SUB_REM 0x08
#define TRANS_CTL_OP_FRIEND_SUB_CFM 0x09
#define TRANS_CTL_OP_HEARTBEAT 0x0a
struct bt_mesh_ctl_friend_poll {
uint8_t fsn;
} __packed;
struct bt_mesh_ctl_friend_update {
uint8_t flags;
uint32_t iv_index;
uint8_t md;
} __packed;
struct bt_mesh_ctl_friend_req {
uint8_t criteria;
uint8_t recv_delay;
uint8_t poll_to[3];
uint16_t prev_addr;
uint8_t num_elem;
uint16_t lpn_counter;
} __packed;
struct bt_mesh_ctl_friend_offer {
uint8_t recv_win;
uint8_t queue_size;
uint8_t sub_list_size;
int8_t rssi;
uint16_t frnd_counter;
} __packed;
struct bt_mesh_ctl_friend_clear {
uint16_t lpn_addr;
uint16_t lpn_counter;
} __packed;
struct bt_mesh_ctl_friend_clear_confirm {
uint16_t lpn_addr;
uint16_t lpn_counter;
} __packed;
#define BT_MESH_FRIEND_SUB_MIN_LEN (1 + 2)
struct bt_mesh_ctl_friend_sub {
uint8_t xact;
uint16_t addr_list[5];
} __packed;
struct bt_mesh_ctl_friend_sub_confirm {
uint8_t xact;
} __packed;
bool bt_mesh_tx_in_progress(void);
void bt_mesh_rx_reset(void);
int bt_mesh_ctl_send(struct bt_mesh_net_tx *tx, uint8_t ctl_op, void *data,
size_t data_len, const struct bt_mesh_send_cb *cb,
void *cb_data);
/** @brief Send an access payload message.
*
* @param tx Network TX parameters. Only @c ctx, @c src and @c friend_cred
* have to be filled.
* @param msg Access payload to send.
* @param cb Message callback.
* @param cb_data Message callback data.
*
* @return 0 on success, or (negative) error code otherwise.
*/
int bt_mesh_trans_send(struct bt_mesh_net_tx *tx, struct net_buf_simple *msg,
const struct bt_mesh_send_cb *cb, void *cb_data);
int bt_mesh_trans_recv(struct net_buf_simple *buf, struct bt_mesh_net_rx *rx);
void bt_mesh_trans_init(void);
void bt_mesh_trans_reset(void);
uint8_t bt_mesh_va_add(const uint8_t uuid[16], uint16_t *addr);
uint8_t bt_mesh_va_del(const uint8_t uuid[16], uint16_t *addr);
uint8_t *bt_mesh_va_label_get(uint16_t addr);
void bt_mesh_va_pending_store(void);