1 个不稳定版本

0.1.0 2020 年 5 月 12 日

macOS 和 iOS API 中排名第 132

Download history 119/week @ 2024-03-11 118/week @ 2024-03-18 80/week @ 2024-03-25 362/week @ 2024-04-01 177/week @ 2024-04-08 206/week @ 2024-04-15 149/week @ 2024-04-22 95/week @ 2024-04-29 55/week @ 2024-05-06 48/week @ 2024-05-13 25/week @ 2024-05-20 40/week @ 2024-05-27 86/week @ 2024-06-03 47/week @ 2024-06-10 68/week @ 2024-06-17 76/week @ 2024-06-24

每月下载量 282
用于 toio

MIT/Apache 协议

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