summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2015-03-31 12:34:07 +0200
committerTomasz Sterna <tomek@xiaoka.com>2015-03-31 13:36:54 +0200
commit435b5066f57ed0f0710dcc61ca927380e3916a7e (patch)
treec44e364bf7ec242b718178e8fc0e4cae4475d33b
parent55ca91c31d6469869903272e5263b85199b68728 (diff)
Store Watch HW&SW versions in API object
-rw-r--r--daemon/jskitobjects.cpp2
-rw-r--r--daemon/watchconnector.cpp78
-rw-r--r--daemon/watchconnector.h31
3 files changed, 74 insertions, 37 deletions
diff --git a/daemon/jskitobjects.cpp b/daemon/jskitobjects.cpp
index b0da7f9..9c09f27 100644
--- a/daemon/jskitobjects.cpp
+++ b/daemon/jskitobjects.cpp
@@ -119,7 +119,7 @@ QString JSKitPebble::getWatchToken() const
hasher.addData(token_salt, strlen(token_salt));
hasher.addData(_appInfo.uuid().toByteArray());
- hasher.addData(_mgr->_watch->serialNumber().toLatin1());
+ hasher.addData(_mgr->_watch->versions().serialNumber.toLatin1());
QString hash = hasher.result().toHex();
qCDebug(l) << "returning watch token" << hash;
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index ca45e4e..f992847 100644
--- a/daemon/watchconnector.cpp
+++ b/daemon/watchconnector.cpp
@@ -1,5 +1,6 @@
#include <QDateTime>
#include <QMetaEnum>
+#include <QDebugStateSaver>
#include "unpacker.h"
#include "watchconnector.h"
@@ -7,6 +8,26 @@
static const int RECONNECT_TIMEOUT = 500; //ms
static const bool PROTOCOL_DEBUG = false;
+QDebug operator<< (QDebug d, const WatchConnector::SoftwareVersion &ver) {
+ QDebugStateSaver save(d);
+ d.setAutoInsertSpaces(true);
+ d << ver.version << ver.build.toString(Qt::ISODate) << ver.commit;
+ d.nospace() << ver.hw_string << "(" << ver.hw_revision << ")";
+ d.space() << ver.metadata_version;
+ d.nospace() << (ver.is_recovery ? "recovery" : "standard");
+ return d;
+}
+
+QDebug operator<< (QDebug d, const WatchConnector::WatchVersions &ver) {
+ QDebugStateSaver save(d);
+ d.nospace() << "bootloader: " << ver.bootLoaderBuild.toString(Qt::ISODate)
+ << ", serial number: " << ver.serialNumber
+ << ", bt address: " << ver.address.toHex()
+ << ", firmware (main: " << ver.main
+ << ") (safe: " << ver.safe << ")";
+ return d;
+}
+
WatchConnector::WatchConnector(QObject *parent) :
QObject(parent), l(metaObject()->className()), socket(nullptr), is_connected(false)
{
@@ -28,41 +49,32 @@ WatchConnector::WatchConnector(QObject *parent) :
u.skip(1);
- quint32 version = u.read<quint32>();
- QString version_string = u.readFixedString(32);
- QString commit = u.readFixedString(8);
- bool is_recovery = u.read<quint8>();
- quint8 hw_platform = u.read<quint8>();
- quint8 metadata_version = u.read<quint8>();
-
- quint32 safe_version = u.read<quint32>();
- QString safe_version_string = u.readFixedString(32);
- QString safe_commit = u.readFixedString(8);
- bool safe_is_recovery = u.read<quint8>();
- quint8 safe_hw_platform = u.read<quint8>();
- quint8 safe_metadata_version = u.read<quint8>();
-
- quint32 bootLoaderTimestamp = u.read<quint32>();
- QString hardwareRevision = u.readFixedString(9);
- QString serialNumber = u.readFixedString(12);
- QByteArray address = u.readBytes(6);
+ _versions.main.build = QDateTime::fromTime_t(u.read<quint32>());
+ _versions.main.version = u.readFixedString(32);
+ _versions.main.commit = u.readFixedString(8);
+ _versions.main.is_recovery = u.read<quint8>();
+ _versions.main.hw_revision = HardwareRevision(u.read<quint8>());
+ _versions.main.hw_string = firmwareMapping.value(_versions.main.hw_revision);
+ _versions.main.metadata_version = u.read<quint8>();
+
+ _versions.safe.build = QDateTime::fromTime_t(u.read<quint32>());
+ _versions.safe.version = u.readFixedString(32);
+ _versions.safe.commit = u.readFixedString(8);
+ _versions.safe.is_recovery = u.read<quint8>();
+ _versions.safe.hw_revision = HardwareRevision(u.read<quint8>());
+ _versions.safe.hw_string = firmwareMapping.value(_versions.safe.hw_revision);
+ _versions.safe.metadata_version = u.read<quint8>();
+
+ _versions.bootLoaderBuild = QDateTime::fromTime_t(u.read<quint32>());
+ _versions.hardwareRevision = u.readFixedString(9);
+ _versions.serialNumber = u.readFixedString(12);
+ _versions.address = u.readBytes(6);
if (u.bad()) {
qCWarning(l) << "short read while reading firmware version";
}
- qCDebug(l) << "got version information"
- << version << version_string << commit
- << is_recovery << hw_platform << metadata_version;
- qCDebug(l) << "recovery version information"
- << safe_version << safe_version_string << safe_commit
- << safe_is_recovery << safe_hw_platform << safe_metadata_version;
- qCDebug(l) << "hardware information" << bootLoaderTimestamp << hardwareRevision
- << firmwareMapping.value(HardwareRevision(hw_platform));
- qCDebug(l) << "serial number" << serialNumber.left(3) << "...";
- qCDebug(l) << "bt address" << address.toHex();
-
- this->_serialNumber = serialNumber;
+ qCDebug(l) << "hardware information:" << _versions;
return true;
});
@@ -109,7 +121,7 @@ void WatchConnector::handleWatch(const QString &name, const QString &address)
{
qCDebug(l) << "handleWatch" << name << address;
reconnectTimer.stop();
- if (socket != nullptr && socket->isOpen()) {
+ if (socket != nullptr) {
socket->close();
socket->deleteLater();
}
@@ -121,7 +133,7 @@ void WatchConnector::handleWatch(const QString &name, const QString &address)
if (emit_name) {
// If we've changed names, don't reuse cached serial number!
- _serialNumber.clear();
+ _versions.serialNumber.clear();
}
qCDebug(l) << "Creating socket";
@@ -256,7 +268,7 @@ void WatchConnector::onConnected()
qCDebug(l) << "Found" << writeData.length() << "bytes in write buffer - resending";
sendData(writeData);
}
- if (_serialNumber.isEmpty()) {
+ if (_versions.serialNumber.isEmpty()) {
// Ask for version information from the watch
sendMessage(watchVERSION, QByteArray(1, 0));
}
diff --git a/daemon/watchconnector.h b/daemon/watchconnector.h
index 2ed4996..400908c 100644
--- a/daemon/watchconnector.h
+++ b/daemon/watchconnector.h
@@ -31,10 +31,12 @@
#define WATCHCONNECTOR_H
#include <functional>
+#include <QDebug>
#include <QObject>
#include <QPointer>
#include <QStringList>
#include <QTimer>
+#include <QDateTime>
#include <QBluetoothDeviceInfo>
#include <QBluetoothSocket>
#include <QBluetoothServiceInfo>
@@ -94,7 +96,8 @@ public:
musicPREVIOUS = 5,
musicVOLUME_UP = 6,
musicVOLUME_DOWN = 7,
- musicGET_NOW_PLAYING = 8
+ musicGET_NOW_PLAYING = 8,
+ musicSEND_NOW_PLAYING = 9
};
enum SystemMessage {
systemFIRMWARE_AVAILABLE = 0,
@@ -186,6 +189,25 @@ public:
};
QMap<HardwareRevision, QString> firmwareMapping;
+ struct SoftwareVersion {
+ QDateTime build;
+ QString version;
+ QString commit;
+ bool is_recovery;
+ HardwareRevision hw_revision;
+ QString hw_string;
+ quint8 metadata_version;
+ };
+
+ struct WatchVersions {
+ SoftwareVersion main;
+ SoftwareVersion safe;
+ QDateTime bootLoaderBuild;
+ QString hardwareRevision;
+ QString serialNumber;
+ QByteArray address;
+ };
+
typedef QMap<int, QVariant> Dict;
enum DictItemType {
typeBYTES,
@@ -201,7 +223,7 @@ public:
inline bool isConnected() const { return is_connected; }
inline QString name() const { return socket != nullptr ? socket->peerName() : ""; }
- inline QString serialNumber() const { return _serialNumber; }
+ inline WatchVersions versions() const { return _versions; }
void setEndpointHandler(uint endpoint, const EndpointHandlerFunc &func);
void clearEndpointHandler(uint endpoint);
@@ -259,7 +281,10 @@ private:
QTimer reconnectTimer;
QString _last_name;
QString _last_address;
- QString _serialNumber;
+ WatchVersions _versions;
};
+QDebug operator<< (QDebug d, const WatchConnector::SoftwareVersion &ver);
+QDebug operator<< (QDebug d, const WatchConnector::WatchVersions &ver);
+
#endif // WATCHCONNECTOR_H