Bluetooth: controller: Split Ext Scan Filter Policies out
Since Extended Scanner Filter Policies is an independent feature from Controller-based Privacy, split it out so it can be built independently and included without it. Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
This commit is contained in:
parent
8ebaf29927
commit
fc965e5554
8 changed files with 43 additions and 15 deletions
|
@ -123,7 +123,8 @@ config BT_CTLR_PRIVACY
|
|||
default y
|
||||
select BT_RPA
|
||||
help
|
||||
Enable support for Bluetooth v4.2 LE Controller-based Privacy feature in the Controller.
|
||||
Enable support for Bluetooth v4.2 LE Controller-based Privacy feature
|
||||
in the Controller.
|
||||
|
||||
config BT_CTLR_RL_SIZE
|
||||
prompt "LE Controller-based Privacy Resolving List size"
|
||||
|
@ -135,6 +136,13 @@ config BT_CTLR_RL_SIZE
|
|||
Set the size of the Resolving List for LE Controller-based Privacy.
|
||||
On nRF5x-based controllers, the hardware imposes a limit of 8 devices.
|
||||
|
||||
config BT_CTLR_EXT_SCAN_FP
|
||||
bool "LE Extended Scanner Filter Policies"
|
||||
default y
|
||||
help
|
||||
Enable support for Bluetooth v4.2 LE Extended Scanner Filter Policies
|
||||
in the Controller.
|
||||
|
||||
config BT_CTLR_DATA_LENGTH
|
||||
bool "Data Length Update"
|
||||
default y
|
||||
|
|
|
@ -1677,15 +1677,18 @@ static void le_advertising_report(struct pdu_data *pdu_data, u8_t *b,
|
|||
u8_t info_len;
|
||||
u8_t rssi;
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
u8_t rl_idx, direct;
|
||||
u8_t rl_idx;
|
||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
||||
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
|
||||
u8_t direct;
|
||||
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||
u8_t *prssi;
|
||||
|
||||
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
|
||||
direct = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
||||
offsetof(struct pdu_adv, payload) + adv->len + 2];
|
||||
|
||||
|
@ -1697,7 +1700,7 @@ static void le_advertising_report(struct pdu_data *pdu_data, u8_t *b,
|
|||
if (!(le_event_mask & BT_EVT_MASK_LE_ADVERTISING_REPORT)) {
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
||||
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||
|
||||
|
||||
#if CONFIG_BT_CTLR_DUP_FILTER_LEN > 0
|
||||
|
@ -1715,10 +1718,7 @@ static void le_advertising_report(struct pdu_data *pdu_data, u8_t *b,
|
|||
rssi = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
||||
offsetof(struct pdu_adv, payload) + adv->len];
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
rl_idx = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
||||
offsetof(struct pdu_adv, payload) + adv->len + 1];
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
|
||||
if (direct) {
|
||||
struct bt_hci_evt_le_direct_adv_report *drp;
|
||||
struct bt_hci_evt_le_direct_adv_info *dir_info;
|
||||
|
@ -1732,6 +1732,9 @@ static void le_advertising_report(struct pdu_data *pdu_data, u8_t *b,
|
|||
|
||||
dir_info->evt_type = c_adv_type[PDU_ADV_TYPE_DIRECT_IND];
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
rl_idx = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
||||
offsetof(struct pdu_adv, payload) + adv->len + 1];
|
||||
if (rl_idx < ll_rl_size_get()) {
|
||||
/* Store identity address */
|
||||
ll_rl_id_addr_get(rl_idx, &dir_info->addr.type,
|
||||
|
@ -1739,6 +1742,9 @@ static void le_advertising_report(struct pdu_data *pdu_data, u8_t *b,
|
|||
/* Mark it as identity address from RPA (0x02, 0x03) */
|
||||
dir_info->addr.type += 2;
|
||||
} else {
|
||||
#else
|
||||
if (1) {
|
||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
||||
dir_info->addr.type = adv->tx_addr;
|
||||
memcpy(&dir_info->addr.a.val[0],
|
||||
&adv->payload.direct_ind.adv_addr[0],
|
||||
|
@ -1753,7 +1759,7 @@ static void le_advertising_report(struct pdu_data *pdu_data, u8_t *b,
|
|||
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
||||
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||
|
||||
info_len = sizeof(struct bt_hci_evt_le_advertising_info) + data_len +
|
||||
sizeof(*prssi);
|
||||
|
@ -1766,6 +1772,8 @@ static void le_advertising_report(struct pdu_data *pdu_data, u8_t *b,
|
|||
adv_info->evt_type = c_adv_type[adv->type];
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
rl_idx = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
||||
offsetof(struct pdu_adv, payload) + adv->len + 1];
|
||||
if (rl_idx < ll_rl_size_get()) {
|
||||
/* Store identity address */
|
||||
ll_rl_id_addr_get(rl_idx, &adv_info->addr.type,
|
||||
|
|
|
@ -1145,13 +1145,15 @@ static u32_t isr_rx_scan_report(u8_t rssi_ready, u8_t rl_idx, bool dir_report)
|
|||
(rssi_ready) ? (radio_rssi_get() & 0x7f) : 0x7f;
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
/* save the resolving list index */
|
||||
/* save the resolving list index. */
|
||||
((u8_t *)pdu_adv_rx)[offsetof(struct pdu_adv, payload) +
|
||||
pdu_adv_rx->len + 1] = rl_idx;
|
||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
||||
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
|
||||
/* save the directed adv report flag */
|
||||
((u8_t *)pdu_adv_rx)[offsetof(struct pdu_adv, payload) +
|
||||
pdu_adv_rx->len + 2] = dir_report ? 1 : 0;
|
||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
||||
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||
|
||||
packet_rx_enqueue();
|
||||
|
||||
|
|
|
@ -53,12 +53,16 @@
|
|||
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
#define RADIO_BLE_FEAT_BIT_PRIVACY BIT64(BT_LE_FEAT_BIT_PRIVACY)
|
||||
#define RADIO_BLE_FEAT_BIT_EXT_SCAN BIT64(BT_LE_FEAT_BIT_EXT_SCAN)
|
||||
#else /* !CONFIG_BT_CTLR_PRIVACY */
|
||||
#define RADIO_BLE_FEAT_BIT_PRIVACY 0
|
||||
#define RADIO_BLE_FEAT_BIT_EXT_SCAN 0
|
||||
#endif /* !CONFIG_BT_CTLR_PRIVACY */
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
|
||||
#define RADIO_BLE_FEAT_BIT_EXT_SCAN BIT64(BT_LE_FEAT_BIT_EXT_SCAN)
|
||||
#else /* !CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||
#define RADIO_BLE_FEAT_BIT_EXT_SCAN 0
|
||||
#endif /* !CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_CHAN_SEL_2)
|
||||
#define RADIO_BLE_FEAT_BIT_CHAN_SEL_2 BIT64(BT_LE_FEAT_BIT_CHAN_SEL_ALGO_2)
|
||||
#else /* !CONFIG_BT_CTLR_CHAN_SEL_2 */
|
||||
|
|
|
@ -274,9 +274,12 @@ struct pdu_data_q_tx {
|
|||
};
|
||||
|
||||
/* Extra bytes for enqueued rx_node metadata: rssi (always) and resolving
|
||||
* index and directed adv report (with privacy enabled).
|
||||
* index and directed adv report (with privacy or extended scanner filter
|
||||
* policies enabled).
|
||||
* Note: to simplify the code, both bytes are allocated even if only one of
|
||||
* the options is selected.
|
||||
*/
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||
#if defined(CONFIG_BT_CTLR_PRIVACY) || defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
|
||||
#define PDU_AC_SIZE_EXTRA 3
|
||||
#else
|
||||
#define PDU_AC_SIZE_EXTRA 1
|
||||
|
|
|
@ -7,6 +7,7 @@ CONFIG_BT_CTLR_SCHED_ADVANCED=y
|
|||
CONFIG_BT_CTLR_DUP_FILTER_LEN=16
|
||||
CONFIG_BT_CTLR_LE_PING=n
|
||||
CONFIG_BT_CTLR_PRIVACY=n
|
||||
CONFIG_BT_CTLR_EXT_SCAN_FP=n
|
||||
CONFIG_BT_CTLR_DATA_LENGTH=n
|
||||
CONFIG_BT_CTLR_PHY=n
|
||||
CONFIG_BT_CTLR_CHAN_SEL_2=n
|
||||
|
|
|
@ -7,6 +7,7 @@ CONFIG_BT_CTLR_SCHED_ADVANCED=n
|
|||
CONFIG_BT_CTLR_DUP_FILTER_LEN=16
|
||||
CONFIG_BT_CTLR_LE_PING=y
|
||||
CONFIG_BT_CTLR_PRIVACY=y
|
||||
CONFIG_BT_CTLR_EXT_SCAN_FP=y
|
||||
CONFIG_BT_CTLR_DATA_LENGTH=y
|
||||
CONFIG_BT_CTLR_PHY=y
|
||||
CONFIG_BT_CTLR_PHY_2M=y
|
||||
|
|
|
@ -7,6 +7,7 @@ CONFIG_BT_CTLR_SCHED_ADVANCED=n
|
|||
CONFIG_BT_CTLR_DUP_FILTER_LEN=0
|
||||
CONFIG_BT_CTLR_LE_PING=n
|
||||
CONFIG_BT_CTLR_PRIVACY=n
|
||||
CONFIG_BT_CTLR_EXT_SCAN_FP=n
|
||||
CONFIG_BT_CTLR_DATA_LENGTH=n
|
||||
CONFIG_BT_CTLR_PHY=n
|
||||
CONFIG_BT_CTLR_CHAN_SEL_2=n
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue