From 9240163a3e2a6e24ad5ee922365144dd1f763bf4 Mon Sep 17 00:00:00 2001 From: Tomasz Sterna Date: Wed, 25 Jun 2014 20:38:37 +0200 Subject: Implemented DBusConnector class --- daemon/dbusconnector.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 daemon/dbusconnector.cpp (limited to 'daemon/dbusconnector.cpp') diff --git a/daemon/dbusconnector.cpp b/daemon/dbusconnector.cpp new file mode 100644 index 0000000..78992f9 --- /dev/null +++ b/daemon/dbusconnector.cpp @@ -0,0 +1,84 @@ +#include "dbusconnector.h" + +#include +#include +#include +#include +#include +#include + +DBusConnector::DBusConnector(QObject *parent) : + QObject(parent) +{ +//dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.ListAdapters +//dbus-send --system --dest=org.bluez --print-reply $path org.bluez.Adapter.GetProperties +//dbus-send --system --dest=org.bluez --print-reply $devpath org.bluez.Device.GetProperties +//dbus-send --system --dest=org.bluez --print-reply $devpath org.bluez.Input.Connect + QDBusConnection session = QDBusConnection::sessionBus(); + + findPebble(); + +} + +bool DBusConnector::findPebble() +{ + QDBusConnection system = QDBusConnection::systemBus(); + + QDBusReply> ListAdaptersReply = system.call(QDBusMessage::createMethodCall("org.bluez", + "/", + "org.bluez.Manager", + "ListAdapters")); + if (not ListAdaptersReply.isValid()) { + qWarning() << ListAdaptersReply.error().message(); + return false; + } + + QList adapters = ListAdaptersReply.value(); + + if (adapters.isEmpty()) { + qWarning() << "No BT adapters found"; + return false; + } + + QDBusReply> AdapterPropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez", + adapters.at(0).path(), + "org.bluez.Adapter", + "GetProperties")); + if (not AdapterPropertiesReply.isValid()) { + qWarning() << AdapterPropertiesReply.error().message(); + return false; + } + + QList devices; + AdapterPropertiesReply.value().value("Devices").value() >> devices; + + QString name; + QString address; + + foreach (QDBusObjectPath path, devices) { + QDBusReply> DevicePropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez", + path.path(), + "org.bluez.Device", + "GetProperties")); + if (not DevicePropertiesReply.isValid()) { + qWarning() << DevicePropertiesReply.error().message(); + continue; + } + + const QHash &dict = DevicePropertiesReply.value(); + + QString tmp = dict.value("Name").toString(); + qDebug() << "Found BT device:" << tmp; + if (tmp.startsWith("Pebble")) { + name = tmp; + address = dict.value("Address").toString(); + qDebug() << "Found Pebble:" << name << address; + } + } + + if (name.isEmpty() or address.isEmpty()) return false; + + pebbleName = name; + pebbleAddress = address; + return true; +} -- cgit v1.2.3