0.9.7 2021年7月6日
0.9.6 2021年6月30日
0.8.2-pre5 2021年6月8日
0.8.0 2021年5月31日
0.6.0 2021年5月28日

#7 in #l2cap

48 monthly downloads
用于 blez-tools

BSD-2-Clause

280KB
5K SLoC

BLEZ - 基于 Linux 的 Rust 异步蓝牙低功耗

crates.io page docs.rs page BSD-2-Clause license

重命名为 BlueR

BLEZ 已重命名为 BlueR,并且现在成为 BlueZ 的官方 Rust 接口。

开发将继续在 BlueZ 组织仓库 中进行。

请更新您的链接和crate引用。


此库为 蓝牙低功耗 (BLE) 提供了异步、功能齐全的接口,针对 官方 Linux 蓝牙协议栈 (BlueZ),适用于 Rust。支持使用 idiomatic Rust 代码发布本地和消费远程 GATT 服务。使用类似于 Tokio 网络的API呈现 L2CAP 套接字。

以下功能提供

  • 蓝牙适配器
    • 枚举
    • 配置电源、可发现性、名称等
    • 通过更改事件流提供热插拔支持
  • 蓝牙设备
    • 发现
    • 查询地址、名称、类别、信号强度(RSSI)等
    • 蓝牙低能耗广告
    • 更改事件流
    • 连接和配对
  • 消费远程 GATT 服务
    • GATT 服务发现
    • 在特性上执行读取、写入和通知操作
    • 在特性描述符上执行读取和写入操作
    • 可选使用低开销的 AsyncReadAsyncWrite 流进行通知和写入操作
  • 发布本地 GATT 服务
    • 在特性上执行读取、写入和通知操作
    • 在特性描述符上执行读取和写入操作
    • 支持两种编程模型
      • 基于回调的接口
      • 低开销的 AsyncReadAsyncWrite
  • 发送蓝牙低能耗广告
  • 蓝牙授权代理
  • 高效的事件调度
    • 不受 D-Bus 匹配规则计数的影响
    • 订阅数 O(1)
  • L2CAP 套接字
    • 面向流
    • 面向序列包
    • 面向数据报
    • 支持异步IO接口,带有AsyncReadAsyncWrite功能
  • 分配号码的数据库
    • 制造商ID
    • GATT服务、特性和描述符

除了设备发现外,不支持经典蓝牙

历史

该项目最初是的分支,但后来已完全重写。文档主要来自BlueZ API规范,但也根据需要进行了调整。

库特性

默认启用所有库特性。

  • bluetoothd:启用所有需要运行蓝牙守护进程的功能。对于构建,必须在Debian上安装由libdbus-1-dev提供的D-Bus库头文件。
  • l2cap:启用L2CAP套接字。对于构建,必须在Debian上安装由libbluetooth-dev提供的蓝牙库头文件。

要求

此库已在BlueZ版本5.59上进行了测试,并应用了来自master分支的附加补丁。较旧版本可能也能工作,但请注意,存在许多与GATT处理相关的错误。有关详细信息,请参阅官方变更日志

如果使用任何bluetoothd功能,蓝牙守护进程必须正在运行并配置为通过D-Bus进行访问。在大多数发行版中,这应该会默认工作。

配置

/etc/bluetooth/main.conf中的以下选项可能会有所帮助。

[GATT]
Cache = no
Channels = 1

此选项禁用GATT缓存,以避免在设备发现期间出现陈旧数据。

仅允许一个通道将禁用扩展属性协议(EATT)。如果启用EATT,所有GATT命令和通知都通过多个L2CAP通道发送,并且可以由协议堆栈的底层随意重新排序。这使得通过GATT特性进行顺序数据传输更困难。

故障排除

库返回从BlueZ接收到的详细错误。

将Rust日志级别设置为trace以查看所有与BlueZ的D-Bus通信。

在某些情况下,检查蓝牙系统日志可能会提供更多信息。在基于Debian的系统上,可以通过执行journalctl -u bluetooth来显示它。检查bluetoothd的手册页以增加日志级别。

有时删除系统蓝牙缓存(在/var/lib/bluetooth中)并重新启动bluetoothd可能会有所帮助。

示例

有关示例,请参阅API文档示例文件夹

以下提供了一些示例应用程序。

  • discover_devices:发现蓝牙设备并打印其属性。

  • gatt_client:简单的GATT客户端,它对特征进行读取、写入和通知。

  • gatt_server_cb:使用回调编程模型实现的对应GATT服务器。

  • gatt_server_io:使用IO编程模型实现的对应GATT服务器。

  • gatt_echo_client:简单的GATT客户端,它连接到服务器并发送和接收测试数据。

  • gatt_echo_server:对应GATT服务器,它回显接收到的数据。

  • l2cap_client:简单的L2CAP套接字客户端,它连接到套接字并发送和接收测试数据。

  • l2cap_server:对应L2CAP套接字服务器,它回显接收到的数据。

  • le_advertise:注册蓝牙LE广告。

  • list_adapters:列出安装的蓝牙适配器及其属性。

使用 cargo run --example <name> 来运行特定的示例应用程序。

工具

查看基于此库的工具,请参阅 BLEZ 工具 crate。

依赖项

~5–16MB
~193K SLoC