From 844ecd7e8b743dbb938f7725d0a68469f6fbe1cf Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Sat, 18 May 2024 11:33:51 +0800 Subject: [PATCH] Improve:HuntingUpgrade. --- .../HuntingUpgrade/src/HuntingUpgradeImpl.cpp | 44 +++++++++++++------ .../HuntingUpgrade/src/HuntingUpgradeImpl.h | 5 ++- .../tool/src/HuntingUpgradeTestTool.cpp | 2 +- utils/UpgradeTool/src/UpgradeTool.cpp | 2 +- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp b/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp index 78a0e8b..e69bc78 100644 --- a/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp +++ b/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp @@ -19,21 +19,10 @@ #include StatusCode HuntingUpgradeImpl::CheckFileHeader(const UpgradeFileHeader &head) { - constexpr int VERSION_BUFF_LENGTH = 36; - char versionStr[VERSION_BUFF_LENGTH] = {0}; - memcpy(versionStr, HUNTING_CAMERA_VERSION, strlen(HUNTING_CAMERA_VERSION)); - unsigned char versionChar[VERSION_LENGTH] = {0}; - char *token; - int i = 0; - token = strtok(versionStr, "."); - while (token != NULL && i < VERSION_LENGTH) { - versionChar[i] = atoi(token); - token = strtok(NULL, "."); - i++; + if (CheckVersion(head) == false) { + LogError("Check version failed.\n"); + return CreateStatusCode(STATUS_CODE_NOT_OK); } - // for (int j = 0; j < VERSION_LENGTH; j++) { - // printf("0x%X\n", versionChar[j]); - // } return CreateStatusCode(STATUS_CODE_OK); } StatusCode HuntingUpgradeImpl::CheckUpgradeFile(void) @@ -46,4 +35,31 @@ StatusCode HuntingUpgradeImpl::CheckUpgradeFile(void) } UpgradeBase::MoveUpgradeFile(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH, APPLICATION_UPGRADE_PATH); return code; +} +bool HuntingUpgradeImpl::CheckVersion(const UpgradeFileHeader &head) +{ + constexpr int VERSION_BUFF_LENGTH = 36; + char versionStr[VERSION_BUFF_LENGTH] = {0}; + memcpy(versionStr, HUNTING_CAMERA_VERSION, strlen(HUNTING_CAMERA_VERSION)); + unsigned char versionOld[VERSION_LENGTH] = {0}; + char *token; + int i = 0; + token = strtok(versionStr, "."); + while (token != NULL && i < VERSION_LENGTH) { + versionOld[i] = atoi(token); + token = strtok(NULL, "."); + i++; + } + unsigned long long oldVersionNum = 0; + unsigned long long newVersionNum = 0; + for (int j = 0; j < VERSION_LENGTH; j++) { + LogInfo("0x%X\n", versionOld[j]); + oldVersionNum += versionOld[j] * 10 * (i + 1); + newVersionNum += head.version[j] * 10 * (i + 1); + } + if (oldVersionNum >= newVersionNum) { + LogError("Version is too low.\n"); + return false; + } + return true; } \ No newline at end of file diff --git a/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.h b/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.h index 5b54b9a..9d19d95 100644 --- a/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.h +++ b/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.h @@ -14,9 +14,9 @@ */ #ifndef HUNTING_UPGRADE_H #define HUNTING_UPGRADE_H +#include "IHuntingUpgrade.h" #include "StatusCode.h" #include "UpgradeBase.h" -#include "IHuntingUpgrade.h" #include class HuntingUpgradeImpl : public UpgradeBase, public IHuntingUpgrade { @@ -25,5 +25,8 @@ public: virtual ~HuntingUpgradeImpl() = default; StatusCode CheckFileHeader(const UpgradeFileHeader &head) override; StatusCode CheckUpgradeFile(void) override; + +private: + bool CheckVersion(const UpgradeFileHeader &head); }; #endif \ No newline at end of file diff --git a/test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp b/test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp index 7af6822..d547406 100644 --- a/test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp +++ b/test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp @@ -36,7 +36,7 @@ void HuntingUpgradeTestTool::CreateUpgradeFile(void) fx_system("touch " SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test"); UpgradeTool::GetInstance()->PackFile(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test", SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH, - "1.0.0.0", + "6.4.5.6", "hunting", "dgiot", "app"); diff --git a/utils/UpgradeTool/src/UpgradeTool.cpp b/utils/UpgradeTool/src/UpgradeTool.cpp index 7fffe27..d84e188 100644 --- a/utils/UpgradeTool/src/UpgradeTool.cpp +++ b/utils/UpgradeTool/src/UpgradeTool.cpp @@ -56,7 +56,7 @@ bool UpgradeTool::StringToVersionBytes(const std::string &versionString, unsigne } result[index++] = static_cast(value); - printf("================ version[%d]: %02x\n", index, result[index - 1]); + printf("version[%d]: %02x\n", index, result[index - 1]); } if (index != 4) {