블루투스 서비스에 액세스하는 방법

블루투스 서비스에 액세스하는 방법

이상하게도 이에 대한 정보를 찾을 수 없는 것 같습니다. 내 장치에서 Bluetooth 서비스에 액세스/읽기/쓰기를 시도하고 있습니다. 명령을 사용하고 있습니다 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>      

GATT 서비스에 액세스할 수 있지만 위에 표시된 첫 번째 서비스 세트에 액세스하는 방법을 찾을 수 없습니다. 그냥 생각했는데, 방법이 없을까? 이러한 서비스는 GATT가 아닌 것으로 보이지만 읽기 값에 대한 내 검색은 모두 GATT를 가리킵니다. 예를 들어 장치를 Android에 연결하면 BLE 장치의 버튼을 누를 때 hcisnoop 로그에 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"

관련 정보