zephyr/subsys/bluetooth/controller/ll_sw/lll_scan.h
Vinayak Kariappa Chettimada 68f63246a0 Bluetooth: Controller: Fix filter accept list with periodic adv list use
Fix implementation to be able to establish synchronization
when scan filter accept list is in use and periodic
synchronization needs to be established using specified peer
address or using periodic advertiser list.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-03-23 16:32:49 +01:00

92 lines
2 KiB
C

/*
* Copyright (c) 2018-2019 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
struct lll_scan {
struct lll_hdr hdr;
#if defined(CONFIG_BT_CENTRAL)
/* NOTE: conn context SHALL be after lll_hdr,
* check ull_conn_setup how it access the connection LLL
* context.
*/
struct lll_conn *volatile conn;
uint8_t adv_addr[BDADDR_SIZE];
uint32_t conn_win_offset_us;
uint16_t conn_timeout;
#endif /* CONFIG_BT_CENTRAL */
uint8_t state:1;
uint8_t chan:2;
uint8_t filter_policy:2;
uint8_t type:1;
uint8_t init_addr_type:1;
uint8_t is_stop:1;
#if defined(CONFIG_BT_CTLR_ADV_EXT)
/* Reference to aux context when scanning auxiliary PDU */
struct lll_scan_aux *lll_aux;
uint16_t duration_reload;
uint16_t duration_expire;
uint8_t phy:3;
uint8_t is_adv_ind:1;
uint8_t is_aux_sched:1;
#if defined(CONFIG_BT_CTLR_SYNC_PERIODIC)
uint8_t is_sync:1;
#endif /* CONFIG_BT_CTLR_SYNC_PERIODIC */
#endif /* CONFIG_BT_CTLR_ADV_EXT */
#if defined(CONFIG_BT_CENTRAL)
uint8_t adv_addr_type:1;
#endif /* CONFIG_BT_CENTRAL */
#if defined(CONFIG_BT_CTLR_PRIVACY)
uint8_t rpa_gen:1;
/* initiator only */
uint8_t rl_idx;
#endif /* CONFIG_BT_CTLR_PRIVACY */
uint8_t init_addr[BDADDR_SIZE];
uint16_t interval;
uint32_t ticks_window;
#if defined(CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL)
int8_t tx_pwr_lvl;
#endif /* CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL */
};
struct lll_scan_aux {
struct lll_hdr hdr;
uint8_t chan:6;
uint8_t state:1;
uint8_t is_chain_sched:1;
uint8_t phy:3;
uint32_t window_size_us;
#if defined(CONFIG_BT_CENTRAL)
struct node_rx_pdu *node_conn_rx;
#endif /* CONFIG_BT_CENTRAL */
};
/* Define to check if filter is enabled and in addition if it is Extended Scan
* Filtering.
*/
#define SCAN_FP_FILTER BIT(0)
#define SCAN_FP_EXT BIT(1)
int lll_scan_init(void);
int lll_scan_reset(void);
void lll_scan_prepare(void *param);
extern uint8_t ull_scan_lll_handle_get(struct lll_scan *lll);
extern struct lll_scan *ull_scan_lll_is_valid_get(struct lll_scan *lll);