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
|
default y
|
||||||
select BT_RPA
|
select BT_RPA
|
||||||
help
|
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
|
config BT_CTLR_RL_SIZE
|
||||||
prompt "LE Controller-based Privacy Resolving List 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.
|
Set the size of the Resolving List for LE Controller-based Privacy.
|
||||||
On nRF5x-based controllers, the hardware imposes a limit of 8 devices.
|
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
|
config BT_CTLR_DATA_LENGTH
|
||||||
bool "Data Length Update"
|
bool "Data Length Update"
|
||||||
default y
|
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 info_len;
|
||||||
u8_t rssi;
|
u8_t rssi;
|
||||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||||
u8_t rl_idx, direct;
|
u8_t rl_idx;
|
||||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
#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;
|
u8_t *prssi;
|
||||||
|
|
||||||
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT)) {
|
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT)) {
|
||||||
return;
|
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) +
|
direct = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
||||||
offsetof(struct pdu_adv, payload) + adv->len + 2];
|
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)) {
|
if (!(le_event_mask & BT_EVT_MASK_LE_ADVERTISING_REPORT)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||||
|
|
||||||
|
|
||||||
#if CONFIG_BT_CTLR_DUP_FILTER_LEN > 0
|
#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) +
|
rssi = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
||||||
offsetof(struct pdu_adv, payload) + adv->len];
|
offsetof(struct pdu_adv, payload) + adv->len];
|
||||||
|
|
||||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
|
||||||
rl_idx = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
|
|
||||||
offsetof(struct pdu_adv, payload) + adv->len + 1];
|
|
||||||
|
|
||||||
if (direct) {
|
if (direct) {
|
||||||
struct bt_hci_evt_le_direct_adv_report *drp;
|
struct bt_hci_evt_le_direct_adv_report *drp;
|
||||||
struct bt_hci_evt_le_direct_adv_info *dir_info;
|
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];
|
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()) {
|
if (rl_idx < ll_rl_size_get()) {
|
||||||
/* Store identity address */
|
/* Store identity address */
|
||||||
ll_rl_id_addr_get(rl_idx, &dir_info->addr.type,
|
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) */
|
/* Mark it as identity address from RPA (0x02, 0x03) */
|
||||||
dir_info->addr.type += 2;
|
dir_info->addr.type += 2;
|
||||||
} else {
|
} else {
|
||||||
|
#else
|
||||||
|
if (1) {
|
||||||
|
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
||||||
dir_info->addr.type = adv->tx_addr;
|
dir_info->addr.type = adv->tx_addr;
|
||||||
memcpy(&dir_info->addr.a.val[0],
|
memcpy(&dir_info->addr.a.val[0],
|
||||||
&adv->payload.direct_ind.adv_addr[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;
|
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 +
|
info_len = sizeof(struct bt_hci_evt_le_advertising_info) + data_len +
|
||||||
sizeof(*prssi);
|
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];
|
adv_info->evt_type = c_adv_type[adv->type];
|
||||||
|
|
||||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
#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()) {
|
if (rl_idx < ll_rl_size_get()) {
|
||||||
/* Store identity address */
|
/* Store identity address */
|
||||||
ll_rl_id_addr_get(rl_idx, &adv_info->addr.type,
|
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;
|
(rssi_ready) ? (radio_rssi_get() & 0x7f) : 0x7f;
|
||||||
|
|
||||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
#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) +
|
((u8_t *)pdu_adv_rx)[offsetof(struct pdu_adv, payload) +
|
||||||
pdu_adv_rx->len + 1] = rl_idx;
|
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 */
|
/* save the directed adv report flag */
|
||||||
((u8_t *)pdu_adv_rx)[offsetof(struct pdu_adv, payload) +
|
((u8_t *)pdu_adv_rx)[offsetof(struct pdu_adv, payload) +
|
||||||
pdu_adv_rx->len + 2] = dir_report ? 1 : 0;
|
pdu_adv_rx->len + 2] = dir_report ? 1 : 0;
|
||||||
#endif /* CONFIG_BT_CTLR_PRIVACY */
|
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
|
||||||
|
|
||||||
packet_rx_enqueue();
|
packet_rx_enqueue();
|
||||||
|
|
||||||
|
|
|
@ -53,12 +53,16 @@
|
||||||
|
|
||||||
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
#if defined(CONFIG_BT_CTLR_PRIVACY)
|
||||||
#define RADIO_BLE_FEAT_BIT_PRIVACY BIT64(BT_LE_FEAT_BIT_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 */
|
#else /* !CONFIG_BT_CTLR_PRIVACY */
|
||||||
#define RADIO_BLE_FEAT_BIT_PRIVACY 0
|
#define RADIO_BLE_FEAT_BIT_PRIVACY 0
|
||||||
#define RADIO_BLE_FEAT_BIT_EXT_SCAN 0
|
|
||||||
#endif /* !CONFIG_BT_CTLR_PRIVACY */
|
#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)
|
#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)
|
#define RADIO_BLE_FEAT_BIT_CHAN_SEL_2 BIT64(BT_LE_FEAT_BIT_CHAN_SEL_ALGO_2)
|
||||||
#else /* !CONFIG_BT_CTLR_CHAN_SEL_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
|
/* 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
|
#define PDU_AC_SIZE_EXTRA 3
|
||||||
#else
|
#else
|
||||||
#define PDU_AC_SIZE_EXTRA 1
|
#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_DUP_FILTER_LEN=16
|
||||||
CONFIG_BT_CTLR_LE_PING=n
|
CONFIG_BT_CTLR_LE_PING=n
|
||||||
CONFIG_BT_CTLR_PRIVACY=n
|
CONFIG_BT_CTLR_PRIVACY=n
|
||||||
|
CONFIG_BT_CTLR_EXT_SCAN_FP=n
|
||||||
CONFIG_BT_CTLR_DATA_LENGTH=n
|
CONFIG_BT_CTLR_DATA_LENGTH=n
|
||||||
CONFIG_BT_CTLR_PHY=n
|
CONFIG_BT_CTLR_PHY=n
|
||||||
CONFIG_BT_CTLR_CHAN_SEL_2=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_DUP_FILTER_LEN=16
|
||||||
CONFIG_BT_CTLR_LE_PING=y
|
CONFIG_BT_CTLR_LE_PING=y
|
||||||
CONFIG_BT_CTLR_PRIVACY=y
|
CONFIG_BT_CTLR_PRIVACY=y
|
||||||
|
CONFIG_BT_CTLR_EXT_SCAN_FP=y
|
||||||
CONFIG_BT_CTLR_DATA_LENGTH=y
|
CONFIG_BT_CTLR_DATA_LENGTH=y
|
||||||
CONFIG_BT_CTLR_PHY=y
|
CONFIG_BT_CTLR_PHY=y
|
||||||
CONFIG_BT_CTLR_PHY_2M=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_DUP_FILTER_LEN=0
|
||||||
CONFIG_BT_CTLR_LE_PING=n
|
CONFIG_BT_CTLR_LE_PING=n
|
||||||
CONFIG_BT_CTLR_PRIVACY=n
|
CONFIG_BT_CTLR_PRIVACY=n
|
||||||
|
CONFIG_BT_CTLR_EXT_SCAN_FP=n
|
||||||
CONFIG_BT_CTLR_DATA_LENGTH=n
|
CONFIG_BT_CTLR_DATA_LENGTH=n
|
||||||
CONFIG_BT_CTLR_PHY=n
|
CONFIG_BT_CTLR_PHY=n
|
||||||
CONFIG_BT_CTLR_CHAN_SEL_2=n
|
CONFIG_BT_CTLR_CHAN_SEL_2=n
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue