如何访问蓝牙服务

如何访问蓝牙服务

奇怪的是,我似乎找不到任何关于此的信息。我正在尝试在我的设备上访问/读取/写入蓝牙服务。我正在使用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 访问。还给出了该解决方案的一个例子:我认为它对我有用并且我进行了阅读。

  1. 使用 bluetoothctl 连接到您的目标 BLE 设备
  2. 然后请求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"

相关内容