2013-08-27 2 views
1

Я начал работать с DBus и bluetooth в Qt. Я хочу разработать скрипт, который просто вызовет метод через DBus и получит ответ. Часть кода здесь (то есть основная часть acutally):Реализация dbus org.bluez в Qt

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 файлами»)

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

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

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

+0

Вы получаете ответы от команд dbus, попробуйте эту команду, если нет ответа, bluez не зарегистрирован в команде dbus: dbus-send --system --type = method_call --print-reply --dest = org.bluez "/" org.bluez.Manager.ListAdapters – ashish

+1

Неправильное имя интерфейса? Вместо этого попробуйте: интерфейс QDBusInterface («org.bluez», «/», «org.bluez.Manager», bus, 0); – jaguzu

ответ

0

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

Хотя я никогда не работал с внедрением Bluetooth/Dbus Qt, есть несколько проблем с кодом:

Прежде всего, интерфейс 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, так как позволяет визуальные представления абстрактных интерфейсов и путей.

Если у вас возникли проблемы с GATT; запустить bluetoothd с экспериментальным флагом -E; это позволяет использовать функции BlueZ GATT. (Только хедз-ап).