| /* |
| * Copyright (c) 2018-2019 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /* NOTE: Definitions used internal to ULL implementations */ |
| |
| #define SCAN_HANDLE_1M 0 |
| #define SCAN_HANDLE_PHY_CODED 1 |
| |
| #define EXT_SCAN_DURATION_UNIT_US 10000U |
| #define EXT_SCAN_PERIOD_UNIT_US 1280000U |
| |
| /* Convert period in 1.28 s units to duration of 10 ms units*/ |
| #define ULL_SCAN_PERIOD_TO_DURATION(period) \ |
| ((uint32_t)(period) * EXT_SCAN_PERIOD_UNIT_US / \ |
| EXT_SCAN_DURATION_UNIT_US) |
| |
| /* Convert duration in 10 ms unit to radio events count */ |
| #define ULL_SCAN_DURATION_TO_EVENTS(duration, interval) \ |
| (((uint32_t)(duration) * EXT_SCAN_DURATION_UNIT_US / \ |
| SCAN_INT_UNIT_US) / (interval)) |
| |
| /* Convert period in 1.28 s unit to radio events count */ |
| #define ULL_SCAN_PERIOD_TO_EVENTS(period, interval) \ |
| (((uint32_t)(period) * EXT_SCAN_PERIOD_UNIT_US / \ |
| SCAN_INT_UNIT_US) / (interval)) |
| |
| int ull_scan_init(void); |
| int ull_scan_reset(void); |
| |
| /* Set scan parameters */ |
| void ull_scan_params_set(struct lll_scan *lll, uint8_t type, uint16_t interval, |
| uint16_t window, uint8_t filter_policy); |
| |
| /* Enable and start scanning/initiating role */ |
| uint8_t ull_scan_enable(struct ll_scan_set *scan); |
| |
| /* Disable scanning/initiating role */ |
| uint8_t ull_scan_disable(uint8_t handle, struct ll_scan_set *scan); |
| |
| /* Helper function to handle scan done events */ |
| void ull_scan_done(struct node_rx_event_done *done); |
| |
| /* Helper function to dequeue scan timeout event */ |
| void ull_scan_term_dequeue(uint8_t handle); |
| |
| /* Return ll_scan_set context (unconditional) */ |
| struct ll_scan_set *ull_scan_set_get(uint8_t handle); |
| |
| /* Return the scan set handle given the scan set instance */ |
| uint8_t ull_scan_handle_get(struct ll_scan_set *scan); |
| |
| /* Helper function to check and return if a valid scan context */ |
| struct ll_scan_set *ull_scan_is_valid_get(struct ll_scan_set *scan); |
| |
| /* Return ll_scan_set context if enabled */ |
| struct ll_scan_set *ull_scan_is_enabled_get(uint8_t handle); |
| |
| /* Return ll_scan_set context if disabled */ |
| struct ll_scan_set *ull_scan_is_disabled_get(uint8_t handle); |
| |
| /* Return flags if enabled */ |
| #define ULL_SCAN_IS_PASSIVE BIT(0) |
| #define ULL_SCAN_IS_ACTIVE BIT(1) |
| #define ULL_SCAN_IS_INITIATOR BIT(2) |
| #define ULL_SCAN_IS_SYNC BIT(3) |
| uint32_t ull_scan_is_enabled(uint8_t handle); |
| |
| /* Return filter policy used */ |
| uint32_t ull_scan_filter_pol_get(uint8_t handle); |
| |
| int ull_scan_aux_init(void); |
| int ull_scan_aux_reset(void); |
| |
| /* Helper to setup scanning on auxiliary channel */ |
| void ull_scan_aux_setup(memq_link_t *link, struct node_rx_hdr *rx); |
| |
| /* Helper to clean up auxiliary channel scanning */ |
| void ull_scan_aux_done(struct node_rx_event_done *done); |
| |
| /* Return the scan aux set instance given the handle */ |
| struct ll_scan_aux_set *ull_scan_aux_set_get(uint8_t handle); |
| |
| /* Helper function to check and return if a valid aux scan context */ |
| struct ll_scan_aux_set *ull_scan_aux_is_valid_get(struct ll_scan_aux_set *aux); |
| |
| /* Helper function to flush and release incomplete auxiliary PDU chaining */ |
| void ull_scan_aux_release(memq_link_t *link, struct node_rx_hdr *rx); |
| |
| /* Helper function to stop auxiliary scan context */ |
| int ull_scan_aux_stop(struct ll_scan_aux_set *aux); |