use bt_hci::cmd::le::LeSetScanParams;
use bt_hci::controller::ControllerCmdSync;
use embassy_time::{Duration, Timer};
use trouble_host::prelude::*;
#[cfg(feature = "split")]
pub(crate) const SPLIT_CENTRAL_SCAN_WINDOW: Duration = Duration::from_millis(30);
#[cfg(feature = "dongle")]
pub(crate) const DONGLE_SCAN_WINDOW: Duration = Duration::from_millis(60);
pub(crate) fn scan_config(window: Duration) -> ScanConfig<'static> {
ScanConfig {
active: false,
interval: Duration::from_millis(100),
window,
..Default::default()
}
}
pub(crate) async fn start_scan<'a, C: Controller + ControllerCmdSync<LeSetScanParams>>(
stack: &'a Stack<'_, C, DefaultPacketPool>,
window: Duration,
filter_accept_list: &[Address],
) -> ScanSession<'a, false> {
let config = ScanConfig {
filter_accept_list,
..scan_config(window)
};
loop {
let mut central = stack.central();
match Scanner::new(&mut central).scan(&config).await {
Ok(session) => return session,
Err(_) => Timer::after_millis(500).await,
}
}
}