33个版本
0.17.3 | 2024年7月15日 |
---|---|
0.17.1 | 2024年3月14日 |
0.17.0-pre1 | 2023年11月17日 |
0.16.0-pre1 | 2023年6月20日 |
0.10.3 | 2021年7月18日 |
#16 in Unix API
41,935 每月下载量
用于 17 个crate(13个直接)
430KB
8K SLoC
BlueR — Rust官方BlueZ绑定
此库提供了对Linux蓝牙协议栈(BlueZ)的官方Rust接口。支持使用惯用的Rust代码发布本地和消费远程GATT服务。使用类似于Tokio网络API来表示L2CAP和RFCOMM套接字。
提供以下功能
- 蓝牙适配器
- 枚举
- 配置电源、可发现性、名称等
- 通过更改事件流的热插拔支持
- 蓝牙设备
- 使用自定义过滤器进行发现
- 查询地址、名称、类别、信号强度(RSSI)等
- 蓝牙低能耗广告
- 更改事件流
- 连接和配对
- 被动LE广告监控
- 消费远程GATT服务
- GATT服务发现
- 对特性进行读取、写入和通知操作
- 对特性描述符进行读取和写入操作
- 可选使用低开销的
AsyncRead
和AsyncWrite
流进行通知和写入操作
- 发布本地GATT服务
- 对特性进行读取、写入和通知操作
- 对特性描述符进行读取和写入操作
- 支持两种编程模型
- 基于回调的接口
- 低开销的
AsyncRead
和AsyncWrite
流
- 发送蓝牙低能耗广告
- 蓝牙授权代理
- 高效的事件分发
- 不受D-Bus匹配规则数量影响
- 订阅数量为O(1)
- L2CAP套接字
- 支持经典蓝牙(BR/EDR)和蓝牙LE
- 面向流
- 面向顺序数据包
- 面向数据报
- 异步I/O接口,支持
AsyncRead
和AsyncWrite
- RFCOMM套接字
- 支持经典蓝牙(BR/EDR)
- 面向流
- 异步I/O接口,支持
AsyncRead
和AsyncWrite
- 蓝牙网状网络
- 配置和加入网络
- 发送和接收消息
- 分配号码数据库
- 制造商ID
- 服务类、GATT服务、特性和描述符
目前,某些经典蓝牙(BR/EDR)功能缺失。不过,欢迎提交拉取请求和贡献!
使用方法
要将BlueR用作库,请在您的项目目录中运行以下命令
cargo add -F full bluer
这将添加最新版本的BlueR,并启用所有功能作为依赖项添加到您的Cargo.toml
中。
crate功能
以下crate功能可用。
bluetoothd
:启用所有需要运行蓝牙守护进程的功能。构建时,必须安装由Debian的libdbus-1-dev
提供的D-Bus库头文件。id
:启用分配号码数据库。l2cap
:启用L2CAP套接字。rfcomm
:启用RFCOMM套接字。mesh
:启用蓝牙网状网络功能。serde
:启用一些数据类型的序列化和反序列化。
要启用所有crate功能,请指定full
crate功能。
要求
最低支持Rust版本(MSRV)为1.75。
此库已与BlueZ 5.60进行了测试。旧版本可能也可以工作,但请注意,存在许多与GATT处理相关的错误。有关详细信息,请参阅官方变更日志。
如果使用了任何bluetoothd
功能,蓝牙守护进程必须正在运行,并配置为通过D-Bus进行访问。在大多数发行版中,这应该是默认设置。
对于mesh
功能,蓝牙网状网络守护进程必须正在运行,并配置为通过D-Bus进行访问。
配置
在/etc/bluetooth/main.conf
中的以下选项在处理GATT服务时很有帮助。
[GATT]
Cache = no
Channels = 1
这禁用了GATT缓存,以避免设备发现期间的过时数据。
仅允许一个通道将扩展属性协议(EATT)禁用。如果EATT启用,所有GATT命令和通知都通过多个L2CAP通道发送,并且可以在协议堆栈的低层任意重新排序。这使得通过GATT特性进行顺序数据传输更加困难。
构建
在克隆此存储库时,请确保使用以下命令。否则,构建将因找不到文件错误而失败。
git clone --recursive https://github.com/bluez/bluer.git
构建需要D-Bus开发头文件。
故障排除
库返回BlueZ接收到的详细错误。
将Rust日志级别设置为trace
可查看与BlueZ的所有D-Bus通信。
在某些情况下,检查蓝牙系统日志可能提供更多信息。在基于Debian的系统上,可以通过执行journalctl -u bluetooth
来显示。有关提高日志级别的信息,请参阅bluetoothd
手册页。
有时,删除位于/var/lib/bluetooth
的系统蓝牙缓存并重新启动bluetoothd
可以解决与设备连接的持续问题。
示例
以下提供了以下示例应用程序。
-
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 广告。
-
le_passive_scan:LE 被动扫描并订阅已发现的外围设备的更新。
-
list_adapters:列出已安装的蓝牙适配器及其属性。
-
mesh_sensor_client:简单的蓝牙网状客户端,发送传感器模型消息。
-
mesh_sensor_server:简单的蓝牙网状服务器,接收传感器模型消息。
-
mesh_provisioner:简单的蓝牙网状配置器。
-
rfcomm_client:简单的 RFCOMM 套接字客户端,连接到套接字并发送接收测试数据。
-
rfcomm_server:相应的 RFCOMM 套接字服务器,回显接收到的数据。
使用cargo run --all-features --example <name>
来运行特定的示例应用程序。
工具
有关构建在此库之上的工具,请参阅BlueR 工具 crate。
历史
该项目最初是从blurz分叉而来,但后来已经完全重写。它被命名为blez
发布,后来被指定为 BlueZ 的官方 Rust 接口并更名为 BlueR。文档主要来自BlueZ API 规范,但也根据需要进行了调整。
依赖项
~5–16MB
~200K SLoC