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 62dd32521c0ba525e0a2a3097977ab9cf99a1c5a..cc5afad3a9506a713d3bb8948d217775b3bd576c 100644 --- a/services/firmware/upgrade/install/include/firmware_sys_installer_install.h +++ b/services/firmware/upgrade/install/include/firmware_sys_installer_install.h @@ -38,6 +38,9 @@ private: void InitInstallProgress(); int32_t WaitInstallResult(); + int32_t InitSysInstaller(); + int32_t SetSysInstallerCallback(const FirmwareComponent &firmwareComponent); + int32_t DoNormalSysInstaller(const FirmwareComponent &firmwareComponent); 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 19a480ff2622dcb092874738f159235c4597cc9c..a03afb1c1c6602570ba937dea6504e5a90b77022 100644 --- a/services/firmware/upgrade/install/src/firmware_sys_installer_install.cpp +++ b/services/firmware/upgrade/install/src/firmware_sys_installer_install.cpp @@ -62,6 +62,53 @@ 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(); + int32_t ret = OHOS_SUCCESS; + switch (updateStatus) { + 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; + case -1: + errMsg_.errorMessage = "sys installer service is off"; + errMsg_.errorCode = OHOS_FAILURE; + ret = OHOS_FAILURE; + 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; + } + return OHOS_SUCCESS; +} + +int32_t SysInstallerInstall::InitSysInstaller() +{ int32_t ret = SysInstaller::SysInstallerKitsImpl::GetInstance().SysInstallerInit(); if (ret != OHOS_SUCCESS) { FIRMWARE_LOGE("sys installer init failed"); @@ -69,15 +116,12 @@ int32_t SysInstallerInstall::DoSysInstall(const FirmwareComponent &firmwareCompo errMsg_.errorCode = DUPDATE_ERR_IPC_ERROR; return OHOS_FAILURE; } + 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; @@ -91,6 +135,7 @@ int32_t SysInstallerInstall::DoSysInstall(const FirmwareComponent &firmwareCompo } onInstallCallback_.onFirmwareProgress(sysComponent); } }; + sptr cb = new SysInstallerCallback(callback); if (cb == nullptr) { FIRMWARE_LOGE("sys installer callback is nullptr"); @@ -99,18 +144,14 @@ 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; } - - if (StartUpdatePackageZip(sysComponent.spath) != OHOS_SUCCESS) { - return OHOS_FAILURE; - } - return WaitInstallResult(); + return OHOS_SUCCESS; } int32_t SysInstallerInstall::StartUpdatePackageZip(std::string &path)