奇怪的是,我似乎找不到任何关于此的信息。我正在尝试在我的设备上访问/读取/写入蓝牙服务。我正在使用bluetoothctl
命令。有一组服务显示在 info 命令中,另一组服务显示在menu gatt
/中list-attributes
。
信息:
Device <someMACaddress> (public)
Name: <somename>
Alias: <somealias>
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb)
UUID: Human Interface Device (00001812-0000-1000-8000-00805f9b34fb)
UUID: Vendor specific (3dda0001-957f-7d4a-34a6-74696673696d)
ManufacturerData Key: 0x<2bytekey>
ManufacturerData Value:
<10bytehexvalue>
<10bytevalue>
我可以访问关贸总协定服务,但找不到访问上面显示的第一组服务的方法。我就想,有什么办法吗?这些服务似乎不是关贸总协定,但我所有有关读取值的搜索都指向关贸总协定。例如,当我将设备连接到 Android 时,hcisnoop 日志显示当我按下 BLE 设备上的按钮时正在使用 HID 句柄 1812。它也显示为 /dev/hidraw2。
我想知道,我是否可以专门监听 1812 句柄或 uuid 来获取原始输入?或者其他手柄,例如 180a 或 1801 等...?
答案1
我找到了最适用于我的问题的答案堆栈溢出作者:奥利维尔·M.
基本上,他表示一些特定的 GATT 服务(例如电池服务)已转移到 DBUS,并且可以通过 DBUS 访问。还给出了该解决方案的一个例子:我认为它对我有用并且我进行了阅读。
- 使用 bluetoothctl 连接到您的目标 BLE 设备
- 然后请求DBUS:
dbus-send --print-reply=literal --system --dest=org.bluez /org/bluez/hci0/dev_<mac_address_of_your_ble_peripheral> org.freedesktop.DBus.Properties.Get string:"org.bluez.Battery1" string:"Percentage"