Реализация Dbus org.bluez в Qt

Я начал работать с DBus и Bluetooth в Qt. Я хочу разработать скрипт, который будет просто вызывать метод через DBus и получать ответ. Часть кода здесь (это основная часть):

QString hostname("00:07:80:60:CE:22");
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface interface("org.bluez", "/", "Manager", bus, 0);

qDebug()<<"is valid: "<<interface.isValid()<<interface.lastError();

interface.lastError () выдает следующую ошибку:

QDBusError («org.freedesktop.DBus.Error.ServiceUnknown», «Имя org.bluez не было предоставлено никакими файлами .service»)

У меня установлены bluez и dbus. Я могу искать устройства Bluetooth из команды.

Я также попробовал команду sudo bluetoothd -d -n, и я получил это:
Ошибка установки D-Bus: имя уже используется
bluetoothd [21952]: невозможно подключиться к D-Bus

Кто-нибудь знает в чем может быть проблема?

1

Решение

Ошибка, которую вы получаете (name already in use) означает, что демон bluetooth уже запущен в вашей системе. Вы можете остановить это, сделав sudo service bluetooth stopХотя я чувствую, что это довольно жестокий способ покончить с демоном Bluetooth. Если вы завершаете работу демона, вы также завершаете реализацию BlueZ D-Bus, поэтому вы не сможете его использовать.

Хотя я никогда не работал с реализацией Qt bluetooth / dbus, с вашим кодом есть несколько проблем:

Прежде всего, интерфейс BlueZ публикуется через система автобус, а не сессия автобус, так что это первое изменение, которое должно быть сделано.

Во-вторых, какова функция "Manager" параметр вашего прохождения? Если вы пытаетесь подключиться к интерфейсу DBus под названием "Manager" тогда нет ни одного. Я не уверен, что так и было, поскольку вы задали этот вопрос в 2013 году. Вы можете увидеть интерфейсы DBus, которые BlueZ реализует, используя программу под названием D-Feet. Вы должны попробовать это, поскольку это помогло мне понять работу BlueZ с DBus. рекомендую sudo apt-get install d-feet, Единственные интерфейсы, которые публикуются на "/" путь org.freedesktop.DBus.Introspectable а также org.freedesktop.DBus.Objectmanager, Опять же, это можно легко увидеть и экспериментировать с использованием D-Feet, так как он позволяет визуально представлять абстрактные интерфейсы и пути.

Если, случайно, у вас возникнут проблемы с ГАТТ позже; бежать bluetoothd с -E экспериментальный флаг; это включает функциональность BlueZ GATT. (Просто на голову).

0

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

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