diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2014-06-25 20:38:37 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2014-06-25 20:38:37 +0200 |
| commit | 9240163a3e2a6e24ad5ee922365144dd1f763bf4 (patch) | |
| tree | bfe64b6f95a650a745eb0b4fd2f70f580dd8c480 /daemon/dbusconnector.cpp | |
| parent | 79162515fc2ddb492fc24da80ca2000550971d4f (diff) | |
Implemented DBusConnector class
Diffstat (limited to 'daemon/dbusconnector.cpp')
| -rw-r--r-- | daemon/dbusconnector.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
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 <QDebug> +#include <QDBusConnection> +#include <QDBusMessage> +#include <QDBusReply> +#include <QDBusArgument> +#include <QDBusObjectPath> + +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<QList<QDBusObjectPath>> ListAdaptersReply = system.call(QDBusMessage::createMethodCall("org.bluez", + "/", + "org.bluez.Manager", + "ListAdapters")); + if (not ListAdaptersReply.isValid()) { + qWarning() << ListAdaptersReply.error().message(); + return false; + } + + QList<QDBusObjectPath> adapters = ListAdaptersReply.value(); + + if (adapters.isEmpty()) { + qWarning() << "No BT adapters found"; + return false; + } + + QDBusReply<QHash<QString,QVariant>> 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<QDBusObjectPath> devices; + AdapterPropertiesReply.value().value("Devices").value<QDBusArgument>() >> devices; + + QString name; + QString address; + + foreach (QDBusObjectPath path, devices) { + QDBusReply<QHash<QString,QVariant>> DevicePropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez", + path.path(), + "org.bluez.Device", + "GetProperties")); + if (not DevicePropertiesReply.isValid()) { + qWarning() << DevicePropertiesReply.error().message(); + continue; + } + + const QHash<QString,QVariant> &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; +} |
