|
@@ -77,29 +77,9 @@ ErrorCodeEnum CHealthManagerFSM::Initial()
|
|
|
CSmartPointer<IAsynWaitSp> spWait;
|
|
|
|
|
|
ErrorCodeEnum err;
|
|
|
- CSimpleStringA cfgPath = "", strCoreBoot("CoreBoot"), strSafeLoad("SafeLoad"), strOp("Operating");
|
|
|
GetEntityBase()->GetFunction()->GetSystemStaticInfo(m_sysInfo);
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("machinetype[%s],terminalID[%s]", (LPCTSTR)m_sysInfo.strMachineType, (LPCTSTR)m_sysInfo.strTerminalID);
|
|
|
- strCoreBoot = strCoreBoot + "." + m_sysInfo.strMachineType;
|
|
|
- strSafeLoad = strSafeLoad + "." + m_sysInfo.strMachineType;
|
|
|
- strOp = strOp + "." + m_sysInfo.strMachineType;
|
|
|
- err = GetEntityBase()->GetFunction()->GetPath("cfg", cfgPath);
|
|
|
- cfgPath = cfgPath + SPLIT_SLASH_STR + "HealthManager.ini";
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("cfgpath[%s]", (const char*)cfgPath);
|
|
|
- ifstream is;
|
|
|
- is.open(cfgPath, ios::binary);
|
|
|
- if (!is.is_open())
|
|
|
- {
|
|
|
- DWORD dwErr = GetLastErrorRVC();
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("open cfg file failed. [%d]", dwErr);
|
|
|
- return Error_IO;
|
|
|
- }
|
|
|
- string line;
|
|
|
- long curr, end;
|
|
|
- is.seekg(0, ios_base::end);
|
|
|
- end = is.tellg();
|
|
|
- is.seekg(0, ios_base::beg);
|
|
|
- LoadStage eSection = LOADSTAGE_UNKNOWN;
|
|
|
+
|
|
|
CSmartPointer<IConfigInfo> spConfigCen;
|
|
|
GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spConfigCen);
|
|
|
m_AccessAuthTries = 4;
|
|
@@ -149,85 +129,6 @@ ErrorCodeEnum CHealthManagerFSM::Initial()
|
|
|
return Error_IO;
|
|
|
}
|
|
|
|
|
|
- int count, cbNum, slNum, opNum;
|
|
|
- count = cbNum = slNum = opNum = 0;
|
|
|
- do
|
|
|
- {
|
|
|
- getline(is, line);
|
|
|
- if (line[0] == '[')
|
|
|
- {
|
|
|
- size_t secEnd = line.find(']', 1);
|
|
|
- if (secEnd != string::npos)
|
|
|
- {
|
|
|
- string strSec = line.substr(1, secEnd - 1);
|
|
|
- if (StrEqualNoCase(strSec.c_str(), strCoreBoot, strSec.length()))
|
|
|
- eSection = LOADSTAGE_COREBOOT;
|
|
|
- else if (StrEqualNoCase(strSec.c_str(), strSafeLoad, strSec.length()))
|
|
|
- eSection = LOADSTAGE_SAFELOAD;
|
|
|
- else if (StrEqualNoCase(strSec.c_str(), strOp, strSec.length()))
|
|
|
- eSection = LOADSTAGE_OPERATING;
|
|
|
- else
|
|
|
- eSection = LOADSTAGE_UNKNOWN;
|
|
|
- }
|
|
|
- }
|
|
|
- else if (((unsigned)(line[0] + 1) > 256) || line[0] == ';')
|
|
|
- {//Chinese and other...
|
|
|
- curr = is.tellg();
|
|
|
- continue;
|
|
|
- }
|
|
|
- else if (isalpha(line[0]))
|
|
|
- {
|
|
|
- if (eSection == LOADSTAGE_UNKNOWN)
|
|
|
- {
|
|
|
- curr = is.tellg();
|
|
|
- continue;
|
|
|
- }
|
|
|
- size_t keyPos = line.find('=', 0);
|
|
|
- if (keyPos != string::npos)
|
|
|
- {
|
|
|
- string keyName = line.substr(0, keyPos);
|
|
|
- count++;
|
|
|
- switch (eSection)
|
|
|
- {
|
|
|
- case LOADSTAGE_COREBOOT:
|
|
|
- spConfig->ReadConfigValueInt(strCoreBoot, keyName.c_str(), m_coreBootOpt[keyName.c_str()].loadOpt);
|
|
|
- m_vCoreBoot.push_back(keyName.c_str());
|
|
|
- m_vAllCfgEntity.push_back(keyName.c_str());
|
|
|
- m_coreBootOpt[keyName.c_str()].eResult = LOADING_INIT;
|
|
|
- m_coreBootOpt[keyName.c_str()].initSn = cbNum;
|
|
|
- cbNum++;
|
|
|
- break;
|
|
|
- case LOADSTAGE_SAFELOAD:
|
|
|
- spConfig->ReadConfigValueInt(strSafeLoad, keyName.c_str(), m_safeLoadOpt[keyName.c_str()].loadOpt);
|
|
|
- m_vSafeLoad.push_back(keyName.c_str());
|
|
|
- m_vAllCfgEntity.push_back(keyName.c_str());
|
|
|
- m_safeLoadOpt[keyName.c_str()].eResult = LOADING_INIT;
|
|
|
- m_safeLoadOpt[keyName.c_str()].initSn = slNum;
|
|
|
- slNum++;
|
|
|
- break;
|
|
|
- case LOADSTAGE_OPERATING:
|
|
|
- spConfig->ReadConfigValueInt(strOp, keyName.c_str(), m_operatingOpt[keyName.c_str()].loadOpt);
|
|
|
- if (keyName.compare("Gpio") == 0 && !m_hasCfgGpioInRootIni) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("have configure gpio in HealthManager.ini,but can't find gpio in root.ini,ignore start gpio.");
|
|
|
- }
|
|
|
- else {
|
|
|
- m_vOperating.push_back(keyName.c_str());
|
|
|
- m_vAllCfgEntity.push_back(keyName.c_str());
|
|
|
- m_operatingOpt[keyName.c_str()].eResult = LOADING_INIT;
|
|
|
- m_operatingOpt[keyName.c_str()].initSn = opNum;
|
|
|
- opNum++;
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- curr = is.tellg();
|
|
|
- } while (curr < end);
|
|
|
- is.close();
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("opt num:[%d]c[%d]s[%d]o[%d]", count, m_coreBootOpt.size(), m_safeLoadOpt.size(), m_operatingOpt.size());
|
|
|
-
|
|
|
#if defined(RVC_OS_LINUX)
|
|
|
if (!m_sysInfo.strMachineType.IsNullOrEmpty() && m_sysInfo.strMachineType.Compare("RVC.Stand2S") != 0
|
|
|
&& m_sysInfo.strMachineType.Compare("RVC.Stand1SPlus") != 0) {
|
|
@@ -315,538 +216,6 @@ bool CHealthManagerFSM::IsCoolBootThisTime()
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-//CoreBoot
|
|
|
-void CHealthManagerFSM::s1_on_entry()
|
|
|
-{
|
|
|
- ErrorCodeEnum eErrCode;
|
|
|
- CSmartPointer<IEntityFunction> spEntityFunction = GetEntityBase()->GetFunction();
|
|
|
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = spEntityFunction.ConvertCase<IEntityFunctionPrivilege>();
|
|
|
- CEntityRunInfo browserInfo;
|
|
|
- eErrCode = spEntityFunction->GetEntityRunInfo("Chromium", browserInfo);
|
|
|
-
|
|
|
- if (browserInfo.eState == EntityState_Idle)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("IE idle before healthmanager, maybe healthmanager have been losted.");
|
|
|
- m_bIEBeforeHealth = true;
|
|
|
- }
|
|
|
-
|
|
|
- m_fsmState = HM_FSM_STATE_COREBOOT;
|
|
|
-
|
|
|
- m_ullElapseFromOSStart = GetTickCount64();
|
|
|
- m_elapseTimeFromOSStart = m_ullElapseFromOSStart / 1000;
|
|
|
-
|
|
|
-
|
|
|
- eErrCode = GetEntityBase()->GetFunction()->SetSysVar("RunState", "B");
|
|
|
- if (eErrCode != Error_Succeed)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("set RunState B failed (%s).", SpStrError(eErrCode));
|
|
|
- }
|
|
|
-
|
|
|
- bool bAsync = false;
|
|
|
- m_eStage = LOADSTAGE_COREBOOT;
|
|
|
- int ret = 0;
|
|
|
- map<CSimpleStringA, EntityLoadInfo>::iterator it;
|
|
|
- //start entity
|
|
|
-
|
|
|
- vector<CSimpleStringA>::iterator vIt;
|
|
|
- if (m_coreBootOpt.size() == 0)
|
|
|
- goto COREBOOT_FINISH;
|
|
|
-
|
|
|
- char startMsg[128];
|
|
|
- for (vIt = m_vCoreBoot.begin(); vIt != m_vCoreBoot.end(); ++vIt)
|
|
|
- {
|
|
|
- CSmartPointer<IAsynWaitSp> spWait;//oilyang 20160325 see the following comment
|
|
|
- it = m_coreBootOpt.find(*vIt);
|
|
|
- if (it == m_coreBootOpt.end())
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("cannot find %s", (LPCSTR)* vIt);
|
|
|
- continue;
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("start,%s,%d", (LPCSTR)it->first, it->second.loadOpt);
|
|
|
- CEntityRunInfo entRunInfo;
|
|
|
- ErrorCodeEnum errCode = spEntityFunction->GetEntityRunInfo(it->first, entRunInfo);
|
|
|
- if (errCode == Error_Succeed && entRunInfo.eState == EntityState_Idle)
|
|
|
- {
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_COREBOOT);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto COREBOOT_FINISH;
|
|
|
- else
|
|
|
- continue;
|
|
|
- }
|
|
|
- ZeroMemory(startMsg, 128);
|
|
|
- //sprintf(startMsg, "正在启动实体%s...", it->first.GetData());
|
|
|
- //GetEntityBase()->GetFunction()->ShowStartupInfo(startMsg);
|
|
|
- switch (it->second.loadOpt)
|
|
|
- {
|
|
|
- case LOADOPT_IGNORE:
|
|
|
- {
|
|
|
- pFuncPrivilege->StartEntity(it->first, NULL, spWait);
|
|
|
- if (spWait != NULL)
|
|
|
- spWait->WaitAnswer(MAX_IGNORE_TIMEOUT);//oilyang 20160325 the null pointer
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_COREBOOT);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto COREBOOT_FINISH;
|
|
|
- }
|
|
|
- break;
|
|
|
- case LOADOPT_ASYNC_VERIFY:
|
|
|
- errCode = AsyncStartEntity(it->first, NULL, NULL);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("AsyncStartEntity:%d", errCode);
|
|
|
- bAsync = true;
|
|
|
- break;
|
|
|
- case LOADOPT_SYNC_VERIFY:
|
|
|
- {
|
|
|
- pFuncPrivilege->StartEntity(it->first, NULL, spWait);
|
|
|
- if (spWait != NULL)
|
|
|
- errCode = spWait->WaitAnswer(MAX_AYSNC_TIMEOUT);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("(coreboot)sync...%d", errCode);
|
|
|
- if (errCode == Error_Succeed)
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- else if (errCode == Error_TimeOut)
|
|
|
- it->second.eResult = LOADING_TIMEOUT;
|
|
|
- else
|
|
|
- it->second.eResult = LOADING_FAILED;
|
|
|
- if (errCode != Error_Succeed) {
|
|
|
- return;
|
|
|
-#if defined(RVC_OS_LINUX)
|
|
|
- ShowEntityBootFailedAtFront(it->first, errCode);
|
|
|
- return;
|
|
|
-#endif //RVC_OS_LINUX
|
|
|
- }
|
|
|
- else
|
|
|
- ret = CheckLoadResult(LOADSTAGE_COREBOOT);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s1 check ret %d", ret);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto COREBOOT_FINISH;
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-COREBOOT_FINISH:
|
|
|
-
|
|
|
- if (!bAsync)
|
|
|
- {
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_COREBOOT_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ret = CheckLoadResult(LOADSTAGE_COREBOOT);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- {
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_COREBOOT_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- }
|
|
|
- return;
|
|
|
-}
|
|
|
-void CHealthManagerFSM::s1_on_exit()
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
-}
|
|
|
-unsigned int CHealthManagerFSM::s1_on_event(FSMEvent* pEvt)
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("s1 evt %d",pEvt->iEvt);
|
|
|
- switch(pEvt->iEvt)
|
|
|
- {
|
|
|
- case USER_EVT_COREBOOT_FINISHED:
|
|
|
- pEvt->SetHandled();
|
|
|
- if (pEvt->param1 == 2) {
|
|
|
-#if defined(RVC_OS_LINUX)
|
|
|
- ShowEntityBootFailedAtFront(m_csErrEntity, Error_InvalidState);
|
|
|
-#endif
|
|
|
- }
|
|
|
- return pEvt->param1;
|
|
|
- break;
|
|
|
- case USER_EVT_ENTER_CUSTOMER_MANAGER:
|
|
|
- pEvt->SetHandled();
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- return 0;
|
|
|
-}
|
|
|
-//SafeLoad
|
|
|
-void CHealthManagerFSM::s2_on_entry()
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
- m_fsmState = HM_FSM_STATE_SAFELOAD;
|
|
|
- ErrorCodeEnum eErrCode;
|
|
|
- eErrCode = GetEntityBase()->GetFunction()->SetSysVar("RunState", "S");
|
|
|
- if (eErrCode != Error_Succeed)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set RunState S failed (%d).", eErrCode);
|
|
|
- }
|
|
|
-
|
|
|
- bool bAsync = false;
|
|
|
- m_eStage = LOADSTAGE_SAFELOAD;
|
|
|
- int ret = 0;
|
|
|
- map<CSimpleStringA, EntityLoadInfo>::iterator it;
|
|
|
- CSmartPointer<IEntityFunction> pFunc = GetEntityBase()->GetFunction();
|
|
|
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
|
|
|
-
|
|
|
- ErrorCodeEnum errCode;
|
|
|
- vector<CSimpleStringA>::iterator vIt;
|
|
|
- if (m_safeLoadOpt.size() == 0)
|
|
|
- goto SAFELOAD_FINISH;
|
|
|
- char startMsg[128];
|
|
|
- for (vIt = m_vSafeLoad.begin(); vIt != m_vSafeLoad.end(); ++vIt)
|
|
|
- {
|
|
|
- CSmartPointer<IAsynWaitSp> spWait;
|
|
|
- it = m_safeLoadOpt.find(*vIt);
|
|
|
- if (it == m_safeLoadOpt.end())
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("cannot find %s", (LPCSTR)* vIt);
|
|
|
- continue;
|
|
|
- }
|
|
|
- CEntityRunInfo entRunInfo;
|
|
|
- errCode = pFunc->GetEntityRunInfo(it->first, entRunInfo);
|
|
|
- if (errCode == Error_Succeed && entRunInfo.eState == EntityState_Idle)
|
|
|
- {
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_SAFELOAD);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto SAFELOAD_FINISH;
|
|
|
- else
|
|
|
- continue;
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("start %s,%d", (LPCTSTR)it->first, it->second.loadOpt);
|
|
|
- switch (it->second.loadOpt)
|
|
|
- {
|
|
|
- case LOADOPT_IGNORE:
|
|
|
- {
|
|
|
- pFuncPrivilege->StartEntity(it->first, NULL, spWait);
|
|
|
- if (spWait != NULL)
|
|
|
- spWait->WaitAnswer(MAX_IGNORE_TIMEOUT);
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_SAFELOAD);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto SAFELOAD_FINISH;
|
|
|
- }
|
|
|
- break;
|
|
|
- case LOADOPT_ASYNC_VERIFY:
|
|
|
- AsyncStartEntity(it->first, NULL, NULL);
|
|
|
- bAsync = true;
|
|
|
- break;
|
|
|
- case LOADOPT_SYNC_VERIFY:
|
|
|
- {
|
|
|
- ZeroMemory(startMsg, 128);
|
|
|
- sprintf(startMsg, "正在启动实体%s...", it->first.GetData());
|
|
|
- GetEntityBase()->GetFunction()->ShowStartupInfo(startMsg);
|
|
|
- pFuncPrivilege->StartEntity(it->first, NULL, spWait);
|
|
|
- if (spWait != NULL)
|
|
|
- errCode = spWait->WaitAnswer(MAX_AYSNC_TIMEOUT);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sync...%d", errCode);
|
|
|
- if (errCode == Error_Succeed) {
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- }
|
|
|
- else if (errCode == Error_TimeOut)
|
|
|
- it->second.eResult = LOADING_TIMEOUT;
|
|
|
- else
|
|
|
- it->second.eResult = LOADING_FAILED;
|
|
|
- if (it->second.eResult != Error_Succeed)
|
|
|
- {
|
|
|
- char tmp[128] = { 0 };
|
|
|
- if (it->first.Compare("SIPPhone", true) == 0) {
|
|
|
- if (LOADING_TIMEOUT == it->second.eResult) {
|
|
|
- sprintf(tmp, "实体 %s 启动超时(%d),请尝试重启应用解决", it->first.GetData(), it->second.eResult);
|
|
|
- }
|
|
|
- else {
|
|
|
- sprintf(tmp, "实体 %s 启动失败(%d),识别不到声卡,请尝试重启计算机解决,多次无效后请联系厂商处理", it->first.GetData(), it->second.eResult);
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- sprintf(tmp, "实体 %s 启动失败 %d", it->first.GetData(), it->second.eResult);
|
|
|
- }
|
|
|
-#if defined(RVC_OS_WIN)
|
|
|
- GetEntityBase()->GetFunction()->ShowFatalError(tmp);
|
|
|
- GetEntityBase()->GetFunction()->SetSysVar("AuthErrMsg", tmp);//实体启动失败保存到错误页字段
|
|
|
-#else
|
|
|
- ShowEntityBootFailedAtFront(it->first, errCode);
|
|
|
-#endif
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("启动失败:%s", tmp);
|
|
|
- m_csErrEntity = m_csErrEntity + "|" + it->first;
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_SAFELOAD_FINISHED);
|
|
|
- e->param1 = 2;//"SYNC START" enity started failed.
|
|
|
- PostEventFIFO(e);
|
|
|
- return;
|
|
|
- }
|
|
|
- //if (errCode != Error_Succeed)
|
|
|
- // return;
|
|
|
- //else
|
|
|
- ret = CheckLoadResult(LOADSTAGE_SAFELOAD);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto SAFELOAD_FINISH;
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-SAFELOAD_FINISH:
|
|
|
- if (!bAsync)
|
|
|
- {
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_SAFELOAD_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ret = CheckLoadResult(LOADSTAGE_SAFELOAD);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s2 %d", ret);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- {
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_SAFELOAD_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- }
|
|
|
-SAFELOAD_END:
|
|
|
- return;
|
|
|
-}
|
|
|
-void CHealthManagerFSM::s2_on_exit()
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
-}
|
|
|
-unsigned int CHealthManagerFSM::s2_on_event(FSMEvent* pEvt)
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
- int ret = 0;
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("s2 event %d,%d",pEvt->iEvt,pEvt->param1);
|
|
|
- switch(pEvt->iEvt)
|
|
|
- {
|
|
|
- case USER_EVT_SAFELOAD_FINISHED:
|
|
|
- {
|
|
|
- pEvt->SetHandled();
|
|
|
- //oiltmp
|
|
|
- //according to the system varible TerminalState to do sth.
|
|
|
- //Configed
|
|
|
- //Breakdown
|
|
|
- //Blocking
|
|
|
- //Authentication
|
|
|
- {
|
|
|
- if(pEvt->param1 == 0)
|
|
|
- {
|
|
|
- //initializer if configured
|
|
|
- CSimpleStringA csTermStage("");
|
|
|
- ErrorCodeEnum eErrCode;
|
|
|
- eErrCode = GetEntityBase()->GetFunction()->GetSysVar("TerminalStage",csTermStage);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("after safeload to get termstage %s",(LPCTSTR)csTermStage);
|
|
|
- if (csTermStage == "B" || csTermStage == "N")
|
|
|
- return 1;
|
|
|
- }
|
|
|
- else if (pEvt->param1 == 2)
|
|
|
- {
|
|
|
-#if defined(RVC_OS_LINUX)
|
|
|
- ShowEntityBootFailedAtFront(m_csErrEntity, Error_InvalidState);
|
|
|
-#endif
|
|
|
- ret = 2;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- //Unsubscrible
|
|
|
- }
|
|
|
- break;
|
|
|
- case USER_EVT_SAFELOAD_EXMINE_FINISHED:
|
|
|
- if (pEvt->param1 == 0)
|
|
|
- ret = 0;
|
|
|
- //do something else oiltmp
|
|
|
- pEvt->SetHandled();
|
|
|
- break;
|
|
|
- case USER_EVT_ACCESSAUTH_FINISHED:
|
|
|
- pEvt->SetHandled();
|
|
|
- ret = pEvt->param1;
|
|
|
- break;
|
|
|
- case USER_EVT_ENTER_CUSTOMER_MANAGER:
|
|
|
- pEvt->SetHandled();
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- return ret;
|
|
|
-}
|
|
|
-//Operating
|
|
|
-void CHealthManagerFSM::s3_on_entry()
|
|
|
-{
|
|
|
- m_fsmState = HM_FSM_STATE_OP;
|
|
|
- Sleep(m_sleepEnterOpMS);//oilyang@20220120 for temp change from 5000 to 8000 for accessauth
|
|
|
- if (m_custMngerState == CM_ENTER)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("in CMS,no need to start hardware.");
|
|
|
- return;
|
|
|
- }
|
|
|
- ErrorCodeEnum eErrCode;
|
|
|
- eErrCode = GetEntityBase()->GetFunction()->SetSysVar("RunState", "O");
|
|
|
- if (eErrCode != Error_Succeed)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set RunState O failed (%d).", eErrCode);
|
|
|
- }
|
|
|
- bool bAsync = false;
|
|
|
- m_eStage = LOADSTAGE_OPERATING;
|
|
|
- int ret = 0;
|
|
|
- map<CSimpleStringA, EntityLoadInfo>::iterator it;
|
|
|
- CSmartPointer<IEntityFunction> pFunc = GetEntityBase()->GetFunction();
|
|
|
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
|
|
|
- //start entity
|
|
|
-
|
|
|
- ErrorCodeEnum errCode;
|
|
|
- vector<CSimpleStringA>::iterator vIt;
|
|
|
- if (m_operatingOpt.size() == 0)
|
|
|
- goto OPERATING_FINISH;
|
|
|
- char startMsg[128];
|
|
|
- for (vIt = m_vOperating.begin(); vIt != m_vOperating.end(); ++vIt)
|
|
|
- {
|
|
|
- CSmartPointer<IAsynWaitSp> spWait;
|
|
|
- it = m_operatingOpt.find(*vIt);
|
|
|
- if (it == m_operatingOpt.end())
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("cannot find %s", (LPCSTR)* vIt);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- CEntityRunInfo entRunInfo;
|
|
|
- errCode = pFunc->GetEntityRunInfo(it->first, entRunInfo);
|
|
|
- if (errCode == Error_Succeed && entRunInfo.eState == EntityState_Idle)
|
|
|
- {
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_OPERATING);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto OPERATING_FINISH;
|
|
|
- else
|
|
|
- continue;
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("op start %s,%d", (LPCTSTR)it->first, it->second.loadOpt);
|
|
|
- switch (it->second.loadOpt)
|
|
|
- {
|
|
|
- case LOADOPT_IGNORE:
|
|
|
- {
|
|
|
- pFuncPrivilege->StartEntity(it->first, NULL, spWait);
|
|
|
- if (spWait != NULL)
|
|
|
- spWait->WaitAnswer(MAX_IGNORE_TIMEOUT);
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_OPERATING);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto OPERATING_FINISH;
|
|
|
- }
|
|
|
- break;
|
|
|
- case LOADOPT_ASYNC_VERIFY:
|
|
|
- errCode = AsyncStartEntity(it->first, NULL, NULL);
|
|
|
- bAsync = true;
|
|
|
- break;
|
|
|
- case LOADOPT_SYNC_VERIFY:
|
|
|
- {
|
|
|
- ZeroMemory(startMsg, 128);
|
|
|
- sprintf(startMsg, "正在启动实体%s...", it->first.GetData());
|
|
|
- GetEntityBase()->GetFunction()->ShowStartupInfo(startMsg);
|
|
|
- errCode = pFuncPrivilege->StartEntity(it->first, NULL, spWait);
|
|
|
- if (errCode == Error_Succeed)
|
|
|
- {
|
|
|
- if (spWait != NULL)
|
|
|
- errCode = spWait->WaitAnswer(MAX_AYSNC_TIMEOUT);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("StartEntity %s failed(%d).", (LPCSTR)it->first, errCode);
|
|
|
- break;
|
|
|
- }
|
|
|
- if (errCode == Error_Succeed)
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- else if (errCode == Error_TimeOut)
|
|
|
- it->second.eResult = LOADING_TIMEOUT;
|
|
|
- else
|
|
|
- it->second.eResult = LOADING_FAILED;
|
|
|
- if (it->second.eResult != Error_Succeed)
|
|
|
- {
|
|
|
- char tmp[128] = { 0 };
|
|
|
- if (it->first.Compare("SIPPhone", true) == 0) {
|
|
|
- if (LOADING_TIMEOUT == it->second.eResult) {
|
|
|
- sprintf(tmp, "实体 %s 启动超时(%d),请尝试重启应用解决", it->first.GetData(), it->second.eResult);
|
|
|
- }
|
|
|
- else {
|
|
|
- sprintf(tmp, "实体 %s 启动失败(%d),识别不到声卡,请尝试重启计算机解决,多次无效后请联系厂商处理", it->first.GetData(), it->second.eResult);
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- sprintf(tmp, "实体 %s 启动失败 %d", it->first.GetData(), it->second.eResult);
|
|
|
- }
|
|
|
-#if defined(RVC_OS_WIN)
|
|
|
- GetEntityBase()->GetFunction()->ShowFatalError(tmp);
|
|
|
-#else
|
|
|
- ShowEntityBootFailedAtFront(it->first, errCode);
|
|
|
-#endif
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("启动失败:%s", tmp);
|
|
|
- m_csErrEntity = m_csErrEntity + "|" + it->first;
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_OPERATING_FINISHED);
|
|
|
- e->param1 = 2;//"SYNC START" enity started failed.
|
|
|
- PostEventFIFO(e);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (errCode != Error_Succeed)
|
|
|
- return;
|
|
|
- else
|
|
|
- ret = CheckLoadResult(LOADSTAGE_OPERATING);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- goto OPERATING_FINISH;
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-OPERATING_FINISH:
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s3 ret %d", ret);
|
|
|
- if (!bAsync)
|
|
|
- {
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_OPERATING_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ret = CheckLoadResult(LOADSTAGE_OPERATING);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- {
|
|
|
- FSMEvent* e = new FSMEvent(USER_EVT_OPERATING_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- }
|
|
|
- return;
|
|
|
-}
|
|
|
-void CHealthManagerFSM::s3_on_exit()
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
-}
|
|
|
-unsigned int CHealthManagerFSM::s3_on_event(FSMEvent* pEvt)
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("s3(Operating) event %d,%d",pEvt->iEvt,pEvt->param1);
|
|
|
- int ret = 0;
|
|
|
- switch(pEvt->iEvt)
|
|
|
- {
|
|
|
- case USER_EVT_OPERATING_FINISHED:
|
|
|
- ret = pEvt->param1;
|
|
|
- if (ret == 2) {
|
|
|
-#if defined(RVC_OS_LINUX)
|
|
|
- ShowEntityBootFailedAtFront(m_csErrEntity, Error_InvalidState);
|
|
|
-#endif
|
|
|
- }
|
|
|
- pEvt->SetHandled();
|
|
|
- break;
|
|
|
- case USER_EVT_ENTER_CUSTOMER_MANAGER:
|
|
|
- pEvt->SetHandled();
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- return ret;
|
|
|
-}
|
|
|
//Idle(Operating finished)
|
|
|
void CHealthManagerFSM::s4_on_entry()
|
|
|
{
|
|
@@ -1326,7 +695,6 @@ int CHealthManagerFSM::AccessAuthDoWork()
|
|
|
ErrorCodeEnum eErr;
|
|
|
eErr = GetEntityBase()->GetFunction()->GetSysVar("TerminalStage", csTermStage);
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("oninit get termstage %s", (LPCTSTR)csTermStage);
|
|
|
- bool bToDoInit = false;
|
|
|
if (eErr == Error_Succeed)
|
|
|
{
|
|
|
|
|
@@ -1338,18 +706,7 @@ int CHealthManagerFSM::AccessAuthDoWork()
|
|
|
return 1;
|
|
|
}
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("AccessAuthDoWork")("after proc initialization.");
|
|
|
- if (bToDoInit)
|
|
|
- {
|
|
|
- if (m_bInitSuc)
|
|
|
- {
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("AccessAuthDoWork")("initialization failed.");
|
|
|
- m_bInAccessAuthDoWork = false;
|
|
|
- return 1;
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
//to accessauth
|
|
|
ErrorCodeEnum eErrCode;
|
|
|
eErrCode = GetEntityBase()->GetFunction()->GetSysVar("TerminalStage", csTermStage);
|
|
@@ -1457,54 +814,7 @@ int CHealthManagerFSM::AccessAuthDoWork()
|
|
|
m_bInAccessAuthDoWork = false;
|
|
|
return 1;
|
|
|
}
|
|
|
-//return value:
|
|
|
-//0:all entity have started suc
|
|
|
-//1:some entity havn't try to start
|
|
|
-//2:all entity have tried to started,but some failed
|
|
|
-int CHealthManagerFSM::CheckLoadResult(LoadStage eStage)
|
|
|
-{
|
|
|
- int ret = 0;
|
|
|
- map<CSimpleStringA,EntityLoadInfo>::iterator it;
|
|
|
- if (eStage == LOADSTAGE_COREBOOT)
|
|
|
- it = m_coreBootOpt.begin();
|
|
|
- else if (eStage == LOADSTAGE_SAFELOAD)
|
|
|
- it = m_safeLoadOpt.begin();
|
|
|
- else
|
|
|
- it = m_operatingOpt.begin();
|
|
|
- while(1)
|
|
|
- {
|
|
|
- switch(it->second.loadOpt)
|
|
|
- {
|
|
|
- case LOADOPT_IGNORE:
|
|
|
- if (it->second.eResult == LOADING_INIT)
|
|
|
- return 1;
|
|
|
- break;
|
|
|
- case LOADOPT_ASYNC_VERIFY:
|
|
|
- case LOADOPT_SYNC_VERIFY:
|
|
|
- default:
|
|
|
- if (it->second.eResult == LOADING_INIT)
|
|
|
- return 3;
|
|
|
- else if (it->second.eResult != LOADING_SUCCEED)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402501Z10201").setResultCode("RTA5101")("%s start failed", m_csErrEntity);
|
|
|
- m_csErrEntity = m_csErrEntity + "|" + it->first;
|
|
|
- ret = 2;
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- it++;
|
|
|
- if (eStage == LOADSTAGE_COREBOOT && it == m_coreBootOpt.end())
|
|
|
- break;
|
|
|
- else if (eStage == LOADSTAGE_SAFELOAD && it == m_safeLoadOpt.end())
|
|
|
- break;
|
|
|
- else if (eStage == LOADSTAGE_OPERATING && it == m_operatingOpt.end())
|
|
|
- break;
|
|
|
- }
|
|
|
- if (ret == 0) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501Z10201")("entity start succ");
|
|
|
- }
|
|
|
- return ret;
|
|
|
-}
|
|
|
+
|
|
|
void CHealthManagerFSM::SetAccessAuth(int bResult)
|
|
|
{
|
|
|
m_iAccessAuth = bResult;
|
|
@@ -1641,95 +951,7 @@ ErrorCodeEnum CHealthManagerFSM::AsyncTerminateEntity(const char *entity_name, v
|
|
|
}
|
|
|
void CHealthManagerFSM::OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp)
|
|
|
{
|
|
|
- CSmartPointer<ICallbackListener> spCallback;
|
|
|
- CSmartPointer<IReleasable> pData;
|
|
|
- pAsynWaitSp->GetCallback(spCallback, pData);
|
|
|
- callback_entry *entry = dynamic_cast<callback_entry*>((IReleasable*)(pData.GetRawPointer()));
|
|
|
- entry->ErrorResult = pAsynWaitSp->AsyncGetAnswer();
|
|
|
- callback_entry *new_entry = new callback_entry();
|
|
|
-
|
|
|
- new_entry->EntityName = entry->EntityName;
|
|
|
- new_entry->ErrorResult = entry->ErrorResult;
|
|
|
- new_entry->op = entry->op;
|
|
|
- new_entry->state = entry->state;
|
|
|
-
|
|
|
- map<CSimpleStringA,EntityLoadInfo>::iterator it;
|
|
|
- int ret;
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI("OnAnswer")("stage %d,%s,result %d",m_eStage,(LPCSTR)new_entry->EntityName,new_entry->ErrorResult);
|
|
|
- switch(m_eStage)
|
|
|
- {
|
|
|
- case LOADSTAGE_COREBOOT:
|
|
|
- it = m_coreBootOpt.find(new_entry->EntityName);
|
|
|
- if (it != m_coreBootOpt.end())
|
|
|
- {
|
|
|
- if (new_entry->ErrorResult == Error_Succeed)
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- else if (new_entry->ErrorResult == Error_TimeOut)
|
|
|
- it->second.eResult = LOADING_TIMEOUT;
|
|
|
- else
|
|
|
- it->second.eResult = LOADING_FAILED;
|
|
|
- if (it->second.eResult != Error_Succeed)
|
|
|
- {
|
|
|
- char tmp[64] = {0};
|
|
|
- sprintf(tmp, "实体 %s 启动失败-----", it->first.GetData());
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI("OnAnswer")("启动失败:%s -----", tmp);
|
|
|
- }
|
|
|
- ret = CheckLoadResult(LOADSTAGE_COREBOOT);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- {
|
|
|
- FSMEvent *e = new FSMEvent(USER_EVT_COREBOOT_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case LOADSTAGE_SAFELOAD:
|
|
|
- it = m_safeLoadOpt.find(new_entry->EntityName);
|
|
|
- if (it != m_safeLoadOpt.end())
|
|
|
- {
|
|
|
- if (new_entry->ErrorResult == Error_Succeed)
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- else if (new_entry->ErrorResult == Error_TimeOut)
|
|
|
- it->second.eResult = LOADING_TIMEOUT;
|
|
|
- else
|
|
|
- it->second.eResult = LOADING_FAILED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_SAFELOAD);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI("OnAnswer")("safeload answer %d",ret);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- {
|
|
|
- FSMEvent *e = new FSMEvent(USER_EVT_SAFELOAD_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- }else{
|
|
|
- DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI("OnAnswer")("cannot find %s",(LPCTSTR)new_entry->EntityName);
|
|
|
- }
|
|
|
-
|
|
|
- break;
|
|
|
- case LOADSTAGE_OPERATING:
|
|
|
- it = m_operatingOpt.find(new_entry->EntityName);
|
|
|
- if (it != m_operatingOpt.end())
|
|
|
- {
|
|
|
- if (new_entry->ErrorResult == Error_Succeed)
|
|
|
- it->second.eResult = LOADING_SUCCEED;
|
|
|
- else if (new_entry->ErrorResult == Error_TimeOut)
|
|
|
- it->second.eResult = LOADING_TIMEOUT;
|
|
|
- else
|
|
|
- it->second.eResult = LOADING_FAILED;
|
|
|
- ret = CheckLoadResult(LOADSTAGE_OPERATING);
|
|
|
- if (ret == 0 || ret == 2)
|
|
|
- {
|
|
|
- FSMEvent *e = new FSMEvent(USER_EVT_OPERATING_FINISHED);
|
|
|
- e->param1 = ret;
|
|
|
- PostEventFIFO(e);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
}
|
|
|
-
|
|
|
CSimpleStringA CHealthManagerFSM::GetEntityCfgInfo(CSimpleStringA name,int &loadOpt)
|
|
|
{
|
|
|
CSimpleStringA entityList(""),csBrowserName("IEBrowser");
|