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 在 嵌入式开发
5,877 每月下载量
用于 2 crates
305KB
3.5K SLoC
蓝牙HCI
此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