Подтвердить что ты не робот

Bluetooth Low Energy: используйте стек BlueZ в качестве периферийного устройства (с пользовательскими сервисами и характеристиками)

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

Пример:

  • Периферийное устройство с 1 услугой, которая содержит 3 характеристики.
  • Сервис uuid = 0xFFFF
  • Char 1 uuid = 0xAAAA, properties = readable
  • Char 2 uuid = 0xBBBB, свойства = доступны для чтения и записи
  • Char 3 uuid = 0xCCCC, properties = notifiable

От центрального устройства я должен увидеть периферийное устройство, подключиться к нему и обнаружить одну услугу (0xFFFF), которая имеет три характеристики (0xAAAA, 0xBBBB, 0xCCCC). Затем я мог бы прочитать значение 0xAAAA, прочитать и записать значение 0xBBBB и включить уведомления в 0xCCCC.

Обратите внимание, что я знаю, что существует аналогичный вопрос, но он объясняет, как использовать периферийное устройство как рекламодателя. Другой решаемый вопрос объясняет, как создать сервер GATT, но не объясняет, как играть со свойствами характеристик (например, читаемыми, уведомляемыми и т.д.), или, может быть, Я что-то пропустил.

Спасибо заранее.

4b9b3361

Ответ 1

Вы можете увидеть пример практики gatt или определенные профили в профиле/каталоге, например alert/server.c. В принципе, вам просто нужно зарегистрировать свой сервис, используя функцию gatt_service_add(), следуя существующему коду. Например:

 gatt_service_add(adapter, GATT_PRIM_SVC_UUID, 0xFFFF,
    /* Char 1 */
    GATT_OPT_CHR_UUID16, 0xAAAA,
    GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ,
    GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, read_func_callback,

    /* Char 2 Define here */
    ...
    /* Char 3 Define here */
    ...
    GATT_OPT_INVALID);
 }

Кроме того, я забыл детали, но для того, чтобы получить работу сервера предупреждений, вам нужно включить экспериментальный (и режим поддержки?) во время настройки, добавив "--enable-maintainer-mode" и "--enable-experimental"

Для запуска запустите скомпилированный "bluetoothd" с параметрами -n и -d для отладки (также -E для предоставления экспериментальных услуг). Вы можете снова использовать reset ваш адаптер после запуска bluetoothd. А затем вы можете подключиться с удаленного устройства, используя gatttool (также с bluetoothd, работающим на удаленном устройстве).

Ответ 2

1) перейти к папке Bluez

2) sudo./configure --prefix =/usr --mandir =/usr/share/man --sysconfdir =/etc --localstatedir =/var --disable-systemd --enable-experimental --enable -maintainer режим

3) sudo make all

4) Реклама подключаемых пакетов

# activate bluetooth
sudo hciconfig hci0 up                                             
# set advertise data: "hello world"
sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44
# start advertising as connectable
sudo hciconfig hci0 leadv 0

5) sudo service bluetooth stop

6) sudo src/bluetoothd -d -n

7) На другом ПК введите (сменить MAC-адрес gatt-сервера mac)

gatttool -b  gatt_server_mac --interactive

шаг 6 предназначен, если вы хотите скомпилировать плагины /gatt -example.c

если вы хотите скомпилировать сервер. c из профиля/времени или profle/alert (заменить на предупреждение вместо времени) или любой другой файл в папке профиля заменить шаг 6

sudo src/bluetoothd --plugin = time -n