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/daemon.cpp | 3 +- daemon/daemon.pro | 6 ++-- daemon/dbusconnector.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ daemon/dbusconnector.h | 22 +++++++++++++ daemon/manager.cpp | 5 +-- daemon/manager.h | 6 ++-- 6 files changed, 118 insertions(+), 8 deletions(-) create mode 100644 daemon/dbusconnector.cpp create mode 100644 daemon/dbusconnector.h 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 +#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; +} 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 + +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 -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 @@ -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(); -- cgit v1.2.3