6个版本
0.2.2 | 2023年3月22日 |
---|---|
0.2.1 | 2023年3月18日 |
0.1.2 | 2023年3月13日 |
硬件支持分类下排名#625
670KB
16K SLoC
Blackrock 用户模式蓝牙低功耗库
从USB传输层开始,基于libusb的跨平台用户模式BLE堆栈实现。
项目状态: 正在积极开发。已在Windows和Linux上测试。目前不接受外部贡献。该库实现了BLE GATT服务器(外围角色)和LE安全连接配对的全部组件。最低支持的蓝牙版本是5.0。所有API在v1.0之前都可能更改。
参考文档
- 蓝牙核心规范 v5.4 (如[卷0]第B部分第4.4节中定义的LE核心配置)
- 核心规范补充v11
- 分配的数字
- GATT规范补充
配置文件和服务
示例服务器
示例中的服务器启动一个演示GATT服务器,以测试控制器功能。
列出可用的蓝牙控制器
$ cargo run --example server
Available controllers (pass 'ID <VID>:<PID>' to '--vid' and '--pid' options):
Bus 002 Device 012: ID 7392:c611
Bus 002 Device 003: ID 8087:0033
运行服务器
- Linux用户需要配置
udev
权限或通过sudo
运行示例二进制文件,以授予libusb
对USB设备的写入访问权限。 - Windows用户需要按照以下部分的驱动程序安装说明进行操作。
在客户端查找"Burble"蓝牙设备。您可以使用nRF Connect for Mobile获取有关服务器广告和GATT服务的更多详细信息。
某些客户端可能不支持扩展LE广告。使用--legacy
选项切换到传统广告PDUs。
$ RUST_LOG=info cargo run --example server -- --vid 7392 --pid c611
INFO burble::host::usb::libusb: libusb version: 1.0.26.11724
INFO burble::host::usb::libusb: Using WinUSB backend
INFO server: Local version: LocalVersion { hci_version: V5_1, hci_subversion: 11, lmp_version: V5_1, company_id: CompanyId(0x005D => "Realtek Semiconductor Corporation"), lmp_subversion: 34657 }
INFO server: Device address: Public(08:BE:AC:2E:0D:EE)
INFO burble::gatt::schema: GATT schema:
INFO burble::gatt::schema: [0x0001] GenericAccess <0x1800>
INFO burble::gatt::schema: [0x0002] |__ DeviceName <0x2A00>
INFO burble::gatt::schema: [0x0003] | |__ [Value <0x2A00>]
INFO burble::gatt::schema: [0x0004] |__ Appearance <0x2A01>
INFO burble::gatt::schema: [0x0005] |__ [Value <0x2A01>]
INFO burble::gatt::schema: [0x0006] GenericAttribute <0x1801>
INFO burble::gatt::schema: [0x0007] |__ ServiceChanged <0x2A05>
INFO burble::gatt::schema: [0x0008] | |__ [Value <0x2A05>]
INFO burble::gatt::schema: [0x0009] | |__ ClientCharacteristicConfiguration <0x2902>
INFO burble::gatt::schema: [0x000A] |__ ClientSupportedFeatures <0x2B29>
INFO burble::gatt::schema: [0x000B] | |__ [Value <0x2B29>]
INFO burble::gatt::schema: [0x000C] |__ DatabaseHash <0x2B2A>
INFO burble::gatt::schema: [0x000D] |__ [Value <0x2B2A>]
INFO burble::gatt::schema: [0x000E] (Secondary) Battery <0x180F>
INFO burble::gatt::schema: [0x000F] |__ BatteryLevel <0x2A19>
INFO burble::gatt::schema: [0x0010] |__ [Value <0x2A19>]
INFO burble::gatt::schema: [0x0011] Glucose <0x1808>
INFO burble::gatt::schema: [0x0012] |__ [Include 0x000E..=0x0010]
INFO burble::gatt::schema: [0x0013] |__ GlucoseMeasurement <0x2A18>
INFO burble::gatt::schema: [0x0014] |__ [Value <0x2A18>]
INFO burble::gatt::schema: [0x0015] |__ ClientCharacteristicConfiguration <0x2902>
INFO burble::gatt::schema: [0x0016] |__ CharacteristicExtendedProperties <0x2900>
Windows
可以使用Zadig安装特定蓝牙设备的libusbK驱动程序(推荐),或者安装UsbDk,它有一些已知问题,但不需要更改设备驱动程序。有关更多信息,请参阅libusb Windows 维基页面。
使用Zadig
- 运行Zadig并启用选项→列出所有设备。
- 选择目标控制器。
- 安装 libusbK 或 WinUSB 驱动程序。前者推荐,因为它可以重置USB设备。每个驱动程序都存在一些已知问题,所以如果遇到问题,请尝试使用另一个。
UsbDk 已知问题
遗憾的是,UsbDk 看起来没有维护,因此不建议使用。
libusb_open 挂起
如果重定向设备在退出时没有关闭(例如,在崩溃后),随后尝试打开它可能会导致进程挂起约两分钟,随后出现“Redirector启动失败”的libusb错误消息。参见 daynix/UsbDk#105。
WDF_VIOLATION 蓝屏
多个 多个电源策略所有者 启用可能导致蓝牙USB设备的 WDF_VIOLATION
蓝屏。有两种解决方案
- 在设备管理器中禁用设备。
- 在设备属性 -> 电源管理选项卡中取消选中“允许计算机关闭此设备以节省电源”选项。
常见问题解答
这个项目的目标是什么?
Burble 致力于成为一个功能齐全的蓝牙LE库,为中央和外围角色实现HCI、L2CAP、GAP、ATT、GATT和SMP层。
这与其他蓝牙库有什么不同?
大多数库使用特定于操作系统的API和驱动程序来访问控制器。Burble通过USB(或其他传输)直接与控制器通信,绕过所有特定于操作系统的功能。这使得它可以在所有主要操作系统上运行。
这种方法的缺点是什么?
Burble需要独占访问控制器。操作系统和其他应用程序不能同时使用控制器。在Windows上,这意味着安装一个与libusb兼容的驱动程序,防止操作系统将控制器识别为蓝牙设备。在Linux上,当Burble使用控制器时,驱动程序会自动断开。
另一个潜在的缺点是丢失了特定于厂商的功能。尽管可以为个别控制器添加这些功能,但Burble专注于实现所有控制器都通用的核心蓝牙规范。
优点是什么?
独占控制器访问允许完全控制控制器的所有方面,包括操作、广播、扫描、GATT服务等。这对于实现需要特定GAP和GATT服务配置的外围角色非常有用。
Burble可以用于嵌入式(no_std
)系统吗?
目前不能,但这是一个最终目标。一些组件,如libusb事件线程,目前需要std
。这些将被放在功能标志后面或重新设计,以便Burble核心可以在任何可以实现host::Transport
特质的系统上运行。
测试过的控制器
以下是使用此库测试过的蓝牙控制器列表。
服务器
设备 | VID:PID | BLE版本 | 芯片 | ACL缓冲区 |
---|---|---|---|---|
Edimax BT-8500 | 7392:C611 | 5.1 | RTL8761BUV | 8 * 251B |
Intel AX210 | 8087:0032 | 5.3 | - | 3 * 251B |
Intel AX211 | 8087:0033 | 5.3 | - | 3 * 251B |
客户端
设备 | VID:PID | BLE版本 | 芯片 |
---|---|---|---|
Edimax BT-8500 | 7392:C611 | 5.1 | RTL8761BUV |
Intel AX210 | 8087:0032 | 5.3 | - |
Intel AX211 | 8087:0033 | 5.3 | - |
法律声明
版权所有 2023 Blackrock Neurotech。根据Mozilla公共许可证2.0授权。
这不是Blackrock Neurotech官方支持的产品。
依赖关系
~9–16MB
~217K SLoC