diff --git a/services/firmware/upgrade/install/include/firmware_sys_installer_install.h b/services/firmware/upgrade/install/include/firmware_sys_installer_install.h index 65954ee77d48360ece157a668e1b5eb09161d4a4..07e45338cbb8260b6413cd43a5e6e13179fe0c9e 100644 --- a/services/firmware/upgrade/install/include/firmware_sys_installer_install.h +++ b/services/firmware/upgrade/install/include/firmware_sys_installer_install.h @@ -39,6 +39,11 @@ private: void InitInstallProgress(); int32_t WaitInstallResult(); + int32_t InitSysInstaller(); + int32_t SetSysInstallerCallback(const FirmwareComponent &firmwareComponent); + int32_t DoNormalSysInstaller(const FirmwareComponent &firmwareComponent); + int32_t StartUpdatePackageZip(const std::string &path); + private: Progress sysInstallProgress_; }; diff --git a/services/firmware/upgrade/install/src/firmware_sys_installer_install.cpp b/services/firmware/upgrade/install/src/firmware_sys_installer_install.cpp index 826e131332c323b08b0de742a39d7f25e4cad57e..8ef2f30bc18a5ebe0b75932e7f9284d32c8e698c 100644 --- a/services/firmware/upgrade/install/src/firmware_sys_installer_install.cpp +++ b/services/firmware/upgrade/install/src/firmware_sys_installer_install.cpp @@ -58,6 +58,51 @@ int32_t SysInstallerInstall::DoSysInstall(const FirmwareComponent &firmwareCompo FIRMWARE_LOGI("DoSysInstall, status=%{public}d", firmwareComponent.status); FirmwareComponent sysComponent = firmwareComponent; InitInstallProgress(); + + int32_t updateStatus = SysInstaller::SysInstallerKitsImpl::GetInstance().GetUpdateStatus(); + FIRMWARE_LOGI("DoSysInstall, getUpdateStatus=%{public}d", updateStatus); + int32_t ret = OHOS_SUCCESS; + switch (updateStatus) { + case -1: // -1 未初始化(或失败) 0 初始化 , 走正常流程 + case CAST_INT(SysInstaller::UpdateStatus::UPDATE_STATE_INIT): + ret = DoNormalSysInstaller(sysComponent); + break; + case CAST_INT(SysInstaller::UpdateStatus::UPDATE_STATE_SUCCESSFUL): + errMsg_.errorMessage = "sys installer success"; + errMsg_.errorCode = OHOS_SUCCESS; + return OHOS_SUCCESS; + case CAST_INT(SysInstaller::UpdateStatus::UPDATE_STATE_FAILED): + errMsg_.errorMessage = "sys installer failed"; + errMsg_.errorCode = OHOS_FAILURE; + return OHOS_FAILURE; + case CAST_INT(SysInstaller::UpdateStatus::UPDATE_STATE_ONGOING): + ret = SetSysInstallerCallback(sysComponent); + break; + default: + errMsg_.errorMessage = "sys installer Status is error"; + errMsg_.errorCode = OHOS_FAILURE; + return OHOS_FAILURE; + } + + if (ret != OHOS_SUCCESS) { + return ret; + } + return WaitInstallResult(); +} + +int32_t SysInstallerInstall::DoNormalSysInstaller(const FirmwareComponent &firmwareComponent) +{ + FirmwareComponent sysComponent = firmwareComponent; + if (InitSysInstaller() != OHOS_SUCCESS || SetSysInstallerCallback(sysComponent) != OHOS_SUCCESS || + StartUpdatePackageZip(sysComponent.spath) != OHOS_SUCCESS) { + return OHOS_FAILURE; + } + FIRMWARE_LOGI("DoSysInstall, DoNormalSysInstaller success"); + return OHOS_SUCCESS; +} + +int32_t SysInstallerInstall::InitSysInstaller() +{ int32_t ret = SysInstaller::SysInstallerKitsImpl::GetInstance().SysInstallerInit(); if (ret != OHOS_SUCCESS) { FIRMWARE_LOGE("sys installer init failed"); @@ -65,15 +110,13 @@ int32_t SysInstallerInstall::DoSysInstall(const FirmwareComponent &firmwareCompo errMsg_.errorCode = DUPDATE_ERR_IPC_ERROR; return OHOS_FAILURE; } + FIRMWARE_LOGI("DoSysInstall InitSysInstaller success"); + return OHOS_SUCCESS; +} - int32_t updateStatus = SysInstaller::SysInstallerKitsImpl::GetInstance().GetUpdateStatus(); - if (updateStatus != CAST_INT(SysInstaller::UpdateStatus::UPDATE_STATE_INIT)) { - FIRMWARE_LOGE("StartUnpack status: %{public}d , system busy", updateStatus); - errMsg_.errorMessage = "sys installer is busy"; - errMsg_.errorCode = ret; - return OHOS_FAILURE; - } - +int32_t SysInstallerInstall::SetSysInstallerCallback(const FirmwareComponent &firmwareComponent) +{ + FirmwareComponent sysComponent = firmwareComponent; SysInstallerExecutorCallback callback { [&](const InstallProgress &installProgress) { sysInstallProgress_ = installProgress.progress; errMsg_ = installProgress.errMsg; @@ -81,8 +124,13 @@ int32_t SysInstallerInstall::DoSysInstall(const FirmwareComponent &firmwareCompo sysComponent.progress = installProgress.progress.percent; FIRMWARE_LOGI("SysInstallerExecutorCallback status=%{public}d , progress=%{public}d", sysComponent.status, sysComponent.progress); + if (onInstallCallback_.onFirmwareProgress == nullptr) { + FIRMWARE_LOGE("SysInstallerExecutorCallback onFirmwareProgress is null"); + return; + } onInstallCallback_.onFirmwareProgress(sysComponent); } }; + sptr cb = new SysInstallerCallback(callback); if (cb == nullptr) { FIRMWARE_LOGE("sys installer callback is nullptr"); @@ -91,22 +139,28 @@ int32_t SysInstallerInstall::DoSysInstall(const FirmwareComponent &firmwareCompo return OHOS_FAILURE; } - ret = SysInstaller::SysInstallerKitsImpl::GetInstance().SetUpdateCallback(cb); + int32_t ret = SysInstaller::SysInstallerKitsImpl::GetInstance().SetUpdateCallback(cb); if (ret != OHOS_SUCCESS) { FIRMWARE_LOGE("set sys installer callback failed"); errMsg_.errorMessage = "set sys installer callback failed"; errMsg_.errorCode = ret; return OHOS_FAILURE; } + FIRMWARE_LOGI("DoSysInstall SetSysInstallerCallback success"); + return OHOS_SUCCESS; +} - ret = SysInstaller::SysInstallerKitsImpl::GetInstance().StartUpdatePackageZip(sysComponent.spath); +int32_t SysInstallerInstall::StartUpdatePackageZip(const std::string &path) +{ + auto ret = SysInstaller::SysInstallerKitsImpl::GetInstance().StartUpdatePackageZip(path); if (ret != OHOS_SUCCESS) { errMsg_.errorMessage = "sys installer StartUpdatePackageZip failed"; errMsg_.errorCode = ret; FIRMWARE_LOGE("sys installer StartUpdatePackageZip failed ret = %{public}d", ret); return OHOS_FAILURE; } - return WaitInstallResult(); + FIRMWARE_LOGI("DoSysInstall StartUpdatePackageZip success"); + return ret; } void SysInstallerInstall::InitInstallProgress()