1 个不稳定版本
0.1.0 | 2020 年 5 月 12 日 |
---|
在 macOS 和 iOS API 中排名第 132
每月下载量 282 次
用于 toio
120KB
2.5K SLoC
Core Bluetooth
围绕用于与配备蓝牙的低功耗 (LE) 和基本速率/增强数据速率 (BR/EDR) 无线技术通信的 Core Bluetooth 框架 的安全包装器。
目前仅支持中心角色。
用法
请参阅 crate 文档 中的示例,以及 examples
目录。
crate 功能
默认情况下,使用来自 std
的 MPSC 遇合通道来执行本地框架调用。使用 async_std_unstable
功能,可以将通道替换为 async_std::sync::channel
,使其能够在异步上下文中泵送事件。请注意,async_std
需要启用 unstable
功能。
lib.rs
:
围绕用于与配备蓝牙的低功耗 (LE) 和基本速率/增强数据速率 (BR/EDR) 无线技术通信的 Core Bluetooth 框架 的安全包装器。
该 API 与本地 API 非常相似,但为了保持一致性,进行了一些更改。主要区别在于,由于线程安全的原因,此 API 缺少访问保留状态的大部分功能。如果需要,用户可以通过事件信息来维护保留状态。
中心角色
中心角色是指当应用程序作为“中心”并启动对外围设备的发现和连接时。`central
` 包包含用于中心角色的所有所需对象。
示例
以下示例展示了如何发现外围设备、服务和特征、连接到外围设备以及订阅特征。
use core_bluetooth::*;
use core_bluetooth::central::*;
let (central, receiver) = CentralManager::new();
let handle_event = |event| {
match event {
CentralEvent::ManagerStateChanged { new_state } => {
match new_state {
// Must be in PoweredOn state.
ManagerState::PoweredOn => central.scan(),
_ => panic!("no bluetooth available"),
}
}
CentralEvent::PeripheralDiscovered { peripheral, advertisement_data, .. } => {
if advertisement_data.is_connectable() != Some(false) {
central.connect(&peripheral);
}
}
CentralEvent::PeripheralConnected { peripheral } => {
peripheral.discover_services_with_uuids(&[
"ebe0ccb0-7a0a-4b0c-8a1a-6ff2997da3a6".parse().unwrap()]);
}
CentralEvent::ServicesDiscovered { peripheral, services } => {
if let Ok(services) = services {
for service in services {
peripheral.discover_characteristics_with_uuids(&service, &[
"ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6".parse().unwrap()]);
}
}
}
CentralEvent::CharacteristicsDiscovered { peripheral, characteristics, .. } => {
if let Ok(chars) = characteristics {
peripheral.subscribe(&chars[0]);
}
}
CentralEvent::CharacteristicValue { peripheral, value, .. } => {
if let Ok(value) = value {
// Decode the value.
// In this example the value comes from a Xiaomi temperature sensor.
let t = i16::from_le_bytes([value[0], value[1]]) as f64 / 100.0;
let rh = value[2];
println!("t = {} C, rh = {}%", t, rh);
}
}
_ => {}
}
};
您可以在 examples
目录中找到更多示例。
依赖项
~1–14MB
~142K SLoC