mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-11-04 11:32:47 +00:00
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:
@@ -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();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -19,3 +19,4 @@
|
||||
# Package: net/nimble/controller/test
|
||||
|
||||
syscfg.vals:
|
||||
BLE_LL_CFG_FEAT_LE_CSA2: 1
|
||||
|
||||
Reference in New Issue
Block a user