Bluetooth — Как я могу использовать Bluez5 DBUS API в C ++ для сопряжения и подключения новых устройств?

Я пишу драйвер Bluetooth для Intel Edison. Программное обеспечение Board является самым последним доступным, и я занимаюсь разработкой с использованием IDE на основе Eclipse.
Номер версии Bluez в этом выпуске Edison — 5,37.

Я разрабатываю систему, которая должна отвечать следующим требованиям:

  • Сканирование устройств Bluetooth поблизости. [ИКС]
  • Обнаружение сенсорных устройств на основе имени и MAC-адреса. [ИКС]
  • Подключите и подключите сенсорные устройства автоматически. []

Последний пункт — проблема, так как я могу обнаружить сенсорные устройства, но я не могу соединить их с помощью интерфейса bluez5. До сих пор я пытался использовать интерфейс D-BUS, но он не работает, так как я получаю следующее сообщение об ошибке:

Метод «FindAdapter» с подписью «s» на интерфейсе «org.bluez.Manager» не существует

Код представлен здесь. Пожалуйста, обратите внимание:

  • DBusConnection * conn -> DBUS_BUS_SYSTEM
  • const char * adapter -> «hci0».

Код:

DBusMessage *msg, *reply;
DBusError err;
const char *reply_path;
char *path;

msg = dbus_message_new_method_call("org.bluez", "/","org.bluez.Manager", "FindAdapter");
dbus_message_append_args(msg, DBUS_TYPE_STRING, &adapter,DBUS_TYPE_INVALID);
dbus_error_init(&err);
reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
dbus_message_unref(msg);

Есть идеи?

12

Решение

Чтобы дать вам ответ, Pair и Connect связаны с Устройство-api.txt. Для вызова этих методов вы можете отправлять сообщения dbus (как вы это делали в приведенном выше коде) или создавать объект Proxy со следующими параметрами (см. Документацию):

название: «org.bluez»

интерфейс «org.bluez.Device1»

путь: «/ org / bluez / dev_AA_BB_CC_DD_EE», где AA_BB_CC_DD_EE — это MAC-адрес вашего устройства.

Если вы решили создать прокси-объект, вы можете вызывать такие методы, как Pair или Connect через прокси.


Не могли бы вы объяснить, что вы пытаетесь достичь в коде выше? Я понимаю, что вы хотите найти, какой адаптер использовать (я вижу метод «FindAdapter»), однако кажется, что вы уже знаете, что имя вашего адаптера — «hci0».


Я недавно работал с API-интерфейсом DBus, представленным Bluez, и я не был знаком с интерфейсом «org.bluez.Manager».

После быстрого поиска в официальной документации (https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc) Мне удалось найти следующий коммит, который указывает, что интерфейс был удален в 2012 году:
https://git.kernel.org/cgit/bluetooth/bluez.git/commit/doc?id=86a7b07c22f3a595ba3c48092359287905bf0878

Я также заметил, что вы используете низкоуровневый API DBus, как советовали сами freedesktop (читайте внизу страницы здесь: https://dbus.freedesktop.org/doc/api/html/group__DBus.html ), это очень сложный API, полезный для создания привязок на других языках. Если вы можете, переключитесь на GLib GDBus для гораздо более простого API.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]