diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2015-04-14 11:30:55 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2015-04-14 11:30:55 +0200 |
| commit | b93a1fe88141adf095bab09006b473205f597465 (patch) | |
| tree | ff9885578c4d3f5bbef9b0d9c362ec9f04c2c8bd | |
| parent | 78d1697cd63033244304f7794cf9157029e4fdb5 (diff) | |
Do not compute STM32CRC - use one from manifest.json
Fixes #47
| -rw-r--r-- | daemon/appinfo.cpp | 13 | ||||
| -rw-r--r-- | daemon/bankmanager.cpp | 4 | ||||
| -rw-r--r-- | daemon/bundle.cpp | 18 | ||||
| -rw-r--r-- | daemon/bundle.h | 1 | ||||
| -rw-r--r-- | daemon/daemon.pro | 2 | ||||
| -rw-r--r-- | daemon/manager.cpp | 4 | ||||
| -rw-r--r-- | daemon/uploadmanager.cpp | 36 | ||||
| -rw-r--r-- | daemon/uploadmanager.h | 15 |
8 files changed, 50 insertions, 43 deletions
diff --git a/daemon/appinfo.cpp b/daemon/appinfo.cpp index 7e726c3..7dcf49d 100644 --- a/daemon/appinfo.cpp +++ b/daemon/appinfo.cpp @@ -6,7 +6,6 @@ #include <QJsonArray> #include "appinfo.h" #include "unpacker.h" -#include "stm32crc.h" namespace { struct ResourceEntry { @@ -332,17 +331,7 @@ QByteArray AppInfo::extractFromResourcePack(QIODevice *dev, int wanted_id) const int offset = 12 + 256 * 16 + e.offset; - QByteArray res = data.mid(offset, e.length); - - Stm32Crc crc; - crc.addData(res); - - if (crc.result() != e.crc) { - qCWarning(l) << "CRC failure in resource" << e.index << "on file" << res; - return QByteArray(); - } - - return res; + return data.mid(offset, e.length); } QImage AppInfo::decodeResourceImage(const QByteArray &data) const diff --git a/daemon/bankmanager.cpp b/daemon/bankmanager.cpp index 6f520b8..ef74ef6 100644 --- a/daemon/bankmanager.cpp +++ b/daemon/bankmanager.cpp @@ -93,7 +93,7 @@ bool BankManager::uploadApp(const QUuid &uuid, int slot) _slots[slot].name.clear(); _slots[slot].uuid = QUuid(); - upload->uploadAppBinary(slot, binaryFile.data(), + upload->uploadAppBinary(slot, binaryFile.data(), info.crcFile(AppInfo::BINARY), [this, info, binaryFile, slot]() { qCDebug(l) << "app binary upload succesful"; binaryFile->close(); @@ -101,7 +101,7 @@ bool BankManager::uploadApp(const QUuid &uuid, int slot) // Proceed to upload the resource file QSharedPointer<QIODevice> resourceFile(info.openFile(AppInfo::RESOURCES)); if (resourceFile) { - upload->uploadAppResources(slot, resourceFile.data(), + upload->uploadAppResources(slot, resourceFile.data(), info.crcFile(AppInfo::RESOURCES), [this, resourceFile, slot]() { qCDebug(l) << "app resources upload succesful"; resourceFile->close(); diff --git a/daemon/bundle.cpp b/daemon/bundle.cpp index bfd4b83..63400b5 100644 --- a/daemon/bundle.cpp +++ b/daemon/bundle.cpp @@ -127,3 +127,21 @@ bool Bundle::fileExists(enum Bundle::File file) const delete dev; return exists; } + +quint32 Bundle::crcFile(enum Bundle::File file) const +{ + quint32 ret = 0; + + switch (file) { + case Bundle::BINARY: + ret = b->manifest.value(type()).toObject().value("crc").toDouble(); + break; + case Bundle::RESOURCES: + ret = b->manifest.value("resources").toObject().value("crc").toDouble(); + break; + default: + qCWarning(l) << "Unsupported CRC for" << file; + } + + return ret; +} diff --git a/daemon/bundle.h b/daemon/bundle.h index c2dc86b..1b77c94 100644 --- a/daemon/bundle.h +++ b/daemon/bundle.h @@ -36,6 +36,7 @@ public: QIODevice *openFile(enum File, QIODevice::OpenMode = 0) const; bool fileExists(enum File) const; + quint32 crcFile(enum File) const; private: QSharedDataPointer<BundleData> b; diff --git a/daemon/daemon.pro b/daemon/daemon.pro index 4d693ae..40d3290 100644 --- a/daemon/daemon.pro +++ b/daemon/daemon.pro @@ -28,7 +28,6 @@ SOURCES += \ packer.cpp \ bankmanager.cpp \ uploadmanager.cpp \ - stm32crc.cpp \ bundle.cpp HEADERS += \ @@ -50,7 +49,6 @@ HEADERS += \ packer.h \ bankmanager.h \ uploadmanager.h \ - stm32crc.h \ bundle.h DBUS_ADAPTORS += ../org.pebbled.Watch.xml diff --git a/daemon/manager.cpp b/daemon/manager.cpp index 345fb1d..db183bd 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -376,14 +376,14 @@ bool Manager::uploadFirmware(bool recovery, const QString &file) return true; } - upload->uploadFirmwareResources(resourceFile.data(), + upload->uploadFirmwareResources(resourceFile.data(), bundle.crcFile(Bundle::RESOURCES), [this, recovery, bundle, resourceFile]() { qCDebug(l) << "firmware resource upload succesful"; resourceFile->close(); // Proceed to upload the resource file QSharedPointer<QIODevice> binaryFile(bundle.openFile(Bundle::BINARY)); if (binaryFile) { - upload->uploadFirmwareBinary(recovery, binaryFile.data(), + upload->uploadFirmwareBinary(recovery, binaryFile.data(), bundle.crcFile(Bundle::BINARY), [this, binaryFile]() { binaryFile->close(); qCDebug(l) << "firmware binary upload succesful"; diff --git a/daemon/uploadmanager.cpp b/daemon/uploadmanager.cpp index a894194..0751713 100644 --- a/daemon/uploadmanager.cpp +++ b/daemon/uploadmanager.cpp @@ -1,7 +1,6 @@ #include "uploadmanager.h" #include "unpacker.h" #include "packer.h" -#include "stm32crc.h" static const int CHUNK_SIZE = 2000; using std::function; @@ -21,7 +20,7 @@ UploadManager::UploadManager(WatchConnector *watch, QObject *parent) : }); } -uint UploadManager::upload(WatchConnector::UploadType type, int index, const QString &filename, QIODevice *device, int size, +uint UploadManager::upload(WatchConnector::UploadType type, int index, const QString &filename, QIODevice *device, int size, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) { PendingUpload upload; @@ -36,6 +35,7 @@ uint UploadManager::upload(WatchConnector::UploadType type, int index, const QSt upload.size = size; } upload.remaining = upload.size; + upload.crc = crc; upload.successCallback = successCallback; upload.errorCallback = errorCallback; upload.progressCallback = progressCallback; @@ -57,30 +57,30 @@ uint UploadManager::upload(WatchConnector::UploadType type, int index, const QSt return upload.id; } -uint UploadManager::uploadAppBinary(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) +uint UploadManager::uploadAppBinary(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) { - return upload(WatchConnector::uploadBINARY, slot, QString(), device, -1, successCallback, errorCallback, progressCallback); + return upload(WatchConnector::uploadBINARY, slot, QString(), device, -1, crc, successCallback, errorCallback, progressCallback); } -uint UploadManager::uploadAppResources(int slot, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) +uint UploadManager::uploadAppResources(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) { - return upload(WatchConnector::uploadRESOURCES, slot, QString(), device, -1, successCallback, errorCallback, progressCallback); + return upload(WatchConnector::uploadRESOURCES, slot, QString(), device, -1, crc, successCallback, errorCallback, progressCallback); } -uint UploadManager::uploadFile(const QString &filename, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) +uint UploadManager::uploadFile(const QString &filename, QIODevice *device, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) { Q_ASSERT(!filename.isEmpty()); - return upload(WatchConnector::uploadFILE, 0, filename, device, -1, successCallback, errorCallback, progressCallback); + return upload(WatchConnector::uploadFILE, 0, filename, device, -1, crc, successCallback, errorCallback, progressCallback); } -uint UploadManager::uploadFirmwareBinary(bool recovery, QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) +uint UploadManager::uploadFirmwareBinary(bool recovery, QIODevice *device, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) { - return upload(recovery ? WatchConnector::uploadRECOVERY : WatchConnector::uploadFIRMWARE, 0, QString(), device, -1, successCallback, errorCallback, progressCallback); + return upload(recovery ? WatchConnector::uploadRECOVERY : WatchConnector::uploadFIRMWARE, 0, QString(), device, -1, crc, successCallback, errorCallback, progressCallback); } -uint UploadManager::uploadFirmwareResources(QIODevice *device, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) +uint UploadManager::uploadFirmwareResources(QIODevice *device, quint32 crc, SuccessCallback successCallback, ErrorCallback errorCallback, ProgressCallback progressCallback) { - return upload(WatchConnector::uploadSYS_RESOURCES, 0, QString(), device, -1, successCallback, errorCallback, progressCallback); + return upload(WatchConnector::uploadSYS_RESOURCES, 0, QString(), device, -1, crc, successCallback, errorCallback, progressCallback); } void UploadManager::cancel(uint id, int code) @@ -146,7 +146,11 @@ void UploadManager::startNextUpload() p.writeCString(upload.filename); } - qCDebug(l) << "starting new upload, size:" << upload.remaining << ", type:" << upload.type << ", slot:" << upload.index; + qCDebug(l).nospace() << "starting new upload " << upload.id + << ", size:" << upload.remaining + << ", type:" << upload.type + << ", slot:" << upload.index + << ", crc:" << qPrintable(QString("0x%1").arg(upload.crc, 0, 16)); _state = StateWaitForToken; watch->sendMessage(WatchConnector::watchPUTBYTES, msg); @@ -267,7 +271,6 @@ bool UploadManager::uploadNextChunk(PendingUpload &upload) watch->sendMessage(WatchConnector::watchPUTBYTES, msg); upload.remaining -= chunk.size(); - upload.crc.addData(chunk); qCDebug(l) << "remaining" << upload.remaining << "/" << upload.size << "bytes"; @@ -283,10 +286,9 @@ bool UploadManager::commit(PendingUpload &upload) Packer p(&msg); p.write<quint8>(WatchConnector::putbytesCOMMIT); p.write<quint32>(_token); - p.write<quint32>(upload.crc.result()); + p.write<quint32>(upload.crc); - qCDebug(l) << "commiting upload" << upload.id - << "with crc" << qPrintable(QString("0x%1").arg(upload.crc.result(), 0, 16)); + qCDebug(l) << "commiting upload" << upload.id; watch->sendMessage(WatchConnector::watchPUTBYTES, msg); diff --git a/daemon/uploadmanager.h b/daemon/uploadmanager.h index 22e4f80..316f55d 100644 --- a/daemon/uploadmanager.h +++ b/daemon/uploadmanager.h @@ -4,7 +4,6 @@ #include <functional> #include <QQueue> #include "watchconnector.h" -#include "stm32crc.h" class UploadManager : public QObject { @@ -18,14 +17,14 @@ public: typedef std::function<void(int)> ErrorCallback; typedef std::function<void(qreal)> ProgressCallback; - uint upload(WatchConnector::UploadType type, int index, const QString &filename, QIODevice *device, int size = -1, + uint upload(WatchConnector::UploadType type, int index, const QString &filename, QIODevice *device, int size = -1, quint32 crc = 0, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); - uint uploadAppBinary(int slot, QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); - uint uploadAppResources(int slot, QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); - uint uploadFile(const QString &filename, QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); - uint uploadFirmwareBinary(bool recovery, QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); - uint uploadFirmwareResources(QIODevice *device, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); + uint uploadAppBinary(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); + uint uploadAppResources(int slot, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); + uint uploadFile(const QString &filename, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); + uint uploadFirmwareBinary(bool recovery, QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); + uint uploadFirmwareResources(QIODevice *device, quint32 crc, SuccessCallback successCallback = SuccessCallback(), ErrorCallback errorCallback = ErrorCallback(), ProgressCallback progressCallback = ProgressCallback()); void cancel(uint id, int code = 0); @@ -52,7 +51,7 @@ private: QIODevice *device; int size; int remaining; - Stm32Crc crc; + quint32 crc; SuccessCallback successCallback; ErrorCallback errorCallback; |
