2016-12-31 9 views
11

Я пишу драйвер bluetooth для Intel Edison. Программное обеспечение для платформ доступно последним, и я разрабатываю IDE на основе Eclipse. Номер версии Bluez в этом выпуске edison составляет 5.37.Как использовать Bluez5 DBUS API в C++ для подключения и подключения новых устройств?

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

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

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

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

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

  • DBusConnection * сопп -> DBUS_BUS_SYSTEM
  • Const символ * адаптер -> "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); 

Любые идеи?

+0

Вы можете использовать некоторые более высокоуровневые API-интерфейсы, например Qt5 теперь имеет модуль Bluetooth (который также использует синий цвет под капотом). Может быть, это было бы более простым в использовании. – Venemo

ответ

3

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

название: «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

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