4个版本

0.1.0 2020年5月8日
0.0.3 2018年9月16日
0.0.2 2018年9月4日
0.0.1 2018年9月3日

#575嵌入式开发

Download history 2827/week @ 2024-03-14 2463/week @ 2024-03-21 2224/week @ 2024-03-28 2147/week @ 2024-04-04 2111/week @ 2024-04-11 2188/week @ 2024-04-18 2269/week @ 2024-04-25 2525/week @ 2024-05-02 1130/week @ 2024-05-09 1088/week @ 2024-05-16 1119/week @ 2024-05-23 1275/week @ 2024-05-30 1066/week @ 2024-06-06 1227/week @ 2024-06-13 1758/week @ 2024-06-20 1676/week @ 2024-06-27

5,877 每月下载量
用于 2 crates

MIT/Apache

305KB
3.5K SLoC

蓝牙HCI

Build Status

此crate定义了适用于裸机设备的蓝牙主机控制器接口的纯Rust实现。它定义了规范中的命令和事件,并需要特定的芯片来定义厂商特定的命令和事件。

版本

此crate可以支持蓝牙规范的4.1、4.2和5.0版本。默认情况下,它支持4.1版本。要启用另一个版本,请将以下内容添加到您的Cargo.toml

[dependencies.bluetooth-hci]
features = "version-4-2"

[dependencies.bluetooth-hci]
features = "version-5-0"

实现

此crate定义了一个trait(Controller),该trait应该为特定的BLE芯片实现。任何实现者都可以用作host::uart::Hci来读取和写入芯片。

impl bluetooth_hci::Controller for MyController {
    type Error = BusError;
    type Header = bluetooth_hci::host::uart::CommandHeader;
    fn write(&mut self, header: &[u8], payload: &[u8]) ->
        nb::Result<(), Self::Error> {
        // implementation...
    }
    fn read_into(&mut self, buffer: &mut [u8]) ->
        nb::Result<(), Self::Error> {
        // implementation...
    }
    fn peek(&mut self, n: usize) -> nb::Result<u8, Self::Error> {
        // implementation...
    }
}

整个蓝牙HCI都是通过处理低级I/O的这些函数实现的。要读取事件,可以使用定义了read函数的host::uart::Hci trait。指定厂商特定事件类型的最简单方法是使用类型推断

fn process_event(e: hci::event::Event<MyVendorEvent>) {
    // do stuff with e
}
// elsewhere...
process_event(controller.read()?)

支持的命令和事件

此crate目前仅部分支持命令和事件。目前(截至2018年9月)仅支持由BlueNRG芯片使用的命令和事件。对HCI ACL数据包和HCI同步数据包的支持仍需确定。

有关此crate最终应支持的详细信息,请参阅蓝牙规范。第2卷,第E部分,第7节是与此crate最相关的部分。

依赖项

~235KB