connect/
connect.rs

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