You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2022/04/13 08:29:36 UTC
[mynewt-nimble] branch master updated: nimble/ll: Move global channel map out of ble_ll_conn
This is an automated email from the ASF dual-hosted git repository.
andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 14b43a45 nimble/ll: Move global channel map out of ble_ll_conn
14b43a45 is described below
commit 14b43a457a2938f8cb9b7a3b6da380eb4486eadc
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Tue Apr 5 16:15:34 2022 +0200
nimble/ll: Move global channel map out of ble_ll_conn
Global channels map is also used by adv code. This fixes build without
central/peripheral roles enabled.
---
nimble/controller/include/controller/ble_ll.h | 6 ++++++
nimble/controller/include/controller/ble_ll_conn.h | 8 +++-----
nimble/controller/src/ble_ll.c | 4 ++++
nimble/controller/src/ble_ll_adv.c | 11 +++++-----
nimble/controller/src/ble_ll_conn.c | 24 ++++++++--------------
nimble/controller/src/ble_ll_conn_hci.c | 4 ++--
nimble/controller/src/ble_ll_conn_priv.h | 2 --
nimble/controller/src/ble_ll_ctrl.c | 10 ++++-----
8 files changed, 33 insertions(+), 36 deletions(-)
diff --git a/nimble/controller/include/controller/ble_ll.h b/nimble/controller/include/controller/ble_ll.h
index 14fdcc7d..18468d43 100644
--- a/nimble/controller/include/controller/ble_ll.h
+++ b/nimble/controller/include/controller/ble_ll.h
@@ -91,6 +91,8 @@ void ble_ll_assert(const char *file, unsigned line) __attribute((noreturn));
/* Packet queue header definition */
STAILQ_HEAD(ble_ll_pkt_q, os_mbuf_pkthdr);
+#define BLE_LL_CHAN_MAP_LEN (5)
+
/*
* Global Link Layer data object. There is only one Link Layer data object
* per controller although there may be many instances of the link layer state
@@ -104,6 +106,10 @@ struct ble_ll_obj
/* Current Link Layer state */
uint8_t ll_state;
+ /* Global channel map */
+ uint8_t chan_map_num_used;
+ uint8_t chan_map[BLE_LL_CHAN_MAP_LEN];
+
#if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL) || MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
/* Number of ACL data packets supported */
uint8_t ll_num_acl_pkts;
diff --git a/nimble/controller/include/controller/ble_ll_conn.h b/nimble/controller/include/controller/ble_ll_conn.h
index 269d881c..437d7c25 100644
--- a/nimble/controller/include/controller/ble_ll_conn.h
+++ b/nimble/controller/include/controller/ble_ll_conn.h
@@ -24,6 +24,7 @@
#include "nimble/ble.h"
#include "nimble/hci_common.h"
#include "nimble/nimble_npl.h"
+#include "controller/ble_ll.h"
#include "controller/ble_ll_sched.h"
#include "controller/ble_ll_ctrl.h"
#include "controller/ble_phy.h"
@@ -47,9 +48,6 @@ extern "C" {
#define BLE_LL_CONN_STATE_CREATED (1)
#define BLE_LL_CONN_STATE_ESTABLISHED (2)
-/* Channel map size */
-#define BLE_LL_CONN_CHMAP_LEN (5)
-
/* Definition for RSSI when the RSSI is unknown */
#define BLE_LL_CONN_UNKNOWN_RSSI (127)
@@ -240,8 +238,8 @@ struct ble_ll_conn_sm
#endif
/* Used to calculate data channel index for connection */
- uint8_t chanmap[BLE_LL_CONN_CHMAP_LEN];
- uint8_t req_chanmap[BLE_LL_CONN_CHMAP_LEN];
+ uint8_t chanmap[BLE_LL_CHAN_MAP_LEN];
+ uint8_t req_chanmap[BLE_LL_CHAN_MAP_LEN];
uint16_t chanmap_instant;
uint16_t channel_id; /* TODO could be union with hop and last chan used */
uint8_t hop_inc;
diff --git a/nimble/controller/src/ble_ll.c b/nimble/controller/src/ble_ll.c
index b9d9d7b1..185fb583 100644
--- a/nimble/controller/src/ble_ll.c
+++ b/nimble/controller/src/ble_ll.c
@@ -1640,6 +1640,10 @@ ble_ll_reset(void)
g_ble_ll_data.ll_pref_tx_phys = phy_mask;
g_ble_ll_data.ll_pref_rx_phys = phy_mask;
+ /* Enable all channels in channel map */
+ g_ble_ll_data.chan_map_num_used = BLE_PHY_NUM_DATA_CHANS;
+ memset(g_ble_ll_data.chan_map, 0xff, BLE_LL_CHAN_MAP_LEN);
+
#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) || MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
/* Reset connection module */
ble_ll_conn_module_reset();
diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c
index 1aaeeb4d..129eeba5 100644
--- a/nimble/controller/src/ble_ll_adv.c
+++ b/nimble/controller/src/ble_ll_adv.c
@@ -162,7 +162,7 @@ struct ble_ll_adv_sm
uint8_t periodic_sync_active : 1;
uint8_t periodic_sync_index : 1;
uint8_t periodic_num_used_chans;
- uint8_t periodic_chanmap[BLE_LL_CONN_CHMAP_LEN];
+ uint8_t periodic_chanmap[BLE_LL_CHAN_MAP_LEN];
uint32_t periodic_adv_itvl_ticks;
uint8_t periodic_adv_itvl_rem_usec;
uint8_t periodic_adv_event_start_time_remainder;
@@ -1372,8 +1372,8 @@ ble_ll_adv_aux_calculate(struct ble_ll_adv_sm *advsm,
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2)
aux->chan = ble_ll_utils_dci_csa2(advsm->event_cntr++,
advsm->channel_id,
- g_ble_ll_conn_params.num_used_chans,
- g_ble_ll_conn_params.central_chan_map);
+ g_ble_ll_data.chan_map_num_used,
+ g_ble_ll_data.chan_map);
#else
aux->chan = ble_ll_utils_remapped_channel(ble_ll_rand() % BLE_PHY_NUM_DATA_CHANS,
g_ble_ll_conn_params.central_chan_map);
@@ -2545,9 +2545,8 @@ ble_ll_adv_sm_start_periodic(struct ble_ll_adv_sm *advsm)
advsm->periodic_adv_active = 1;
/* keep channel map since we cannot change it later on */
- memcpy(advsm->periodic_chanmap, g_ble_ll_conn_params.central_chan_map,
- BLE_LL_CONN_CHMAP_LEN);
- advsm->periodic_num_used_chans = g_ble_ll_conn_params.num_used_chans;
+ memcpy(advsm->periodic_chanmap, g_ble_ll_data.chan_map, BLE_LL_CHAN_MAP_LEN);
+ advsm->periodic_num_used_chans = g_ble_ll_data.chan_map_num_used;
advsm->periodic_event_cntr = 0;
/* for chaining we start with random counter as we share access addr */
advsm->periodic_chain_event_cntr = ble_ll_rand();
diff --git a/nimble/controller/src/ble_ll_conn.c b/nimble/controller/src/ble_ll_conn.c
index 177b3693..dc43fecc 100644
--- a/nimble/controller/src/ble_ll_conn.c
+++ b/nimble/controller/src/ble_ll_conn.c
@@ -1699,9 +1699,8 @@ ble_ll_conn_central_common_init(struct ble_ll_conn_sm *connsm)
connsm->hop_inc = (ble_ll_rand() % 12) + 5;
/* Set channel map to map requested by host */
- connsm->num_used_chans = g_ble_ll_conn_params.num_used_chans;
- memcpy(connsm->chanmap, g_ble_ll_conn_params.central_chan_map,
- BLE_LL_CONN_CHMAP_LEN);
+ connsm->num_used_chans = g_ble_ll_data.chan_map_num_used;
+ memcpy(connsm->chanmap, g_ble_ll_data.chan_map, BLE_LL_CHAN_MAP_LEN);
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE)
connsm->acc_subrate_min = g_ble_ll_conn_params.acc_subrate_min;
@@ -2471,7 +2470,7 @@ ble_ll_conn_next_event(struct ble_ll_conn_sm *connsm)
on peripheral side. Could ignore it or see if still enqueued. */
connsm->num_used_chans =
ble_ll_utils_calc_num_used_chans(connsm->req_chanmap);
- memcpy(connsm->chanmap, connsm->req_chanmap, BLE_LL_CONN_CHMAP_LEN);
+ memcpy(connsm->chanmap, connsm->req_chanmap, BLE_LL_CHAN_MAP_LEN);
connsm->csmflags.cfbit.chanmap_update_scheduled = 0;
@@ -3007,7 +3006,7 @@ ble_ll_conn_tx_connect_ind_pducb(uint8_t *dptr, void *pducb_arg, uint8_t *hdr_by
put_le16(dptr + 10, connsm->conn_itvl);
put_le16(dptr + 12, connsm->periph_latency);
put_le16(dptr + 14, connsm->supervision_tmo);
- memcpy(dptr + 16, &connsm->chanmap, BLE_LL_CONN_CHMAP_LEN);
+ memcpy(dptr + 16, &connsm->chanmap, BLE_LL_CHAN_MAP_LEN);
dptr[21] = connsm->hop_inc | (connsm->central_sca << 5);
*hdr_byte = pdu_data->hdr_byte;
@@ -3882,17 +3881,15 @@ ble_ll_conn_set_global_chanmap(uint8_t num_used_chans, const uint8_t *chanmap)
#if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
struct ble_ll_conn_sm *connsm;
#endif
- struct ble_ll_conn_global_params *conn_params;
/* Do nothing if same channel map */
- conn_params = &g_ble_ll_conn_params;
- if (!memcmp(conn_params->central_chan_map, chanmap, BLE_LL_CONN_CHMAP_LEN)) {
+ if (!memcmp(g_ble_ll_data.chan_map, chanmap, BLE_LL_CHAN_MAP_LEN)) {
return;
}
/* Change channel map and cause channel map update procedure to start */
- conn_params->num_used_chans = num_used_chans;
- memcpy(conn_params->central_chan_map, chanmap, BLE_LL_CONN_CHMAP_LEN);
+ g_ble_ll_data.chan_map_num_used = num_used_chans;
+ memcpy(g_ble_ll_data.chan_map, chanmap, BLE_LL_CHAN_MAP_LEN);
#if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
/* Perform channel map update */
@@ -3966,7 +3963,7 @@ ble_ll_conn_periph_start(uint8_t *rxbuf, uint8_t pat, struct ble_mbuf_hdr *rxhdr
connsm->conn_itvl = get_le16(dptr + 10);
connsm->periph_latency = get_le16(dptr + 12);
connsm->supervision_tmo = get_le16(dptr + 14);
- memcpy(&connsm->chanmap, dptr + 16, BLE_LL_CONN_CHMAP_LEN);
+ memcpy(&connsm->chanmap, dptr + 16, BLE_LL_CHAN_MAP_LEN);
connsm->hop_inc = dptr[21] & 0x1F;
connsm->central_sca = dptr[21] >> 5;
@@ -4268,11 +4265,6 @@ ble_ll_conn_module_reset(void)
conn_params->sugg_tx_octets = BLE_LL_CONN_SUPP_BYTES_MIN;
conn_params->sugg_tx_time = BLE_LL_CONN_SUPP_TIME_MIN;
- /* Mask in all channels by default */
- conn_params->num_used_chans = BLE_PHY_NUM_DATA_CHANS;
- memset(conn_params->central_chan_map, 0xff, BLE_LL_CONN_CHMAP_LEN - 1);
- conn_params->central_chan_map[4] = 0x1f;
-
#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_ENHANCED_CONN_UPDATE)
conn_params->acc_subrate_min = 0x0001;
conn_params->acc_subrate_max = 0x0001;
diff --git a/nimble/controller/src/ble_ll_conn_hci.c b/nimble/controller/src/ble_ll_conn_hci.c
index be41bf62..8f5771a6 100644
--- a/nimble/controller/src/ble_ll_conn_hci.c
+++ b/nimble/controller/src/ble_ll_conn_hci.c
@@ -1386,9 +1386,9 @@ ble_ll_conn_hci_rd_chan_map(const uint8_t *cmdbuf, uint8_t len,
memset(rsp->chan_map, 0, sizeof(rsp->chan_map));
} else {
if (connsm->csmflags.cfbit.chanmap_update_scheduled) {
- memcpy(rsp->chan_map, connsm->req_chanmap, BLE_LL_CONN_CHMAP_LEN);
+ memcpy(rsp->chan_map, connsm->req_chanmap, BLE_LL_CHAN_MAP_LEN);
} else {
- memcpy(rsp->chan_map, connsm->chanmap, BLE_LL_CONN_CHMAP_LEN);
+ memcpy(rsp->chan_map, connsm->chanmap, BLE_LL_CHAN_MAP_LEN);
}
rc = BLE_ERR_SUCCESS;
}
diff --git a/nimble/controller/src/ble_ll_conn_priv.h b/nimble/controller/src/ble_ll_conn_priv.h
index 7a1e56d8..90c32c0c 100644
--- a/nimble/controller/src/ble_ll_conn_priv.h
+++ b/nimble/controller/src/ble_ll_conn_priv.h
@@ -66,8 +66,6 @@ extern "C" {
/* Global Link Layer connection parameters */
struct ble_ll_conn_global_params
{
- uint8_t central_chan_map[BLE_LL_CONN_CHMAP_LEN];
- uint8_t num_used_chans;
#if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL) || MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
uint8_t supp_max_tx_octets;
uint8_t supp_max_rx_octets;
diff --git a/nimble/controller/src/ble_ll_ctrl.c b/nimble/controller/src/ble_ll_ctrl.c
index 5111d6d3..7ece7b1c 100644
--- a/nimble/controller/src/ble_ll_ctrl.c
+++ b/nimble/controller/src/ble_ll_ctrl.c
@@ -1868,12 +1868,12 @@ static void
ble_ll_ctrl_chanmap_req_make(struct ble_ll_conn_sm *connsm, uint8_t *pyld)
{
/* Copy channel map that host desires into request */
- memcpy(pyld, g_ble_ll_conn_params.central_chan_map, BLE_LL_CONN_CHMAP_LEN);
- memcpy(connsm->req_chanmap, pyld, BLE_LL_CONN_CHMAP_LEN);
+ memcpy(pyld, g_ble_ll_data.chan_map, BLE_LL_CHAN_MAP_LEN);
+ memcpy(connsm->req_chanmap, pyld, BLE_LL_CHAN_MAP_LEN);
/* Place instant into request */
connsm->chanmap_instant = connsm->event_cntr + connsm->periph_latency + 6 + 1;
- put_le16(pyld + BLE_LL_CONN_CHMAP_LEN, connsm->chanmap_instant);
+ put_le16(pyld + BLE_LL_CHAN_MAP_LEN, connsm->chanmap_instant);
/* Set scheduled flag */
connsm->csmflags.cfbit.chanmap_update_scheduled = 1;
@@ -2393,13 +2393,13 @@ ble_ll_ctrl_rx_chanmap_req(struct ble_ll_conn_sm *connsm, uint8_t *dptr)
#endif
/* If instant is in the past, we have to end the connection */
- instant = get_le16(dptr + BLE_LL_CONN_CHMAP_LEN);
+ instant = get_le16(dptr + BLE_LL_CHAN_MAP_LEN);
conn_events = (instant - connsm->event_cntr) & 0xFFFF;
if (conn_events >= 32767) {
ble_ll_conn_timeout(connsm, BLE_ERR_INSTANT_PASSED);
} else {
connsm->chanmap_instant = instant;
- memcpy(connsm->req_chanmap, dptr, BLE_LL_CONN_CHMAP_LEN);
+ memcpy(connsm->req_chanmap, dptr, BLE_LL_CHAN_MAP_LEN);
connsm->csmflags.cfbit.chanmap_update_scheduled = 1;
}