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 | |
| parent | 79162515fc2ddb492fc24da80ca2000550971d4f (diff) | |
Implemented DBusConnector class
| -rw-r--r-- | daemon/daemon.cpp | 3 | ||||
| -rw-r--r-- | daemon/daemon.pro | 6 | ||||
| -rw-r--r-- | daemon/dbusconnector.cpp | 84 | ||||
| -rw-r--r-- | daemon/dbusconnector.h | 22 | ||||
| -rw-r--r-- | daemon/manager.cpp | 5 | ||||
| -rw-r--r-- | daemon/manager.h | 6 |
6 files changed, 118 insertions, 8 deletions
diff --git a/daemon/daemon.cpp b/daemon/daemon.cpp index b49ea6e..30341d8 100644 --- a/daemon/daemon.cpp +++ b/daemon/daemon.cpp @@ -35,9 +35,10 @@ int main(int argc, char *argv[]) QCoreApplication app(argc, argv); watch::WatchConnector watch; + DBusConnector dbus; VoiceCallManager voice; - Manager manager(&watch, &voice); + Manager manager(&watch, &dbus, &voice); return app.exec(); } diff --git a/daemon/daemon.pro b/daemon/daemon.pro index 24bbfbd..f7f055d 100644 --- a/daemon/daemon.pro +++ b/daemon/daemon.pro @@ -14,12 +14,14 @@ SOURCES += \ daemon.cpp \ voicecallmanager.cpp \ voicecallhandler.cpp \ - manager.cpp + manager.cpp \ + dbusconnector.cpp HEADERS += \ voicecallmanager.h \ voicecallhandler.h \ - manager.h + manager.h \ + dbusconnector.h INSTALLS += target target.path = /usr/sbin 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; +} diff --git a/daemon/dbusconnector.h b/daemon/dbusconnector.h new file mode 100644 index 0000000..8dadb5a --- /dev/null +++ b/daemon/dbusconnector.h @@ -0,0 +1,22 @@ +#ifndef DBUSCONNECTOR_H +#define DBUSCONNECTOR_H + +#include <QObject> + +class DBusConnector : public QObject +{ + Q_OBJECT +public: + explicit DBusConnector(QObject *parent = 0); + + QString pebbleName; + QString pebbleAddress; + +signals: + +public slots: + bool findPebble(); + +}; + +#endif // DBUSCONNECTOR_H diff --git a/daemon/manager.cpp b/daemon/manager.cpp index 1bb71c0..739f891 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -2,8 +2,8 @@ #include <QDebug> -Manager::Manager(watch::WatchConnector *watch, VoiceCallManager *voice) : - QObject(0), watch(watch), voice(voice) +Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice) : + QObject(0), watch(watch), dbus(dbus), voice(voice) { connect(voice, SIGNAL(activeVoiceCallChanged()), SLOT(onActiveVoiceCallChanged())); connect(voice, SIGNAL(error(const QString &)), SLOT(onVoiceError(const QString &))); @@ -13,6 +13,7 @@ Manager::Manager(watch::WatchConnector *watch, VoiceCallManager *voice) : if (btDevice.isValid()) { qDebug() << "BT local name:" << btDevice.name(); + watch->deviceConnect(dbus->pebbleName, dbus->pebbleAddress); } } diff --git a/daemon/manager.h b/daemon/manager.h index fd39639..9de5496 100644 --- a/daemon/manager.h +++ b/daemon/manager.h @@ -2,6 +2,7 @@ #define MANAGER_H #include "watchconnector.h" +#include "dbusconnector.h" #include "voicecallmanager.h" #include <QObject> @@ -14,10 +15,11 @@ class Manager : public QObject QBluetoothLocalDevice btDevice; watch::WatchConnector *watch; + DBusConnector *dbus; VoiceCallManager *voice; public: - explicit Manager(watch::WatchConnector *watch, VoiceCallManager *voice); + explicit Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice); signals: @@ -25,8 +27,6 @@ public slots: void hangupAll(); protected slots: - void onBTDeviceDiscovered(const QBluetoothDeviceInfo & device); - void onActiveVoiceCallChanged(); void onVoiceError(const QString &message); void onActiveVoiceCallStatusChanged(); |
