Bluetooth: Mesh: Make TRANSMIT_COUNT & TRANSMIT_INT macros public

These are useful for apps who want to implement/use the Configuration
Client Model.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
Johan Hedberg 2017-11-12 22:19:28 +02:00 committed by Johan Hedberg
commit 17c9b3a105
6 changed files with 41 additions and 20 deletions

View file

@ -199,6 +199,26 @@ struct bt_mesh_model_op {
*/
#define BT_MESH_TRANSMIT(count, int_ms) ((count) | (((int_ms / 10) - 1) << 3))
/** @def BT_MESH_TRANSMIT_COUNT
*
* @brief Decode transmit count from a transmit value.
*
* @param transmit Encoded transmit count & interval value.
*
* @return Transmission count (actual transmissions is N + 1).
*/
#define BT_MESH_TRANSMIT_COUNT(transmit) (((transmit) & (u8_t)BIT_MASK(3)))
/** @def BT_MESH_TRANSMIT_INT
*
* @brief Decode transmit interval from a transmit value.
*
* @param transmit Encoded transmit count & interval value.
*
* @return Transmission interval in milliseconds.
*/
#define BT_MESH_TRANSMIT_INT(transmit) ((((transmit) >> 3) + 1) * 10)
struct bt_mesh_model_pub {
/* Self-reference for easy lookup */
struct bt_mesh_model *mod;

View file

@ -831,7 +831,8 @@ static void net_transmit_set(struct bt_mesh_model *model,
bt_hex(buf->data, buf->len));
BT_DBG("Transmit 0x%02x (count %u interval %ums)", buf->data[0],
TRANSMIT_COUNT(buf->data[0]), TRANSMIT_INT(buf->data[0]));
BT_MESH_TRANSMIT_COUNT(buf->data[0]),
BT_MESH_TRANSMIT_INT(buf->data[0]));
if (!cfg) {
BT_WARN("No Configuration Server context available");
@ -890,8 +891,8 @@ static void relay_set(struct bt_mesh_model *model,
BT_DBG("Relay 0x%02x Retransmit 0x%02x (count %u interval %u)",
cfg->relay, cfg->relay_retransmit,
TRANSMIT_COUNT(cfg->relay_retransmit),
TRANSMIT_INT(cfg->relay_retransmit))
BT_MESH_TRANSMIT_COUNT(cfg->relay_retransmit),
BT_MESH_TRANSMIT_INT(cfg->relay_retransmit))
sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx);
if ((cfg->hb_pub.feat & BT_MESH_FEAT_RELAY) && sub && change) {
@ -1022,7 +1023,8 @@ static void mod_pub_set(struct bt_mesh_model *model,
BT_DBG("pub_app_idx 0x%03x, pub_ttl %u pub_period 0x%02x",
pub_app_idx, pub_ttl, pub_period);
BT_DBG("retransmit 0x%02x (count %u interval %ums)", retransmit,
TRANSMIT_COUNT(retransmit), TRANSMIT_INT(retransmit));
BT_MESH_TRANSMIT_COUNT(retransmit),
BT_MESH_TRANSMIT_INT(retransmit));
elem = bt_mesh_elem_find(elem_addr);
if (!elem) {
@ -1128,7 +1130,8 @@ static void mod_pub_va_set(struct bt_mesh_model *model,
BT_DBG("pub_app_idx 0x%03x, pub_ttl %u pub_period 0x%02x",
pub_app_idx, pub_ttl, pub_period);
BT_DBG("retransmit 0x%02x (count %u interval %ums)", retransmit,
TRANSMIT_COUNT(retransmit), TRANSMIT_INT(retransmit));
BT_MESH_TRANSMIT_COUNT(retransmit),
BT_MESH_TRANSMIT_INT(retransmit));
elem = bt_mesh_elem_find(elem_addr);
if (!elem) {

View file

@ -121,11 +121,6 @@ void bt_mesh_attention(struct bt_mesh_model *model, u8_t time);
u8_t *bt_mesh_label_uuid_get(u16_t addr);
/* Transmission count (N + 1) */
#define TRANSMIT_COUNT(transmit) (((transmit) & (u8_t)BIT_MASK(3)))
/* Returns transmission interval in milliseconds */
#define TRANSMIT_INT(transmit) ((((transmit) >> 3) + 1) * 10)
u8_t bt_mesh_net_transmit_get(void);
u8_t bt_mesh_relay_get(void);
u8_t bt_mesh_friend_get(void);

View file

@ -81,8 +81,8 @@ static struct net_buf *friend_buf_alloc(u16_t src)
do {
buf = bt_mesh_adv_create_from_pool(&friend_buf_pool,
BT_MESH_ADV_DATA,
TRANSMIT_COUNT(xmit),
TRANSMIT_INT(xmit),
BT_MESH_TRANSMIT_COUNT(xmit),
BT_MESH_TRANSMIT_INT(xmit),
K_NO_WAIT);
if (!buf) {
discard_buffer();

View file

@ -1045,8 +1045,9 @@ static void bt_mesh_net_relay(struct net_buf_simple *sbuf,
BT_DBG("TTL %u CTL %u dst 0x%04x", rx->ctx.recv_ttl, rx->ctl, rx->dst);
transmit = bt_mesh_relay_retransmit_get();
buf = bt_mesh_adv_create(BT_MESH_ADV_DATA, TRANSMIT_COUNT(transmit),
TRANSMIT_INT(transmit), K_NO_WAIT);
buf = bt_mesh_adv_create(BT_MESH_ADV_DATA,
BT_MESH_TRANSMIT_COUNT(transmit),
BT_MESH_TRANSMIT_INT(transmit), K_NO_WAIT);
if (!buf) {
BT_ERR("Out of relay buffers");
return;

View file

@ -106,8 +106,9 @@ static int send_unseg(struct bt_mesh_net_tx *tx, u8_t aid,
BT_DBG("src 0x%04x dst 0x%04x app_idx 0x%04x sdu_len %u",
tx->src, tx->ctx->addr, tx->ctx->app_idx, sdu->len);
buf = bt_mesh_adv_create(BT_MESH_ADV_DATA, TRANSMIT_COUNT(tx->xmit),
TRANSMIT_INT(tx->xmit), BUF_TIMEOUT);
buf = bt_mesh_adv_create(BT_MESH_ADV_DATA,
BT_MESH_TRANSMIT_COUNT(tx->xmit),
BT_MESH_TRANSMIT_INT(tx->xmit), BUF_TIMEOUT);
if (!buf) {
BT_ERR("Out of network buffers");
return -ENOBUFS;
@ -306,8 +307,8 @@ static int send_seg(struct bt_mesh_net_tx *net_tx, u8_t aid,
int err;
seg = bt_mesh_adv_create(BT_MESH_ADV_DATA,
TRANSMIT_COUNT(net_tx->xmit),
TRANSMIT_INT(net_tx->xmit),
BT_MESH_TRANSMIT_COUNT(net_tx->xmit),
BT_MESH_TRANSMIT_INT(net_tx->xmit),
BUF_TIMEOUT);
if (!seg) {
BT_ERR("Out of segment buffers");
@ -829,8 +830,9 @@ int bt_mesh_ctl_send(struct bt_mesh_net_tx *tx, u8_t ctl_op, void *data,
tx->ctx->addr, tx->ctx->send_ttl, ctl_op);
BT_DBG("len %zu: %s", data_len, bt_hex(data, data_len));
buf = bt_mesh_adv_create(BT_MESH_ADV_DATA, TRANSMIT_COUNT(tx->xmit),
TRANSMIT_INT(tx->xmit), BUF_TIMEOUT);
buf = bt_mesh_adv_create(BT_MESH_ADV_DATA,
BT_MESH_TRANSMIT_COUNT(tx->xmit),
BT_MESH_TRANSMIT_INT(tx->xmit), BUF_TIMEOUT);
if (!buf) {
BT_ERR("Out of transport buffers");
return -ENOBUFS;