scan/
scan.rs

1use std::error::Error;
2
3use bluest::Adapter;
4use futures_lite::StreamExt;
5use tracing::info;
6use tracing::metadata::LevelFilter;
7
8#[tokio::main]
9async fn main() -> Result<(), Box<dyn Error>> {
10    use tracing_subscriber::prelude::*;
11    use tracing_subscriber::{fmt, EnvFilter};
12
13    tracing_subscriber::registry()
14        .with(fmt::layer())
15        .with(
16            EnvFilter::builder()
17                .with_default_directive(LevelFilter::INFO.into())
18                .from_env_lossy(),
19        )
20        .init();
21
22    let adapter = Adapter::default().await.ok_or("Bluetooth adapter not found")?;
23    adapter.wait_available().await?;
24
25    info!("starting scan");
26    let mut scan = adapter.scan(&[]).await?;
27    info!("scan started");
28    while let Some(discovered_device) = scan.next().await {
29        info!(
30            "{}{}: {:?}",
31            discovered_device.device.name().as_deref().unwrap_or("(unknown)"),
32            discovered_device
33                .rssi
34                .map(|x| format!(" ({}dBm)", x))
35                .unwrap_or_default(),
36            discovered_device.adv_data.services
37        );
38    }
39
40    Ok(())
41}