Я пытаюсь создать сервисы BLE GATT на своем Raspberry Pi 4, используя C++. Долго искал, но не смог найти полезных советов/примеров.
Более подробная информация: Я могу создавать услуги и характеристики GATT с помощью команд:
#bluetoothctl
[bluetoothctl] menu gatt
[bluetoothctl] register-service 0xFFFF#
[bluetoothctl] register-characteristic 0xAAAA read,write #
[bluetoothctl] register-application #
и я хочу добиться того же, используя коды C++.
Я нашел определение void RegisterApplication(object application, dict options)
в https://github.com/Vudentz/BlueZ/blob/master/doc/gatt-api.txt, но оно не содержит подробностей. Мой вопрос:
Что мне следует указать для этой функции RegisterApplication для «объектного приложения» и «параметров dic»? Есть ли пример в формате
g_dbus_proxy_call(
Proxy,
"RegisterApplication",
Params,
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
NULL,
NULL);
показывает, как должны быть построены «параметры» для моей службы и характеристики (зарегистрированные с помощью команд) выше?
Вам необходимо построить иерархию сервисов BLE GATT в D-Bus, а затем с помощью RegisterApplication
сообщить BlueZ, где находится верхний уровень сервиса в D-Bus.
Чтобы использовать язык D-Bus, необходимо создать локальную службу BlueZ с объектами D-Bus, а затем опубликовать ее. Это объект D-Bus созданной вами опубликованной локальной иерархии сервисов BlueZ, который является первым аргументом RegisterApplication
Дополнительная информация: https://github.com/Kistler-Group/sdbus-cpp/blob/master/docs/using-sdbus-c++.md#using-d-bus-connections-on-the-server-side
Вы также можете взглянуть на следующий проект, чтобы узнать, как они это сделали: https://github.com/netttlep/gobbledegook
Спасибо за информацию! Помимо предоставленного вами репозитория (это отличный проект), я также считаю полезным этот проект: github.com/weliem/bluez_inc. Напишите сюда, вдруг у кого-то возникнет такая же проблема