diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2014-07-13 05:14:11 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2014-07-13 05:14:11 +0200 |
| commit | 09d98ef6e6d32e73a6b3c74679adc8a49b0dee7e (patch) | |
| tree | d4e5682b1b534c6b475c6279fdd1652c3c8e4b74 | |
| parent | e99e0f6d456e86be244ed3baa022088ec859944a (diff) | |
Moved processing watch commands to separate object
| -rw-r--r-- | daemon/daemon.pro | 6 | ||||
| -rw-r--r-- | daemon/manager.cpp | 6 | ||||
| -rw-r--r-- | daemon/manager.h | 3 | ||||
| -rw-r--r-- | daemon/watchcommands.cpp | 22 | ||||
| -rw-r--r-- | daemon/watchcommands.h | 25 | ||||
| -rw-r--r-- | daemon/watchconnector.cpp | 76 | ||||
| -rw-r--r-- | daemon/watchconnector.h | 26 |
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(); |
