瀏覽代碼

Z991239-5028 #comment feat: 升级支持设备安装

Signed-Off-By: commit-hook
刘文涛80174520 1 年之前
父節點
當前提交
656e05941f

+ 58 - 1
Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp

@@ -1129,6 +1129,13 @@ namespace Task
 			rootReq["software_version"] = strInstallVersion.GetData();
 			rootReq["os_version"] = strOSVersion.GetData();
 			rootReq["machine_version"] = strMachineVersion.GetData();
+			//预查询判断加入查询何种任务。
+			if (m_fsm->isTerminalInstall()) {
+				rootReq["task_type"] = "I";//安装任务
+			}
+			else {
+				rootReq["task_type"] = "U";//升级任务
+			}
 
 			string jsonReq = writer.write(rootReq);
 			qTempReq.m_reqStr = jsonReq;//请求参数
@@ -4750,6 +4757,11 @@ bool CUpgradeTaskFSM::DownloadFileWrite(byte* content,long contentLen,const char
 
 bool CUpgradeTaskFSM::CheckIfCanSwitchNow()
 {
+	//对于终端初始化安装时,直接通过。
+	if (isTerminalInstall()) {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CheckIfCanSwitchNow")("CheckIfCanSwitchNow terminal new install,return true");
+		return true;
+	}
 	//非重启操作,则直接可以进行切换,不用等待时机
 	if(m_currentTask.reboot_type == 0){
 		return true;
@@ -4960,7 +4972,15 @@ bool CUpgradeTaskFSM::isWork()
 		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI("isWork")("upgrade startFlag is true");
 		return true;
 	}
-
+	//判断是否在设备安装状态,不受一般升级影响
+	if (isTerminalInstall()) {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("isWork")("isTerminalInstall get TerminalStage is N");
+		return true;
+	}
+	else {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("isWork")("isTerminalInstall get TerminalStage is not N");
+	}
+	
 	//判断升级实体是否工作
 	//1.当有版本升级任务时,判断是否处于Guardian升级回退过程,如果已经升级成功或者回退成功,则开始工作,否则等待中
 	//2.当无任务或者非版本升级任务时,判断TerminalStage这个变量,非X状态,当A状态并且进入首页,则开始工作
@@ -5026,6 +5046,32 @@ bool CUpgradeTaskFSM::isAuthSucc() {
 		return false;
 	}
 }
+
+bool CUpgradeTaskFSM::isTerminalInstall() {
+	CSimpleStringA strValue;
+	if (m_pEntity->GetFunction()->GetSysVar("TerminalStage", strValue) == Error_Succeed) {
+		if (strValue.Compare("N") == 0) {
+			return true; //表示安装模式
+		}else{
+			return false;
+		}
+	}
+	else {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("isTerminalInstall")("isTerminalInstall get TerminalStage is error , default return fasle");
+		return false;//默认认为在升级状态
+	}
+}
+
+void CUpgradeTaskFSM::upgradeSuccStateBroadCast() {
+	UpgradeStateEvent stateEvent;
+	stateEvent.strPackName = m_currentTask.pack_name.GetData();
+	stateEvent.strExecID = m_currentTask.upgradeTaskId.GetData();
+	stateEvent.cInstallState = 'A';//表示成功状态
+	stateEvent.bSysInstall = false;
+	stateEvent.bLightPack = false;
+	stateEvent.strNewVersion = m_currentTask.NewVersion;
+	SpSendBroadcast(m_pEntity->GetFunction(), eMsg_UpgradeStateEvent, eMsgSig_UpgradeStateEvent, stateEvent);
+}
 #ifdef RVC_OS_WIN
 #else
 int CUpgradeTaskFSM::changeFileAtt(const char* path)
@@ -5303,6 +5349,7 @@ unsigned int CUpgradeTaskFSM::s2_on_event(FSMEvent* event)
 					up.cInstallState  = "A";
 					up.strInstallComment  = "启动成功";
 					SendUpgradeTaskProgress(up);
+					upgradeSuccStateBroadCast();//广播告知升级成功
 					if(m_currentTask.NewVersion.IsNullOrEmpty()){
 						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(UpgradeMgr_OUTSIDE_SYSTEM_START_ID)("体系外升级启动成功");
 					}else{
@@ -5865,6 +5912,11 @@ unsigned int CUpgradeTaskFSM::s5_on_event(FSMEvent* event)
 					}
 				}
 			}
+			//对于终端初始化安装时,直接通过。
+			if (isTerminalInstall()) {
+				doInstall = true;
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s5 create InstallPackTask terminal new install");
+			}
 
 			if (doInstall)
 			{
@@ -5919,6 +5971,11 @@ unsigned int CUpgradeTaskFSM::s5_on_event(FSMEvent* event)
 					}
 				}
 			}
+			//对于终端初始化安装时,直接通过。
+			if (isTerminalInstall()) {
+				doInstall = true;
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s5 create InstallPackTask terminal new install");
+			}
 
 			if (doInstall)
 			{

+ 3 - 7
Module/mod_UpgradeMgr/UpgradeTaskFSM.h

@@ -328,13 +328,10 @@ public:
 	}
 	~CUpgradeTaskFSM(){}
 	//具体实现方法
-	//ErrorCodeEnum UpdatePackInstall(string updatePackName,CSimpleStringA &strErrMsg);//系统升级包安装
 	ErrorCodeEnum CreateNewVersion(CVersion NewSoftwareVersion,CSimpleStringA &strErrInfo);//创建新版本
 	ErrorCodeEnum ClearUpgradeFailVersion(CVersion NewSoftwareVersion);//清理升级新版本临时文件
-	//int SysPackInstall(string sysPackName, CSimpleStringA &strErrMsg);//体系外升级包安装 0:失败 1:成功 -1:未知
 	bool GetSysUpgradeResult(const char *pszResultLog, CSimpleStringA &eErrorCode, CSimpleStringA &strErrMsg);//从体系外生成的result.log文件中获取结果
-	//ErrorCodeEnum LightPackInstall(string LightPackName, CSimpleStringA &strErrMsg);//轻量升级包安装
-
+	
 	//安装执行步骤方法
 	int ExecInstall(CSimpleStringA &strErrMsg);//升级安装 0:失败 1:成功 -1:未知
 	int ExecRunCmd(CSimpleStringA &strErrMsg,CInstallStep* ins);
@@ -345,12 +342,10 @@ public:
 
 
 
-	//ErrorCodeEnum CopyFileToNewVersion(string updatePackPath,const char *pszRelativeFile,const char * newVersion, int nCopyMode);//拷贝增量文件到新版本
 	ErrorCodeEnum SetRunSucceed(const char* pPackFile);//成功切换新版本
 	ErrorCodeEnum UpgradeToNewVersion();//设置新版本状态
 	ErrorCodeEnum RollBackToHistoryVersion(CVersion historyVersion);//回退到某个历史版本
 	
-	//ErrorCodeEnum CopyFolder(CSimpleStringA strSourcePath, CSimpleStringA strDestPath);
 	void RecursiveGetSubFiles(const char *pszDir, const char *pszTrimStart, list<CSimpleStringA>& retList);
 	bool IsFileMatch(const char *pszFilter, const char *pszFileName);
 	bool RecursiveCopyDir(const char *pszSourceDir, const char *pszDestDir,CSimpleStringA &strErrInfo);//可以合并
@@ -383,7 +378,6 @@ public:
 
 	bool GetFileLength(const char* filePath,long &fileLen);//获取文件长度
 	ErrorCodeEnum GetSM3List(CSimpleStringA &strSM3List);//获取版本文件hash集合字符串
-	//ErrorCodeEnum SM3Folder(CSimpleStringA strFolderPath,CSimpleStringA replaceStr,CSimpleStringA prefix,bool isDepDir=false);
 	ErrorCodeEnum ScanSM3ByType(int type,CSimpleStringA pathFilter);
 	ErrorCodeEnum NewSM3Folder(CSimpleStringA scanFilter,CSimpleStringA replaceDir);//新的hash扫描文件夹实现
 
@@ -407,6 +401,8 @@ public:
 
 	bool isWork();
 	bool isAuthSucc();
+	bool isTerminalInstall();
+	void upgradeSuccStateBroadCast();
 #ifdef RVC_OS_WIN
 #else
 	int changeFileAtt(const char* path);

+ 10 - 2
Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp

@@ -44,7 +44,15 @@ namespace Task
 			LOG_FUNCTION();
 
 			Mgr->bNewUpgradeMgr = true;//默认新模式
-			LogWarn(Severity_Low, Error_Exception, WARN_TASK_START_NEW_MODE, "init new upgradeTaskMgr");
+			CSystemStaticInfo info;
+			ErrorCodeEnum Err = Mgr->GetFunction()->GetSystemStaticInfo(info);
+			if (Err != Error_Succeed) {
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("InitFSMTask")("load GetSystemStaticInfo fail ");
+				LogWarn(Severity_Low, Error_Exception, WARN_TASK_START_NEW_MODE, "init new upgradeTaskMgr");
+			}
+			else {
+				LogWarn(Severity_Low, Error_Exception, WARN_TASK_START_NEW_MODE, CSimpleStringA::Format("init new upgradeTaskMgr, version = %s",info.InstallVersion.ToString().GetData()).GetData());
+			}
 
 
 			if(Mgr->bNewUpgradeMgr){
@@ -420,7 +428,7 @@ ErrorCodeEnum CUpgradeMgrEntity::NewStopMediaPlay()
 		//采用新接口停止所有音视频播放
 		LocalMediaPlay::PlayService_StopPlayAllMedias_Req req1 = {};
 		LocalMediaPlay::PlayService_StopPlayAllMedias_Ans ans1 = {};
-		if (Error_Succeed == pClient->StopPlayAllMedias(req1, ans1, 10000))
+		if (Error_Succeed == (*pClient)(EntityResource::getLink().upgradeLink())->StopPlayAllMedias(req1, ans1, 10000))
 		{
 			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI("NewStopMediaPlay")("StopPlayAllMedias success");
 		}else{