summaryrefslogtreecommitdiff
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
parent79162515fc2ddb492fc24da80ca2000550971d4f (diff)
Implemented DBusConnector class
-rw-r--r--daemon/daemon.cpp3
-rw-r--r--daemon/daemon.pro6
-rw-r--r--daemon/dbusconnector.cpp84
-rw-r--r--daemon/dbusconnector.h22
-rw-r--r--daemon/manager.cpp5
-rw-r--r--daemon/manager.h6
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();