summaryrefslogtreecommitdiff
path: root/src/watchconnector.cpp
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-06-21 22:23:07 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-06-21 22:23:07 +0200
commit1f0cde7cfd31c180eaceeab4ee0ad24613eaf34c (patch)
tree7b78f4bb6ecbe04ae165cb00a47989e7ad81e387 /src/watchconnector.cpp
parent1c908650c9086f9b1714da14acdcb18f85e3d4fb (diff)
Restructured for lib and daemon
Diffstat (limited to 'src/watchconnector.cpp')
-rw-r--r--src/watchconnector.cpp300
1 files changed, 0 insertions, 300 deletions
diff --git a/src/watchconnector.cpp b/src/watchconnector.cpp
deleted file mode 100644
index c58e867..0000000
--- a/src/watchconnector.cpp
+++ /dev/null
@@ -1,300 +0,0 @@
-#include "watchconnector.h"
-#include <QDateTime>
-
-using namespace watch;
-
-static int __reconnect_timeout = 1000;
-
-WatchConnector::WatchConnector(QObject *parent) :
- QObject(parent)
-{
- socket = nullptr;
-}
-
-WatchConnector::~WatchConnector()
-{
-}
-
-void WatchConnector::deviceDiscovered(const QBluetoothDeviceInfo &device)
-{
- //FIXME TODO: Configurable
- if (device.name().startsWith("Pebble")) {
- qDebug() << "Found Pebble:" << device.name() << '(' << device.address().toString() << ')';
- handleWatch(device);
- } else {
- qDebug() << "Found other device:" << device.name() << '(' << device.address().toString() << ')';
- }
-}
-
-void WatchConnector::deviceConnect(const QString name, const QString address)
-{
- if (name.startsWith("Pebble")) {
- _last_name = name;
- _last_address = address;
- QBluetoothDeviceInfo device(QBluetoothAddress(address), name, 0);
- deviceDiscovered(device);
- }
-}
-
-void WatchConnector::reconnect()
-{
- if (_last_name != "" && _last_address != "") {
- deviceConnect(_last_name, _last_address);
- }
-}
-
-void WatchConnector::handleWatch(const QBluetoothDeviceInfo &device)
-{
- qDebug() << "handleWatch" << device.name();
- if (socket != nullptr) {
- socket->close();
- socket->deleteLater();
- socket = nullptr;
- }
-
- socket = new QBluetoothSocket(QBluetoothSocket::RfcommSocket);
- qDebug() << "Creating socket";
-
- // FIXME: Assuming port 1 (with Pebble)
- socket->connectToService(device.address(), 1);
-
- connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket()));
- connect(socket, SIGNAL(connected()), this, SLOT(connected()));
- connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
-}
-
-QString WatchConnector::decodeEndpoint(unsigned int 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);
- }
-}
-
-void WatchConnector::decodeMsg(QByteArray data)
-{
- unsigned int datalen = 0;
- int index = 0;
- datalen = (data.at(index) << 8) + data.at(index+1);
- index += 2;
-
- unsigned int endpoint = 0;
- endpoint = (data.at(index) << 8) + data.at(index+1);
- index += 2;
-
- qDebug() << "Length:" << datalen << " Endpoint:" << decodeEndpoint(endpoint);
- qDebug() << "Data:" << data.mid(index).toHex();
- if (endpoint == watchPHONE_CONTROL) {
- if (data.length() >= 5) {
- if (data.at(4) == callHANGUP) {
- emit hangup();
- }
- }
- }
-}
-
-void WatchConnector::readSocket()
-{
- qDebug() << "read";
-
- QBluetoothSocket *socket = qobject_cast<QBluetoothSocket *>(sender());
- if (!socket) return;
-
- while (socket->bytesAvailable()) {
- QByteArray line = socket->readAll();
- emit messageReceived(socket->peerName(), QString::fromUtf8(line.constData(), line.length()));
- decodeMsg(line);
- }
-}
-
-void WatchConnector::connected()
-{
- qDebug() << "Connected!";
- is_connected = true;
- emit nameChanged();
- emit connectedChanged();
-}
-
-void WatchConnector::disconnected()
-{
- qDebug() << "Disconnected!";
- is_connected = false;
-
- QBluetoothSocket *socket = qobject_cast<QBluetoothSocket *>(sender());
- if (!socket) return;
-
- socket->deleteLater();
- socket = nullptr;
- emit connectedChanged();
- emit nameChanged();
-
- // Try to connect again after a timeout
- QTimer::singleShot(__reconnect_timeout, this, SLOT(reconnect()));
-}
-
-void WatchConnector::sendData(const QByteArray &data)
-{
- if (socket == nullptr) return;
-
- socket->write(data);
-}
-
-void WatchConnector::sendMessage(unsigned int endpoint, QByteArray data)
-{
- qDebug() << "Sending message";
- QByteArray msg;
-
- // First send the length
- msg.append((data.length() & 0xFF00) >> 8);
- msg.append(data.length() & 0xFF);
-
- // Then the endpoint
- msg.append((endpoint & 0xFF00) >> 8);
- msg.append(endpoint & 0xFF);
-
- // Finally the data
- msg.append(data);
-
- sendData(msg);
-}
-
-void WatchConnector::buildData(QByteArray &res, QStringList data)
-{
- for (QString d : data)
- {
- QByteArray tmp = d.left(0xF0).toUtf8();
- res.append(tmp.length() & 0xFF);
- res.append(tmp);
- }
-}
-
-QByteArray WatchConnector::buildMessageData(unsigned int lead, QStringList data)
-{
- QByteArray res;
- res.append(lead & 0xFF);
- buildData(res, data);
-
- return res;
-}
-
-void WatchConnector::ping(unsigned int val)
-{
- QByteArray res;
- res.append((char)0);
-
- res.append((char)((val >> 24) & 0xff));
- res.append((char)((val >> 16) & 0xff));
- res.append((char)((val >> 8) & 0xff));
- res.append((char)(val & 0xff));
-
- sendMessage(watchPING, res);
-}
-
-QString WatchConnector::timeStamp()
-{
- return QString::number(QDateTime::currentMSecsSinceEpoch());
-}
-
-void WatchConnector::sendNotification(unsigned int lead, QString sender, QString data, QString subject)
-{
- QStringList tmp;
- tmp.append(sender);
- tmp.append(data);
- tmp.append(timeStamp());
- if (lead == 0) tmp.append(subject);
-
- QByteArray res = buildMessageData(lead, tmp);
-
- sendMessage(watchNOTIFICATION, res);
-}
-
-void WatchConnector::sendSMSNotification(QString sender, QString data)
-{
- sendNotification(1, sender, data, "");
-}
-
-void WatchConnector::sendEmailNotification(QString sender, QString data, QString subject)
-{
- sendNotification(0, sender, data, subject);
-}
-
-void WatchConnector::phoneControl(char act, unsigned int cookie, QStringList datas)
-{
- QByteArray head;
- head.append((char)act);
- head.append((cookie >> 24)& 0xFF);
- head.append((cookie >> 16)& 0xFF);
- head.append((cookie >> 8)& 0xFF);
- head.append(cookie & 0xFF);
- if (datas.length()>0) buildData(head, datas);
-
- sendMessage(watchPHONE_CONTROL, head);
-}
-
-void WatchConnector::ring(QString number, QString name, bool incoming, unsigned int cookie)
-{
- QStringList tmp;
- tmp.append(number);
- tmp.append(name);
-
- char act = callINCOMING;
- if (!incoming) {
- act = callOUTGOING;
- }
-
- phoneControl(act, cookie, tmp);
-}
-
-void WatchConnector::startPhoneCall(unsigned int cookie)
-{
- phoneControl(callSTART, cookie, QStringList());
-}
-
-void WatchConnector::endPhoneCall(unsigned int cookie)
-{
- phoneControl(callEND, cookie, QStringList());
-}
-
-void watch::registerWatchConnector()
-{
- qmlRegisterType<WatchConnector>("watch", 0, 1, "WatchConnector");
-}