22个版本

0.6.6 2023年11月15日
0.6.4 2023年10月11日
0.5.3 2022年10月12日
0.1.0 2022年6月9日

#139硬件支持

Download history 6/week @ 2024-03-26 69/week @ 2024-04-02 9/week @ 2024-04-09 6/week @ 2024-04-16 21/week @ 2024-04-23 8/week @ 2024-04-30 14/week @ 2024-05-07 21/week @ 2024-05-14 22/week @ 2024-05-21 47/week @ 2024-05-28 57/week @ 2024-06-04 14/week @ 2024-06-11 12/week @ 2024-06-18 58/week @ 2024-06-25 86/week @ 2024-07-02 158/week @ 2024-07-09

317 每月下载量

BSD-2-Clause OR Apache-2.0

300KB
5.5K SLoC

crates.io docs.rs Build Status

Bluest — Rust的跨平台蓝牙LE crate

Bluest 是一个跨平台的 蓝牙低能耗 (BLE) 库,适用于 Rust。它目前支持 Windows(版本 10 及以上)、MacOS/iOS 和 Linux。计划支持 Android。

Bluest 的目标是创建一个在平台特定的蓝牙 API 之上的 抽象层,以提供安全、跨平台的蓝牙 LE 设备访问。该 crate 目前支持 GAP Central 和 GATT Client 角色。不支持外围和服务器角色。

用法

let adapter = Adapter::default().await.ok_or("Bluetooth adapter not found")?;
adapter.wait_available().await?;

println!("starting scan");
let mut scan = adapter.scan(&[]).await?;
println!("scan started");
while let Some(discovered_device) = scan.next().await {
   println!(
       "{}{}: {:?}",
       discovered_device.device.name().as_deref().unwrap_or("(unknown)"),
       discovered_device
           .rssi
           .map(|x| format!(" ({}dBm)", x))
           .unwrap_or_default(),
       discovered_device.adv_data.services
   );
}

概览

Bluest 提供的主要功能包括

异步运行时

在非Linux平台上,Bluest应与任何异步运行时一起工作。在Linux上,底层的bluer crate需要Tokio运行时,Bluest使用Tokio的block_in_place API(这需要Tokio的多线程运行时)来使一些方法同步。还提供了仅适用于Linux的这些方法的异步版本,应在平台特定代码中优先使用。

平台特定细节

因为Bluest旨在在平台特定API之上提供一个薄抽象,所以可用的API代表了支持平台之间API的最低共同点。例如,CoreBluetooth从不向应用程序公开设备的蓝牙地址,因此没有在Device中检索地址或甚至任何蓝牙地址结构的方法。

大多数Bluest API应在所有支持的平台上一致地表现。行为有显著差异的API总结在下表中。

方法 MacOS/iOS Windows Linux
适配器::connect_device
适配器::disconnect_device
设备::name ⌛️
设备::is_paired
设备::pair
设备::pair_with_agent
设备::unpair
设备::rssi
服务::uuid ⌛️
服务::is_primary
特征::uuid ⌛️
特征::max_write_len ⌛️
描述符::uuid ⌛️

✅ = 支持
✨ = 由操作系统自动管理,此方法为空操作
⌛️ = 底层API是异步的,因此此方法内部使用Tokio的block_in_place API
❌ = 返回一个NotSupported错误

此外,在特定情况下API返回的错误可能在不同平台上不一致。例如,Linux的bluez API没有以有用的方式返回底层的蓝牙协议错误,而其他平台则这样做。在可能返回有意义错误的地方,Bluest将尝试这样做。在其他情况下,Bluest可能返回一个带有kindOther的错误,并且您需要查看错误的平台特定source以获取更多信息。

功能标志

可通过启用serde功能来使用序列化/反序列化设备标识符。

示例

示例文件夹中提供了演示基本使用的示例。

有关详细信息,请参阅API文档

依赖关系

~0.8–44MB
~645K SLoC