BlueZ: Как настроить сервер GATT из командной строки

Я хотел бы знать, есть ли способ настроить сервер gatt из командной строки Linux. Я знаю, что команда BlueZ gatttool позволяет вам действовать как клиент gatt и опрашивать удаленный сервер gatt, однако я не думаю, что этот инструмент можно использовать для настройки сервера.

Я хочу создать сервер gatt, созданный из командной строки, который может быть опрошен любым центральным устройством (например, устройством iOS или Android) для подключения к серверу GATT, обнаружения служб и характеристик. , и манипулировать данными в характеристиках.

Пример:

Сервер Gatt с 1 сервисом, который содержит 3 характеристики.

  • Сервис uuid = 0xFFFF
  • Char 1 uuid = 0xAAAA, value = 01, properties = readable
  • Char 2 uuid = 0xBBBB, значение = 00, свойства = читаемый и доступный для записи
  • Char 3 uuid = 0xCCCC, value = 02, properties = notifiable

Я использую версию ядра 3.11.0 и BlueZ 5.19


person Youssif Saeed    schedule 21.08.2014    source источник
comment
Взгляните на [Bluez: пример объявления службы / сервера gatt?] [1] или [Создание сервера Gatt?] [2] или [Bluetooth Low Energy: использование стека BlueZ в качестве периферийного устройства (с настраиваемыми службами и характеристиками)] [ 3], чтобы получить подсказки, как действовать дальше. [1]: stackoverflow.com/questions/ 20682294 / [2]: stackoverflow.com/questions/ 19549555 / create-a-gatt-server [3]: stackoverflow.com/questions/21428446/   -  person Mark Leighton Fisher    schedule 28.08.2014


Ответы (3)


Теперь это можно сделать с помощью нового инструмента bluetoothctl. Таблицу gatt можно настроить с помощью этого инструмента следующим образом: -

#bluetoothctl
[bluetoothctl] menu gatt
[bluetoothctl] register-service 0xFFFF # (Choose yes when asked if primary service)
[bluetoothctl] register-characteristic 0xAAAA read       # (Select a value of 1 when prompted)
[bluetoothctl] register-characteristic 0xBBBB read,write # (Select a value of 0 when prompted)
[bluetoothctl] register-characteristic 0xCCCC read       # (Select a value of 2 when prompted)
[bluetoothctl] register-application # (This commits the services/characteristics and registers the profile)
[bluetoothctl] back
[bluetoothctl] advertise on

Я пробовал это с несколькими комбинациями услуг / характеристик и смог заставить это работать. Службы GAP (0x1800) и GATT (0x1801) доступны по умолчанию и будут частью таблицы GATT при объявлении. Вы также можете использовать следующую команду, чтобы увидеть доступные службы: -

[bluetoothctl] show
Controller 00:AA:BB:CC:DD:EE (public)
    Name: MyMachine
    Alias: MyMachine
    Class: 0x000c0000
    Powered: yes
    Discoverable: no
    Pairable: yes
    UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
    UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
    UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
    UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
    UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
    UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
    UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
    UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
    **UUID: Unknown                   (0000ffff-0000-1000-8000-00805f9b34fb)**
    UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
    Modalias: usb:v1D6Bp0246d0532
    Discovering: no
person Youssif Saeed    schedule 25.10.2018
comment
При регистрации характеристик для каких значений и почему вы указываете 1,0,2 соответственно? - person Climax; 09.04.2020
comment
@Climax Это только начальные значения характеристики. - person Andy; 29.04.2020
comment
@Youssif Saeed, какую версию вы использовали? Я выполнил ваши шаги и получил ошибку «Невозможно найти прокси GattManager» для команды «register-application». Я использую ubuntu 20.04 вместе с BlueZ 5.53, спасибо. - person Qiao; 13.12.2020

Я также столкнулся с той же проблемой, но мог найти любое подходящее решение, что вы можете лучше всего сделать, используя стек bluez на машине Ubuntu, - это использовать некоторые команды hci для рекламы пакетов LE. Эти пакеты будут постоянно анонсироваться, если это сервер LE. Если вы пойдете на сканирование с помощью клиента GATT, вы получите имя вашего устройства bluez в списке сканирования.

Используйте следующие команды ниже:

Установите пакеты объявлений LE с помощью следующей команды:

sudo hcitool -i hcix cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00

· Теперь объявите пакеты LE с помощью следующей команды:

sudo hciconfig hcix leadv
person Dip Roy    schedule 19.12.2014

Я считаю, что GattServer невозможно настроить из интерфейса командной строки. В основном потому, что это функция верхнего уровня, поэтому для этого нет инструмента (поскольку большинство инструментов предоставляют функции нижнего уровня).

Но вы можете использовать имитацию того, как bluez создает сервис с помощью dbus.

Нам нужен GattService с двумя характеристиками (R, W, N)

В итоге мы сделали следующее: 1. использовать libgdbus (из исходного кода bluez). В нем есть вся оболочка dbus для регистрации сервисов в bluez.

  1. Создал переводчик (сокет IPC) для разделения вопроса лицензирования (GPL)

  2. Отправить команду регистратору службы для создания службы e, g - op_code = create_service, uuid = 'service_uuid'

op_code = create_charac, uuid = 'character_uuid' flags = 'rwn'

Надеюсь это поможет.

person fadedreamz    schedule 03.11.2015