Я пишу драйвер Bluetooth для Intel Edison. Программное обеспечение Board является самым последним доступным, и я занимаюсь разработкой с использованием IDE на основе Eclipse.
Номер версии Bluez в этом выпуске Edison — 5,37.
Я разрабатываю систему, которая должна отвечать следующим требованиям:
Последний пункт — проблема, так как я могу обнаружить сенсорные устройства, но я не могу соединить их с помощью интерфейса bluez5. До сих пор я пытался использовать интерфейс D-BUS, но он не работает, так как я получаю следующее сообщение об ошибке:
Метод «FindAdapter» с подписью «s» на интерфейсе «org.bluez.Manager» не существует
Код представлен здесь. Пожалуйста, обратите внимание:
Код:
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);
Есть идеи?
Чтобы дать вам ответ, 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.
Других решений пока нет …