ソースを参照

!10833 T25OT411&T25PD021& T25PJ611三个项目:高拍仪日志精简&GPIO日志精简&信创browser进程组管理实现
Merge pull request !10833 from 80374374/feature_gpio_hsps_logSlim

杨诗友80174847 2 ヶ月 前
コミット
64201e56b8

+ 11 - 2
Framework/Common/RVCEventCode.h

@@ -27,8 +27,8 @@ inline CSimpleStringA DWORD2Hex(DWORD cur)
 #define RTAERR_SPHOST_IOM_FAILED			"RTA0021"	//iom create failed
 
 
-#define VTM_LAUNCH_RESERVERD_START			"RTA0030"
-#define VTM_LAUNCH_RESERVERD_END			"RTA003Z"
+#define VTM_LAUNCH_RESERVERD_START			"RTA0030" //在VTM.exe中使用
+#define VTM_LAUNCH_RESERVERD_END			"RTA003Z" //在VTM.exe中使用
 
 //for public method of read/write(get/set)
 #define RTAERR_CONFIG_OPEN_FAILED			"RTA0041"	//->OpenConfig failed
@@ -40,4 +40,13 @@ inline CSimpleStringA DWORD2Hex(DWORD cur)
 #define RTAERR_SYSVAR_SET_FAILED			"RTA0047"	//->SetSysVar failed
 #define RTAERR_GETPATH_FAILED				"RTA0048"	//->GetPath failed
 
+#define DEVICE_FSM_RESERVERD_START			"RTA0050" // RTA0050 - RTA005Z 在 DevFSMCommBase 中使用
+#define DEVICE_FSM_LOADADDR_DLOPEN_FAILED   "RTA0050"
+#define DEVICE_FSM_LOADADDR_CREATEOJ_FAILED "RTA0051"
+#define DEVICE_FSM_LOADADDR_RELOJ_FAILED    "RTA0052"
+#define DEVICE_FSM_CREATE_DEVOBJ_FAILED     "RTA0053"
+#define DEVICE_FSM_DEVOBJ_NULLPTR           "RTA0054"
+#define DEVICE_FSM_DEVCLOSE_FAILED          "RTA0055"
+#define DEVICE_FSM_DEVGETLE_FAILED          "RTA0056"
+
 #endif

+ 0 - 1
Framework/spbase/sp_httpDefine.cpp

@@ -609,7 +609,6 @@ std::pair<bool, std::string> refreshToken(std::string terminalNo, std::string in
 		}
 	}
 	LogWarn(Severity_Low, Error_Bug, GET_TOKEN_ERR, "total getToken failed");
-	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("refreshToken").setLogCode("QLR0402Z10A00003")("total getToken failed");
 	return std::make_pair(false, "");
 }
 

+ 5 - 4
Module/include/DevEntityCommBase.hpp

@@ -213,7 +213,7 @@ inline ErrorCodeEnum CDevAdptEntityBase::ExtractVendorLibFullPath(CSimpleStringA
 		rc = IsNotConfigure() ? Error_NotConfig : Error_Succeed;
 	}
 	else {
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("Get Dep path failed: %s", SpStrError(rc));
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode("RTA0048")("Get Dep path failed: %s", SpStrError(rc));
 	}
 	return rc;
 }
@@ -250,7 +250,6 @@ inline void CDevAdptEntityBase::InitializeVendorLogSwitch()
 	GetFunction()->OpenConfig(Config_CenterSetting, centerConfig);
 
 	CSimpleStringA str;
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("To get config [All]  key...");
 	centerConfig->ReadConfigValue(GetEntityName(), "All", str);
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("All: %s", str.GetData());
 
@@ -267,8 +266,10 @@ inline void CDevAdptEntityBase::InitializeVendorLogSwitch()
 			if (!stLogConfig.strType.IsNullOrEmpty()) stLogConfig.strType += "|";
 			stLogConfig.strType += "FILE";
 		}
-		GetFunction()->GetPath("Dbg", stLogConfig.strLogPath);
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DbgPath: %s", stLogConfig.strLogPath.GetData());
+		ErrorCodeEnum ec = GetFunction()->GetPath("Dbg", stLogConfig.strLogPath);
+		if (IS_FAILURED(ec)) {
+			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode("RTA0048")("Get Dbg path failed: %s", SpStrError(ec));
+		}
 		stLogConfig.Settle();
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("{\"RecordLevel\":\"%s\", \"RecordType\":\"%s\"}",
 			stLogConfig.strLevel.GetData(),stLogConfig.strType.GetData());

+ 53 - 151
Module/include/DevFSMCommBase.hpp

@@ -33,15 +33,6 @@ do{\
 	ent.dwEntityId = entityID;	\
 } while (false)
 
-#define HARDWARE_ENTITY_SET_DEVCODE(ent, ec, reserved)	\
-do {\
-	ent.dwVendorErroCode = ec;	\
-	ent.dwReserved = reserved;	\
-} while (false)
-
-#define HARDWARE_ENTITY_MAKE_ERRORCODE(ec)	\
-	MAKE_SLV_ERRORCODE(ec.dwEntityId, (ec.dwVendorId), ec.dwVendorErroCode)
-
 #define HARDWARE_ENTITY_MAKE_ERRORCODE_TO_BUSINESS(ec)	\
 	MAKE_SLV_ERRORCODE_TO_BUSINESS(ec.dwEntityId, ec.dwVendorErroCode, ec.dwReserved)
 
@@ -65,9 +56,6 @@ private:
 		for (int i = 0; i < strTest.GetLength(); ++i) {
 			if (strTest[i] >= 'A' && strTest[i] <= 'Z') strTest[i] = strTest[i] + ('a' - 'A');
 		}
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("strTest:%s", strPath.GetData());
-
-
 		if (strTest.IndexOf("pinpad") != -1) {
 			replaceAdapterName = "PinPad.self.1.1.dll";
 			result = true;
@@ -158,28 +146,28 @@ public:
 
 			int res = toolkit_dlopen(strTemp, &m_lib);
 			if (res != 0) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("toolkit_dlopen[%s] failed with error %s.", strTemp.GetData(), toolkit_dlerror(&m_lib));
+				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode(DEVICE_FSM_LOADADDR_DLOPEN_FAILED)("toolkit_dlopen[%s] failed with error %s.", strTemp.GetData(), toolkit_dlerror(&m_lib));
 				erroCode = Error_DevLoadFileFailed;
 				break;
 			}
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to get CreateDevComponent pointer address...");
 			if ((res = toolkit_dlsym(&m_lib, "CreateDevComponent", (void**)&pFuncCreateAdapt)) != 0) 
 			{
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("Get 'CreateDevComponent' Func address failed with error: %s", toolkit_dlerror(&m_lib));
+				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode(DEVICE_FSM_LOADADDR_CREATEOJ_FAILED)("Get 'CreateDevComponent' Func address failed with error: %s", toolkit_dlerror(&m_lib));
 				erroCode = Error_DevLoadFileFailed;
 				break;
 			}
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to get ReleaseDevComponent pointer address...");
 			if ((res = toolkit_dlsym(&m_lib, "ReleaseDevComponent", (void**)&pFuncReleaseAdapt)) != 0) 
 			{
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("Get 'ReleaseDevComponent' Func address failed with error: %s", toolkit_dlerror(&m_lib));
+				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode(DEVICE_FSM_LOADADDR_RELOJ_FAILED)("Get 'ReleaseDevComponent' Func address failed with error: %s", toolkit_dlerror(&m_lib));
 				erroCode = Error_DevLoadFileFailed;
 				break;
 			}
 #if defined(RVC_OS_WIN)
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to get GetMoreErrorDetail pointer address...");
 			if ((res = toolkit_dlsym(&m_lib, "GetMoreErrorDetail", (void**)&pFuncGetPrefixErr)) != 0)
-			{
+			{//该接口是后面加到桥接层适配器的,所以报错不作强制性阻碍
 				pFuncGetPrefixErr = nullptr;
 			}
 			else {
@@ -211,11 +199,11 @@ public:
 				memset(szErrMsg, '\0', sizeof(szErrMsg));
 				DWORD dwLen = MAX_DEV_ERROR_MSG_LEN;
 				pFuncGetPrefixErr(szErrMsg, &dwLen);
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("Create device adapter object failed! EC=%s, Msg:[%s]"
+				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode(DEVICE_FSM_CREATE_DEVOBJ_FAILED)("Create device adapter object failed! EC=%s, Msg:[%s]"
 					, SpStrError(erroCode), szErrMsg);
 			}
 			else {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("Create device adapter object failed! EC=%s", SpStrError(erroCode));
+				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setResultCode(DEVICE_FSM_CREATE_DEVOBJ_FAILED)("Create device adapter object failed! EC=%s", SpStrError(erroCode));
 			}
 			return erroCode;
 		}
@@ -238,13 +226,16 @@ public:
 
 	void TearDown()
 	{
-		LOG_FUNCTION();
-
 		if (m_AdptObjPtr != nullptr) 
 		{
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("To DevClose...");
+			ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
 			ErrorCodeEnum result = m_AdptObjPtr->DevClose();
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DevClose returned %s", SpStrError(result));
+			ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
+			if (IS_FAILURED(result)) {
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(DEVICE_FSM_DEVCLOSE_FAILED)/*.setAPI("DevAdapter::DevClose") 不纳入适配器消费,因为不好分配RTA,只做调研*/
+					.setCostTime(ullEnd - ullStart)("DevClose returned %s", SpStrError(result));
+			}
 			if (nullptr != pFuncReleaseAdapt)
 			{
 				DeviceBaseClass* devBasePtr = static_cast<DeviceBaseClass*>(m_AdptObjPtr);
@@ -252,13 +243,12 @@ public:
 					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("To Release DevAdapter Object...");
                     pFuncReleaseAdapt(devBasePtr);
                     m_AdptObjPtr = nullptr;
-				} else {
-					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("static cast base dev class failed!");
 				}
 			}
 		}
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to dlclose DevAdapter libs...");
 		toolkit_dlclose(&m_lib);
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("dlclose DevAdapter libs succ");
 		pFuncReleaseAdapt = pFuncCreateAdapt = nullptr;
 		pFuncGetPrefixErr = nullptr;
 	}
@@ -382,14 +372,12 @@ public:
 	CSimpleStringA strPort;
 	CSimpleStringA strBaudrate;
 	CSimpleStringA strPortNum;
-	CSimpleStringA strCheckdata;
-	CSimpleStringA strKeysn;
 	CSimpleStringA strPureAdapterName;
 
 	AdaptorInfo() :strVendor(true), strVersion(true), strBatch(true)
 		, strPort(true), strBaudrate(true)
 		, strPortNum(true)
-		, strCheckdata(true), strKeysn(true), strPureAdapterName(true)
+		, strPureAdapterName(true)
 	{
 	}
 
@@ -482,6 +470,7 @@ struct AdapterInfo : public AdaptorInfo
 		//CheckCategoryInfoFormat();
 	}
 
+	/*
 	void CheckCategoryInfoFormat()
 	{
 		const int DEV_CATINFO_SUM = 3;
@@ -555,6 +544,7 @@ struct AdapterInfo : public AdaptorInfo
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CheckDevInfoFormat, %s is empty.", devInfo[devSn]);
 		}
 	}
+	*/
 };
 
 struct ErrorPackageEx {
@@ -594,8 +584,6 @@ struct DevEntityErrorCode {
 	{
 		return MAKE_SLV_ERRORCODE(dwEntityId, dwVendorId, dwVendorErroCode);
 	}
-
-
 };
 
 template<class TFSM, class TDevClass>
@@ -603,7 +591,7 @@ class CCommDevFSM : public FSMImpl<TFSM>
 {
 
 public:
-	CCommDevFSM() : m_iInWhatPage(PageType_Init),m_bOpened(false), m_bOpening(true), m_eDevState(DEVICE_STATUS_NOT_READY),m_contiErrTimes(0), m_preUIState('X')
+	CCommDevFSM() : m_iInWhatPage(PageType_Init),m_bOpened(false), m_bOpening(true), m_eDevState(DEVICE_STATUS_NOT_READY), m_preUIState('X')
 	{
 		
 	}
@@ -650,11 +638,9 @@ public:
 		strResult = generateJsonStr(msgInfo);
 		CSimpleStringA csErrMsgWithReturnCode = strResult.second.c_str();
 
-		
 		CSimpleStringA tmpRTA(true), tmpDesc(true);
 		this->GetEntityBase()->GetFunction()->GetVTMErrMsg(dwCode, tmpDesc, tmpRTA);
 
-
 		if (bInBusiness) {
 			LogError(Severity_High, m_errPkgEx.errCode, dwCode, alarmMsg.GetData());
 			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_USER).setLogCode(logCode).setAPI(devApi).setResultCode(tmpRTA.GetData()).setCostTime(costTime)(csErrMsgWithReturnCode.GetData());
@@ -704,7 +690,11 @@ public:
 		m_adapterInfo.strPureAdapterName = vendorLib.strFileValue;
 
 		CSmartPointer<IConfigInfo> spConfigRoot;
-		this->GetEntityBase()->GetFunction()->OpenConfig(Config_Root, spConfigRoot);
+		ErrorCodeEnum ec = this->GetEntityBase()->GetFunction()->OpenConfig(Config_Root, spConfigRoot);
+		if (ec != Error_Succeed) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(RTAERR_CONFIG_OPEN_FAILED)("Open Config_Root failed: %s.", SpStrError(ec));
+			return;
+		}
 
 		CSimpleStringA entityName(this->GetEntityBase()->GetEntityName());
 		if (entityName.Compare("CardIssuerStore", true) == 0 || entityName.Compare("CardIssuerStand", true) == 0) {
@@ -718,22 +708,19 @@ public:
 		m_adapterInfo.strPort = csPort;
 		m_adapterInfo.strBaudrate = csBaudrate;
 
-		CSimpleStringA csPortNum(true), csCheckData(true), csKeySN(true), csInOutDir(true);
+		CSimpleStringA csPortNum(true);
 		if (!entityName.Compare("Gpio")) {
 			spConfigRoot->ReadConfigValue(sectionName.GetData(), "PortNum", csPortNum);
 			m_adapterInfo.strPortNum = csPortNum;
-		} else if (!entityName.Compare("PinPad")) {
-			spConfigRoot->ReadConfigValue(sectionName.GetData(), "Checkdata", csCheckData);
-			spConfigRoot->ReadConfigValue(sectionName.GetData(), "Keysn", csKeySN);
-			m_adapterInfo.strCheckdata = csCheckData;
-			m_adapterInfo.strKeysn = csKeySN;
 		}
 
 		m_adapterInfo.adapterFileName = vendorLib.toLibNameString();
 		CSimpleStringA strDepPath(true);
-		this->GetEntityBase()->GetFunction()->GetPath("Dep", strDepPath);
-		m_adapterInfo.adapterFilePath = CSimpleStringA::Format(
-			"%s" SPLIT_SLASH_STR "%s", (LPCTSTR)strDepPath, (LPCTSTR)m_adapterInfo.adapterFileName);
+		ec = this->GetEntityBase()->GetFunction()->GetPath("Dep", strDepPath);
+		if (IS_FAILURED(ec)) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(RTAERR_GETPATH_FAILED)("GetPath for Dep failed: %s.", SpStrError(ec));
+		}
+		m_adapterInfo.adapterFilePath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s", (LPCTSTR)strDepPath, (LPCTSTR)m_adapterInfo.adapterFileName);
 	}
 
 	ErrorCodeEnum FulfillAdapterDevCategory()
@@ -744,7 +731,7 @@ public:
 			ZeroMemory(devCat.szModel, sizeof(devCat.szModel));
 			ZeroMemory(devCat.szType, sizeof(devCat.szType));
 			ZeroMemory(devCat.szVendor, sizeof(devCat.szVendor));
-			result = m_hDevHelper->GetDevCategory(devCat);
+			result = m_hDevHelper->GetDevCategory(devCat); /** 这里不加错误的判断,让硬件实体调用方去兜  [Gifur@2025714]*/
 			if (IS_SUCCEED(result)) {
 				m_adapterInfo.FulfillCategoryInfo(devCat);
 			}
@@ -753,56 +740,6 @@ public:
 		return Error_InvalidState;
 	}
 
-#if defined(_MSC_VER)
-
-	const char* LPCSTRSmartPrintString(const CSimpleStringA& str)
-	{
-		return str.IsNullOrEmpty() ? "" : str.GetData();
-	}
-
-	CSimpleStringA GenerateJson(AdaptorInfo adaptorInfo, const CSimpleStringA& devDeviceName)
-	{
-		CSimpleStringA result(true);
-		if (0 == devDeviceName.Compare("Gpio", true)) {
-			result = CSimpleStringA::Format("{\"Vendor\":\"%s\", \"Version\":\"%s\", \"Batch\":\"%s\", \"Port\":\"%s\", \"Baudrate\":\"%s\", \"PortNum\":\"%s\"}",
-				LPCSTRSmartPrintString(adaptorInfo.strVendor), LPCSTRSmartPrintString(adaptorInfo.strVersion),
-				LPCSTRSmartPrintString(adaptorInfo.strBatch), LPCSTRSmartPrintString(adaptorInfo.strPort), LPCSTRSmartPrintString(adaptorInfo.strBaudrate),
-				LPCSTRSmartPrintString(adaptorInfo.strPortNum));
-		} else if (0 == devDeviceName.Compare("PinPad", true)) {
-			result = CSimpleStringA::Format("{\"Vendor\":\"%s\", \"Version\":\"%s\", \"Batch\":\"%s\", \"Port\":\"%s\", \"Baudrate\":\"%s\", \"Checkdata\":\"%s\", \"Keysn\":\"%s\"}",
-				LPCSTRSmartPrintString(adaptorInfo.strVendor), LPCSTRSmartPrintString(adaptorInfo.strVersion),
-				LPCSTRSmartPrintString(adaptorInfo.strBatch), LPCSTRSmartPrintString(adaptorInfo.strPort), LPCSTRSmartPrintString(adaptorInfo.strBaudrate),
-				LPCSTRSmartPrintString(adaptorInfo.strCheckdata), LPCSTRSmartPrintString(adaptorInfo.strKeysn));
-		} else {
-			result = CSimpleStringA::Format("{\"Vendor\":\"%s\", \"Version\":\"%s\", \"Batch\":\"%s\", \"Port\":\"%s\", \"Baudrate\":\"%s\"}",
-				LPCSTRSmartPrintString(adaptorInfo.strVendor), LPCSTRSmartPrintString(adaptorInfo.strVersion),
-				LPCSTRSmartPrintString(adaptorInfo.strBatch), LPCSTRSmartPrintString(adaptorInfo.strPort), LPCSTRSmartPrintString(adaptorInfo.strBaudrate));
-		}
-		return result;
-	}
-
-#endif //_MSC_VER
-
-	void ResetRepeatErrTimes()
-	{
-		m_contiErrTimes = 0;
-	}
-
-	/** TODO等待废弃,不建议再继续使用  [Gifur@2025114]*/
-	ErrorCodeEnum TransECWithRepeat(const ErrorCodeEnum& ec)
-	{
-		ErrorCodeEnum result(ec);
-		if (ec != Error_Succeed) {
-			if (!m_bOpened) {
-				result = Error_DevNotAvailable;
-			} else if (0 < CountDevError(this->GetEntityBase())) {
-				result = Error_DevFailAddUp;
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("exceed max allow repeat error times! 0x%x -> 0x%x", ec, result);
-			}
-		}
-		return result;
-	}
-
 	virtual ErrorCodeEnum PreOpenDevice() { return Error_Succeed; }
 	virtual ErrorCodeEnum ToOpenDevice() { return Error_NotImpl; }
 	virtual ErrorCodeEnum PostOpenDevice() { return Error_Succeed; }
@@ -860,7 +797,6 @@ public:
 			}
 
 			if (trigger) {
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("just test EVT_MAINPAGE_DISPLAY");
 				this->PostEventFIFO(new FSMEvent(EVT_MAINPAGE_DISPLAY));
 			}
 		}
@@ -874,9 +810,8 @@ public:
 	}
 
 public:
-
-		bool m_bOpened;
-		bool m_bOpening;
+	bool m_bOpened;
+	bool m_bOpening;
 
 protected:
 
@@ -885,7 +820,6 @@ protected:
 	int m_iInWhatPage/*在哪个页面,区分首页,用户桌面,其他页*/;
 
 	ErrorPackageEx m_errPkgEx;
-	unsigned int m_contiErrTimes;
 	AdapterInfo m_adapterInfo;
 	DevStateEnum m_eDevState;
 
@@ -896,6 +830,8 @@ protected:
 			auto err = this->GetEntityBase()->GetFunction()->GetSysVar("UIState", uiState);
 			if (err == Error_Succeed && !uiState.IsNullOrEmpty()) {
 				UiState2WhatPage(uiState);
+			} else if (err != Error_Succeed) {
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(RTAERR_SYSVAR_GET_FAILED)("Get sysVar for UIState failed:%s", SpStrError(err));
 			}
 		}
 	}
@@ -962,26 +898,25 @@ protected:
 		return ((dwVal >> 20) == m_entCode.dwEntityId);
 	}
 
-    static void GetFileSizeAndCalcHashValue(const char* fileName, int& fileSize, BYTE fileHash[32])
-    {
-        HANDLE hFile;
-        hFile = CreateFile(fileName, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-        if (hFile == INVALID_HANDLE_VALUE) {
-            fileSize = 0;
-            return;
-        }
-        fileSize = GetFileSize(hFile, NULL);
-        CloseHandle(hFile);
+	/** 目前没有调用方,暂时注释  [Gifur@2025711]*/
+	/*
+	static void GetFileSizeAndCalcHashValue(const char* fileName, int& fileSize, BYTE fileHash[32])
+	{
+		HANDLE hFile;
+		hFile = CreateFile(fileName, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+		if (hFile == INVALID_HANDLE_VALUE) {
+			fileSize = 0;
+			return;
+		}
+		fileSize = GetFileSize(hFile, NULL);
+		CloseHandle(hFile);
 
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to calc vendor dll hash");
-        SM3File(const_cast<char*>(fileName), fileHash);
-
-        return;
-    }
+		SM3File(const_cast<char*>(fileName), fileHash);
 
-	int CountDevError(CEntityBase *pEntityBase);
+		return;
+	}*/
 
-	
 	virtual bool IsInBusiness() const { 
 		return (m_iInWhatPage == PageType_Other); 
 	}
@@ -1021,7 +956,7 @@ inline ErrorCodeEnum CCommDevFSM<TFSM, TDevClass>::GetAndSplitDevErrInfo(
 	}
 
 	if (!m_hDevHelper) {
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("inst occurs nullptr !!!");
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setResultCode(DEVICE_FSM_DEVOBJ_NULLPTR)("inst occurs nullptr !!!");
 		return Error_Param;
 	}
 
@@ -1037,11 +972,12 @@ inline ErrorCodeEnum CCommDevFSM<TFSM, TDevClass>::GetAndSplitDevErrInfo(
 		}
 	} else {
 		if (bDisplayFunName) {
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetLastErr")("Invoke <%s> failed, and Dev_GLE failed returned EC: %s",
-				lpszFuncNameForDisplay, SpStrError(erroCode));
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)/*.setAPI("DevAdapter::GetLastErr")不纳入适配器消费,因为不好分配RTA,只做调研*/
+				.setResultCode(DEVICE_FSM_DEVGETLE_FAILED)("GetLastErr after %s failed returned: %s",lpszFuncNameForDisplay, SpStrError(erroCode)); 
 			csErrMsg = CSimpleStringA::Format("Invoke <%s> failed", lpszFuncNameForDisplay);
 		} else {
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetLastErr")("Dev_GLE failed returned EC: %s", SpStrError(erroCode));
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)/*.setAPI("DevAdapter::GetLastErr")不纳入适配器消费,因为不好分配RTA,只做调研*/
+				.setResultCode(DEVICE_FSM_DEVGETLE_FAILED)("GetLastErr failed returned: %s", SpStrError(erroCode));
 		}
 	}
 	/** reset vendor device error code to stop reporting to alarm [12/11/2020 Gifur] */
@@ -1050,40 +986,6 @@ inline ErrorCodeEnum CCommDevFSM<TFSM, TDevClass>::GetAndSplitDevErrInfo(
 	return erroCode;
 }
 
-//1:报错累计到上限,需要返回错误码给业务
-//0:报错累计未到上限,或者不需要计数 
-//-1:出现错误
-template<class TFSM, class TDevClass>
-int CCommDevFSM<TFSM, TDevClass>::CountDevError(CEntityBase* pEntityBase)
-{
-	static int iErrNumLimit = -1;
-	if (iErrNumLimit == -1) {
-		CSmartPointer<IConfigInfo> spCenterConfig;
-		ErrorCodeEnum eErrDev = pEntityBase->GetFunction()->OpenConfig(Config_CenterSetting, spCenterConfig);
-		if (eErrDev != Error_Succeed) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("open centersetting file failed!");
-			return -1;
-		} else {
-			int value(0);
-			spCenterConfig->ReadConfigValueInt("Common", "ErrUpperLimit", value);
-			if (0 == value) {
-				iErrNumLimit = 5;
-			} else if (0 > value) {
-				iErrNumLimit = 0;
-			} else {
-				iErrNumLimit = value;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("iErrNumLimit=%d", iErrNumLimit);
-			}
-		}
-	}
-	m_contiErrTimes++;
-	if (iErrNumLimit > 0 && m_contiErrTimes >= iErrNumLimit) {
-		return 1;
-	} else {
-		return 0;
-	}
-}
-
 template<class TFSM, class TDevClass>
 void CCommDevFSM<TFSM, TDevClass>::OnHardwareShakeHand(CSmartPointer<ITransactionContext> pTransactionContext)
 {

+ 3 - 3
Module/include/EventCode.h

@@ -449,9 +449,9 @@ ERROR_ACCESSAUTH_CONNECT_ACS_x}
 #define LOG_EVT_CARDGATESENSOR_OFF 0x2090000C		//卡嘴感应异物消失
 #define LOG_EVT_VIBRATIONSENSOR_OFF 0x2090000D		//震动消失
 //以上gpio部分和错误码改造的厂商错误冲突,需要调整,涉及到gpio和上下文感知的配置文件
-#define LOG_EVT_MOVEDETECT_ABNORMAL_WORKTIME	0x20980001		//移动检测不正常(工作时间)
-#define LOG_EVT_MOVEDETECT_ABNORMAL_OFFWORK		0x20980002		//移动检测不正常(非工作时间)
-#define LOG_EVT_MOVEDETECT_ABNORMAL 0x2090000C		//移动检测不正常
+//#define LOG_EVT_MOVEDETECT_ABNORMAL_WORKTIME	0x20980001		//移动检测不正常(工作时间)
+//#define LOG_EVT_MOVEDETECT_ABNORMAL_OFFWORK		0x20980002		//移动检测不正常(非工作时间)
+//#define LOG_EVT_MOVEDETECT_ABNORMAL 0x2090000C		//移动检测不正常
 
 
 

+ 2 - 20
Module/mod_HSPScanner/HSPSCanner_UserErrorCode.h

@@ -17,38 +17,20 @@
 #define HSPScanner_UserErrorCode_READ_IMAGE_FILE_FAILED			0x21700201
 #define HSPScanner_UserErrorCode_LOAD_DLLFILE_NOTEIXT			0x21700202
 #define HSPScanner_UserErrorCode_LOAD_DLLFILE_FAILED			0x21700203
-#define HSPScanner_UserErrorCode_DuplicateCancelPreview			0x21700204
-#define HSPScanner_UserErrorCode_GET_RDC_ADDR_FAILED			0x21700205
+#define HSPScanner_UserErrorCode_READ_IMAGE_FILE_ZERO			0x21700204
 #define HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED			0x21700206
-#define HSPScanner_UserErrorCode_UPLOAD_VENDORINFO				0x21700207
-#define HSPScanner_UserErrorCode_ROOT_INFO						0x21700208
+//
 #define HSPScanner_UserErrorCode_FSM_INVALID						0x21700209
-#define HSPScanner_UserErrorCode_DLLNAME_FAILED						0x2170020A
-#define HSPScanner_UserErrorCode_DLLNAME_NOCFG						0x2170020B
 #define HSPScanner_UserErrorCode_DEVICE_OFFLINE						0x2170020C
 #define HSPScanner_UserErrorCode_NOT_SUPPORT					0x2170020E
-#define HSPScanner_UserErrorCode_REAL_ROOT_CONFIG	0x2170020F
 
-#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_START			0x21700210
-#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGE_START  0x21700211
 #define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGEEX_START  0x21700212
 
-#define LOG_WARN_HSPS_READ_CONFIG_FILE_FAILED						0x21700213 //图片大小限制参数读取失败
-#define LOG_WARN_HSPS_OPENCV_READ_FAILED							0x21700214 //opencv读图片失败
-#define LOG_WARN_HSPS_OPENCV_WRITE_FAILED							0x21700215 //opencv写图片失败
 #define LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED					0x21700216 //图片缩小失败
-#define LOG_WARN_HSPS_RESIZE_IMAGEEX_FILE_FAILED				0x21700217 //ex图片缩小失败
-#define LOG_WARN_HSPS_RESIZE_FUNCTION_SUCCEED					0x21700218 //resize函数执行成功
 
-#define LOG_WARN_HSPS_VENDORDLL_KEBA_MATCHED	    0x2170021A //符合切换科堡适配器的告警
 #define LOG_WARN_HSPS_INVALID_OPERATION	    0x2170021B
 #define LOG_WARN_HSPS_OPENING_NOW 0x2170021C
 
-#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGE_SUCC   0x21700220
-#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGE_FAILED 0x21700221
-#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGEEX_SUCC   0x21700223
-#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGEEX_FAILED 0x21700224
-
 #define HSPScanner_UserErrorCode_FindFile_in_DepBak 0x21700225
 
 #define HSPScanner_UserErrorCode_SetParam_Color 0x21700226

+ 153 - 130
Module/mod_HSPScanner/HSPScannerFSM.cpp

@@ -34,50 +34,55 @@ const char* EvtTypeToString(int nEvtType)
 	switch (nEvtType)
 	{
 		T_STRINGY(USER_EVT_STARTPREVIEW)
-			T_STRINGY(USER_EVT_STARTPREVIEW_FINISHED)
-			T_STRINGY(USER_EVT_SETPROPERTYINVIEW_FINISHED)
+		T_STRINGY(USER_EVT_STARTPREVIEW_FINISHED)
+		T_STRINGY(USER_EVT_SETPROPERTYINVIEW_FINISHED)
 
-			T_STRINGY(USER_EVT_STARTPREVIEW_JS)
-			T_STRINGY(USER_EVT_STARTPREVIEW_JS_DONE)
+		T_STRINGY(USER_EVT_STARTPREVIEW_JS)
+		T_STRINGY(USER_EVT_STARTPREVIEW_JS_DONE)
 
-			T_STRINGY(USER_EVT_CANCELPREVIEW_JS)
-			T_STRINGY(USER_EVT_CANCELPREVIEW_JS_DONE)
+		T_STRINGY(USER_EVT_CANCELPREVIEW_JS)
+		T_STRINGY(USER_EVT_CANCELPREVIEW_JS_DONE)
 
-			T_STRINGY(USER_EVT_SCANIMAGE_JS)
-			T_STRINGY(USER_EVT_SCANIMAGE_JS_DONE)
+		T_STRINGY(USER_EVT_SCANIMAGE_JS)
+		T_STRINGY(USER_EVT_SCANIMAGE_JS_DONE)
 
-			T_STRINGY(USER_EVT_SETPARAM_JS)
+		T_STRINGY(USER_EVT_SETPARAM_JS)
 
-			T_STRINGY(USER_EVT_STOPPREVIEW)
-			T_STRINGY(USER_EVT_HIDEPREVIEW)
-			T_STRINGY(USER_EVT_STOPPREVIEW_FINISHED)
+		T_STRINGY(USER_EVT_STOPPREVIEW)
+		T_STRINGY(USER_EVT_HIDEPREVIEW)
+		T_STRINGY(USER_EVT_STOPPREVIEW_FINISHED)
 
-			T_STRINGY(USER_EVT_SETWINPOS)
-			T_STRINGY(USER_EVT_SETWINPOSFINISHED)
+		T_STRINGY(USER_EVT_SETWINPOS)
+		T_STRINGY(USER_EVT_SETWINPOSFINISHED)
 
-			T_STRINGY(USER_EVT_SHOWPROPERTY)
-			T_STRINGY(USER_EVT_SHOWPROPERTY_FINISHED)
+		T_STRINGY(USER_EVT_SCANIMAGE)
+		T_STRINGY(USER_EVT_SCANIMAGE_EX)
+		T_STRINGY(USER_EVT_SCANIMAGEFINISHED)
 
-			T_STRINGY(USER_EVT_SETPROPERTY)
-			T_STRINGY(USER_EVT_SETPROPERTY_FINISHED)
+		T_STRINGY(USER_EVT_SHOWPROPERTY)
+		T_STRINGY(USER_EVT_SHOWPROPERTY_FINISHED)
 
-			T_STRINGY(USER_EVT_GETSTATUS)
-			T_STRINGY(USER_EVT_GETINFO)
+		T_STRINGY(USER_EVT_SETPROPERTY)
+		T_STRINGY(USER_EVT_SETPROPERTY_FINISHED)
 
-			T_STRINGY(USER_EVT_DISCONNECT)
-			T_STRINGY(USER_EVT_RESET)
-			T_STRINGY(USER_EVT_EXIT)
-			T_STRINGY(USER_EVT_EXIT_FINISHED)
+		T_STRINGY(USER_EVT_GETSTATUS)
+		T_STRINGY(USER_EVT_GETINFO)
 
-			T_STRINGY(USER_EVT_GOTOHELL)
-			T_STRINGY(USER_EVT_QUIT)
-			T_STRINGY(USER_EVT_INIT)
-			T_STRINGY(USER_EVT_INIT_FINISHED)
+		T_STRINGY(USER_EVT_DISCONNECT)
 
-			T_STRINGY(EVT_INTERNAL)
-			T_STRINGY(EVT_TIMER)
-			T_STRINGY(EVT_MAINPAGE_DISPLAY)
-			T_STRINGY(EVT_USER)
+		T_STRINGY(USER_EVT_RESET)
+		T_STRINGY(USER_EVT_EXIT)
+		T_STRINGY(USER_EVT_EXIT_FINISHED)
+
+		T_STRINGY(USER_EVT_GOTOHELL)
+		T_STRINGY(USER_EVT_QUIT)
+		T_STRINGY(USER_EVT_INIT)
+		T_STRINGY(USER_EVT_INIT_FINISHED)
+
+		T_STRINGY(EVT_INTERNAL)
+		T_STRINGY(EVT_TIMER)
+		T_STRINGY(EVT_MAINPAGE_DISPLAY)
+		T_STRINGY(EVT_USER)
 	default:
 		return "Unknown EventType";
 		break;
@@ -128,18 +133,18 @@ CSimpleStringA CombineJsonContext4SetPreview(bool bOpen, const char* szMessage =
 	CSimpleStringA result(true);
 	if (szMessage == NULL || strlen(szMessage) == 0) {
 		if (bOpen) {
-			result = CSimpleStringA::Format("{\"PreviewSwitch\": ON}");
+			result = CSimpleStringA::Format("{\"PreviewSwitch\": \"ON\"}");
 		}
 		else {
-			result = CSimpleStringA::Format("{\"PreviewSwitch\": OFF}");
+			result = CSimpleStringA::Format("{\"PreviewSwitch\": \"OFF\"}");
 		}
 	}
 	else {
 		if (bOpen) {
-			result = CSimpleStringA::Format("{\"addition\": \"%s\", \"PreviewSwitch\": ON}", szMessage);
+			result = CSimpleStringA::Format("{\"addition\": \"%s\", \"PreviewSwitch\": \"ON\"}", szMessage);
 		}
 		else {
-			result = CSimpleStringA::Format("{\"addition\": \"%s\", \"PreviewSwitch\": OFF}", szMessage);
+			result = CSimpleStringA::Format("{\"addition\": \"%s\", \"PreviewSwitch\": \"OFF\"}", szMessage);
 		}
 	}
 	return  result;
@@ -184,7 +189,6 @@ ErrorCodeEnum CHSPScannerFSM::OnInit()
 	}
 	else {
 		FulfillAdapterInfoFrom(pEntity->vendorLibInfo);
-		LogWarn(Severity_Low, Error_Unexpect, HSPScanner_UserErrorCode_ROOT_INFO, (LPCTSTR)m_adapterInfo.adapterFilePath);
 		PostEventLIFO(new FSMEvent(USER_EVT_INIT));
 	}
 	return Error_Succeed;
@@ -212,7 +216,7 @@ void CHSPScannerFSM::s0_Idle_on_exit()
 
 unsigned int CHSPScannerFSM::s0_Idle_on_event(FSMEvent* e)
 {
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("s0_Idle_on_event: %s(%d), %d.", EvtTypeToString(e->iEvt), e->iEvt, e->param1);
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("s0_Idle_on_event: %s, %d.", EvtTypeToString(e->iEvt), e->param1);
 	unsigned int uRet = 0;
 	switch (e->iEvt)
 	{
@@ -301,6 +305,15 @@ unsigned int CHSPScannerFSM::s0_Idle_on_event(FSMEvent* e)
 			}
 		}
 		break;
+	/** 根据日志查看在空闲状态偶尔会收到取消预览的请求,兼容处理之(参照JS改造) [Gifur@2025613]*/
+	case USER_EVT_STOPPREVIEW:
+		{
+			StopPreviewTask* pTask = new StopPreviewTask(this);
+			StopPreviewEvent* pEvt = dynamic_cast<StopPreviewEvent*>(e);
+			pEvt->m_ctx->Answer(Error_Succeed);
+		}
+		e->SetHandled();
+		break;
 		// Add after ST !!! --Josephus at 12:37:15 2016129
 	case USER_EVT_SETWINPOS:
 		{
@@ -347,7 +360,6 @@ unsigned int CHSPScannerFSM::s0_Idle_on_event(FSMEvent* e)
 		break;
 	case USER_EVT_INIT:
 		e->SetHandled();
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("To open device.");
 		break;
 	case EVT_MAINPAGE_DISPLAY:
 	case USER_EVT_EXIT:
@@ -358,12 +370,8 @@ unsigned int CHSPScannerFSM::s0_Idle_on_event(FSMEvent* e)
 	break;
 	case USER_EVT_GOTOHELL:
 		e->SetHandled();
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("HSPScaner init failed!");
 		break;
 	default:
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("%s::UnHandle event ! %s", __FUNCTION__, EvtTypeToString(e->iEvt));
-		}
 		break;
 	}
 	return uRet;
@@ -602,9 +610,8 @@ unsigned int CHSPScannerFSM::s1_Preview_on_event(FSMEvent* e)
 		{
 			e->SetHandled();
 			if (m_dupFlag4ExitCancel) {
-				LogWarn(Severity_Low, Error_Debug, HSPScanner_UserErrorCode_DuplicateCancelPreview, CSimpleStringA::Format("%s::recv %s while CancelPreviewing", __FUNCTION__, EvtTypeToString(e->iEvt)));
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s::recv %s while CancelPreviewing", __FUNCTION__, EvtTypeToString(e->iEvt));
 				uRet = 1;
-				//TODO: need to settimer ??  [Gifur@202565]
 			}
 		}
 		break;
@@ -659,18 +666,20 @@ unsigned int CHSPScannerFSM::s2_on_event(FSMEvent* e)
 
 void CHSPScannerFSM::s3_Failed_on_entry()
 {
-	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Enter s3_Failed");
 	if (GetDevInitFlag()) {
 		SetLastUserCode(HSPScanner_UserErrorCode_FSM_INVALID);
 		const int nStatus = IsDevConnected();
 		if (nStatus == 0) {
 			PostEventFIFO(new FSMEvent(USER_EVT_DISCONNECT));
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Enter s3_Failed by Disconnected");
 		}
 		else if (nStatus == 1) {
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Enter s3_Failed by Others' reason");
 			ScheduleTimer(RESET_TIMER_ID, MILLISECOND_TO_RESET / 6);
 		}
 	}
 	else {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Enter s3_Failed by Device open failed");
 		SetDevState(DEVICE_STATUS_FAULT);
 	}
 }
@@ -695,7 +704,9 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 	case USER_EVT_STARTPREVIEW_JS:
 	{
 		JS::StartPreviewEvent* pEvt = dynamic_cast<JS::StartPreviewEvent*>(e);
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_StartPreviewJS).setResultCode(MapCode2RTAString(GetLastUserCode()))(GetDevInitFlag()? "高拍仪模块出现异常" : "高拍仪模块未打开");
+		if (GetDevInitFlag()) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_StartPreviewJS).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪模块出现异常");
+		}
 		pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 		e->SetHandled();
 	}
@@ -703,7 +714,9 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 	case USER_EVT_CANCELPREVIEW_JS:
 	{
 		JS::CancelPreviewEvent* pEvt = dynamic_cast<JS::CancelPreviewEvent*>(e);
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreviewJS).setResultCode(MapCode2RTAString(GetLastUserCode()))(GetDevInitFlag() ? "高拍仪模块出现异常" : "高拍仪模块未打开");
+		if (GetDevInitFlag()) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreviewJS).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪模块出现异常");
+		}
 		pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 		e->SetHandled();
 	}
@@ -711,7 +724,9 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 	case USER_EVT_SCANIMAGE_JS:
 	{
 		JS::ScanImageEvent* pEvt = dynamic_cast<JS::ScanImageEvent*>(e);
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImageJS).setResultCode(MapCode2RTAString(GetLastUserCode()))(GetDevInitFlag() ? "高拍仪模块出现异常" : "高拍仪模块未打开");
+		if (GetDevInitFlag()) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImageJS).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪模块出现异常");
+		}
 		pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 		e->SetHandled();
 	}
@@ -726,7 +741,6 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 			e->SetHandled();
 		}
 		else {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_SetParamJS).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪模块未打开");
 			pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 			e->SetHandled();
 		}
@@ -737,7 +751,6 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 		{
 			StartPreviewEvent* pEvt = dynamic_cast<StartPreviewEvent*>(e);
 			if (!GetDevInitFlag()) {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_StartPreview).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪模块未打开");
 				pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 			} else {
 				StartPreviewTask* pTask = new StartPreviewTask(this);
@@ -773,17 +786,16 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreview).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart)("HSPS_VIEW_HIDE");
 					} else {
 						//RTA2N0Q
-						SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_CancelPreview, CombineJsonContext("HSPS_VIEW_HIDE failed"));
+						SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_CancelPreview, CombineJsonContext("HSPS_VIEW_HIDE"));
 						SetLastUserCode(GetAlarmDEC());
 					}
-					pEvt->m_ctx->Answer(TransECWithRepeat(erroCode));
+					pEvt->m_ctx->Answer(erroCode);
 					FSMEvent* timerEvent = new FSMEvent(EVT_TIMER);
 					timerEvent->param1 = RESET_TIMER_ID;
 					PostEventFIFO(timerEvent);
 				}
 			} else {
 				StopPreviewEvent* pEvt = dynamic_cast<StopPreviewEvent*>(e);
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreview).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪设备未打开");
 				pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 			} 
 		}
@@ -914,7 +926,6 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 		{
 			GetDevStatusEvent* pEvt = dynamic_cast<GetDevStatusEvent*>(e);
 			if (!GetDevInitFlag()) {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_GetDevStatus).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪设备未打开");
 				pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 			} else {
 				GetDevStatusTask* pTask = new GetDevStatusTask(this);
@@ -928,7 +939,6 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 		{
 			GetDevInfoEvent* pEvt = dynamic_cast<GetDevInfoEvent*>(e);
 			if (!GetDevInitFlag()) {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_GetDevInfo).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪设备未打开");
 				pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 				e->SetHandled();
 			}
@@ -944,7 +954,6 @@ unsigned int CHSPScannerFSM::s3_Failed_on_event(FSMEvent* e)
 	{
 		SetWinPosEvent* pEvt = dynamic_cast<SetWinPosEvent*>(e);
         if (!GetDevInitFlag()) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_SetWinPos).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪设备未打开");
             pEvt->m_ctx->Answer(Error_DevNotAvailable, GetLastUserCode());
 			e->SetHandled();
 		}
@@ -1033,8 +1042,9 @@ unsigned int CHSPScannerFSM::s4_ScanImage_on_event(FSMEvent* e)
 void CHSPScannerFSM::s5_DeviceOff_on_entry()
 {
 	SetDevState(DEVICE_STATUS_CONNECTING);
-	LogWarn(Severity_Low, Error_DevNotAvailable, HSPScanner_UserErrorCode_DEVICE_OFFLINE, "高拍仪断开连接!");
 	SetLastUserCode(HSPScanner_UserErrorCode_DEVICE_OFFLINE);
+	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(MapCode2RTAString(GetLastUserCode()))("高拍仪断开连接!");
+	m_ullTS4Disconnect = SP::Module::Comm::RVCGetTickCount();
 	ScheduleTimer(CHECK_CONNECT_TIMER_ID, MILLISECOND_TO_CHECK_CONNECT);
 }
 
@@ -1097,13 +1107,18 @@ unsigned int CHSPScannerFSM::s5_DeviceOff_on_event(FSMEvent* e)
 				if (status.isConnected == 0) {
 					ScheduleTimer(CHECK_CONNECT_TIMER_ID, MILLISECOND_TO_CHECK_CONNECT);
 				}
-				else if (status.inShow == 1 && status.inPreview == 1) {
-					//回到预览状态
-					uRet = 2;
-				} else if(status.inShow == 0 && status.inPreview == 1) {
-					uRet = 3;
-				} else {
-					uRet = 1;
+				else {
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setCostTime(SP::Module::Comm::RVCGetTickCount() - m_ullTS4Disconnect)("高拍仪恢复连接");
+					if (status.inShow == 1 && status.inPreview == 1) {
+						//回到预览状态
+						uRet = 2;
+					}
+					else if (status.inShow == 0 && status.inPreview == 1) {
+						uRet = 3;
+					}
+					else {
+						uRet = 1;
+					}
 				}
 			} else {
 				//RTA2N09
@@ -1154,7 +1169,7 @@ void CHSPScannerFSM::s6_HidePreview_on_exit()
 
 unsigned int CHSPScannerFSM::s6_HidePreview_on_event(FSMEvent* e)
 {
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("s6_HidePreview_on_event: %s(%d), %d.", EvtTypeToString(e->iEvt), e->iEvt, e->param1);
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("s6_HidePreview_on_event: %s, %d.", EvtTypeToString(e->iEvt), e->param1);
 	unsigned int uRet = 0;
 	switch(e->iEvt)
 	{
@@ -1183,7 +1198,7 @@ unsigned int CHSPScannerFSM::s6_HidePreview_on_event(FSMEvent* e)
 	{
 		JS::CancelPreviewEvent* pEvt = dynamic_cast<JS::CancelPreviewEvent*>(e);
 		if (pEvt->m_ctx->Req.hide) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreviewJS)("current state is already hide preview");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreviewJS)("current state is already hide preview");
 			pEvt->m_ctx->Answer(Error_Succeed);
 		}
 		else {
@@ -1331,9 +1346,8 @@ unsigned int CHSPScannerFSM::s6_HidePreview_on_event(FSMEvent* e)
 		{
 			e->SetHandled();
 			if (m_dupFlag4ExitCancel) {
-				LogWarn(Severity_Low, Error_Debug, HSPScanner_UserErrorCode_DuplicateCancelPreview, CSimpleStringA::Format("%s::recv %s while CancelPreviewing", __FUNCTION__, EvtTypeToString(e->iEvt)));
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s::recv %s while CancelPreviewing", __FUNCTION__, EvtTypeToString(e->iEvt));
 				uRet = 1;
-				//TODO: need to settimer ??  [Gifur@202565]
 			}
 		}
 		break;
@@ -1580,7 +1594,7 @@ int CHSPScannerFSM::StartPreview(SpReqAnsContext<HSPScannerService_StartPreview_
 		/** 无论如何都打开一次灯,所以这里应该是有所冗余的  [Gifur@2025325]*/
 		ToSwithLight();
 	}
-	ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
+	ctx->Answer(erroCode, GetLastUserCode());
 	return nRes;
 }
 
@@ -1625,28 +1639,30 @@ int CHSPScannerFSM::StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_
 		/** 取消预览时如果仅仅是隐藏也会关闭灯  [Gifur@2025325]*/
 		ToSwithLight(false);
 	}
-	ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
+	ctx->Answer(erroCode, GetLastUserCode());
 	return nRes;
 }
 
-bool CHSPScannerFSM::ResizeImage(const CSimpleStringA& fileName, int kbSize)
+bool CHSPScannerFSM::ResizeImage(const CSimpleStringA& fileName, int kbSize, long& originSize, CSimpleStringA& retMsg)
 {
 	double rate; //limit rate
 	int width;
 	int height;
-	bool success = TRUE;
 
+	originSize = 0;
 	const int imageSize = kbSize * 1024;
+	if (imageSize == 0) return TRUE;
 
 	FILE* fHandle = fopen(fileName.GetData(), "rb");
 	if (!fHandle) {
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setAPI(__FUNCTION__)("fopen image %s for resize failed: %d", fileName.GetData(), errno);
+		retMsg = CSimpleStringA::Format("fopen image %s failed: %d", fileName.GetData(), errno);
 		return FALSE;
 	}
 
 	fseek(fHandle, 0, SEEK_END);
 	long fileSize = ftell(fHandle);
 	fclose(fHandle);
+	originSize = fileSize;
 	if (fileSize <= (imageSize)) {
 		return TRUE;
 	}
@@ -1654,19 +1670,16 @@ bool CHSPScannerFSM::ResizeImage(const CSimpleStringA& fileName, int kbSize)
     m_pEntity->GetFunction()->GetPath("Temp", backUpPath);
 	backUpFile = backUpPath + SPLIT_SLASH_STR + "backupHSPSCannerImage";
 	DeleteFileIfExisted(backUpFile);
-#ifndef _WIN32
 	fileutil_copy_file((LPCTSTR)backUpFile, (LPCTSTR)fileName);
-#else
-	CopyFileA(fileName, backUpFile, FALSE);
-#endif //NOT _WIN32
 
+	bool success = TRUE;
 	while (fileSize > imageSize)
 	{
 		rate = (double)fileSize / imageSize; 
 		rate = 1.0 / sqrt(rate); //width and height limit rate
 		cv::Mat img = cv::imread(fileName.GetData());
 		if (!img.data) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setAPI(__FUNCTION__)("Opencv READ failed!");
+			retMsg = CSimpleStringA::Format("Opencv READ failed!");
 			success = FALSE;
 			break;
 		}
@@ -1675,7 +1688,7 @@ bool CHSPScannerFSM::ResizeImage(const CSimpleStringA& fileName, int kbSize)
 		cv::resize(img, img, cv::Size(width * rate, height * rate));
 		const bool openwrite = cv::imwrite(fileName.GetData(), img);
 		if (!openwrite) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Opencv WRITE failed!");
+			retMsg = CSimpleStringA::Format("Opencv WRITE failed!");
 			success = FALSE;
 			break;
 		}
@@ -1688,11 +1701,7 @@ bool CHSPScannerFSM::ResizeImage(const CSimpleStringA& fileName, int kbSize)
 	}
 
 	if (!success) {
-#ifndef _WIN32
-		///*TODO(80374374@3/3/2023):  */
 		fileutil_copy_file((LPCTSTR)fileName, (LPCTSTR)backUpFile); //recover original img
-#endif //NOT _WIN32
-		CopyFileA(backUpFile, fileName, FALSE);
 		DeleteFileIfExisted(backUpFile);
 		return FALSE;
 	}
@@ -1711,18 +1720,18 @@ int CHSPScannerFSM::ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 	BOOL bRet = DelAndGetNewFileName(csImageFile);
 	if (!bRet) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImage).setResultCode(MapCode2RTAString(HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED))("Cleare previous image failed before ScanImage");
-		ctx->Answer(TransECWithRepeat(Error_Resource), HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED);
+		ctx->Answer(Error_Resource, HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED);
 		return 1;
 	}
-	///*TODO:  (80374374@2/20/2024)*/
+	long pictureSize(0), resizeSize(0);
 	ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
 	erroCode = m_hDevHelper->ScanImage((LPCTSTR)csImageFile);
 	ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
 	if (ISSUCCEEDED(erroCode)) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanImage").setCostTime(ullEnd - ullStart)("ScanImage succ");
-		///*TODO:  (80374374@2/20/2024)*/
-		if (!ResizeImage(csImageFile, m_dwMaxImageSize)) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode(MapCode2RTAString(LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED)).setAPI(__FUNCTION__)("HSPScanner resize image failed");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::ScanImage").setCostTime(ullEnd - ullStart)();
+		CSimpleStringA resizeMsg(true);
+		if (ExistsFileA(csImageFile) && !ResizeImage(csImageFile, m_dwMaxImageSize, pictureSize, resizeMsg)) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode(MapCode2RTAString(LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED)).setAPI(__FUNCTION__)("Resize image failed:%s", resizeMsg.GetData());
 		}
 		ctx->Ans.filePath = csImageFile;
 		CBlob& cbData = ctx->Ans.imageData;
@@ -1732,12 +1741,14 @@ int CHSPScannerFSM::ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 			fseek(fHandle, 0, SEEK_END);
 			long fileSize = ftell(fHandle);
 			if (fileSize <= 0) {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImage).setResultCode(MapCode2RTAString(tmpCode))("ftell(%s) error after invoking scanimage: %ld.", (LPCTSTR)csImageFile, fileSize);
+				LogWarn(Severity_Middle, Error_NotExist, HSPScanner_UserErrorCode_READ_IMAGE_FILE_ZERO, CSimpleStringA::Format("ftell(%s) error after invoking scanimage: %ld.", (LPCTSTR)csImageFile, fileSize));
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImage).setResultCode(MapCode2RTAString(HSPScanner_UserErrorCode_READ_IMAGE_FILE_ZERO))("ftell(%s) error after invoking scanimage: %ld.", (LPCTSTR)csImageFile, fileSize);
 				erroCode = Error_NotExist;
 				fclose(fHandle);
 				nRes = 4;
 			} else {
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("picture size:%ld", fileSize);
+				resizeSize = fileSize;
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("picture size:%ld", resizeSize);
 				cbData.Alloc(fileSize);
 				fseek(fHandle, 0, SEEK_SET);
 				fread(cbData.m_pData, 1, fileSize, fHandle);
@@ -1752,28 +1763,28 @@ int CHSPScannerFSM::ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 			nRes = 4;
 		}
 		if (ISSUCCEEDED(erroCode)) {
+			
 			// Additional ChangeTo Hide --Josephus at 11:32:29 2016/11/22
 			if (true/*TODO: */) {
 				ullStart = SP::Module::Comm::RVCGetTickCount();
 				ErrorCodeEnum eHide = m_hDevHelper->SetParam(HSPS_MODEL_VIEW, HSPS_VIEW_HIDE);
 				ullEnd = SP::Module::Comm::RVCGetTickCount();
 				if (ISSUCCEEDED(eHide)) {
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart)("HSPS_MODEL_VIEW::HSPS_VIEW_HIDE");
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart)("HSPS_VIEW_HIDE");
 					nRes = 6;
 				} else {
 					//RTA2N0Q
-					SetErrorAndLog(eHide, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_ScanImage, CombineJsonContext("HSPS_MODEL_VIEW::HSPS_VIEW_HIDE"));
+					SetErrorAndLog(eHide, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, "", CombineJsonContext("HSPS_VIEW_HIDE"));
 				}
 				/** 拍照成功虽然隐藏了但没有关闭灯  [Gifur@2025325]*/
 			}
-
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImage).setAPI(__FUNCTION__)("ScanImage succ");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImage).setAPI(__FUNCTION__)("ScanImage succ, originalPicSize:%ld, resizePicSize:%ld", pictureSize, resizeSize);
 		}
-		ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
+		ctx->Answer(erroCode, GetLastUserCode());
 	} else {
 		SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_ScanImage, "DevAdapter::ScanImage", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_ScanImage);
 		SetLastUserCode(GetAlarmDEC());
-		ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
+		ctx->Answer(erroCode, GetLastUserCode());
 		nRes = 2;
 	}
 	ClearPictureFileSure(1);
@@ -1790,7 +1801,7 @@ int CHSPScannerFSM::ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Re
 	BOOL bRet = DelAndGetNewFileName(csImageFile);
 	if (!bRet) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode(MapCode2RTAString(HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED))("Cleare previous image failed before ScanImageEx");
-		ctx->Answer(TransECWithRepeat(Error_Resource), HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED);
+		ctx->Answer(Error_Resource, HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED);
 		return 1;
 	}
 
@@ -1818,11 +1829,13 @@ int CHSPScannerFSM::ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Re
 		erroCode = m_hDevHelper->ScanImageEx(pBtImage, len, (LPCTSTR)csImageFile);
 		ullEnd = SP::Module::Comm::RVCGetTickCount();
 		if (erroCode == Error_Succeed) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::ScanImageEx").setCostTime(ullEnd - ullStart)("ScanImageEx suc %d, %d.", len, strlen((const char*)pBtImage));
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::ScanImageEx").setCostTime(ullEnd - ullStart)("len: %d, btLen:%d.", len, strlen((const char*)pBtImage));
 		}
 	}
 	if (ISSUCCEEDED(erroCode)) {
-		if (ResizeImage(csImageFile, m_dwMaxImageSize)) {
+		long pictureSize(0);
+		CSimpleStringA resizeMsg(true);
+		if (ResizeImage(csImageFile, m_dwMaxImageSize, pictureSize, resizeMsg)) {
 			FILE* fHandle = fopen(csImageFile.GetData(), "rb");
 			fseek(fHandle, 0, SEEK_END);
 			len = ftell(fHandle);
@@ -1834,7 +1847,7 @@ int CHSPScannerFSM::ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Re
 			fclose(fHandle);
 		}
 		else {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode(MapCode2RTAString(LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED)).setAPI(__FUNCTION__)("HSPScanner resize image failed");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode(MapCode2RTAString(LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED)).setAPI(__FUNCTION__)("Resize image failed:%s", resizeMsg.GetData());
 		}
 		ctx->Ans.filePath = csImageFile;
 		CBlob& cbData = ctx->Ans.imageData;
@@ -1850,19 +1863,19 @@ int CHSPScannerFSM::ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Re
 			ErrorCodeEnum eHide = m_hDevHelper->SetParam(HSPS_MODEL_VIEW, HSPS_VIEW_HIDE);
 			ullEnd = SP::Module::Comm::RVCGetTickCount();
 			if (ISSUCCEEDED(eHide)) {
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart)("HSPS_MODEL_VIEW::HSPS_VIEW_HIDE");
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart)("HSPS_VIEW_HIDE");
 				nRes = 6;
 			} else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart).setResultCode(MapCode2RTAString(HSPScanner_UserErrorCode_SetParam_Hide))("HSPS_MODEL_VIEW::HSPS_VIEW_HIDE failed: %s", SpStrError(eHide));
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart).setResultCode(MapCode2RTAString(HSPScanner_UserErrorCode_SetParam_Hide))("HSPS_VIEW_HIDE failed: %s", SpStrError(eHide));
 			}
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI(__FUNCTION__).setLogCode(HSPScannerService_LogCode_ScanImageEx)("ScanImageEx ctx: %s, %d.", (LPCTSTR)ctx->Ans.filePath, ctx->Ans.imageData.m_iLength);
 		}
-		ctx->Answer(TransECWithRepeat(erroCode));
+		ctx->Answer(erroCode);
 	} else {
 		//RTA2N06
 		SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_ScanImageEx, "DevAdapter::ScanImageEx", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_ScanImageEx);
 		SetLastUserCode(GetAlarmDEC());
-		ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
+		ctx->Answer(erroCode, GetLastUserCode());
 		nRes = 2;
 		}
 
@@ -1888,7 +1901,7 @@ int CHSPScannerFSM::ShowProperty(SpReqAnsContext<HSPScannerService_ShowProperty_
 	} else {
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ShowProperty).setAPI("DevAdapter::SetViewPos").setCostTime(ullEnd - ullStart)();
 	}
-	ctx->Answer(TransECWithRepeat(erroCode));
+	ctx->Answer(erroCode);
 	
 	DWORD dwStart = GetTickCount();
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Start to show Property dialog...");
@@ -1945,7 +1958,7 @@ int CHSPScannerFSM::SetWinPos(SpReqAnsContext<HSPScannerService_SetWinPos_Req,
 		erroCode = m_hDevHelper->SetViewPos(ctx->Req.pointX, ctx->Req.pointY, ctx->Req.nWidth);
 		const ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
 		if (ISSUCCEEDED(erroCode)) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetViewPos").setCostTime(ullEnd - ullStart)("x: %d, y: %d, w: %d", ctx->Req.pointX, ctx->Req.pointY, ctx->Req.nWidth);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetViewPos").setLogCode(HSPScannerService_LogCode_SetWinPos).setCostTime(ullEnd - ullStart)("x:%d, y:%d, w:%d", ctx->Req.pointX, ctx->Req.pointY, ctx->Req.nWidth);
 			m_nRecX = ctx->Req.pointX;
 			m_nRecY = ctx->Req.pointY;
 			m_nRecW = ctx->Req.nWidth;
@@ -1960,7 +1973,7 @@ int CHSPScannerFSM::SetWinPos(SpReqAnsContext<HSPScannerService_SetWinPos_Req,
 		erroCode = m_hDevHelper->SetParam(HSPS_MODEL_VIEW, value);
 		const ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
 		if (ISSUCCEEDED(erroCode)) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setCostTime(ullEnd - ullStart)("%d", value);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::SetParam").setLogCode(HSPScannerService_LogCode_SetWinPos).setCostTime(ullEnd - ullStart)("%d", value);
 		} else {
 			//RTA2N02
 			SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_SetWinPos);
@@ -1968,15 +1981,12 @@ int CHSPScannerFSM::SetWinPos(SpReqAnsContext<HSPScannerService_SetWinPos_Req,
 			nRes = 1;
 		}
 	}
-	if (ISSUCCEEDED(erroCode)) {
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_SetWinPos)("SetWinPos succ.");
-	}
-	else {
+	if (!ISSUCCEEDED(erroCode)) {
 		CSimpleStringA tmpRTA(true), tmpDesc(true);
 		if (GetEntityBase()->GetFunction()->GetVTMErrMsg(GetLastUserCode(), tmpDesc, tmpRTA) == Error_Succeed)
 			DbgToBeidou(ctx->link, "SetWinPos").setReturnCode(tmpRTA)();
 	}
-	ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
+	ctx->Answer(erroCode, GetLastUserCode());
 	return nRes;
 }
 
@@ -1995,7 +2005,7 @@ int CHSPScannerFSM::GetDevStatus(SpReqAnsContext<HSPScannerService_GetDevStatus_
 	else {
 		nRes = 1;
 	}
-	ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
+	ctx->Answer(erroCode, GetLastUserCode());
 	return nRes;
 }
 
@@ -2175,7 +2185,7 @@ void CHSPScannerFSM::SelfTest(EntityTestEnum eTestType,
 
 void CHSPScannerFSM::OnStateTrans(int iSrcState, int iDstState) 
 {
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("trans from %s to %s", GetStateName(iSrcState), GetStateName(iDstState));
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("trans from %s to %s", GetStateName(iSrcState), GetStateName(iDstState));
 	m_nSrcState = iSrcState;
 }
 
@@ -2225,6 +2235,7 @@ int CHSPScannerFSM::CancelPreview(SpReqAnsContext<HSPScannerService_CancelPrevie
 			ret = 1;
 		}
 		else {
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreviewJS)("HSPS_VIEW_HIDE");
 			ctx->Answer(Error_Succeed);
 		}
 	}
@@ -2265,22 +2276,27 @@ int CHSPScannerFSM::ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Re
 	erroCode = m_hDevHelper->ScanImage((LPCTSTR)csImageFile);
 	ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
 	if (ISSUCCEEDED(erroCode)) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanImage").setCostTime(ullEnd - ullStart)("ScanImage succ");
-		if (ctx->Req.compress > 0 && !ResizeImage(csImageFile, ctx->Req.compress/*KB*/)) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode(MapCode2RTAString(LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED)).setAPI(__FUNCTION__).setLogCode(HSPScannerService_LogCode_ScanImageJS).setCostTime(ullEnd - ullStart)("HSPScanner resize image failed");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setAPI("DevAdapter::ScanImage").setCostTime(ullEnd - ullStart)();
+		long pictureSize(0), resizeSize(0);
+		CSimpleStringA resizeMsg(true);
+		if (ctx->Req.compress > 0 && ExistsFileA(csImageFile) && !ResizeImage(csImageFile, ctx->Req.compress/*KB*/, pictureSize, resizeMsg)) {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode(MapCode2RTAString(LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED)).setAPI(__FUNCTION__).setLogCode(HSPScannerService_LogCode_ScanImageJS).setCostTime(ullEnd - ullStart)("Resize image failed:%s", resizeMsg.GetData());
 			SetLastUserCode(LOG_WARN_HSPS_RESIZE_IMAGE_FILE_FAILED);
 			erroCode = Error_Unexpect;
 			ret = 1;
 		}
 		else {
 			CSimpleStringA tmpMsg(true);
+			DWORD tmpCode(0);
 			CBlob& cbData = ctx->Ans.imageData;
 			FILE* fHandle = fopen(csImageFile, "rb");
 			if (fHandle) {
 				fseek(fHandle, 0, SEEK_END);
 				long fileSize = ftell(fHandle);
+				resizeSize = fileSize;
 				if (fileSize <= 0) {
 					tmpMsg = CSimpleStringA::Format("ftell(%s) error after invoking scanimage: %ld.", (LPCTSTR)csImageFile, fileSize);
+					tmpCode = HSPScanner_UserErrorCode_READ_IMAGE_FILE_ZERO;
 				}
 				else {
 					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("picture size:%ld", fileSize);
@@ -2292,20 +2308,19 @@ int CHSPScannerFSM::ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Re
 			}
 			else {
 				tmpMsg = CSimpleStringA::Format("fopen(%s) error after invoking scanimage: %d.", (LPCTSTR)csImageFile, errno);
+				tmpCode = HSPScanner_UserErrorCode_READ_IMAGE_FILE_FAILED;
 			}
 
-			if (tmpMsg.IsNullOrEmpty()) {
-				//Succ
+			if (!tmpCode) {//Succ
 				if (ctx->Req.hide && FAILURED(SetPreviewProperty(JS::PreviewSettings(false), HSPScannerService_LogCode_ScanImageJS))) {
 					erroCode = Error_Unexpect;
 					ret = 1;
 				}
 				else {
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImageJS).setAPI(__FUNCTION__)("ScanImage succ");
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImageJS).setAPI(__FUNCTION__)("ScanImage succ, originalPicSize:%ld, resizePicSize:%ld", pictureSize, resizeSize);
 				}
 			}
 			else {
-				const DWORD tmpCode(HSPScanner_UserErrorCode_READ_IMAGE_FILE_FAILED);
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImageJS).setResultCode(MapCode2RTAString(tmpCode))(tmpMsg.GetData());
 				SetLastUserCode(tmpCode);
 				erroCode = Error_Unexpect;
@@ -2387,7 +2402,7 @@ ErrorCodeEnum CHSPScannerFSM::SetPreviewProperty(const JS::PreviewSettings& val,
 
 	//////////////////////////////////////////////////////////////////////////
 	if (val.pos != 0) {
-		CSimpleStringA tmpParm = CSimpleStringA::Format("x(%d), y(%d), w(%d)", val.pos_x, val.pos_y, val.pos_w);
+		CSimpleStringA tmpParm = CSimpleStringA::Format("x:%d, y:%d, w:%d", val.pos_x, val.pos_y, val.pos_w);
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_USER)("Start to SetViewPos %s...", tmpParm.GetData());
 		const ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
 		erroCode = m_hDevHelper->SetViewPos(val.pos_x, val.pos_y, val.pos_w);
@@ -2489,7 +2504,7 @@ ErrorCodeEnum CHSPScannerFSM::DeleteFileIfExisted(LPCTSTR fileName)
 		}
 		else {
 			LogWarn(Severity_High, Error_Unexpect, HSPScanner_UserErrorCode_CLEAR_RESOURCE_FAILED, CSimpleStringA::Format(
-				"DeleteFile(%s) failed LastError(%d) at ResizeImage proc", fileName, GetLastError()));
+				"DeleteFile(%s) failed LastError(%d)", fileName, GetLastError()));
 			return Error_Unexpect;
 		}
 	}
@@ -2515,7 +2530,7 @@ void CHSPScannerFSM::InitialMaxResizeValue()
 ErrorCodeEnum CHSPScannerFSM::TryToOpenDevice()
 {
 	ErrorCodeEnum result(Error_Succeed);
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to open device...");
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to open device...");
 	ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
 	result = m_hDevHelper->DevOpen();
 	ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
@@ -2526,7 +2541,7 @@ ErrorCodeEnum CHSPScannerFSM::TryToOpenDevice()
 	}
 	else {
 		SetLastUserCode();
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(ullEnd - ullStart)("Open HSPS succ");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(ullEnd - ullStart)();
 		ullStart = SP::Module::Comm::RVCGetTickCount();
 		result = FulfillAdapterDevCategory();
 		ullEnd = SP::Module::Comm::RVCGetTickCount();
@@ -2537,12 +2552,17 @@ ErrorCodeEnum CHSPScannerFSM::TryToOpenDevice()
 		m_nRecY = 224;
 		m_nRecW = 1024;
 		ErrorCodeEnum ecInit = m_hDevHelper->SetViewPos(m_nRecX, m_nRecY, m_nRecW);
+		if (FAILURED(ecInit))
+			SetErrorAndLog(ecInit, MEC_DEVAPI_HSPSCANNER_SetViewPos, "DevAdapter::SetViewPos", __FUNCTION__, false);
 		ErrorCodeEnum ecInitScan = m_hDevHelper->SetParam(HSPS_MODEL_SCANSIZE, HSPS_SCAN_FULL);
+		if (FAILURED(ecInitScan))
+			SetErrorAndLog(ecInitScan, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, false, 0, "", CombineJsonContext("HSPS_SCAN_FULL"));
 		ErrorCodeEnum ecInitRotate = m_hDevHelper->SetParam(HSPS_MODEL_ROTATE, HSPS_ROTATE_NOANGLE);
+		if (FAILURED(ecInitRotate))
+			SetErrorAndLog(ecInitRotate, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, false, 0, "", CombineJsonContext("HSPS_ROTATE_NOANGLE"));
 		ErrorCodeEnum ecInitColor = m_hDevHelper->SetParam(HSPS_MODEL_COLOR, HSPS_COLOR_FULL);
-		if (FAILURED(ecInit) || FAILURED(ecInitScan) || FAILURED(ecInitRotate) || FAILURED(ecInitColor)) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ViewPos: %s, Scan: %s, rotate: %s, color: %s.", SpStrError(ecInit), SpStrError(ecInitScan), SpStrError(ecInitRotate), SpStrError(ecInitColor));
-		}
+		if (FAILURED(ecInitColor))
+			SetErrorAndLog(ecInitColor, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, false, 0, "", CombineJsonContext("HSPS_COLOR_FULL"));
 	}
 	return result;
 }
@@ -2564,6 +2584,9 @@ LPCTSTR CHSPScannerFSM::MapCode2RTAString(DWORD dwValue)
 	case 0x2170000C: /*未登记到资源管理平台*/
 		return "RTA2N0C";
 		break;
+	case 0x21700204: /*未登记到资源管理平台*/
+		return "RTA2N0S";
+		break;
 	case 0:
 	default:
 		return "SUC0000";

+ 15 - 15
Module/mod_HSPScanner/HSPScannerFSM.h

@@ -282,7 +282,7 @@ public:
 	int StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_Req,
 		HSPScannerService_CancelPreview_Ans>::Pointer ctx);
 	
-	bool ResizeImage(const CSimpleStringA& fileName, int kbSize);
+	bool ResizeImage(const CSimpleStringA& fileName, int kbSize, long& originSize, CSimpleStringA& retMsg);
 	
 	int ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 		HSPScannerService_ScanImage_Ans>::Pointer ctx);
@@ -339,7 +339,7 @@ private:
 	DWORD m_dwMaxImageSize;
 	bool m_lightOn;
 	bool m_dupFlag4ExitCancel;
-
+	ULONGLONG m_ullTS4Disconnect;
 private:
 
 	BOOL GetCurImageName(CSimpleStringA& csImagName, bool bExt = false);
@@ -390,7 +390,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreview)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreview).setAPI("StartPreviewEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -409,7 +409,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreview)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreview).setAPI("StopPreviewEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -428,7 +428,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImage)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImage).setAPI("ScanImageEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -447,7 +447,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageEx)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageEx).setAPI("ScanImageExEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -466,7 +466,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ShowProperty)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ShowProperty).setAPI("ShowPropertyEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -485,7 +485,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetProperty)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetProperty).setAPI("SetPropertyEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -504,7 +504,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetWinPos)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetWinPos).setAPI("SetWinPosEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -523,7 +523,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevStatus)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevStatus).setAPI("GetDevStatusEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -544,7 +544,7 @@ public:
 	{
 		if (m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevInfo)
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevInfo).setAPI("GetDevInfoEvent")
 				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 		}
@@ -565,7 +565,7 @@ namespace JS {
 		{
 			if (m_ctx != NULL)
 			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreviewJS)
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreviewJS).setAPI("StartPreviewEventJS")
 					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("StartPreviewEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 			}
@@ -583,7 +583,7 @@ namespace JS {
 		{
 			if (m_ctx != NULL)
 			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreviewJS)
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreviewJS).setAPI("CancelPreviewJSEvent")
 					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("CancelPreviewEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 			}
@@ -601,7 +601,7 @@ namespace JS {
 		{
 			if (m_ctx != NULL)
 			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageJS)
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageJS).setAPI("ScanImageJSEvent")
 					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("ScanImageEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 			}
@@ -619,7 +619,7 @@ namespace JS {
 		{
 			if (m_ctx != NULL)
 			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetParamJS)
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetParamJS).setAPI("SetParamJSEvent")
 					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("SetParamEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
 				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
 			}

+ 0 - 35
Module/mod_HSPScanner/mod_HSPScanner.cpp

@@ -3,7 +3,6 @@
 
 #include "stdafx.h"
 #include "mod_HSPScanner.h"
-#include "fileutil.h"
 
 void CHSPScannerServerSession::Handle_StartPreview(SpReqAnsContext<HSPScannerService_StartPreview_Req,
 	HSPScannerService_StartPreview_Ans>::Pointer ctx)
@@ -76,28 +75,24 @@ void CHSPScannerServerSession::Handle_Exit(SpOnewayCallContext<HSPScannerService
 void CHSPScannerServerSession::Handle_StartPreviewJS(SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer ctx)
 {
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_StartPreviewJS).setAPI(__FUNCTION__)(__FUNCTION__);
 	m_pEntity->StartPreviewJS(ctx);
 }
 
 void CHSPScannerServerSession::Handle_CancelPreviewJS(SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx)
 {
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreviewJS).setAPI(__FUNCTION__)(__FUNCTION__);
 	m_pEntity->CancelPreviewJS(ctx);
 }
 
 void CHSPScannerServerSession::Handle_ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer ctx)
 {
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImageJS).setAPI(__FUNCTION__)(__FUNCTION__);
 	m_pEntity->ScanImageJS(ctx);
 }
 
 void CHSPScannerServerSession::Handle_SetParamJS(SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer ctx)
 {
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_SetParamJS).setAPI(__FUNCTION__)(__FUNCTION__);
 	m_pEntity->SetParamJS(ctx);
 }
 
@@ -109,36 +104,6 @@ void CHSPScannerEntity::OnSysVarEvent(const char* pszKey, const char* pszValue,
 	}
 }
 
-#if defined(_MSC_VER)
-
-ErrorCodeEnum CHSPScannerEntity::CustomVendorLibInfo()
-{
-	/** 仅做调查使用  [Gifur@2024118]*/
-	if (vendorLibInfo.strVendor.Compare("keba", true) == 0
-		&& ((vendorLibInfo.strVersion == "7" && vendorLibInfo.strBatch == "1")
-			|| (vendorLibInfo.strVersion == "1" && vendorLibInfo.strBatch == "1"))) {
-		CSimpleStringA strExistDriver(true);
-		BOOL isNewOne(FALSE);
-		if (ExistsFileA("C:\\Program Files (x86)\\eloamDll_2.4\\bin\\eloamDll.dll")) {
-			strExistDriver = "C:\\Program Files (x86)\\eloamDll_2.4\\bin\\eloamDll.dll";
-			isNewOne = TRUE;
-		} else if (ExistsFileA("C:\\Program Files\\eloamDll_2.4\\bin\\eloamDll.dll")) {
-			strExistDriver = "C:\\Program Files\\eloamDll_2.4\\bin\\eloamDll.dll";
-			isNewOne = TRUE;
-		} else if (ExistsFileA("C:\\Program Files (x86)\\eloamDll_2.3\\bin\\eloamDll.dll")) {
-			strExistDriver = "C:\\Program Files (x86)\\eloamDll_2.3\\bin\\eloamDll.dll";
-		} else if (ExistsFileA("C:\\Program Files\\eloamDll_2.3\\bin\\eloamDll.dll")) {
-			strExistDriver = "C:\\Program Files\\eloamDll_2.3\\bin\\eloamDll.dll";
-		}
-		if (!strExistDriver.IsNullOrEmpty() && isNewOne) {
-			LogWarn(Severity_Low, Error_Debug, LOG_WARN_HSPS_VENDORDLL_KEBA_MATCHED, strExistDriver);
-		}
-	}
-	return Error_Succeed;
-}
-#endif //_MSC_VER
-
-
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CHSPScannerEntity)
 SP_END_ENTITY_MAP()

+ 0 - 5
Module/mod_HSPScanner/mod_HSPScanner.h

@@ -222,11 +222,6 @@ public:
 	virtual bool IsService() const { return true; }
 	virtual bool IsMultiThread() const { return true; }; 
 
-	protected:
-#if defined(_MSC_VER)
-		ErrorCodeEnum CustomVendorLibInfo();
-#endif //_MSC_VER
-
 private:
 	CHSPScannerFSM m_fsm;
 };

+ 1 - 0
Module/mod_chromium/CMethodInterface.h

@@ -8,6 +8,7 @@ namespace Chromium {
 	class CMedthodInterface {
 	public:
 		bool m_forceNewReturn;
+		std::string mEntityName;
 		std::string mMethodName;
 		std::string mMethodType;
 		CTransStruct mRequestInterpreter;

+ 24 - 10
Module/mod_chromium/CModTools.cpp

@@ -408,8 +408,18 @@ namespace Chromium {
 		if (stopAll)
 			killAllChromium();
 		else
-			LogWarn(Severity_Low, Error_NotSupport, LOG_WARN_CHROMIUM_NOT_SUPPORT_TOKILL_SPECIFIED_BROWSER,
-					CSimpleStringA::Format("StopChromiumBrowser: %s", reason._to_string()));
+		{
+			CSimpleStringA strBasePath(true);
+			this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
+			std::string strPath(strBasePath.GetData());
+			std::string stopBrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "stopBrowser.sh";
+			stopBrowser_path.append(" --vtm_browser_type=").append(reason._to_string());
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("StopChromiumBrowser cmdline:%s", stopBrowser_path.c_str());
+			do {
+				boost::process::child child_process(stopBrowser_path);
+				child_process.wait();
+			} while (false);
+		}
 #endif //_MSC_VER
 	}
 
@@ -599,8 +609,8 @@ namespace Chromium {
 		CSimpleStringA strBasePath(true);
 		this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
 		std::string strPath(strBasePath.GetData());
-		const std::string execute_newbrowser_path = strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
-		const std::string execute_oldbrowser_path = strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
+		const std::string execute_newbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
+		const std::string execute_oldbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
 		CSimpleStringA strParams(true);
 		if (width > 0 && height > 0)
 			strParams.Append(" --window-size=").Append(std::to_string(width).c_str()).Append(",").Append(std::to_string(height).c_str());
@@ -669,6 +679,7 @@ namespace Chromium {
 			CSimpleStringA usrDataPath(tempPath);
 			usrDataPath.Append(SPLIT_SLASH_STR).Append("UOSBrowserConfig_").Append(name.c_str());
 			strParams.Append(" --user-data-dir=").Append(usrDataPath);
+			strParams.Append(" --vtm_browser_type=").Append(name.c_str());
 
 			CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
 			if (ConfigManager::getInstance().m_withDebugMode)
@@ -706,6 +717,7 @@ namespace Chromium {
 			CSimpleStringA usrDataPath(tempPath);
 			usrDataPath.Append(SPLIT_SLASH_STR).Append("BrowserConfig_").Append(name.c_str());
 			strParams.Append(" --user-data-dir=").Append(usrDataPath);
+			strParams.Append(" --vtm_browser_type=").Append(name.c_str());
 			CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
 			if (ConfigManager::getInstance().m_withDebugMode)
 				strParams.Append(" --enable-logging --vmodule=*/webrtc/*=2,*/media/*=2 --log-file=").Append(debug_log_path);
@@ -787,11 +799,11 @@ namespace Chromium {
         CSimpleStringA strBasePath(true);
         this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
         std::string strPath(strBasePath.GetData());
-        const std::string execute_newbrowser_path = strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
-        const std::string execute_oldbrowser_path = strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
+        const std::string execute_newbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
+        const std::string execute_oldbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
 
 		std::string name = "";
-		if (pageType == 0 || pageType == 2 || pageType == 3) {
+		if (pageType == 0) {
 			name = (+ERR_PAGE_REASON::main)._to_string();
 		}
 		else if (pageType == 1) {
@@ -891,6 +903,7 @@ namespace Chromium {
                 usrDataPath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserConfigMain_").Append((+ERR_PAGE_REASON::OutsideRequest)._to_string());
             }
             strParams.Append(" --user-data-dir=").Append(usrDataPath);
+			strParams.Append(" --vtm_browser_type=").Append(name.c_str());
 
 			CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
 			if (ConfigManager::getInstance().m_withDebugMode)
@@ -967,6 +980,7 @@ namespace Chromium {
                 cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("BrowserConfigMain_").Append((+ERR_PAGE_REASON::OutsideRequest)._to_string());
             }
             strParams.Append(" --user-data-dir=").Append(usrDataPath);
+			strParams.Append(" --vtm_browser_type=").Append(name.c_str());
 			CSimpleStringA debug_log_path = usrDataPath + "/chrome_debug.log";
 			if (ConfigManager::getInstance().m_withDebugMode)
 				strParams.Append(" --enable-logging --vmodule=*/webrtc/*=2,*/media/*=2 --log-file=").Append(debug_log_path);
@@ -1138,7 +1152,7 @@ namespace Chromium {
 			if (!checkRet.first)
 			{
 				LogWarn(Severity_High, Error_NetBroken, LOG_WARN_CHROMIUM_INSTALL_URLS_CHECK,
-					CSimpleString::Format("install page check err, can not connect to %s or %s", installUrls[0].c_str(), installUrls[1].c_str()).GetData());
+					CSimpleString::Format("install page check err, can not connect to %s", installUrls[0].c_str()));
 			}
 			std::string dstInstallUrl = checkRet.first ? checkRet.second : installUrls[0];
 			CSimpleString runningVer = "";
@@ -1450,8 +1464,8 @@ namespace Chromium {
         CSimpleStringA strBasePath(true);
         this->m_pEntity->GetFunction()->GetPath("BaseDir", strBasePath);
         std::string strPath(strBasePath.GetData());
-        const std::string execute_newbrowser_path = strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
-        const std::string execute_oldbrowser_path = strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
+        const std::string execute_newbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startBrower.sh";
+        const std::string execute_oldbrowser_path = "sudo " + strPath + SPLIT_SLASH_STR + "res" + SPLIT_SLASH_STR + "RunScript" + SPLIT_SLASH_STR + "startUOSBrower.sh";
 
 		int result(0);
 		std::string additional("");

+ 4 - 3
Module/mod_chromium/CStructureInterpreter.cpp

@@ -45,6 +45,8 @@ namespace Chromium {
 		std::string strEntityName = pEntity->Attribute("name");
 		std::vector<CMedthodInterface> messageInterface;
 		this->loadMessageInterface(messageInterface, pEntity);
+		for (auto &it : messageInterface)
+			it.mEntityName = strEntityName;
 		this->mMessageStructureMap.insert(std::pair<std::string, std::vector<CMedthodInterface>>(strEntityName, messageInterface));
 		// get class node
 		tinyxml2::XMLElement* pClass = pEntity->FirstChildElement("class");
@@ -53,6 +55,8 @@ namespace Chromium {
 		std::string strClassName = pClass->Attribute("name");
 		std::map<int, CMedthodInterface> functionInterface;
 		this->loadFunctionInterface(functionInterface, pClass);
+		for (auto &it : functionInterface)
+			it.second.mEntityName = strEntityName;
 		m_inServiceEntity.insert(strEntityName);
 		this->mMethodStructureMap.insert(std::pair<std::string, std::map<int, CMedthodInterface>>(strEntityName.append(strClassName), functionInterface));
 		
@@ -96,9 +100,6 @@ namespace Chromium {
 				functionInterface.insert(std::pair<int, CMedthodInterface>(i, method));
 			}
 			
-			
-
-
 			//		functionInterface.emplace_back(method);
 			element = element->NextSiblingElement();
 		}

+ 2 - 0
Module/mod_chromium/CWSCodec.cpp

@@ -682,6 +682,8 @@ namespace Chromium {
 				free(str);
 				return s;
 			}
+			if(iter->second->size() > 0)
+				msgInfo.entityName = iter->second->at(0).mEntityName;
 			DeserializeEvent(msg, iter->second, rpos, ret, isSafe);
 		}
 

+ 12 - 8
Module/mod_chromium/CWebsocketServer.cpp

@@ -1297,17 +1297,20 @@ namespace Chromium {
 		}
 		else
 		{
+			/*
 			if (ConfigManager::getInstance().m_withLinkLog)
 				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("WebSocket Search message_from_socket : json = %s", js.c_str());
 			else if (messageType != MessageType::RequestAck && messageType != MessageType::Event)//do not upload message which messageType equals to RequestAck or Event
 				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("WebSocket Search message_from_socket : json = %s", js.c_str());
+			*/
 			if (js.empty())
 			{
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("string empty");
 				return;
 			}
-			if (ConfigManager::getInstance().m_connection_hdls.empty() && ConfigManager::getInstance().m_connection_ws_sm2_hdls.empty())
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("message_from_socket : no websocket client connection");
+			if (ConfigManager::getInstance().m_connection_hdls.empty() && ConfigManager::getInstance().m_connection_ws_sm2_hdls.empty() && messageType != MessageType::Event)
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)
+					("message_from_socket : no websocket client connection, messageType:%s", GetMessageTypeString(messageType));
 			else {
 #if(defined _WIN32 || defined _WIN64)
 				js = string_to_utf8(js);
@@ -1331,12 +1334,13 @@ namespace Chromium {
 		// get message from socket and deserialize 
 		// then send back to the web client
 		auto bufferLength = msg.getBufferLength();
+		
 		/*
 		if (bufferLength > MAX_TRANSFER_LEN)
-			DbgEx("WebSocket Search message_from_socket : buffer len = %d, buffer pre50:%s", msg.getBufferLength(), msg.printfHEX(50).c_str());
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("WebSocket Search message_from_socket : buffer len = %d, buffer pre50:%s", msg.getBufferLength(), msg.printfHEX(50).c_str());
 		else
 			receivehexdump(msg.getPayload(), msg.getLength());
-			*/
+		*/
 		//else
 		//	DbgEx("WebSocket Search message_from_socket : buffer len = %d", msg.getBufferLength());
 
@@ -1384,14 +1388,14 @@ namespace Chromium {
 				unaccurate_js = js;
 			}
 			auto signatureID = msg.getSignatureID();
-			auto sessionId = msg.getSessionID();
-			auto sessionEntityName = EntitySessionManager::FromSessionIdToEntityName(sessionId);
+			auto sessionId = cur_from_socket.sessionId;
+			auto sessionEntityName = cur_from_socket.entityName;
 			if (sendArr.size() == 0)
-				LogManager::getInstance().logVtmEvent(-1, -1, sessionId, sessionEntityName.second, 0, "send", sendArr,
+				LogManager::getInstance().logVtmEvent(-1, -1, sessionId, sessionEntityName, 0, "send", sendArr,
 					cur_from_socket.payLoad, cur_from_socket.msgBytes, Error_NotExist, "message_from_socket event sendArr.size() == 0");
 			else if (signatureID != eMsgSig_LogInfo && signatureID != eMsgSig_EntityStatus && signatureID != eMsgSig_PerformanceList)//fiter guiconsole msg
 			{
-				LogManager::getInstance().logVtmEvent(-1, -1, sessionId, sessionEntityName.second, 0, "send", sendArr,
+				LogManager::getInstance().logVtmEvent(-1, -1, sessionId, sessionEntityName, 0, "send", sendArr,
 					cur_from_socket.payLoad, cur_from_socket.msgBytes);
 				/*
 #ifdef DEVOPS_ON_ST 

+ 3 - 33
Module/mod_chromium/mod_chromium.cpp

@@ -872,16 +872,8 @@ namespace Chromium {
 
 				if (ConfigManager::getInstance().m_existRootIni && ConfigManager::getInstance().m_installMode)
 					return;//if root.ini exist and in install mode, do not close startup page
-#if defined(RVC_OS_LINUX)
-				for (auto it : srcPids)
-				{
-					CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
-					system(cmd.GetData());
-				}
-#else
+
 				CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
-#endif
 				startupPageClean();
 				return;
 			}
@@ -993,9 +985,6 @@ namespace Chromium {
 		{
 			if (CModTools::get_mutable_instance().IsConfigWork())//url正常时才关闭
 			{
-#if defined(RVC_OS_LINUX)
-				auto srcPids = getUosBrowserPIDs(CModTools::get_mutable_instance().getUosBrowser());
-#endif // RVC_OS_UOS
 
 				if (ConfigManager::getInstance().m_runAd) openAdPage();
 				openMainPage();
@@ -1004,16 +993,9 @@ namespace Chromium {
 				std::this_thread::sleep_for(std::chrono::seconds(3));
 				LogWarn(Severity_Low, Error_Debug, LOG_SLV_CHROMIUM_URLOPEN, "正在启动业务界面");
 
-#if defined(RVC_OS_LINUX)
-				for (auto it : srcPids)
-				{
-					CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
-					system(cmd.GetData());
-				}
-#else
+
 				CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
-#endif
+
 				startupPageClean();
 
 				//DbgEx("UnregistSysVarEvent TerminalStage %s", Error_Succeed == GetFunction()->UnregistSysVarEvent("TerminalStage") ? "success" : "fail");
@@ -1036,22 +1018,10 @@ namespace Chromium {
 		{
 			if (!ConfigManager::getInstance().m_withBrowser)
 			{
-#if defined(RVC_OS_LINUX)
-				auto srcPids = getUosBrowserPIDs(CModTools::get_mutable_instance().getUosBrowser());
-#endif // RVC_OS_UOS
 
 				if (ConfigManager::getInstance().m_existRootIni && ConfigManager::getInstance().m_installMode)
 					return;//if root.ini exist and in install mode, do not close startup page
-#if defined(RVC_OS_LINUX)
-				for (auto it : srcPids)
-				{
-					CSimpleStringA cmd = CSimpleStringA::Format("sudo kill -9 %d", it);
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CloseCommonPage %s", cmd.GetData());
-					system(cmd.GetData());
-				}
-#else
 				CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::startup);
-#endif
 				startupPageClean();
 				ERR_PAGE_REASON reson = ERR_PAGE_REASON::breakdown;
 				if (0 == CSimpleStringA("S").Compare(terminalStageVal.c_str(), true))

+ 122 - 168
Module/mod_gpio/GpioFSM.cpp

@@ -8,6 +8,7 @@ const int INPUT_PORT_2 = 2;
 const int MAX_MOVE_HOLD_TIMES = 5000;
 const int ON_EVENT_DETECT_TIMOUE_MILLSECS = 500;
 const int REPEAT_FIRE_TIMEOUT_VALUE = 10000; //10s
+const int REPEAT_FIRE_TIMEOUT_TIMES = (REPEAT_FIRE_TIMEOUT_VALUE / ON_EVENT_DETECT_TIMOUE_MILLSECS);
 const int TRY_FILED_TIMES_VALUE = 10;
 
 #define SETBIT(x,y) x|=(1<<(y))
@@ -258,7 +259,6 @@ CGPIOFSM::CGPIOFSM(void) :m_ePickUpFlag(UnknownStatus),m_bVibrationFlag(false),
 
 ErrorCodeEnum CGPIOFSM::OnInit()
 {
-	LOG_FUNCTION();
 	ErrorCodeEnum erroCode = Error_Succeed, eErrDev = Error_Succeed;
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Source Code complied at: %s %s", __DATE__, __TIME__);
 	auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
@@ -268,13 +268,12 @@ ErrorCodeEnum CGPIOFSM::OnInit()
 	CSimpleStringA strNoUse(true);
 	erroCode = pEntity->ExtractVendorLibFullPath(strNoUse);
 	if (erroCode != Error_Succeed) {
+		//TODO: RTA  [Gifur@202577]
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("load vendor dll or so(%s) failed, ec=%s", strNoUse.GetData(), SpStrError(erroCode));
 		SetDevInitingFlag(false);
 		return Error_DevLoadFileFailed;
 	}
-
 	FulfillAdapterInfoFrom(pEntity->vendorLibInfo);
-	LogWarn(Severity_Low, Error_Unexpect, GPIO_UserErrorCode_RootInfo, (LPCTSTR)m_adapterInfo.adapterFilePath);
 	erroCode = LoadUpAdapterLibrary();
 	if (erroCode != Error_Succeed) {
 		SetDevInitingFlag(false);
@@ -294,24 +293,22 @@ ErrorCodeEnum CGPIOFSM::OnInit()
 		m_bNewVersion = TRUE;
 		initParam.dwPortNum = 4;
 		initParam.dir[3] = true;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("New available 4 port num");
 	}
 
-	int initTries = 0;
-	ErrorCodeEnum err;
 	do {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to open device...port(%d), baudrate(%d).", m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to open device...port: % d, baudrate : % d, portnum : % d",
+			m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt(), m_adapterInfo.GetPortNumInt());
 		ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
-		err = m_hDevHelper->DevOpen(initParam);
+		erroCode = m_hDevHelper->DevOpen(initParam);
 		ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
-		if (err == Error_Succeed) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(ullEnd - ullStart)("open device succ");
+		if (erroCode == Error_Succeed) {
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(ullEnd - ullStart)();
 			DevCategoryInfo devCatInfo;
 			ZeroMemory(devCatInfo.szModel, sizeof(devCatInfo.szModel));
 			ZeroMemory(devCatInfo.szType, sizeof(devCatInfo.szType));
 			ZeroMemory(devCatInfo.szVendor, sizeof(devCatInfo.szVendor));
 			ullStart = SP::Module::Comm::RVCGetTickCount();
-			err = m_hDevHelper->GetDevCategory(devCatInfo);
+			ErrorCodeEnum err = m_hDevHelper->GetDevCategory(devCatInfo);
 			ullEnd = SP::Module::Comm::RVCGetTickCount();
 			if (err == Error_Succeed) {
 				m_adapterInfo.FulfillCategoryInfo(devCatInfo);
@@ -327,37 +324,31 @@ ErrorCodeEnum CGPIOFSM::OnInit()
 				SetErrorAndLog(err, GPIO_UserErrorCode_GetDevCategory_Failed, "DevAdapter::GetDevCategory", "FulfillAdapterDevCategory", false, ullEnd - ullStart);
 			}
 			SetDevInitFlag(true);
-			break;
 		}
 		else {
-			SetErrorAndLog(err, GPIO_UserErrorCode_DevOpen_Failed, "DevAdapter::DevOpen", __FUNCTION__, false, ullEnd - ullStart);
-			Sleep(300);
-			initTries++;
-			continue;
+			SetErrorAndLog(erroCode, GPIO_UserErrorCode_DevOpen_Failed, "DevAdapter::DevOpen", __FUNCTION__, false, ullEnd - ullStart,"",
+				CSimpleStringA::Format("{\"port\":%d, \"baudrate\":%d, \"portnum\":%d}", m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt(), m_adapterInfo.GetPortNumInt()));
 		}
-	} while (initTries < MAX_GPIO_INIT_TRIES);
+	} while (false);
 
-	if (!GetDevInitFlag()) {
-		err = Error_DevConnFailed;
-	}
-	else {
+	if (GetDevInitFlag()) {
 		if (!m_bFuncVer2) {
 			ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
 			eErrDev = m_hDevHelper->WritePort(0, 0x00);
 			ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
 			if (eErrDev != Error_Succeed)
-				SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("WritePort(0) after DevOpen"));
+				SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetPort0 after DevOpen"));
 			ullStart = SP::Module::Comm::RVCGetTickCount();
 			eErrDev = m_hDevHelper->WritePort(1, 0x00);
 			ullEnd = SP::Module::Comm::RVCGetTickCount();
 			if (eErrDev != Error_Succeed)
-				SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("WritePort(1) after DevOpen"));
+				SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetPort1 after DevOpen"));
 			if (m_bNewVersion) {
 				ullStart = SP::Module::Comm::RVCGetTickCount();
 				eErrDev = m_hDevHelper->WritePort(3, 0x00);
 				ullEnd = SP::Module::Comm::RVCGetTickCount();
 				if (eErrDev != Error_Succeed)
-					SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("WritePort(3) after DevOpen"));
+					SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetPort3 after DevOpen"));
 			}
 		}
 		else {
@@ -366,16 +357,13 @@ ErrorCodeEnum CGPIOFSM::OnInit()
 			eErrDev = m_hDevHelper->SetStatus(GPIO_DEV_SN_LIGHT_SENSOR_ALL, GPIO_DEV_LIGHT_MODE_RESET);
 			ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
 			if (eErrDev != Error_Succeed)
-				SetErrorAndLog(eErrDev, GPIO_UserErrorCode_SetStatus_Failed, "DevAdapter::SetStatus", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("SetStatus after DevOpen"));
+				SetErrorAndLog(eErrDev, GPIO_UserErrorCode_SetStatus_Failed, "DevAdapter::SetStatus", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetStatus after DevOpen"));
 #endif //RVC_OS_LINUX
 		}
 		SetDevState(DEVICE_STATUS_NORMAL);
 	}
 	SetDevInitingFlag(false);
-	m_moveHoldTimes = MAX_MOVE_HOLD_TIMES;//oiltmp about 5000*300ms = 25 minutes
-	m_moveDisappearTimes = m_moveHoldTimes;
-	return err;
-
+	return erroCode;
 }
 
 void CGPIOFSM::AfterInit()
@@ -457,105 +445,100 @@ void CGPIOFSM::OnLogEvent(DWORD dwUserCode)
 	switch (dwUserCode) {
 	case LOG_EVT_CARDISSUER_GREEN_ON:
 	case LOG_EVT_CARDISSUER_STORE_GREEN_ON:
+		Req.devseq = CARDREADER;
+		Req.mode = 1; //flick
+		break;
+	case LOG_EVT_CARDISSUER_GREEN_OFF:
+	case LOG_EVT_CARDISSUER_STORE_GREEN_OFF:
 		Req.devseq = CARDREADER;
 		Req.mode = 1;
+		Req.close = 1;
 		break;
 	case LOG_EVT_CARDISSUER_RED_ON:
 		Req.devseq = CARDREADER_RED;
-		Req.mode = 1;
+		Req.mode = 0; //substain
+		break;
+	case LOG_EVT_CARDISSUER_RED_OFF:
+		Req.devseq = CARDREADER_RED;
+		Req.mode = 0; //substain
+		Req.close = 1;
 		break;
 	case LOG_EVT_IDCERTIFICATE_GREEN_ON:
+		Req.devseq = IDCERTIFICATE;
+		Req.mode = 1; //flick
+		break;
+	case LOG_EVT_IDCERTIFICATE_GREEN_OFF:
 		Req.devseq = IDCERTIFICATE;
 		Req.mode = 1;
+		Req.close = 1;
 		break;
 	case LOG_EVT_FINGERPRINT_GREEN_ON:
+		Req.devseq = FINGERPRINT;
+		Req.mode = 1; //flick
+		break;
+	case LOG_EVT_FINGERPRINT_GREEN_OFF:
 		Req.devseq = FINGERPRINT;
 		Req.mode = 1;
+		Req.close = 1;
 		break;
 	case LOG_EVT_PINPAD_GREEN_ON:
 		Req.devseq = PINPAD;
-		Req.mode = 1;
-		break;
-	case LOG_EVT_HEADLIGHT_GREEN_ON:
-		Req.devseq = HEADLIGHT;
-		Req.mode = 0;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("machine light on");
+		Req.mode = 1; //flick
 		break;
-	case LOG_EVT_HEADLIGHT_RED_ON:
-		Req.devseq = HEADLIGHT_RED;
+	case LOG_EVT_PINPAD_GREEN_OFF:
+		Req.devseq = PINPAD;
 		Req.mode = 1;
+		Req.close = 1;
 		break;
 	case LOG_EVT_CONTACTLESS_CARD_GREEN_ON:
 		Req.devseq = CONTACTLESSCARD;
-		Req.mode = 1;
-		break;
-	case LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_ON:
-		Req.devseq = HEADLIGHT_ASSIST;
-		Req.mode = 1;
+		Req.mode = 1; //flick
 		break;
-	case LOG_EVT_CARDISSUER_GREEN_OFF:
-	case LOG_EVT_CARDISSUER_STORE_GREEN_OFF:
-		Req.devseq = CARDREADER;
-		Req.mode = 1;
-		Req.close = 1;
-		break;
-	case LOG_EVT_CARDISSUER_RED_OFF:
-		Req.devseq = CARDREADER_RED;
+	case LOG_EVT_CONTACTLESS_CARD_GREEN_OFF:
+		Req.devseq = CONTACTLESSCARD;
 		Req.mode = 1;
 		Req.close = 1;
 		break;
-	case LOG_EVT_IDCERTIFICATE_GREEN_OFF:
-		Req.devseq = IDCERTIFICATE;
-		Req.mode = 1;
-		Req.close = 1;
+	case LOG_EVT_HSPS_LIGHT_ON:
+		Req.devseq = HSPSCANNER;
+		Req.mode = 0; //substain
 		break;
-	case LOG_EVT_FINGERPRINT_GREEN_OFF:
-		Req.devseq = FINGERPRINT;
-		Req.mode = 1;
+	case LOG_EVT_HSPS_LIGHT_OFF:
+		Req.devseq = HSPSCANNER;
+		Req.mode = 0;
 		Req.close = 1;
 		break;
-	case LOG_EVT_PINPAD_GREEN_OFF:
-		Req.devseq = PINPAD;
-		Req.mode = 1;
-		Req.close = 1;
+	case LOG_EVT_HEADLIGHT_GREEN_ON:
+		Req.devseq = HEADLIGHT;
+		Req.mode = 0; //substain
 		break;
 	case LOG_EVT_HEADLIGHT_GREEN_OFF:
 		Req.devseq = HEADLIGHT;
-		Req.mode = 1;
+		Req.mode = 0;
 		Req.close = 1;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("machine light off");
+		break;
+	case LOG_EVT_HEADLIGHT_RED_ON: //TODO: 有请求调用吗?  [Gifur@202578]
+		Req.devseq = HEADLIGHT_RED;
+		Req.mode = 0; //substain
 		break;
 	case LOG_EVT_HEADLIGHT_RED_OFF:
 		Req.devseq = HEADLIGHT_RED;
-		Req.mode = 1;
+		Req.mode = 0;
 		Req.close = 1;
 		break;
-	case LOG_EVT_CONTACTLESS_CARD_GREEN_OFF:
-		Req.devseq = CONTACTLESSCARD;
-		Req.mode = 1;
-		Req.close = 1;
+	case LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_ON:
+		Req.devseq = HEADLIGHT_ASSIST;
+		Req.mode = 1; //flick
 		break;
 	case LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_OFF:
 		Req.devseq = HEADLIGHT_ASSIST;
 		Req.mode = 1;
 		Req.close = 1;
 		break;
-	case LOG_EVT_HSPS_LIGHT_ON:
-		Req.devseq = HSPSCANNER;
-		Req.mode = 1;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("hspscanner light on");
-		break;
-	case LOG_EVT_HSPS_LIGHT_OFF:
-		Req.devseq = HSPSCANNER;
-		Req.mode = 1;
-		Req.close = 1;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("hspscanner light off");
-		break;
 	default:
 		return;
 	}
-
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("devseq[%d],mode[%d]close[%d]", Req.devseq, Req.mode, Req.close);
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("{\"devseq\":\"%s\",\"mode\":%d,\"close\": %d}", GetLightSeqString(Req.devseq), Req.mode, Req.close);
 	if (Req.devseq >= 0) {
 		if (!Req.close) {
 			if (m_bLightStatus[Req.devseq]) {
@@ -580,63 +563,49 @@ void CGPIOFSM::OnLogEvent(DWORD dwUserCode)
 }
 
 //老接口,用于控制灯
-bool CGPIOFSM::SetOutDriving(GpioSet_Info req, OutDrivingInfo od, ULONG iIndex, ULONG pinSeq)
+bool CGPIOFSM::SetOutDriving(GpioSet_Info req, OutDrivingInfo od)
 {
 	int ret(-1);
 	if (req.close == 1) {
-		GetEntityBase()->GetFunction()->KillTimer(req.devseq);
-		if (pinSeq == PIN_HSPSCANNER_PREVIEW_LIGHT) {
-			//额外多关闭高拍仪提示灯
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("off light hspsanner.");
+		if (!!req.mode) {
+			GetEntityBase()->GetFunction()->KillTimer(req.devseq);
+		}
+		if (od.Port == PIN_HSPSCANNER_PREVIEW_LIGHT) {
 			WritePin(PIN_HSPSCANNER_LIGHT, false);
 		}
-		ret = WritePin(pinSeq, false);
+		ret = WritePin(od.Port, false);
 		return (ret == 0);
 	}
-
-	switch (od.OutputMode) {
-	case OM_POSITIVE_LEVEL:
-	{
-		if (od.StopMode == SM_CALLTRIGGER) {
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("0.0 mode: pinSeq=%u", pinSeq);
-			//if it is hspsanner
-			if (pinSeq == PIN_HSPSCANNER_PREVIEW_LIGHT) {
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("light hspsanner.");
-				WritePin(PIN_HSPSCANNER_LIGHT, true);
-			}
-			ret = WritePin(pinSeq, true);
-		}
-	}
-	break;
-	case OM_POSITIVE_FLICKER:
-		if (od.StopMode == SM_CYCLE) {
+	else {
+		if (!!req.mode) {
 			SetContextInfo* pSci = new SetContextInfo();
-			pSci->pinSeq = pinSeq;
+			pSci->pinSeq = od.Port;
 			pSci->timerID = req.devseq;
 			pSci->setTime = od.SetTime;
 			pSci->resetTime = od.ResetTime;
 			pSci->timeout = od.TimeOut;
 
-			ret = WritePin(pinSeq, true);
+			ret = WritePin(od.Port, true);
 			if (ret == 0) {
 				ITimerListener* pListener = new TimerOutHelper<CGPIOFSM>(this, &CGPIOFSM::OnPositiveFlickerSetTimerout, pSci, true);
 				GetEntityBase()->GetFunction()->SetTimer(pSci->timerID, pListener, pSci->setTime);
 			}
 		}
-		break;
-	default:
-		break;
+		else {
+			if (od.Port == PIN_HSPSCANNER_PREVIEW_LIGHT) {
+				WritePin(PIN_HSPSCANNER_LIGHT, true);
+			}
+			ret = WritePin(od.Port, true);
+		}
 	}
 	return (ret == 0);
 }
 
-
 int CGPIOFSM::WritePin(DWORD dwPinSeq, bool bHighLevel)
 {
 	ErrorCodeEnum result(Error_Succeed);
 	int ret(-1);
 	int idx = -1;
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Write Pin %s with %s", GetDriverPortString(dwPinSeq + 1), bHighLevel ? "[Active]" : "[InActive]");
 	if (dwPinSeq > 16) {/** 目前只有一个高拍仪的提示灯会超过该值  [Gifur@202495]*/
 		if (!m_bNewVersion || dwPinSeq < 24) {
 			return ret;
@@ -659,11 +628,11 @@ int CGPIOFSM::WritePin(DWORD dwPinSeq, bool bHighLevel)
 	result = m_hDevHelper->WritePort(idx, m_btOutputStatus[idx]);
 	const auto iEnd = SP::Module::Comm::RVCGetTickCount();
 	if (result != Error_Succeed) {
-		SetErrorAndLog(result, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, iEnd - iBegin, "", CombineJsonContext(CSimpleStringA::Format("write port[%d] with %d", idx, m_btOutputStatus[idx])));
+		SetErrorAndLog(result, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, iEnd - iBegin, "", CombineJsonContext(CSimpleStringA::Format("index: %d, value: %d", idx, m_btOutputStatus[idx])));
 		ret = 1;
 	}
 	else {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::WritePort").setAPI(__FUNCTION__).setCostTime(iEnd - iBegin)("write port[%d] with %d succ", idx, m_btOutputStatus[idx]);
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::WritePort").setCostTime(iEnd - iBegin)("%s %s", GetDriverPortString(dwPinSeq + 1), bHighLevel ? "[LightOn]" : "[LightOff]");
 		ret = 0;
 	}
 	return ret;
@@ -672,9 +641,7 @@ int CGPIOFSM::WritePin(DWORD dwPinSeq, bool bHighLevel)
 void CGPIOFSM::SetEx(GpioSet_Info req)
 {
 #if defined(RVC_OS_LINUX)
-
 	int devicePort;
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SetEx request %s arrived!", GetLightSeqString(req.devseq));
 	switch (req.devseq) {
 	case CARDREADER:
 	{
@@ -743,10 +710,10 @@ void CGPIOFSM::SetEx(GpioSet_Info req)
 		const ErrorCodeEnum ec = m_hDevHelper->SetStatus(dwReq, dwMode);
 		const auto iEnd = SP::Module::Comm::RVCGetTickCount();
 		if (ec != Error_Succeed) {
-			SetErrorAndLog(ec, GPIO_UserErrorCode_SetStatus_Failed, "DevAdapter::SetStatus", __FUNCTION__, false, iEnd - iBegin, "", CombineJsonContext(CSimpleStringA::Format("SetStatus with 0x%X,0x%X", dwReq, dwMode)));
+			SetErrorAndLog(ec, GPIO_UserErrorCode_SetStatus_Failed, "DevAdapter::SetStatus", __FUNCTION__, false, iEnd - iBegin, "", CombineJsonContext(CSimpleStringA::Format("dwReq: 0x%X, dwMode: 0x%X", dwReq, dwMode)));
 		}
 		else {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::SetStatus").setAPI(__FUNCTION__).setCostTime(iEnd - iBegin)("SetStatus with 0x%X,0x%X", dwReq, dwMode);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::SetStatus").setCostTime(iEnd - iBegin)("%s %s", GetDriverPortString(devicePort), req.close ? "[LightOff]" : (req.mode ? "[LightFlick]" : "[LightOn]"));
 		}
 	}
 	else {
@@ -757,18 +724,15 @@ void CGPIOFSM::SetEx(GpioSet_Info req)
 
 void CGPIOFSM::Set(GpioSet_Info req)
 {
-	CSimpleStringA activeModeSecName = "";
 	int devicePort;
 	OutDrivingInfo odi;
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Set request %s arrived!", GetLightSeqString(req.devseq));
 	switch (req.devseq) {
 	case CARDREADER:
 	case PINPAD:
 	case CONTACTLESSCARD:
 	{
-		devicePort = req.devseq == CARDREADER ? 0 : (req.devseq == PINPAD ? 3 : 8);
-		odi.OutputMode = OM_POSITIVE_FLICKER;
-		odi.StopMode = SM_CYCLE;
+		devicePort = req.devseq == CARDREADER ? PIN_CARD_READER_LIGHT : (req.devseq == PINPAD ? PIN_PINPAD_LIGHT : PIN_CONTACELESS_LIGHT);
+		odi.Port = devicePort;
 		odi.SetTime = 200;
 		odi.ResetTime = 200;
 		odi.TimeOut = 5000;
@@ -777,9 +741,8 @@ void CGPIOFSM::Set(GpioSet_Info req)
 	case CARDREADER_RED:
 	case HEADLIGHT_RED:
 	{
-		devicePort = req.devseq == CARDREADER_RED ? 6 : 5;
-		odi.OutputMode = OM_POSITIVE_LEVEL;
-		odi.StopMode = SM_CALLTRIGGER;
+		devicePort = req.devseq == CARDREADER_RED ? PIN_CARD_ISSUE_MAINTAIN_LIGHT : PIN_TROUBLE_LIGHT;
+		odi.Port = devicePort;
 		odi.SetTime = 200;
 		odi.ResetTime = 200;
 		odi.TimeOut = 3000;
@@ -788,9 +751,8 @@ void CGPIOFSM::Set(GpioSet_Info req)
 	case IDCERTIFICATE:
 	case FINGERPRINT:
 	{
-		devicePort = req.devseq == IDCERTIFICATE ? 2 : 10;
-		odi.OutputMode = OM_POSITIVE_FLICKER;
-		odi.StopMode = SM_CYCLE;
+		devicePort = req.devseq == IDCERTIFICATE ? PIN_IDCERTIFICATE_LIGHT : PIN_FINGERPRINT_LIGHT;
+		odi.Port = devicePort;
 		odi.SetTime = 150;
 		odi.ResetTime = 150;
 		odi.TimeOut = 5000;
@@ -799,9 +761,8 @@ void CGPIOFSM::Set(GpioSet_Info req)
 	case HEADLIGHT:
 	case HSPSCANNER:
 	{
-		devicePort = req.devseq == HEADLIGHT ? 4 : 12;
-		odi.OutputMode = OM_POSITIVE_LEVEL;
-		odi.StopMode = SM_CALLTRIGGER;
+		devicePort = req.devseq == HEADLIGHT ? PIN_HEAD_LIGHT : PIN_HSPSCANNER_PREVIEW_LIGHT;
+		odi.Port = devicePort;
 		odi.SetTime = 1000;
 		odi.ResetTime = 1000;
 		odi.TimeOut = 5000;
@@ -809,24 +770,17 @@ void CGPIOFSM::Set(GpioSet_Info req)
 	}
 	case HEADLIGHT_ASSIST:
 	{
-		devicePort = 4;
-		odi.OutputMode = OM_POSITIVE_FLICKER;
-		odi.StopMode = SM_CYCLE;
+		odi.Port = PIN_HEAD_LIGHT;
 		odi.SetTime = 1000;
 		odi.ResetTime = 500;
 		odi.TimeOut = 5000;
 		break;
 	}
 	default:
-		odi.OutputMode = OM_POSITIVE_LEVEL;
-		odi.StopMode = SM_CALLTRIGGER;
-		odi.SetTime = 200;
-		odi.ResetTime = 200;
-		odi.TimeOut = 5000;
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("unsupport device seq: %d", req.devseq);
 		return;
 	}
-	SetOutDriving(req, odi, 0, devicePort);
+	SetOutDriving(req, odi);
 }
 
 void CGPIOFSM::StartDetectWorkThread()
@@ -834,8 +788,7 @@ void CGPIOFSM::StartDetectWorkThread()
 	ReceivingInfo ri;
 	ri.ContinuousTriggerTime = 2;
 	GetContextInfo* pGci = new GetContextInfo();
-	/** 注意设备序号是实体内定义的逻辑,不是设备端口号,最后用作于计时器的ID去了*/
-	pGci->timerID = PHONEPICKUP; /*8*/
+	pGci->timerID = PHONEPICKUP; /*8 随便拿了一个不可能用在其他地方的ID*/
 	m_PickUpTimeStamp = m_PutDownTimeStamp = SP::Module::Comm::RVCGetTickCount();
 	m_DoorOpenTimeStamp = m_DoorCloseTimeStamp = SP::Module::Comm::RVCGetTickCount();
 	ITimerListener* pListener = new TimerOutHelper<CGPIOFSM>(this, &CGPIOFSM::OnEventDetect, pGci);
@@ -867,7 +820,6 @@ void CGPIOFSM::OnPositiveFlickerResetTimerout(void* pData)
 void CGPIOFSM::OnEventDetect(void* pData)
 {
 	GetContextInfo* pGci = (GetContextInfo*)pData;
-
 	ULONG input = 0;
 	BYTE btInput;
 	ErrorCodeEnum err(Error_Succeed);
@@ -877,7 +829,7 @@ void CGPIOFSM::OnEventDetect(void* pData)
 		const auto iEnd = SP::Module::Comm::RVCGetTickCount();
 		if (err != Error_Succeed) {
 			SetErrorAndLog(err, GPIO_UserErrorCode_ReadPort_Failed, "DevAdapter::ReadPort", __FUNCTION__, false, iEnd - iBegin, "",
-				CombineJsonContext(CSimpleStringA::Format("read port[%d] with %d", INPUT_PORT_2, btInput)));
+				CombineJsonContext(CSimpleStringA::Format("Port:%d, Status:%d", INPUT_PORT_2, btInput)));
 		}
 		else if (btInput != m_btLastRevcInput) {
 			m_btLastRevcInput = btInput;
@@ -894,7 +846,7 @@ void CGPIOFSM::OnEventDetect(void* pData)
 		btInput = dwMode;
 		if (err != Error_Succeed) {
 			SetErrorAndLog(err, GPIO_UserErrorCode_DetectStatus_Failed, "DevAdapter::DetectStatus", __FUNCTION__, false, iEnd - iBegin, "",
-				CombineJsonContext(CSimpleStringA::Format("detect status[%d] with %d", dwReq, dwMode)));
+				CombineJsonContext(CSimpleStringA::Format("dwReq:%d,dwMode:%d", dwReq, dwMode)));
 		}
 		else if (btInput != m_btLastRevcInput) {
 			m_btLastRevcInput = btInput;
@@ -923,10 +875,10 @@ void CGPIOFSM::OnEventDetect(void* pData)
 	/** 震动感应 */
 	if (DetectBit(btInput, VIBRATIONSENSOR) && !m_bVibrationFlag) {
 		m_bVibrationFlag = true;
-		LogEvent(Severity_Middle, LOG_EVT_VIBRATIONSENSOR, CSimpleStringA::Format("%s [Active] line: %d", GetDriverPortString(17), __LINE__));
+		LogEvent(Severity_Middle, LOG_EVT_VIBRATIONSENSOR, CSimpleStringA::Format("%s [Active]", GetDriverPortString(PIN_DETECT_SHAKE + 1)));
 	}
 	else if (!DetectBit(btInput, VIBRATIONSENSOR) && m_bVibrationFlag) {
-		LogEvent(Severity_Middle, LOG_EVT_VIBRATIONSENSOR_OFF, CSimpleStringA::Format("%s [InActive] line: %d", GetDriverPortString(17), __LINE__));
+		LogEvent(Severity_Middle, LOG_EVT_VIBRATIONSENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_SHAKE + 1)));
 		m_bVibrationFlag = false;
 	}
 
@@ -934,14 +886,14 @@ void CGPIOFSM::OnEventDetect(void* pData)
 	if (DetectBit(btInput, OPENSENSOR) && !m_bOpenFlag) {
 		m_bOpenFlag = true;
 		m_DoorOpenTimeStamp = SP::Module::Comm::RVCGetTickCount();
-		LogEvent(Severity_Middle, LOG_EVT_OPENSENSOR_ON, CSimpleStringA::Format("%s [Active] line: %d", GetDriverPortString(18), __LINE__));
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_DoorOpen)("[GPIO] The chassis door is open");
+		LogEvent(Severity_Middle, LOG_EVT_OPENSENSOR_ON, CSimpleStringA::Format("%s [Active]", GetDriverPortString(PIN_DETECT_OPENDOOR + 1)));
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_DoorOpen)("[Receiver] The chassis door is open");
 	}
 	else if (!DetectBit(btInput, OPENSENSOR) && m_bOpenFlag) {
 		m_bOpenFlag = false;
 		m_DoorCloseTimeStamp = SP::Module::Comm::RVCGetTickCount();
-		LogEvent(Severity_Middle, LOG_EVT_OPENSENSOR_OFF, CSimpleStringA::Format("%s [InActive] line: %d", GetDriverPortString(18), __LINE__));
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_DoorClose).setCostTime(m_DoorCloseTimeStamp - m_DoorOpenTimeStamp)("[GPIO] The chassis door is close");
+		LogEvent(Severity_Middle, LOG_EVT_OPENSENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_OPENDOOR + 1)));
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_DoorClose).setCostTime(m_DoorCloseTimeStamp - m_DoorOpenTimeStamp)("[Receiver] The chassis door is close");
 	}
 
 	/**话机检测*/
@@ -950,12 +902,12 @@ void CGPIOFSM::OnEventDetect(void* pData)
 			m_ePickUpFlag = Actived;
 			m_PickUpTimeStamp = SP::Module::Comm::RVCGetTickCount();
 			LogEvent(Severity_Middle, LOG_EVT_PICKUP, "Life the Phone up");
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePickup)("[GPIO] 话机提起");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePickup)("[Receiver] 话机提起");
 		}
 		else if (m_ePickUpFlag == UnknownStatus) {
 			m_ePickUpFlag = Actived;
 			m_PickUpTimeStamp = SP::Module::Comm::RVCGetTickCount();
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePickup)("[GPIO] 话机提起(启动时)");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePickup)("[Receiver] 话机提起(启动时)");
 		}
 	}
 	else if (!DetectBit(btInput, PICKUPSENSOR)) {
@@ -963,7 +915,7 @@ void CGPIOFSM::OnEventDetect(void* pData)
 			m_ePickUpFlag = InActive;
 			m_PutDownTimeStamp = SP::Module::Comm::RVCGetTickCount();
 			LogEvent(Severity_Middle, LOG_EVT_ONHOOK, "Put the Phone down");
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePutDown).setCostTime(m_PutDownTimeStamp - m_PickUpTimeStamp)("[GPIO] 话机放下");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePutDown).setCostTime(m_PutDownTimeStamp - m_PickUpTimeStamp)("[Receiver] 话机放下");
 		}
 		else if (m_ePickUpFlag == UnknownStatus) {
 			m_ePickUpFlag = InActive;
@@ -975,24 +927,24 @@ void CGPIOFSM::OnEventDetect(void* pData)
 		if (!m_bMoveFlag) {
 			m_bMoveFlag = true;
 			m_moveDisappearTimes = 0;
-			LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_ON, CSimpleStringA::Format("%s [Active] line: %d, times: %lu", GetDriverPortString(20), __LINE__, m_moveHoldTimes));
+			//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[Receiver] Someone approached now");
+			LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_ON, CSimpleStringA::Format("%s [Active], times: %lu", GetDriverPortString(PIN_DETECT_BODY + 1), m_moveHoldTimes));
 		}
 		/** 只是发一次时间时,发现感知实体没有收到或者不处理第一次发出的时间,所以需要沿用原有的发送频率,再继续发送消失的事件,下同  [Gifur@202496]*/
-		else if (m_moveHoldTimes != 0 && (m_moveHoldTimes % (REPEAT_FIRE_TIMEOUT_VALUE / ON_EVENT_DETECT_TIMOUE_MILLSECS)) == 0) {
-			LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_ON, CSimpleStringA::Format("%s [Active] line: %d, times: %lu", GetDriverPortString(20), __LINE__, m_moveHoldTimes));
+		else if (m_moveHoldTimes != 0 && (m_moveHoldTimes % REPEAT_FIRE_TIMEOUT_TIMES) == 0) {
+			LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_ON, CSimpleStringA::Format("%s [Active], times: %lu", GetDriverPortString(PIN_DETECT_BODY + 1), m_moveHoldTimes));
 		}
-		const bool toCheck = !!(m_moveHoldTimes != 0 && (m_moveHoldTimes % (8/*mins*/ * 60 * 1000 / ON_EVENT_DETECT_TIMOUE_MILLSECS) == 0));
+		/** TODO:诗友确定  [Gifur@202579]*/
+		const bool toCheck = !!(m_moveHoldTimes != 0 && (m_moveHoldTimes % (10/*mins*/ * 60 * 1000 / ON_EVENT_DETECT_TIMOUE_MILLSECS) == 0));
 		if (toCheck) {
 			SYSTEMTIME localTime;
 			GetLocalTime(&localTime);
 			if (localTime.wHour < (WORD)8 || (localTime.wHour == 8 && localTime.wMinute <= (WORD)30) || localTime.wHour >= (WORD)18)
 			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2903")("Move detect is abnormal(off work).");
-				LogWarn(Severity_High, Error_Unexpect, LOG_EVT_MOVEDETECT_ABNORMAL_OFFWORK, "Move detect is abnormal(off work).");
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2903")("%s is abnormal(off work)", GetDriverPortString(PIN_DETECT_BODY + 1));
 			}
 			else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2902")("Move detect is abnormal(Work time).");
-				LogWarn(Severity_High, Error_Unexpect, LOG_EVT_MOVEDETECT_ABNORMAL_WORKTIME, "Move detect is abnormal(Work time).");
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2902")("%s is abnormal(Work time)", GetDriverPortString(PIN_DETECT_BODY + 1));
 			}
 		}
 		m_moveHoldTimes++;
@@ -1001,20 +953,22 @@ void CGPIOFSM::OnEventDetect(void* pData)
 		if (m_bMoveFlag) {
 			m_bMoveFlag = false;
 			m_moveHoldTimes = 0;
-			LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_OFF, CSimpleStringA::Format("%s [InActive] line: %d", GetDriverPortString(20), __LINE__));
+			//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[Receiver] Someone stays away already");
+			LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_BODY + 1)));
 		}
-		else if (m_moveDisappearTimes != 0 && (m_moveDisappearTimes % (REPEAT_FIRE_TIMEOUT_VALUE / ON_EVENT_DETECT_TIMOUE_MILLSECS)) == 0) {
-			LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_OFF, CSimpleStringA::Format("%s [InActive] line: %d", GetDriverPortString(20), __LINE__));
+		else if (m_moveDisappearTimes != 0 && (m_moveDisappearTimes % REPEAT_FIRE_TIMEOUT_TIMES) == 0) {
+			if((m_moveDisappearTimes / REPEAT_FIRE_TIMEOUT_TIMES <= 6/*一分钟内10s打印一次*/) || (m_moveDisappearTimes % (REPEAT_FIRE_TIMEOUT_TIMES * 3/*超过一分钟后半分钟打印一次*/)) == 0)
+				LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_BODY + 1)));
 		}
 		m_moveDisappearTimes++;
 	}
 	/*卡嘴异物检测*/
 	if (DetectBit(btInput, CARDGATESENSOR) && !m_bCardGateFlag) {
 		m_bCardGateFlag = true;
-		LogEvent(Severity_Middle, LOG_EVT_CARDGATESENSOR, CSimpleStringA::Format("%s [Active] line: %d", GetDriverPortString(21), __LINE__));
+		LogEvent(Severity_Middle, LOG_EVT_CARDGATESENSOR, CSimpleStringA::Format("%s [Active]", GetDriverPortString(PIN_DETECT_CARDMOUSE_JAM + 1)));
 	}
 	else if (!DetectBit(btInput, CARDGATESENSOR) && m_bCardGateFlag) {
-		LogEvent(Severity_Middle, LOG_EVT_CARDGATESENSOR_OFF, CSimpleStringA::Format("%s [InActive] line: %d", GetDriverPortString(21), __LINE__));
+		LogEvent(Severity_Middle, LOG_EVT_CARDGATESENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_CARDMOUSE_JAM + 1)));
 		m_bCardGateFlag = false;
 	}
 

+ 8 - 15
Module/mod_gpio/GpioFSM.h

@@ -15,17 +15,6 @@
 #define GpioService_LogCode_Detect_DoorClose "QLR0402209A4"
 #define GpioService_LogCode_Detect_PhonePutDown "QLR0402209A5"
 
-
-enum OutputMode {
-	OM_POSITIVE_LEVEL,
-	OM_POSITIVE_FLICKER,
-	OM_NEGATIVE_FLICKER
-};
-enum StopMode {
-	SM_CALLTRIGGER,
-	SM_TIMEOUT,
-	SM_CYCLE
-};
 enum PinPort {
 	VIBRATIONSENSOR, /**震动探测器*/
 	OPENSENSOR, /*开机箱门感应器*/
@@ -44,9 +33,7 @@ enum PinActiveStatus
 
 struct OutDrivingInfo
 {
-	ULONG Port;
-	int OutputMode;
-	int StopMode;
+	int Port;
 	int SetTime;
 	int ResetTime;
 	int TimeOut;
@@ -114,12 +101,16 @@ enum DevicePinSeq
 	PIN_DETECT_OPENDOOR,
 	PIN_DETECT_PHONE,
 	PIN_DETECT_BODY,
+	PIN_DETECT_CARDMOUSE_JAM,
 	PIN_HSPSCANNER_LIGHT = 25
 };
 struct GpioSet_Info
 {
+	/** 注意设备序号是实体内定义的逻辑,不是设备端口号,最后用作于计时器*/
 	int devseq;
+	/*目前用于灯亮模式标记,1表示闪烁,0表示常亮*/
 	int mode;
+	/*关灯还是开灯的标记,1表示关灯,0表示开灯*/
 	int close;
 };
 
@@ -166,12 +157,14 @@ public:
 	//////////////////////////////////////////////////////////////////////////
 	void OnPositiveFlickerSetTimerout(void* pData);
 	void OnPositiveFlickerResetTimerout(void* pData);
+	//具体的监听事件函数
 	void OnEventDetect(void* pData);
 	//开了一个监听线程,用于监听震动、开关门等事件
 	void StartDetectWorkThread();
 	void Set(GpioSet_Info info);
 	void SetEx(GpioSet_Info info);
-	bool SetOutDriving(GpioSet_Info req, OutDrivingInfo od, ULONG iIndex, ULONG devSeq);
+	bool SetOutDriving(GpioSet_Info req, OutDrivingInfo od);
+	//调用硬件适配器接口,不涉及到其他复杂逻辑
 	//0:success; 1:false;-1:other(ignore)
 	int WritePin(DWORD dwPinSeq, bool bHighLevel);
 

+ 1 - 1
Module/mod_gpio/Gpio_UserErrorCode.h

@@ -4,7 +4,7 @@
 
 #define GPIO_UserErrorCode_Start				0x20900200
 #define GPIO_UserErrorCode_LogInfoAboutTerm		0x20900201
-#define GPIO_UserErrorCode_RootInfo				0x20900202
+//#define GPIO_UserErrorCode_RootInfo				0x20900202
 #define GPIO_UserErrorCode_Real_Root_Config		0x20900203
 
 //adapter func failed

+ 2 - 6
Module/mod_gpio/mod_gpio.cpp

@@ -11,7 +11,6 @@ void CGpioServiceSession::Handle_GetDevInfo(SpReqAnsContext<GpioService_GetDevIn
 
 void CGpioServiceSession::Handle_Exit(SpOnewayCallContext<GpioService_Exit_Info>::Pointer ctx)
 {
-    DbgToBeidou(ctx->link, __FUNCTION__)();
     m_pEntity->Exit(ctx);
 }
 
@@ -21,8 +20,7 @@ void CGpioEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<I
 	GetFunction()->RegistSysVarEvent("UIState", this);
 
 	if (erroCode == Error_Succeed) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Gpio open succeeded.");
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("subscribelog...");
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Gpio open succeeded.");
 		//oiltmp the subscribelog should distinct machine type?
 		GetFunction()->SubscribeLog(m_uuidHealth, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "HealthManager");
 		GetFunction()->SubscribeLog(m_uuidIDC, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "IDCertificate");
@@ -33,14 +31,12 @@ void CGpioEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<I
 		GetFunction()->SubscribeLog(m_uuidCC, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "ContactlessCard");
 		GetFunction()->SubscribeLog(m_uuidCS, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "CardIssuerStore");
 		GetFunction()->SubscribeLog(m_uuidHSPscanner, this, Log_Event, Severity_Middle, Error_IgnoreAll, -1, "HSPScanner");
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sub ok...");
 		m_fsm.AfterInit();
 	}
 	else
 	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("gpio open failed: %s.", SpStrError(erroCode));
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("init gpio failed: %s", SpStrError(erroCode));
 	}
-
 	pTransactionContext->SendAnswer(Error_Succeed);
 }
 

+ 5 - 3
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -568,6 +568,7 @@ bool CHealthManagerEntity::StopGuardian()
 					if( hProcess == NULL )
 					{
 						DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("Fail to open process(%d)!",GetLastError());
+						CloseHandle(hSnapshot);
 						return false;
 					}
 					else
@@ -575,6 +576,8 @@ bool CHealthManagerEntity::StopGuardian()
 						result = TerminateProcess(hProcess,-1);
 						if (result)
 						{
+							CloseHandle(hProcess);
+							CloseHandle(hSnapshot);
 							Sleep(3000);
 							DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("Terminate guardian suc.");
 							return true;
@@ -582,13 +585,12 @@ bool CHealthManagerEntity::StopGuardian()
 						else
 						{
 							DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("Terminate guardian failed(%d).",GetLastError());
+							CloseHandle(hProcess);
+							CloseHandle(hSnapshot);
 							return false;
 						}
-						CloseHandle( hProcess );
 					}
-
 					Sleep(3000);
-
 					WaitForSingleObject(&pe.th32ProcessID, INFINITE );
 					break;
 				}

+ 3 - 1
Module/mod_heartbeat/HeartBeatFSM.h

@@ -2,7 +2,9 @@
 #define __HEARTBEAT_FSM_H
 #pragma once
 #ifdef RVC_OS_WIN
-#define WIN32_LEAN_AND_MEAN
+#ifndef WIN32_LEAN_AND_MEAN
+	#define WIN32_LEAN_AND_MEAN
+#endif
 
 #include <windows.h>
 #include <winsock2.h>

+ 34 - 2
addin/res/RunScript/startBrower.sh

@@ -6,6 +6,26 @@ echo "start $0 with $name"
 
 exec="/usr/share/browser/browser"  # 使用传入的参数值作为要执行的命令
 echo "run $exec"
+
+#!/bin/bash
+declare -A params  # 关联数组存储参数
+
+for arg in "$@"; do
+    if [[ "$arg" =~ ^--vtm_browser_type=(.*)$ ]]; then
+        vtm_browser_type="${BASH_REMATCH[1]}"
+        echo "浏览器类型: $vtm_browser_type"
+        break  # 找到后退出循环
+    fi
+done
+
+if [[ -z "$vtm_browser_type" ]]; then
+    echo "未指定浏览器类型"
+fi
+
+
+GROUP_NAME=${vtm_browser_type:-default_browser}
+
+
 # get env
 pid=$(pgrep startdde)
 # source env from $pid
@@ -13,10 +33,22 @@ pid=$(pgrep startdde)
 . <(xargs -0 bash -c 'printf "export %q\n" "$@"' -- </proc/$pid/environ)
 name=$(ps -o uname= -p "${pid}")
 echo "run in $name"
+
+FILE="/tmp/$GROUP_NAME.pgid"
+rm -f "$FILE"  # 强制删除文件(忽略不存在的情况)
+touch "$FILE"  # 创建新文件
+chmod 666 "$FILE"  # 可选:设置权限
+
 if [ $# -eq 0 ]
 then
-	runuser -u "$name" -- bash -c "$exec &" &  #无参数执行
+    runuser -u  $name -- bash -c "setsid $exec & sudo echo \$! > /tmp/$GROUP_NAME.pgid"
 else
-	runuser -u "$name" -- bash -c "$exec $* &" &  # 将参数传递给命令
+    runuser -u  $name -- bash -c "setsid $exec $* & sudo echo \$! > /tmp/$GROUP_NAME.pgid"
 fi
+
+PGID=$(cat /tmp/$GROUP_NAME.pgid)
+
+echo "UOS Browser 已启动:"
+echo "PGID: $PGID"
+
 exit $?

+ 32 - 2
addin/res/RunScript/startUOSBrower.sh

@@ -4,6 +4,21 @@ set -x
 name=$(whoami)
 echo "start $0 with $name"
 
+for arg in "$@"; do
+    if [[ "$arg" =~ ^--vtm_browser_type=(.*)$ ]]; then
+        vtm_browser_type="${BASH_REMATCH[1]}"
+        echo "浏览器类型: $vtm_browser_type"
+        break  # 找到后退出循环
+    fi
+done
+
+if [[ -z "$vtm_browser_type" ]]; then
+    echo "未指定浏览器类型"
+fi
+
+GROUP_NAME=${vtm_browser_type:-default_browser}
+
+
 exec="/usr/share/uosbrowser/uosbrowser"  # 使用传入的参数值作为要执行的命令
 echo "run $exec"
 # get env
@@ -13,10 +28,25 @@ pid=$(pgrep startdde)
 . <(xargs -0 bash -c 'printf "export %q\n" "$@"' -- </proc/$pid/environ)
 name=$(ps -o uname= -p "${pid}")
 echo "run in $name"
+
+FILE="/tmp/$GROUP_NAME.pgid"
+rm -f "$FILE"  # 强制删除文件(忽略不存在的情况)
+touch "$FILE"  # 创建新文件
+chmod 666 "$FILE"  # 可选:设置权限
+
 if [ $# -eq 0 ]
 then
-	runuser -u "$name" -- bash -c "$exec &" &  #无参数执行
+    runuser -u  $name -- bash -c "setsid $exec & sudo echo \$! > /tmp/$GROUP_NAME.pgid"
 else
-	runuser -u "$name" -- bash -c "$exec $* &" &  # 将参数传递给命令
+    runuser -u  $name -- bash -c "setsid $exec $* & sudo echo \$! > /tmp/$GROUP_NAME.pgid"
 fi
+
+PGID=$(cat /tmp/$GROUP_NAME.pgid)
+
+
+echo "UOS Browser 已启动:"
+echo "PGID: $PGID"
+
+
+
 exit $?

+ 41 - 0
addin/res/RunScript/stopBrowser.sh

@@ -0,0 +1,41 @@
+#!/bin/bash
+
+# 检查是否提供了进程组名称参数
+if [ $# -eq 0 ]; then
+    echo "错误:请提供进程组名称作为参数,例如:./stop_browser.sh my-group"
+    exit 1
+fi
+
+
+for arg in "$@"; do
+    if [[ "$arg" =~ ^--vtm_browser_type=(.*)$ ]]; then
+        vtm_browser_type="${BASH_REMATCH[1]}"
+        echo "浏览器类型: $vtm_browser_type"
+        break  # 找到后退出循环
+    fi
+done
+
+if [[ -z "$vtm_browser_type" ]]; then
+    echo "未指定浏览器类型"
+fi
+
+GROUP_NAME=$vtm_browser_type
+
+
+# 通过 PGID 关闭(推荐)
+if [ -f /tmp/$GROUP_NAME.pgid ]; then
+    PGID=$(cat /tmp/$GROUP_NAME.pgid)
+    kill -15 -$PGID 2>/dev/null  # 终止整个进程组
+    sleep 1
+    if ps -o pgid= | grep -q $PGID; then
+        kill -9 -$PGID
+    fi
+    rm -rf /tmp/$GROUP_NAME.pgid
+fi
+
+# 清理 cgroup(如果存在)
+if command -v cgdelete &> /dev/null; then
+    sudo cgdelete cpu,memory:"$GROUP_NAME" 2>/dev/null
+fi
+
+echo "UOS Browser 已终止"