Я реализовал сервер GATT в CPP, который связывается со стеком Bluez через API-интерфейсы DBUS. Я умею рекламировать, выставлять характеристики, и клиенты связываются со мной. Моя ссылка - папка doc и test в папке bluez.
Я хотел бы сделать свою характеристику доступной только для безопасного (не устаревшего) соединения. Поэтому я добавил флаги «безопасная запись» и «безопасное чтение» к своей характеристике. Когда я пытаюсь читать и записывать их с помощью инструмента nRF connect, я вижу, что bluez не форсирует запросы на сопряжение, и я могу читать / записывать характеристику.
Мое приложение не регистрирует ни одного агента в bluez, поскольку мое периферийное устройство имеет возможность NoInputOutput.
static int GetHandlerGattChar(sd_bus* bus, const char* path, const char* interface, const char* prop, sd_bus_message* reply,
void* userdata, sd_bus_error* error) {
.....
if (property == "UUID") {
ret = sd_bus_message_append(reply, "s", "12345678-1234-5678-1234-56789abcdef1");
} else if (property == "Service") {
ret = sd_bus_message_append(reply, "o", DBUS_OBJECT_SERVICE0_NAME.c_str());
} else if (property == "Flags") {
ret = sd_bus_message_append(reply, "as", 3, "write-without-response", "secure-write", "secure-read");
} else {
ret = sd_bus_error_set(error, SD_BUS_ERROR_UNKNOWN_PROPERTY, "" /* message*/);
}
......
}
Я не понимаю, чего мне не хватает. Любая помощь / поддержка будут очень признательны.