#bluetooth-le #energy #low #ble #role #cross-platform #hci

no-std btle

轻量级蓝牙低功耗驱动程序。WIP,目前尚不稳定!!为 https://github.com/AndrewGi/BluetoothMeshRust 设计

5 个版本

0.1.4 2020年11月7日
0.1.3 2020年3月19日
0.1.2 2020年3月12日
0.1.1 2020年2月22日
0.1.0 2020年2月2日

#660硬件支持


用于 bluetooth_mesh

GPL-3.0-only

300KB
8K SLoC

btle - Rust 蓝牙低功耗驱动程序

crates.io docs.rs last commit

Cross-platform Bluetooth Low Energy library for Rust。支持中心、外围、广播和观察GAP角色。还支持自定义设备驱动程序,以启用对自定义平台(嵌入式等)的支持。

非常WIP。

目前支持的平台

  • Linux (BlueZ)
  • HCI
  • USB(使用 libusb
  • 代理
  • Windows 10 / UWP
  • Windows 7(必须使用 libusb 驱动程序)
  • macOS
  • iOS
  • Android

任何缺少驱动程序的平台仍然可以编译,只是没有内置的方式与BLE控制器通信。

目前支持的GAP角色

  • 观察者(接收广告)
  • 广播者(发送广告)
  • (WIP)中心(启动GATT连接)
  • (WIP)外围(GATT可连接)

WIP 示例(API可能以后会更改)

pub async fn dump_adapter<A: btle::hci::adapter::Adapter>(adapter: A) -> Result<(), CLIError> {
    let adapter = btle::hci::adapters::Adapter::new(adapter);
    let mut le = adapter.le();
    println!("resetting adapter...");
    le.adapter.reset().await?;
    println!("settings scan parameters...");
    // Set BLE Scan parameters (when to scan, how long, etc)
    le.set_scan_parameters(btle::le::scan::ScanParameters::DEFAULT)
        .await?;
    // Enable scanning for advertisement packets.
    le.set_scan_enable(true, false).await?;

    println!("waiting for advertisements...");
    // Create the advertisement stream from the LEAdapter.
    let mut stream = le.advertisement_stream::<Box<[ReportInfo]>>().await?;
    // Pin it.
    let mut stream = unsafe { Pin::new_unchecked(&mut stream) };
    loop {
        // Asynchronously iterate through the stream and print each advertisement report.
        while let Some(report) = stream.next().await {
            println!("report: {:?}", &report);
        }
    }
}

依赖项

~0.5–2.4MB
~41K SLoC