summaryrefslogtreecommitdiff
path: root/daemon/dbusconnector.cpp
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-06-25 20:38:37 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-06-25 20:38:37 +0200
commit9240163a3e2a6e24ad5ee922365144dd1f763bf4 (patch)
treebfe64b6f95a650a745eb0b4fd2f70f580dd8c480 /daemon/dbusconnector.cpp
parent79162515fc2ddb492fc24da80ca2000550971d4f (diff)
Implemented DBusConnector class
Diffstat (limited to 'daemon/dbusconnector.cpp')
-rw-r--r--daemon/dbusconnector.cpp84
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;
+}