summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-07-13 05:14:11 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-07-13 05:14:11 +0200
commit09d98ef6e6d32e73a6b3c74679adc8a49b0dee7e (patch)
treed4e5682b1b534c6b475c6279fdd1652c3c8e4b74 /daemon
parente99e0f6d456e86be244ed3baa022088ec859944a (diff)
Moved processing watch commands to separate object
Diffstat (limited to 'daemon')
-rw-r--r--daemon/daemon.pro6
-rw-r--r--daemon/manager.cpp6
-rw-r--r--daemon/manager.h3
-rw-r--r--daemon/watchcommands.cpp22
-rw-r--r--daemon/watchcommands.h25
-rw-r--r--daemon/watchconnector.cpp76
-rw-r--r--daemon/watchconnector.h26
7 files changed, 86 insertions, 78 deletions
diff --git a/daemon/daemon.pro b/daemon/daemon.pro
index 0a5cff0..3db6918 100644
--- a/daemon/daemon.pro
+++ b/daemon/daemon.pro
@@ -19,7 +19,8 @@ SOURCES += \
voicecallhandler.cpp \
watchconnector.cpp \
dbusconnector.cpp \
- dbusadaptor.cpp
+ dbusadaptor.cpp \
+ watchcommands.cpp
HEADERS += \
manager.h \
@@ -27,7 +28,8 @@ HEADERS += \
voicecallhandler.h \
watchconnector.h \
dbusconnector.h \
- dbusadaptor.h
+ dbusadaptor.h \
+ watchcommands.h
OTHER_FILES += \
org.pebbled.xml \
diff --git a/daemon/manager.cpp b/daemon/manager.cpp
index 228c466..be3946e 100644
--- a/daemon/manager.cpp
+++ b/daemon/manager.cpp
@@ -6,7 +6,7 @@
#include <QtContacts/QContactPhoneNumber>
Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice) :
- QObject(0), watch(watch), dbus(dbus), voice(voice),
+ QObject(0), watch(watch), dbus(dbus), voice(voice), commands(new WatchCommands(watch, this)),
notification(MNotification::DeviceEvent)
{
// We don't need to handle presence changes, so report them separately and ignore them
@@ -24,9 +24,11 @@ Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallMan
connect(voice, SIGNAL(activeVoiceCallChanged()), SLOT(onActiveVoiceCallChanged()));
connect(voice, SIGNAL(error(const QString &)), SLOT(onVoiceError(const QString &)));
- connect(watch, SIGNAL(hangup()), SLOT(hangupAll()));
connect(watch, SIGNAL(connectedChanged()), SLOT(onConnectedChanged()));
+ connect(watch, SIGNAL(messageDecoded(uint,uint,QByteArray)), commands, SLOT(processMessage(uint,uint,QByteArray)));
+ connect(commands, SIGNAL(hangup()), SLOT(hangupAll()));
+
// Set BT icon for notification
notification.setImage("icon-system-bluetooth-device");
diff --git a/daemon/manager.h b/daemon/manager.h
index ab5b8e7..75fd90f 100644
--- a/daemon/manager.h
+++ b/daemon/manager.h
@@ -4,6 +4,7 @@
#include "watchconnector.h"
#include "dbusconnector.h"
#include "voicecallmanager.h"
+#include "watchcommands.h"
#include <QObject>
#include <QBluetoothLocalDevice>
@@ -32,6 +33,8 @@ class Manager :
DBusConnector *dbus;
VoiceCallManager *voice;
+ WatchCommands *commands;
+
MNotification notification;
QContactManager *contacts;
diff --git a/daemon/watchcommands.cpp b/daemon/watchcommands.cpp
new file mode 100644
index 0000000..40f8963
--- /dev/null
+++ b/daemon/watchcommands.cpp
@@ -0,0 +1,22 @@
+#include "watchcommands.h"
+
+using namespace watch;
+
+WatchCommands::WatchCommands(WatchConnector *watch, QObject *parent) :
+ QObject(parent), watch(watch)
+{
+ connect(watch, SIGNAL(messageDecoded(uint,uint,QByteArray)), SLOT(processMessage(uint,uint,QByteArray)));
+}
+
+void WatchCommands::processMessage(uint endpoint, uint datalen, QByteArray data)
+{
+ if (endpoint == WatchConnector::watchPHONE_CONTROL) {
+ if (data.length() >= 5) {
+ if (data.at(4) == WatchConnector::callHANGUP) {
+ emit hangup();
+ }
+ }
+ } else if (endpoint == WatchConnector::watchPHONE_VERSION) {
+ watch->sendPhoneVersion();
+ }
+}
diff --git a/daemon/watchcommands.h b/daemon/watchcommands.h
new file mode 100644
index 0000000..ee58cbe
--- /dev/null
+++ b/daemon/watchcommands.h
@@ -0,0 +1,25 @@
+#ifndef WATCHCOMMANDS_H
+#define WATCHCOMMANDS_H
+
+#include "watchconnector.h"
+
+#include <QObject>
+
+class WatchCommands : public QObject
+{
+ Q_OBJECT
+
+ watch::WatchConnector *watch;
+
+public:
+ explicit WatchCommands(watch::WatchConnector *watch, QObject *parent = 0);
+
+signals:
+ void hangup();
+
+public slots:
+ void processMessage(uint endpoint, uint datalen, QByteArray data);
+
+};
+
+#endif // WATCHCOMMANDS_H
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index 2bc8c75..4935287 100644
--- a/daemon/watchconnector.cpp
+++ b/daemon/watchconnector.cpp
@@ -1,6 +1,7 @@
#include "watchconnector.h"
#include <QTimer>
#include <QDateTime>
+#include <QMetaEnum>
using namespace watch;
@@ -76,51 +77,11 @@ void WatchConnector::handleWatch(const QString &name, const QString &address)
socket->connectToService(QBluetoothAddress(address), 1);
}
-QString WatchConnector::decodeEndpoint(unsigned int val)
+QString WatchConnector::decodeEndpoint(uint val)
{
- //FIXME: Create a map of these values
- switch(val) {
- case watchTIME:
- return "TIME";
- case watchVERSION:
- return "VERSION";
- case watchPHONE_VERSION:
- return "PHONE_VERSION";
- case watchSYSTEM_MESSAGE:
- return "SYSTEM_MESSAGE";
- case watchMUSIC_CONTROL:
- return "MUSIC_CONTROL";
- case watchPHONE_CONTROL:
- return "PHONE_CONTROL";
- case watchAPPLICATION_MESSAGE:
- return "APP_MSG";
- case watchLAUNCHER:
- return "LAUNCHER";
- case watchLOGS:
- return "LOGS";
- case watchPING:
- return "PING";
- case watchLOG_DUMP:
- return "DUMP";
- case watchRESET:
- return "RESET";
- case watchAPP:
- return "APP";
- case watchAPP_LOGS:
- return "APP_LOGS";
- case watchNOTIFICATION:
- return "NOTIFICATION";
- case watchRESOURCE:
- return "RESOURCE";
- case watchAPP_MANAGER:
- return "APP_MANAG";
- case watchSCREENSHOT:
- return "SCREENSHOT";
- case watchPUTBYTES:
- return "PUTBYTES";
- default:
- return "Unknown: "+ QString::number(val);
- }
+ QMetaEnum Endpoints = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("Endpoints"));
+ const char *endpoint = Endpoints.valueToKey(val);
+ return endpoint ? QString(endpoint) : QString("watchUNKNOWN_%1").arg(val);
}
void WatchConnector::decodeMsg(QByteArray data)
@@ -137,16 +98,7 @@ void WatchConnector::decodeMsg(QByteArray data)
logger()->debug() << "Length:" << datalen << " Endpoint:" << decodeEndpoint(endpoint);
logger()->debug() << "Data:" << data.mid(index).toHex();
- //TODO: move the handling to a seperate method/class
- if (endpoint == watchPHONE_CONTROL) {
- if (data.length() >= 5) {
- if (data.at(4) == callHANGUP) {
- emit hangup();
- }
- }
- } else if (endpoint == watchPHONE_VERSION) {
- this->sendPhoneVersion();
- }
+ emit messageDecoded(endpoint, datalen, data);
}
void WatchConnector::onReadSocket()
@@ -203,7 +155,7 @@ void WatchConnector::sendData(const QByteArray &data)
socket->write(data);
}
-void WatchConnector::sendMessage(unsigned int endpoint, QByteArray data)
+void WatchConnector::sendMessage(uint endpoint, QByteArray data)
{
logger()->debug() << "Sending message";
QByteArray msg;
@@ -232,7 +184,7 @@ void WatchConnector::buildData(QByteArray &res, QStringList data)
}
}
-QByteArray WatchConnector::buildMessageData(unsigned int lead, QStringList data)
+QByteArray WatchConnector::buildMessageData(uint lead, QStringList data)
{
QByteArray res;
res.append(lead & 0xFF);
@@ -277,7 +229,7 @@ void WatchConnector::sendPhoneVersion()
sendMessage(watchPHONE_VERSION, res);
}
-void WatchConnector::ping(unsigned int val)
+void WatchConnector::ping(uint val)
{
QByteArray res;
res.append((char)0);
@@ -295,7 +247,7 @@ QString WatchConnector::timeStamp()
return QString::number(QDateTime::currentMSecsSinceEpoch());
}
-void WatchConnector::sendNotification(unsigned int lead, QString sender, QString data, QString subject)
+void WatchConnector::sendNotification(uint lead, QString sender, QString data, QString subject)
{
QStringList tmp;
tmp.append(sender);
@@ -330,7 +282,7 @@ void WatchConnector::sendMusicNowPlaying(QString track, QString album, QString a
sendMessage(watchMUSIC_CONTROL, res);
}
-void WatchConnector::phoneControl(char act, unsigned int cookie, QStringList datas)
+void WatchConnector::phoneControl(char act, uint cookie, QStringList datas)
{
QByteArray head;
head.append((char)act);
@@ -343,7 +295,7 @@ void WatchConnector::phoneControl(char act, unsigned int cookie, QStringList dat
sendMessage(watchPHONE_CONTROL, head);
}
-void WatchConnector::ring(QString number, QString name, bool incoming, unsigned int cookie)
+void WatchConnector::ring(QString number, QString name, bool incoming, uint cookie)
{
QStringList tmp;
tmp.append(number);
@@ -357,12 +309,12 @@ void WatchConnector::ring(QString number, QString name, bool incoming, unsigned
phoneControl(act, cookie, tmp);
}
-void WatchConnector::startPhoneCall(unsigned int cookie)
+void WatchConnector::startPhoneCall(uint cookie)
{
phoneControl(callSTART, cookie, QStringList());
}
-void WatchConnector::endPhoneCall(unsigned int cookie)
+void WatchConnector::endPhoneCall(uint cookie)
{
phoneControl(callEND, cookie, QStringList());
}
diff --git a/daemon/watchconnector.h b/daemon/watchconnector.h
index f4059e3..dafaa83 100644
--- a/daemon/watchconnector.h
+++ b/daemon/watchconnector.h
@@ -49,11 +49,13 @@ class WatchConnector : public QObject
Q_OBJECT
LOG4QT_DECLARE_QCLASS_LOGGER
+ Q_ENUMS(Endpoints)
+
Q_PROPERTY(QString name READ name NOTIFY nameChanged)
Q_PROPERTY(QString connected READ isConnected NOTIFY connectedChanged)
public:
- enum {
+ enum Endpoints {
watchTIME = 11,
watchVERSION = 16,
watchPHONE_VERSION = 17,
@@ -128,34 +130,34 @@ public:
explicit WatchConnector(QObject *parent = 0);
virtual ~WatchConnector();
bool isConnected() const { return is_connected; }
- QString name() const { if (socket != nullptr) return socket->peerName(); return ""; }
+ QString name() const { return socket != nullptr ? socket->peerName() : ""; }
QString timeStamp();
- QString decodeEndpoint(unsigned int val);
+ QString decodeEndpoint(uint val);
signals:
void messageReceived(QString peer, QString msg);
+ void messageDecoded(uint endpoint, uint datalen, QByteArray data);
void nameChanged();
void connectedChanged();
- void hangup();
public slots:
void sendData(const QByteArray &data);
- void sendMessage(unsigned int endpoint, QByteArray data);
- void ping(unsigned int val);
- void sendNotification(unsigned int lead, QString sender, QString data, QString subject);
+ void sendMessage(uint endpoint, QByteArray data);
+ void ping(uint val);
+ void sendNotification(uint lead, QString sender, QString data, QString subject);
void sendSMSNotification(QString sender, QString data);
void sendEmailNotification(QString sender, QString data, QString subject);
void sendMusicNowPlaying(QString track, QString album, QString artist);
void sendPhoneVersion();
void buildData(QByteArray &res, QStringList data);
- QByteArray buildMessageData(unsigned int lead, QStringList data);
+ QByteArray buildMessageData(uint lead, QStringList data);
- void phoneControl(char act, unsigned int cookie, QStringList datas);
- void ring(QString number, QString name, bool incoming=true, unsigned int cookie=0);
- void startPhoneCall(unsigned int cookie=0);
- void endPhoneCall(unsigned int cookie=0);
+ void phoneControl(char act, uint cookie, QStringList datas);
+ void ring(QString number, QString name, bool incoming=true, uint cookie=0);
+ void startPhoneCall(uint cookie=0);
+ void endPhoneCall(uint cookie=0);
void deviceConnect(const QString &name, const QString &address);
void disconnect();