Как получить доступ к услугам Bluetooth

Вопрос или проблема

Как получить доступ к услугам Bluetooth

Странно, но я не могу найти ничего по этому поводу. Я пытаюсь получить доступ/читать/записывать Bluetooth-сервисы на своем устройстве. Я использую команду bluetoothctl. Существует набор служб, которые отображаются с помощью команды info, и другой набор, который отображается в menu gatt/list-attributes.

info:

Устройство <someMACaddress> (публичное)
    Имя: <somename>
    Псевдоним: <somealias>
    Спарено: да
    Доверенное: да
    Заблокировано: нет
    Подключено: да
    УстаревшееСопряжение: нет
    UUID: Общий доступ к профилю    (00001800-0000-1000-8000-00805f9b34fb)
    UUID: Общий атрибутный профиль (00001801-0000-1000-8000-00805f9b34fb)
    UUID: Информация об устройстве        (0000180a-0000-1000-8000-00805f9b34fb)
    UUID: Служба батареи           (0000180f-0000-1000-8000-00805f9b34fb)
    UUID: Устройство человека    (00001812-0000-1000-8000-00805f9b34fb)
    UUID: Специфично для производителя           (3dda0001-957f-7d4a-34a6-74696673696d)
    Ключ ManufacturerData: 0x<2bytekey>
    Значение ManufacturerData:
  <10bytehexvalue>   

             <10bytevalue>      

Я могу получить доступ к gatt-службам, но не могу найти способ получить доступ к первому набору служб, указанному выше. Мне было интересно, есть ли какой-то способ? Похоже, что эти службы не являются GATT, но все мои поиски о чтении значений приводят к GATT. Например, когда я подключаю устройство к Android, лог hcisnoop показывает, что используется HID-обработчик 1812, когда я нажимаю кнопку на BLE-устройстве. Он также отображается как /dev/hidraw2.

Мне было интересно, могу ли я специально слушать обработчик 1812 или uuid для сырого ввода? Или другой обработчик, такой как 180a или 1801 и т.д…?

Я нашел наиболее подходящий ответ на свой вопрос на StackOverflow от OlivierM.

В основном, он утверждает, что некоторые специфические GATT-сервисы, такие как служба батареи, были перемещены в DBUS и могут быть доступны через DBUS. Пример этого решения также был дан: Могу сказать, что это сработало для меня, и я получил чтение.

  1. Подключитесь к вашему целевому BLE-устройству с помощью bluetoothctl
  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"

Ответ или решение

Чтобы получить доступ к Bluetooth-сервисам на устройстве, вам необходимо выполнить несколько шагов, используя команду bluetoothctl, а также dbus-send для взаимодействия с определёнными GATT-сервисами. Давайте подробно рассмотрим процесс.

Шаги по доступу к Bluetooth-сервисам

  1. Убедитесь, что Bluetooth включен:
    Убедитесь, что Bluetooth на вашем устройстве активирован. Если вы используете Linux, вы можете включить его командой:

    sudo systemctl start bluetooth
  2. Запустите bluetoothctl:
    Откройте терминал и введите:

    bluetoothctl

    Это приведет к запуску командного интерфейса для работы с Bluetooth.

  3. Подключитесь к устройству:
    Найдите ваше устройство с помощью команды scan on и подключитесь к нему, используя connect <mac_address>, заменив <mac_address> на реальный MAC-адрес вашего Bluetooth-устройства.

  4. Получение информации о сервисах:
    После подключения используйте команду:

    info <mac_address>

    Эта команда выдаст вам перечень доступных сервисов, как вы уже заметили.

  5. Доступ к GATT-сервисам:
    Чтобы получить доступ к GATT-сервисам, используйте команды menu gatt, затем list-attributes. Это позволит вам увидеть UUID и другие атрибуты GATT, которые вы можете использовать для чтения или записи данных.

  6. Использование D-Bus для доступа к службам:
    Некоторые услуги, такие как служба батареи, могут быть доступны через D-Bus. Пример команды для получения уровня заряда батареи:
    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"

    Не забудьте заменить <mac_address_of_your_ble_peripheral> на настоящий MAC-адрес вашего устройства.

Примечания:

  • HID и другие услуги: Если вас интересует доступ к информации об интерфейсах HID (Human Interface Device), такие как UUID 1812, вы можете обратиться к /dev/hidraw для получения необработанных данных ввода. Для этого может потребоваться использование дополнительных библиотек или утилит, таких как evtest, для чтения событий от устройств ввода.

  • Чтение и запись значений: Для чтения и записи значений через GATT-сервисы может потребоваться использование специализированных библиотек для работы с Bluetooth Low Energy (например, bluepy для Python).

  • Ресурсы для изучения: Рекомендуется ознакомиться с документацией по BlueZ и D-Bus для более глубокого понимания доступных возможностей и настройки соответствующих команд.

Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь их задавать.

Оцените материал
Добавить комментарий

Капча загружается...