#bluetooth #gatt #ble #l2cap #usb-device #bluez #api-bindings

burble

跨平台用户模式蓝牙低功耗库

6个版本

0.2.2 2023年3月22日
0.2.1 2023年3月18日
0.1.2 2023年3月13日

硬件支持分类下排名#625


用于burble-fs

MPL-2.0 许可证

670KB
16K SLoC

Blackrock 用户模式蓝牙低功耗库

crates.io docs.rs License

从USB传输层开始,基于libusb的跨平台用户模式BLE堆栈实现。

项目状态: 正在积极开发。已在Windows和Linux上测试。目前不接受外部贡献。该库实现了BLE GATT服务器(外围角色)和LE安全连接配对的全部组件。最低支持的蓝牙版本是5.0。所有API在v1.0之前都可能更改。

参考文档

配置文件和服务

示例服务器

示例中的服务器启动一个演示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

  1. 运行Zadig并启用选项→列出所有设备。
  2. 选择目标控制器。
  3. 安装 libusbKWinUSB 驱动程序。前者推荐,因为它可以重置USB设备。每个驱动程序都存在一些已知问题,所以如果遇到问题,请尝试使用另一个。

UsbDk 已知问题

遗憾的是,UsbDk 看起来没有维护,因此不建议使用。

libusb_open 挂起

如果重定向设备在退出时没有关闭(例如,在崩溃后),随后尝试打开它可能会导致进程挂起约两分钟,随后出现“Redirector启动失败”的libusb错误消息。参见 daynix/UsbDk#105

WDF_VIOLATION 蓝屏

多个 多个电源策略所有者 启用可能导致蓝牙USB设备的 WDF_VIOLATION 蓝屏。有两种解决方案

  1. 在设备管理器中禁用设备。
  2. 在设备属性 -> 电源管理选项卡中取消选中“允许计算机关闭此设备以节省电源”选项。

常见问题解答

这个项目的目标是什么?

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