From 17c9b3a1056816693aff7b073e0a7536d4dc4e26 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Sun, 12 Nov 2017 22:19:28 +0200 Subject: [PATCH] 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 --- include/bluetooth/mesh/access.h | 20 ++++++++++++++++++++ subsys/bluetooth/host/mesh/cfg.c | 13 ++++++++----- subsys/bluetooth/host/mesh/foundation.h | 5 ----- subsys/bluetooth/host/mesh/friend.c | 4 ++-- subsys/bluetooth/host/mesh/net.c | 5 +++-- subsys/bluetooth/host/mesh/transport.c | 14 ++++++++------ 6 files changed, 41 insertions(+), 20 deletions(-) diff --git a/include/bluetooth/mesh/access.h b/include/bluetooth/mesh/access.h index 34e90515264..c4810bd3ac5 100644 --- a/include/bluetooth/mesh/access.h +++ b/include/bluetooth/mesh/access.h @@ -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; diff --git a/subsys/bluetooth/host/mesh/cfg.c b/subsys/bluetooth/host/mesh/cfg.c index cb6666653c5..7e8136d980e 100644 --- a/subsys/bluetooth/host/mesh/cfg.c +++ b/subsys/bluetooth/host/mesh/cfg.c @@ -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) { diff --git a/subsys/bluetooth/host/mesh/foundation.h b/subsys/bluetooth/host/mesh/foundation.h index 4b32b045cd0..57961aba2e4 100644 --- a/subsys/bluetooth/host/mesh/foundation.h +++ b/subsys/bluetooth/host/mesh/foundation.h @@ -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); diff --git a/subsys/bluetooth/host/mesh/friend.c b/subsys/bluetooth/host/mesh/friend.c index 933509a019a..31b501c581e 100644 --- a/subsys/bluetooth/host/mesh/friend.c +++ b/subsys/bluetooth/host/mesh/friend.c @@ -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(); diff --git a/subsys/bluetooth/host/mesh/net.c b/subsys/bluetooth/host/mesh/net.c index 88fb427a8e7..5ce46816218 100644 --- a/subsys/bluetooth/host/mesh/net.c +++ b/subsys/bluetooth/host/mesh/net.c @@ -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; diff --git a/subsys/bluetooth/host/mesh/transport.c b/subsys/bluetooth/host/mesh/transport.c index 0e361e999e4..8e488e97486 100644 --- a/subsys/bluetooth/host/mesh/transport.c +++ b/subsys/bluetooth/host/mesh/transport.c @@ -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;