summaryrefslogtreecommitdiff
path: root/daemon/watchconnector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/watchconnector.cpp')
-rw-r--r--daemon/watchconnector.cpp128
1 files changed, 66 insertions, 62 deletions
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index 48fd52f..0ce0607 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)
@@ -136,13 +97,8 @@ void WatchConnector::decodeMsg(QByteArray data)
logger()->debug() << "Length:" << datalen << " Endpoint:" << decodeEndpoint(endpoint);
logger()->debug() << "Data:" << data.mid(index).toHex();
- if (endpoint == watchPHONE_CONTROL) {
- if (data.length() >= 5) {
- if (data.at(4) == callHANGUP) {
- emit hangup();
- }
- }
- }
+
+ emit messageDecoded(endpoint, datalen, data);
}
void WatchConnector::onReadSocket()
@@ -199,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;
@@ -229,7 +185,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);
@@ -238,7 +194,43 @@ QByteArray WatchConnector::buildMessageData(unsigned int lead, QStringList data)
return res;
}
-void WatchConnector::ping(unsigned int val)
+void WatchConnector::sendPhoneVersion()
+{
+ unsigned int sessionCap = sessionCapGAMMA_RAY;
+ unsigned int remoteCap = remoteCapTELEPHONY | remoteCapSMS | osANDROID;
+ QByteArray res;
+
+ //Prefix
+ res.append(0x01);
+ res.append(0xff);
+ res.append(0xff);
+ res.append(0xff);
+ res.append(0xff);
+
+ //Session Capabilities
+ res.append((char)((sessionCap >> 24) & 0xff));
+ res.append((char)((sessionCap >> 16) & 0xff));
+ res.append((char)((sessionCap >> 8) & 0xff));
+ res.append((char)(sessionCap & 0xff));
+
+ //Remote Capabilities
+ res.append((char)((remoteCap >> 24) & 0xff));
+ res.append((char)((remoteCap >> 16) & 0xff));
+ res.append((char)((remoteCap >> 8) & 0xff));
+ res.append((char)(remoteCap & 0xff));
+
+ //Version Magic
+ res.append((char)0x02);
+
+ //Append Version
+ res.append((char)0x02); //Major
+ res.append((char)0x00); //Minor
+ res.append((char)0x00); //Bugfix
+
+ sendMessage(watchPHONE_VERSION, res);
+}
+
+void WatchConnector::ping(uint val)
{
QByteArray res;
res.append((char)0);
@@ -256,13 +248,13 @@ 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);
tmp.append(data);
tmp.append(timeStamp());
- if (lead == 0) tmp.append(subject);
+ if (lead == leadEMAIL) tmp.append(subject);
QByteArray res = buildMessageData(lead, tmp);
@@ -271,15 +263,27 @@ void WatchConnector::sendNotification(unsigned int lead, QString sender, QString
void WatchConnector::sendSMSNotification(QString sender, QString data)
{
- sendNotification(1, sender, data, "");
+ sendNotification(leadSMS, sender, data, "");
}
void WatchConnector::sendEmailNotification(QString sender, QString data, QString subject)
{
- sendNotification(0, sender, data, subject);
+ sendNotification(leadEMAIL, sender, data, subject);
+}
+
+void WatchConnector::sendMusicNowPlaying(QString track, QString album, QString artist)
+{
+ QStringList tmp;
+ tmp.append(track.left(30));
+ tmp.append(album.left(30));
+ tmp.append(artist.left(30));
+
+ QByteArray res = buildMessageData(leadNOW_PLAYING_DATA, tmp);
+
+ 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);
@@ -292,7 +296,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);
@@ -306,12 +310,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());
}