diff --git a/services/include/updater/updater.h b/services/include/updater/updater.h index a04ff3b0f6227cb5c242547716b9d84168675925..99e0a829e6f798998a2a75f8c9c67cc4f96edb16 100644 --- a/services/include/updater/updater.h +++ b/services/include/updater/updater.h @@ -47,7 +47,9 @@ enum NotifyAction { SET_INSTALL_STATUS, GET_INSTALL_STATUS, SET_UPDATE_STATUS, - GET_UPDATE_STATUS + GET_UPDATE_STATUS, + SEND_LOG, + RECEIVE_LOG }; struct UpdaterParams { diff --git a/services/updater_main.cpp b/services/updater_main.cpp index 71711ad1e09ced89ac56bd6f00978eab4690a747..96cb87294daf32ec9c6a114f53f77c9446d344ad 100644 --- a/services/updater_main.cpp +++ b/services/updater_main.cpp @@ -615,17 +615,6 @@ static int CheckMountData() return UPDATE_ERROR; } -static UpdaterStatus CheckVerifyPackages(UpdaterParams &upParams) -{ - UpdaterStatus status = UPDATE_SUCCESS; - if (NotifyActionResult(upParams, status, {PROCESS_PACKAGE, SET_INSTALL_STATUS, GET_INSTALL_STATUS}) != - UPDATE_SUCCESS) { - LOG(ERROR) << "notify action fail"; - return UPDATE_CORRUPT; - } - return status; -} - static UpdaterStatus VerifyCommonFiles(UpdaterParams &upParams) { if (upParams.updateBin.size() > 0) { @@ -704,10 +693,6 @@ static UpdaterStatus PreUpdatePackages(UpdaterParams &upParams) return UPDATE_ERROR; } #endif - if (CheckVerifyPackages(upParams) != UPDATE_SUCCESS) { - LOG(ERROR) << "verify packages fail"; - return UPDATE_CORRUPT; - } return UPDATE_SUCCESS; } @@ -952,10 +937,6 @@ static UpdaterStatus PreSdcardUpdatePackages(UpdaterParams &upParams) return UPDATE_ERROR; } #endif - if (CheckVerifyPackages(upParams) != UPDATE_SUCCESS) { - LOG(ERROR) << "verify packages fail"; - return UPDATE_CORRUPT; - } return UPDATE_SUCCESS; } @@ -972,6 +953,7 @@ UpdaterStatus UpdaterFromSdcard(UpdaterParams &upParams) upParams.callbackProgress = [] (float value) { UPDATER_UI_INSTANCE.ShowProgress(value); }; SetMessageToMisc(upParams.miscCmd, 0, "sdcard_update"); UpdaterStatus status = CheckSdcardPkgs(upParams); + NotifyPreCheck(status, upParams); if (status != UPDATE_SUCCESS) { LOG(ERROR) << "can not find sdcard packages"; if (NotifyActionResult(upParams, status, {SET_INSTALL_STATUS, @@ -989,8 +971,6 @@ UpdaterStatus UpdaterFromSdcard(UpdaterParams &upParams) LOG(INFO) << "UpdaterFromSdcard start, sdcard updaterPath : " << upParams.updatePackage[upParams.pkgLocation]; UPDATER_UI_INSTANCE.ShowLog(TR(LOG_SDCARD_NOTMOVE)); status = DoUpdatePackages(upParams); - } else if (NotifyActionResult(upParams, status, {SET_UPDATE_STATUS, GET_UPDATE_STATUS}) != UPDATE_SUCCESS) { - LOG(ERROR) << "notify action fail"; } PostSdcardUpdatePackages(upParams, status == UPDATE_SUCCESS); return status; @@ -1012,10 +992,9 @@ UpdaterStatus InstallUpdaterPackages(UpdaterParams &upParams) { UpdaterInit::GetInstance().InvokeEvent(UPDATER_PRE_UPDATE_PACKAGE_EVENT); UpdaterStatus status = PreUpdatePackages(upParams); + NotifyPreCheck(status, upParams); if (status == UPDATE_SUCCESS) { status = DoUpdatePackages(upParams); - } else if (NotifyActionResult(upParams, status, {SET_UPDATE_STATUS, GET_UPDATE_STATUS}) != UPDATE_SUCCESS) { - LOG(ERROR) << "notify action fail"; } PostUpdatePackages(upParams, status == UPDATE_SUCCESS); UpdaterInit::GetInstance().InvokeEvent(UPDATER_POST_UPDATE_PACKAGE_EVENT); @@ -1098,6 +1077,10 @@ UpdaterStatus DoUpdaterEntry(UpdaterParams &upParams) status = InstallUpdaterPackages(upParams); } else if (upParams.updateMode == SUBPKG_UPDATE) { UPDATER_UI_INSTANCE.ShowProgressPage(); + if (CheckMountData() != 0) { + LOG(ERROR) << "subpkg update mount data fail"; + return UPDATE_ERROR; + } status = UpdateSubPkg(upParams); if (status == UPDATE_SUCCESS) { UPDATER_UI_INSTANCE.ShowSuccessPage(); @@ -1212,7 +1195,9 @@ std::unordered_map> InitOptionsFuncTab(char* }}, {"subpkg_update", [&]() -> void { + (void)UPDATER_UI_INSTANCE.SetMode(UPDATERMODE_OTA); upParams.updateMode = SUBPKG_UPDATE; + mode = HOTA_UPDATE; }} }; return optionsFuncTab; @@ -1311,6 +1296,37 @@ void RebootAfterUpdateSuccess(const UpdaterParams &upParams) NotifyReboot("", "Updater update success"); } +__attribute__((weak)) void ProcessLogs() +{ + return; +} + +void ProcessUpdateResult(PackageUpdateMode &mode, UpdaterStatus &status, UpdaterParams &upParams) +{ + if (mode == HOTA_UPDATE) { + UPDATER_UI_INSTANCE.ShowFailedPage(); + UpdaterInit::GetInstance().InvokeEvent(UPDATER_POST_INIT_EVENT); + if (upParams.forceReboot) { + Utils::UsSleep(5 * DISPLAY_TIME); // 5 : 5s + PostUpdater(true); + NotifyReboot("", "Updater night update fail"); + } + } else if (mode == SDCARD_UPDATE) { + UPDATER_UI_INSTANCE.ShowLogRes( + status == UPDATE_CORRUPT ? TR(LOGRES_VERIFY_FAILED) : TR(LOGRES_UPDATE_FAILED)); + UPDATER_UI_INSTANCE.ShowFailedPage(); + } else if (upParams.factoryResetMode == "user_wipe_data" || + upParams.factoryResetMode == "menu_wipe_data" || upParams.factoryResetMode == "factory_wipe_data") { + UPDATER_UI_INSTANCE.ShowFailedPage(); + } else if (CheckUpdateMode(USB_UPDATE_FAIL)) { + (void)UPDATER_UI_INSTANCE.SetMode(UPDATERMODE_USBUPDATE); + UPDATER_UI_INSTANCE.ShowFailedPage(); + } else { + UPDATER_UI_INSTANCE.ShowMainpage(); + UPDATER_UI_INSTANCE.SaveScreen(); + } +} + int UpdaterMain(int argc, char **argv) { [[maybe_unused]] UpdaterStatus status = UPDATE_UNKNOWN; @@ -1318,7 +1334,6 @@ int UpdaterMain(int argc, char **argv) upParams.callbackProgress = [] (float value) { UPDATER_UI_INSTANCE.ShowProgress(value); }; UpdaterInit::GetInstance().InvokeEvent(UPDATER_PRE_INIT_EVENT); std::vector args = ParseParams(argc, argv); - LOG(INFO) << "Ready to start"; #if !defined(UPDATER_UT) && defined(UPDATER_UI_SUPPORT) UPDATER_UI_INSTANCE.InitEnv(); @@ -1329,28 +1344,10 @@ int UpdaterMain(int argc, char **argv) #if !defined(UPDATER_UT) && defined(UPDATER_UI_SUPPORT) UPDATER_UI_INSTANCE.Sleep(UI_SHOW_DURATION); if (status != UPDATE_SUCCESS && status != UPDATE_SKIP) { - if (mode == HOTA_UPDATE) { - UPDATER_UI_INSTANCE.ShowFailedPage(); - UpdaterInit::GetInstance().InvokeEvent(UPDATER_POST_INIT_EVENT); - if (upParams.forceReboot) { - Utils::UsSleep(5 * DISPLAY_TIME); // 5 : 5s - PostUpdater(true); - NotifyReboot("", "Updater night update fail"); - return 0; - } - } else if (mode == SDCARD_UPDATE) { - UPDATER_UI_INSTANCE.ShowLogRes( - status == UPDATE_CORRUPT ? TR(LOGRES_VERIFY_FAILED) : TR(LOGRES_UPDATE_FAILED)); - UPDATER_UI_INSTANCE.ShowFailedPage(); - } else if (upParams.factoryResetMode == "user_wipe_data" || - upParams.factoryResetMode == "menu_wipe_data" || upParams.factoryResetMode == "factory_wipe_data") { - UPDATER_UI_INSTANCE.ShowFailedPage(); - } else if (CheckUpdateMode(USB_UPDATE_FAIL)) { - (void)UPDATER_UI_INSTANCE.SetMode(UPDATERMODE_USBUPDATE); - UPDATER_UI_INSTANCE.ShowFailedPage(); - } else { - UPDATER_UI_INSTANCE.ShowMainpage(); - UPDATER_UI_INSTANCE.SaveScreen(); + ProcessLogs(); + ProcessUpdateResult(mode, status, upParams); + if (mode == HOTA_UPDATE && upParams.forceReboot) { + return 0; } // Wait for user input NotifyAutoReboot(mode); diff --git a/services/updater_main.h b/services/updater_main.h index 683a5cadd02da9de81d3570f923a08adffc89abb..524c5380646ddfc91586b9e4014e3735e432e3e2 100644 --- a/services/updater_main.h +++ b/services/updater_main.h @@ -23,7 +23,6 @@ #include "updater_init.h" namespace Updater { -using namespace Hpackage; enum FactoryResetMode { USER_WIPE_DATA = 0, FACTORY_WIPE_DATA, @@ -61,7 +60,9 @@ bool IsDouble(const std::string& str); UpdaterStatus InstallUpdaterPackages(UpdaterParams &upParams); -int OtaUpdatePreCheck(PkgManager::PkgManagerPtr pkgManager, const std::string &packagePath); +int OtaUpdatePreCheck(Hpackage::PkgManager::PkgManagerPtr pkgManager, const std::string &packagePath); + +void ProcessUpdateResult(PackageUpdateMode &mode, UpdaterStatus &status, UpdaterParams &upParams); #ifdef __cplusplus #if __cplusplus @@ -82,6 +83,7 @@ void NotifyReboot(const std::string& rebootTarget, const std::string &rebootReas UpdaterStatus NotifyActionResult(UpdaterParams &upParams, UpdaterStatus &status, const std::vector ¬ifyActionVec); UpdaterStatus UpdateSubPkg(UpdaterParams &upParams); +void ProcessLogs(); void NotifyPreCheck(UpdaterStatus &status, UpdaterParams &upParams); #ifdef __cplusplus #if __cplusplus diff --git a/utils/write_updater.cpp b/utils/write_updater.cpp index a37cf0fb8ec49822f0a6c5192b1414df0d4891a7..4e53b29b31bc5f22ec19645e8c9ab9480d5b452a 100644 --- a/utils/write_updater.cpp +++ b/utils/write_updater.cpp @@ -40,6 +40,8 @@ static void PrintPrompts() cout << "clear command : write_updater clear" << endl; cout << "updater_para : write_updater updater_para" << endl; cout << "intral_update : write_updater ota_intral_update /data/updater/updater.zip" << endl; + cout << "subpkg_update : write_updater subpkg_update" << endl; + cout << "notify_update : write_updater notify_update" << endl; } static int ExceptionBin(int argc, char **argv, UpdateMessage &boot) @@ -121,13 +123,9 @@ static int HandleCommand(int argc, char** argv, struct UpdateMessage& boot, stru { if (strcmp(argv[1], "bin") == 0) { // 执行流式bin文件升级 - if (ExceptionBin(argc, argv, boot) == -1) { - return -1; - } + return ExceptionBin(argc, argv, boot); } else if (strcmp(argv[1], "updater") == 0) { - if (ExceptionUpdater(argc, argv, boot) == -1) { - return -1; - } + return ExceptionUpdater(argc, argv, boot); } else if (strcmp(argv[1], "user_factory_reset") == 0) { if (strncpy_s(boot.update, sizeof(boot.update), "--user_wipe_data", sizeof(boot.update) - 1) != 0) { cout << "strncpy_s failed!" << endl; @@ -157,6 +155,8 @@ static int HandleCommand(int argc, char** argv, struct UpdateMessage& boot, stru } } else if (strcmp(argv[1], "updater_para") == 0) { return WriteUpdaterPara(argc, para) != 0 ? -1 : 0; + } else if (strcmp(argv[1], "notify_update") == 0) { + return 0; } else { cout << "Please input correct command!" << endl; return -1;