奇妙なことに、これに関する情報が見つからないようです。私のデバイスでBluetoothサービスにアクセス/読み取り/書き込みを試みています。コマンドを使用していますbluetoothctl
。 infoコマンドに1つのサービスセットが表示され、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>
GATTサービスにアクセスできますが、上記の最初のサービスセットにアクセスする方法が見つかりません。ただ考えたんだけど、方法がないだろうか?これらのサービスはGATTではないように見えますが、読み取り値の私の検索はすべてGATTを指します。たとえば、デバイスをAndroidに接続すると、BLEデバイスのボタンを押すと、hcisnoopログに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"