diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2015-03-31 12:34:07 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2015-03-31 13:36:54 +0200 |
| commit | 435b5066f57ed0f0710dcc61ca927380e3916a7e (patch) | |
| tree | c44e364bf7ec242b718178e8fc0e4cae4475d33b | |
| parent | 55ca91c31d6469869903272e5263b85199b68728 (diff) | |
Store Watch HW&SW versions in API object
| -rw-r--r-- | daemon/jskitobjects.cpp | 2 | ||||
| -rw-r--r-- | daemon/watchconnector.cpp | 78 | ||||
| -rw-r--r-- | daemon/watchconnector.h | 31 |
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 |
