/* * Copyright (c) 2023 Fancy Code. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "HuntingUpgradeImpl.h" #include "ILog.h" #include "StatusCode.h" #include "UpgradeBase.h" #include #include #include StatusCode HuntingUpgradeImpl::CheckFileHeader(const UpgradeFileHeader &head) { if (CheckVersion(head) == false) { LogError("Check version failed.\n"); return CreateStatusCode(STATUS_CODE_NOT_OK); } return CreateStatusCode(STATUS_CODE_OK); } StatusCode HuntingUpgradeImpl::CheckUpgradeFile(void) { UpgradeFileHeader header; StatusCode code = UpgradeBase::CheckUpgradeFile(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH, header); if (!IsCodeOK(code)) { LogWarning("Check upgrade file:not found.\n"); return CreateStatusCode(STATUS_CODE_NOT_OK); } 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; }