nimble/controller: Allow to configure CSA #2 support

This allows to enable/disable CSA #2 support in Nimble controller.
By default it is disabled.

X-Original-Commit: 1630d8e37459fc2ce8259a05c2f1e0f6bf5c2e98
This commit is contained in:
Szymon Janc
2017-04-11 14:47:26 +02:00
parent 33568f4de7
commit 1201079a26
7 changed files with 31 additions and 4 deletions
+2
View File
@@ -1339,8 +1339,10 @@ ble_ll_init(void)
features |= BLE_LL_FEAT_LE_PING;
#endif
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
/* CSA2 */
features |= BLE_LL_FEAT_CSA2;
#endif
/* Initialize random number generation */
ble_ll_rand_init();
+7 -2
View File
@@ -244,8 +244,9 @@ ble_ll_adv_pdu_make(struct ble_ll_adv_sm *advsm, struct os_mbuf *m)
case BLE_HCI_ADV_TYPE_ADV_IND:
pdu_type = BLE_ADV_PDU_TYPE_ADV_IND;
/* CSA #2 is supported */
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
pdu_type |= BLE_ADV_PDU_HDR_CHSEL;
#endif
break;
case BLE_HCI_ADV_TYPE_ADV_NONCONN_IND:
@@ -260,8 +261,9 @@ ble_ll_adv_pdu_make(struct ble_ll_adv_sm *advsm, struct os_mbuf *m)
case BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_LD:
pdu_type = BLE_ADV_PDU_TYPE_ADV_DIRECT_IND;
/* CSA #2 is supported */
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
pdu_type |= BLE_ADV_PDU_HDR_CHSEL;
#endif
adv_data_len = 0;
pdulen = BLE_ADV_DIRECT_IND_LEN;
@@ -1724,7 +1726,10 @@ ble_ll_adv_send_conn_comp_ev(struct ble_ll_conn_sm *connsm,
advsm->conn_comp_ev = NULL;
ble_ll_conn_comp_event_send(connsm, BLE_ERR_SUCCESS, evbuf, advsm);
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
ble_ll_hci_ev_le_csa(connsm);
#endif
}
/**
+11 -1
View File
@@ -599,6 +599,7 @@ ble_ll_conn_remapped_channel(uint8_t remap_index, const uint8_t *chanmap)
return 0;
}
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
static uint16_t
ble_ll_conn_csa2_perm(uint16_t in)
{
@@ -663,6 +664,7 @@ ble_ll_conn_calc_dci_csa2(struct ble_ll_conn_sm *conn)
return ble_ll_conn_remapped_channel(remap_index, conn->chanmap);
}
#endif
static uint8_t
ble_ll_conn_calc_dci_csa1(struct ble_ll_conn_sm *conn)
@@ -706,9 +708,11 @@ ble_ll_conn_calc_dci(struct ble_ll_conn_sm *conn, uint16_t latency)
{
uint8_t index;
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
if (CONN_F_CSA2_SUPP(conn)) {
return ble_ll_conn_calc_dci_csa2(conn);
}
#endif
index = conn->data_chan_index;
@@ -1593,17 +1597,21 @@ ble_ll_conn_master_init(struct ble_ll_conn_sm *connsm,
static void
ble_ll_conn_set_csa(struct ble_ll_conn_sm *connsm, bool chsel)
{
/* calculate the next data channel */
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
if (chsel) {
CONN_F_CSA2_SUPP(connsm) = 1;
connsm->channel_id = ((connsm->access_addr & 0xffff0000) >> 16) ^
(connsm->access_addr & 0x0000ffff);
/* calculate the next data channel */
connsm->data_chan_index = ble_ll_conn_calc_dci(connsm, 0);
return;
}
#endif
connsm->last_unmapped_chan = 0;
/* calculate the next data channel */
connsm->data_chan_index = ble_ll_conn_calc_dci(connsm, 1);
}
@@ -2133,7 +2141,9 @@ ble_ll_conn_created(struct ble_ll_conn_sm *connsm, struct ble_mbuf_hdr *rxhdr)
} else {
evbuf = ble_ll_init_get_conn_comp_ev();
ble_ll_conn_comp_event_send(connsm, BLE_ERR_SUCCESS, evbuf, NULL);
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
ble_ll_hci_ev_le_csa(connsm);
#endif
}
}
+2 -1
View File
@@ -126,8 +126,9 @@ ble_ll_conn_req_pdu_make(struct ble_ll_conn_sm *connsm)
/* Construct first PDU header byte */
pdu_type = BLE_ADV_PDU_TYPE_CONNECT_REQ;
/* CSA #2 is supported */
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
pdu_type |= BLE_ADV_PDU_HDR_CHSEL;
#endif
/* Set BLE transmit header */
ble_ll_mbuf_init(m, BLE_CONNECT_REQ_LEN, pdu_type);
+2
View File
@@ -273,6 +273,7 @@ ble_ll_hci_ev_databuf_overflow(void)
*
* @param connsm Pointer to connection state machine
*/
#if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_CSA2) == 1)
void
ble_ll_hci_ev_le_csa(struct ble_ll_conn_sm *connsm)
{
@@ -290,3 +291,4 @@ ble_ll_hci_ev_le_csa(struct ble_ll_conn_sm *connsm)
}
}
}
#endif
+6
View File
@@ -204,6 +204,12 @@ syscfg.defs:
nimble controller.
value: '0'
BLE_LL_CFG_FEAT_LE_CSA2:
description: >
This option is used to enable/disable support for LE Channel
Selection Algorithm #2.
value: '0'
BLE_PUBLIC_DEV_ADDR:
description: >
Allows the target or app to override the public device address
+1
View File
@@ -19,3 +19,4 @@
# Package: net/nimble/controller/test
syscfg.vals:
BLE_LL_CFG_FEAT_LE_CSA2: 1