chenliangyu пре 10 месеци
родитељ
комит
c2cae5b7fe
66 измењених фајлова са 826 додато и 1052 уклоњено
  1. 2 2
      DevAdapter/CMakeLists.txt
  2. 4 4
      DevAdapter/include/CardAssist.cpp
  3. 6 5
      DevAdapter/liblog4vendor/log4upload.cpp
  4. 5 5
      DevAdapter/self/dep/liblog4vendor/liblog4vendor/log4upload.cpp
  5. 1 0
      DevAdapter/self/dep/liblog4vendor/liblog4vendor/log4upload.h
  6. 83 4
      DevAdapter/simulator/FingerPrint.1.1/FingerPrint_impl.cpp
  7. 19 0
      DevAdapter/simulator/FingerPrint.1.1/FingerPrint_impl.h
  8. 4 4
      Framework/Common/SpDefine.h
  9. 1 1
      Framework/spbase/sp_httpDefine.cpp
  10. 11 10
      Framework/spbase/sp_logwithlink.cpp
  11. 0 4
      Module/include/DevFSMCommBase.hpp
  12. 1 1
      Module/include/EventCode.h
  13. 4 6
      Module/mod_CardIssuerStand/CardIssuerFSM.cpp
  14. 9 170
      Module/mod_CardReadAdapter/CardReadAdapterFSM.cpp
  15. 6 48
      Module/mod_CardReadAdapter/CardReadAdapterFSM.h
  16. 3 3
      Module/mod_CenterSetting/mod_centersetting.h
  17. 1 1
      Module/mod_ContactlessCard/ContactlessFSM.cpp
  18. 19 0
      Module/mod_DeviceControl/mod_DeviceControl.cpp
  19. 0 1
      Module/mod_FingerPrint/CMakeLists.txt
  20. 12 18
      Module/mod_FingerPrint/FingerPrintFSM.cpp
  21. 2 0
      Module/mod_FingerPrint/FingerPrint_UserErrorCode.h
  22. 9 10
      Module/mod_HSPScanner/HSPScannerFSM.cpp
  23. 16 12
      Module/mod_HSPScanner/HSPScannerFSM.h
  24. 3 19
      Module/mod_HSPScanner/mod_HSPScanner.cpp
  25. 0 1
      Module/mod_IDCertificate/IDCertFSM.cpp
  26. 0 1
      Module/mod_ResourceWatcher/CMakeLists.txt
  27. 179 128
      Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp
  28. 17 25
      Module/mod_ResourceWatcher/ResourceWatcherFSM.h
  29. 1 16
      Module/mod_ResourceWatcher/ResourceWatcher_UserCode.h
  30. 41 26
      Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp
  31. 2 0
      Module/mod_UpgradeMgr/UpgradeTaskFSM.h
  32. 5 1
      Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp
  33. 1 113
      Module/mod_accessauth/AccessAuthFSM.cpp
  34. 0 39
      Module/mod_accessauth/AccessAuthFSM.h
  35. 1 6
      Module/mod_accessauth/mod_AccessAuth.cpp
  36. 1 51
      Module/mod_accessauth/mod_AccessAuth.h
  37. 17 13
      Module/mod_cardissuerstore/CardIssuerFSM.cpp
  38. 0 1
      Module/mod_cardissuerstore/CardIssuerFSM.h
  39. 2 3
      Module/mod_chromium/CModTools.cpp
  40. 0 1
      Module/mod_chromium/CModTools.h
  41. 1 0
      Module/mod_gpio/Gpio_UserErrorCode.h
  42. 6 1
      Module/mod_gpio/mod_gpio.cpp
  43. 9 9
      Module/mod_healthmanager/HealthManagerFSM.cpp
  44. 13 25
      Module/mod_healthmanager/mod_healthmanager.cpp
  45. 3 3
      Module/mod_healthmanager/mod_healthmanager.h
  46. 0 2
      Module/mod_heartbeat/mod_heartbeat.h
  47. 1 0
      Module/mod_interactivecontrol/mod_interactivecontrol.h
  48. 0 5
      Module/mod_livenessdetection/CMakeLists.txt
  49. 9 2
      Module/mod_livenessdetection/RvcFaceVideo.cpp
  50. 1 0
      Module/mod_livenessdetection/RvcFaceVideo.h
  51. 0 3
      Module/mod_livenessdetection/RvcWsServer.cpp
  52. 7 3
      Module/mod_livenessdetection/RvcWsServer.h
  53. 32 0
      Module/mod_livenessdetection/mod_livenessdetection.cpp
  54. 12 5
      Module/mod_livenessdetection/mod_livenessdetection.h
  55. 49 0
      Module/mod_mediacontroller/MediaController_client_g.h
  56. 23 0
      Module/mod_mediacontroller/MediaController_def_g.h
  57. 27 0
      Module/mod_mediacontroller/MediaController_server_g.h
  58. 24 17
      Module/mod_mediacontroller/MediaService.xml
  59. 8 0
      Module/mod_mediacontroller/mod_mediacontroller.cpp
  60. 1 0
      Module/mod_mediacontroller/mod_mediacontroller.h
  61. 0 4
      Module/mod_pinpad/PinPadFSM.cpp
  62. 2 2
      Module/mod_pinpad/PinPadFSM.h
  63. 101 207
      Module/mod_vtmloader/VtmLoaderFSM.cpp
  64. 2 5
      Module/mod_vtmloader/VtmLoaderFSM.h
  65. 1 1
      Module/mod_vtmloader/mod_vtmloader.cpp
  66. 6 5
      Other/liblog4rvcother/log4upload.cpp

+ 2 - 2
DevAdapter/CMakeLists.txt

@@ -291,8 +291,8 @@ if(DEVADAPTER_USING_CONAN)
     endif(MSVC)
 
     if(MSVC)
-        #合入目前全量包中的DEP文件内容
-        conan_cmake_run(REQUIRES VendorDLL/7.6.0@LR04.02_VendorLib/testing
+        #CardLibDB_CMB.db3
+        conan_cmake_run(REQUIRES VendorDLL/2024.11.1401@LR04.02_VendorLib/testing
             BASIC_SETUP CMAKE_TARGETS)
         set(SELF_CONAN_LIB_NAME self/2024.1025.01@LR04.02_VendorLib/testing)
         add_subdirectory(self)

+ 4 - 4
DevAdapter/include/CardAssist.cpp

@@ -389,7 +389,7 @@ bool CCardProcess::DetectIfICCard(CardReadType eType, DeviceBaseClass *pCardX, i
 		if(eErr != Error_Succeed){
 			QueryLastErr(eType, errMsg);
 			setCardAssistLastErr(eErr,errMsg,"DevAdapter::ContactIC");
-			errMsg = CSimpleStringA::Format("DetectIfICCard::ContactIC failed(%d):%s", eErr, errMsg.GetData());
+			errMsg = CSimpleStringA::Format("DetectIfICCard::ContactIC failed(%s):%s", SpStrError(eErr), errMsg.GetData());
 			if (eType == CARD_MACHINE_ISSUER) {
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ContactIC").setCostTime(l_endTime - l_beginTime).setResultCode("RTA23C7")("DetectIfICCard::ContactIC err=%s", SpStrError(eErr));
 				LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_ContactIC_Failed, errMsg.GetData());
@@ -411,7 +411,7 @@ bool CCardProcess::DetectIfICCard(CardReadType eType, DeviceBaseClass *pCardX, i
 		{
 			QueryLastErr(eType, errMsg);
 			setCardAssistLastErr(eErr,errMsg,"DevAdapter::ActiveICCard");
-			errMsg = CSimpleStringA::Format("DetectIfICCard::ActiveICCard failed(%d):%s", eErr, errMsg.GetData());
+			errMsg = CSimpleStringA::Format("DetectIfICCard::ActiveICCard failed(%s):%s", SpStrError(eErr), errMsg.GetData());
 			if (eType == CARD_MACHINE_ISSUER) {
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ActiveICCard").setCostTime(l_endTime - l_beginTime).setResultCode("RTA23CT")("DetectIfICCard::ActiveICCard err=%s", SpStrError(eErr));
 
@@ -453,7 +453,7 @@ bool CCardProcess::DetectIfICCard(CardReadType eType, DeviceBaseClass *pCardX, i
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ActiveContactlessICCard").setCostTime(l_endTime - l_beginTime).setResultCode("RTA2J01")("DetectIfICCard::ActiveContactlessICCard err=%s", SpStrError(eErr));
 			QueryLastErr(eType, errMsg);
 			setCardAssistLastErr(eErr,errMsg, "DevAdapter::ActiveContactlessICCard");
-			errMsg = CSimpleStringA::Format("DetectIfICCard::ActiveContactlessICCard failed(%d):%s", eErr, errMsg.GetData());
+			errMsg = CSimpleStringA::Format("DetectIfICCard::ActiveContactlessICCard failed(%s):%s", SpStrError(eErr), errMsg.GetData());
 			LogWarn(Severity_Middle, Error_Unexpect, ContactlessCard_UserErrorCode_ActiveContactlessICCard_Failed, errMsg.GetData());
 			return false;
 		}
@@ -475,7 +475,7 @@ bool CCardProcess::DetectIfICCard(CardReadType eType, DeviceBaseClass *pCardX, i
 		{
 			QueryLastErr(eType, errMsg);
 			setCardAssistLastErr(eErr,errMsg,"DevAdapter::ActiveContactlessICCard");
-			errMsg = CSimpleStringA::Format("(CardIssuer)DetectIfICCard::ActiveContactlessICCard failed(%d):%s", eErr, errMsg.GetData());
+			errMsg = CSimpleStringA::Format("(CardIssuer)DetectIfICCard::ActiveContactlessICCard failed(%s):%s", SpStrError(eErr), errMsg.GetData());
 			if (eType == CARD_MACHINE_ISSUER_RF) {
 				LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_ActiveContactlessICCard_Failed, errMsg.GetData());
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ActiveContactlessICCard").setCostTime(l_endTime - l_beginTime).setResultCode("RTA23C6")("DetectIfICCard::ActiveContactlessICCard err=%s", SpStrError(eErr));

+ 6 - 5
DevAdapter/liblog4vendor/log4upload.cpp

@@ -1,5 +1,6 @@
 #include "log4upload.h"
 #include "log4vendor.h"
+#include "SpDefine.h"
 #include <algorithm>
 #include <string>
 #include <cctype>
@@ -193,8 +194,8 @@ bool upload_helper::initialize(const cmb::log_init_config& cfg)
         pinst_log_producer_config_set_send_thread_count(config, 1);
         pinst_log_producer_config_set_persistent_max_log_count(config, 50 * 1000);
         pinst_log_producer_config_set_skyeye_servname(config, (char*)"Terminal");
-        pinst_log_producer_config_set_skyeye_cmptId(config, (char*)"LR04");
-        pinst_log_producer_config_set_skyeye_cmptname(config, (char*)"FrameworkLib");
+        pinst_log_producer_config_set_skyeye_cmptId(config, (char*)SpDefine::cmptId);
+        pinst_log_producer_config_set_skyeye_cmptname(config, (char*)SpDefine::CmptName);
         pinst_log_producer_config_set_skyeye_version(config, (char*)"1.0");
         pinst_log_producer_config_set_persistent(config, 1);
 
@@ -215,11 +216,11 @@ bool upload_helper::initialize(const cmb::log_init_config& cfg)
 #endif
 
         //新加统一日志配置
-        pinst_log_producer_config_set_united_appname(config, (char*)"LR04");
+        pinst_log_producer_config_set_united_appname(config, (char*)SpDefine::cmptId);
         pinst_log_producer_config_set_united_version(config, (char*)"2.0");
         pinst_log_producer_config_set_united_needArchived(config, 0);
-        pinst_log_producer_config_set_united_deployUnitId(config, (char*)"LR04.02@FrameworkLib_PRD_PRD");
-        pinst_log_producer_config_set_united_serviceUnitId(config, (char*)"LR04.02_FrameworkLib");
+        pinst_log_producer_config_set_united_deployUnitId(config, (char*)SpDefine::deployUnitId);
+        pinst_log_producer_config_set_united_serviceUnitId(config, (char*)SpDefine::serviceUnitId);
 
         _client = pinst_create_log_producer_client(config, NULL, NULL);
         res = (_client != nullptr);

+ 5 - 5
DevAdapter/self/dep/liblog4vendor/liblog4vendor/log4upload.cpp

@@ -193,8 +193,8 @@ bool upload_helper::initialize(const cmb::log_init_config& cfg)
         pinst_log_producer_config_set_send_thread_count(config, 2);
         pinst_log_producer_config_set_persistent_max_log_count(config, 50 * 1000);
         pinst_log_producer_config_set_skyeye_servname(config, (char*)"Terminal");
-        pinst_log_producer_config_set_skyeye_cmptId(config, (char*)"LR04");
-        pinst_log_producer_config_set_skyeye_cmptname(config, (char*)"FrameworkLib");
+        pinst_log_producer_config_set_skyeye_cmptId(config, (char*)SpDefine::cmptId);
+        pinst_log_producer_config_set_skyeye_cmptname(config, (char*)SpDefine::CmptName);
         pinst_log_producer_config_set_skyeye_version(config, (char*)"1.0");
         pinst_log_producer_config_set_persistent(config, 1);
 
@@ -215,11 +215,11 @@ bool upload_helper::initialize(const cmb::log_init_config& cfg)
 #endif
 
         //мÓͳһÈÕÖ¾ÅäÖÃ
-        pinst_log_producer_config_set_united_appname(config, (char*)"LR04");
+        pinst_log_producer_config_set_united_appname(config, (char*)SpDefine::cmptId);
         pinst_log_producer_config_set_united_version(config, (char*)"2.0");
         pinst_log_producer_config_set_united_needArchived(config, 0);
-        pinst_log_producer_config_set_united_deployUnitId(config, (char*)"LR04.02@FrameworkLib_PRD_PRD");
-        pinst_log_producer_config_set_united_serviceUnitId(config, (char*)"LR04.02_FrameworkLib");
+        pinst_log_producer_config_set_united_deployUnitId(config, (char*)SpDefine::deployUnitId);
+        pinst_log_producer_config_set_united_serviceUnitId(config, (char*)SpDefine::serviceUnitId);
 
         _client = pinst_create_log_producer_client(config, NULL, NULL);
         res = (_client != nullptr);

+ 1 - 0
DevAdapter/self/dep/liblog4vendor/liblog4vendor/log4upload.h

@@ -6,6 +6,7 @@
 #include <stdint.h>
 #include "log4vendor.h"
 #include "log_define.h"
+#include "SpDefine.h"
 
 #if defined(_MSC_VER)
 

+ 83 - 4
DevAdapter/simulator/FingerPrint.1.1/FingerPrint_impl.cpp

@@ -104,10 +104,15 @@ FingerPrintImpl::~FingerPrintImpl()
 
 ErrorCodeEnum FingerPrintImpl::GetDevCategory(DevCategoryInfo& devCategory)
 {
-	strcpy(devCategory.szModel, "szModel");
-	strcpy(devCategory.szType, "szType");
-	strcpy(devCategory.szVendor, "szVendor=cmbszSimulator");
-	return Error_Succeed;
+	if (GetDevCategoryHttp(devCategory)) {
+		strcpy(devCategory.szModel, "CM=2.0#CID=00000000");
+		strcpy(devCategory.szType, "PVER=ACT#MID=ACT-F5-5540-0SH");
+		strcpy(devCategory.szVendor, "cmbszSimulator");
+		return Error_Succeed;
+	}
+	else {
+		return Error_Exception;
+	}
 }
 
 ErrorCodeEnum FingerPrintImpl::Reset()
@@ -330,6 +335,80 @@ bool FingerPrintImpl::Image2TemplateHttp(LPBYTE lpbTemplate, int& iLength)
 	}
 }
 
+bool FingerPrintImpl::GetDevCategoryHttp(DevCategoryInfo& devCategory)
+{
+	LOG4VTM(INFO, "GetDevCategoryHttp");
+	return commonSimpleHttp("GetDevCategory");
+}
+
+bool FingerPrintImpl::commonSimpleHttp(string adapterInterName)
+{
+	CommonReq cReq;
+	CommonRet cRet;
+	IHttpFunc* client;
+	client = create_http(HttpsLogCallBack);
+
+	Json::Value rootReq;
+	Json::FastWriter writer;
+
+	rootReq["ip"] = GetLocalIP();
+	rootReq["entityName"] = "FingerPrint";
+	rootReq["adapterInterName"] = adapterInterName;//适配器接口名
+	string strErrPrefix = adapterInterName + "http";
+	cReq.m_url = getUrl();
+	cReq.m_timeOut = 30;
+	string jsonReq = writer.write(rootReq);
+	cReq.m_reqStr = jsonReq;//请求参数
+
+	bool ret = client->Post(cReq, cRet);
+	if (ret) {
+		Json::Reader reader;
+		Json::Value rootRet;
+		if (!reader.parse(cRet.m_retStr, rootRet, false))
+		{
+			LOG4VTM(INFO, strErrPrefix << " parse resp is fail,url=" << cReq.m_url.c_str());
+			return false;//失败
+		}
+		bool isSucc = rootRet["success"].asBool();
+		if (isSucc) {
+			//解析数据
+			if (rootRet.isMember("data")) {
+				bool isResult = rootRet["data"]["result"].asBool();
+				if (isResult) {
+					return true;
+				}
+				else {
+					return false;
+				}
+			}
+			else {
+				LOG4VTM(INFO, strErrPrefix << " return [data] is null");
+				return false;
+			}
+		}
+		else {
+			LOG4VTM(INFO, strErrPrefix << " [success] is false,");
+			return false;
+		}
+	}
+	else {
+		LOG4VTM(INFO, strErrPrefix << " req fail,err=%s" << cRet.m_errMsg.c_str());
+		return false;
+	}
+}
+
+string FingerPrintImpl::getUrl()
+{
+	string urlStr = iniRead.ReadString("server", "url", "");
+	if (urlStr.empty()) {
+		LOG4VTM(INFO, "url is empty, use default url");
+		return "http://localhost:8080/avs/imitate/simulateDataN";
+	}
+	else {
+		return urlStr;
+	}
+}
+
 #ifdef NEWER_COMPILER_WORKAROUNDS
 
 DEVICEBASE_API ErrorCodeEnum  GetDevAdapterVersion(DevSoftVersion& retVesion)

+ 19 - 0
DevAdapter/simulator/FingerPrint.1.1/FingerPrint_impl.h

@@ -8,6 +8,21 @@
 #include "../../DeviceSimulator.h"
 #include "json/json.h"
 
+typedef struct CommonReq : CHTTPReq {
+	string m_reqStr;
+	string ToJson() {
+		return m_reqStr;
+	}
+} CommonReq;
+
+typedef struct CommonRet : CHTTPRet {
+	string m_retStr;
+	bool Parse(string strData) {
+		m_retStr = strData;
+		return true;
+	}
+} CommonRet;
+
 typedef struct Image2FeatureReq : CHTTPReq {
 	string m_reqStr;
 	string ToJson() {
@@ -76,6 +91,10 @@ public:
 
 	bool Image2TemplateHttp(LPBYTE lpbTemplate, int& iLength);
 
+	bool GetDevCategoryHttp(DevCategoryInfo& devCategory);
+
+	bool commonSimpleHttp(string adapterInterName);
+	string getUrl();
 	string depCfgPath;
 	iniReader iniRead;
 };

+ 4 - 4
Framework/Common/SpDefine.h

@@ -42,10 +42,10 @@ public:
 	static constexpr const char* topicVTMWeb = "LR18_23_VTMWebSDKUserLog";
 
 	//const log params
-	static constexpr const char* cmptId = "LR04";
-	static constexpr const char* CmptName = "FrameworkLib";
-	static constexpr const char* deployUnitId = "LR04.02@FrameworkLib_PRD_PRD";
-	static constexpr const char* serviceUnitId = "LR04.02_FrameworkLib";
+	static constexpr const char* cmptId = "LR04.02";
+	static constexpr const char* CmptName = "RVCTerminalPlus";
+	static constexpr const char* deployUnitId = "LR04.02_RVCTerminalPlus";
+	static constexpr const char* serviceUnitId = "LR04.02@RVCTerminalPlus_PRD_PRD";
 
 
 };

+ 1 - 1
Framework/spbase/sp_httpDefine.cpp

@@ -733,7 +733,7 @@ std::pair<bool, TerminalCfgRet> GetTerminalCfgFromUrl(CSimpleString url, const s
 		{
 			ret = true;
 			dst = reqArr[grayRet - WAIT_OBJECT_0].ret;
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("GetTerminalCfgFromUrl success from url %s, update:%d",
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("GetTerminalCfgFromUrl success from url %s, update:%d",
 				reqArr[grayRet - WAIT_OBJECT_0].m_url.c_str(), dst.update);
 		}
 	}

+ 11 - 10
Framework/spbase/sp_logwithlink.cpp

@@ -26,6 +26,7 @@
 #include "sp_httpDefine.h"
 #include <fstream>
 #include <iostream>
+#include "SpDefine.h"
 #include <mutex>
 #define TAG SPBASE_TAG("sp_logwithlink")
 
@@ -642,11 +643,11 @@ SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleS
     if(CmptId.GetLength() > 0)
         log_producer_config_set_skyeye_cmptId(config, (char*)CmptId.GetData());
     else
-        log_producer_config_set_skyeye_cmptId(config, (char*)"LR04");
+        log_producer_config_set_skyeye_cmptId(config, (char*)SpDefine::cmptId);
     if(CmptName.GetLength() > 0)
         log_producer_config_set_skyeye_cmptname(config, (char*)CmptName.GetData());
     else
-        log_producer_config_set_skyeye_cmptname(config, (char*)"FrameworkLib");
+        log_producer_config_set_skyeye_cmptname(config, (char*)SpDefine::CmptName);
     log_producer_config_set_skyeye_version(config, (char*)"1.0");
     log_producer_config_set_persistent(config, 1);
 
@@ -683,11 +684,11 @@ SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleS
     }
 
     //新加统一日志配置
-    log_producer_config_set_united_appname(config, (char*)"LR04");
+    log_producer_config_set_united_appname(config, (char*)SpDefine::cmptId);
     log_producer_config_set_united_version(config, (char*)"2.0");
     log_producer_config_set_united_needArchived(config, 0);
-    log_producer_config_set_united_deployUnitId(config, (char*)"LR04.02_FrameworkLib");
-    log_producer_config_set_united_serviceUnitId(config, (char*)"LR04.02@FrameworkLib_PRD_PRD");
+    log_producer_config_set_united_deployUnitId(config, (char*)SpDefine::deployUnitId);
+    log_producer_config_set_united_serviceUnitId(config, (char*)SpDefine::serviceUnitId);
 
 #ifndef _WIN32
     //log_producer_config_set_dbgFun(logCallback);
@@ -739,8 +740,8 @@ SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleString
     log_producer_config_set_send_thread_count(config, 1);
     log_producer_config_set_persistent_max_log_count(config, 20 * 1000);
     log_producer_config_set_skyeye_servname(config, (char*)"Terminal");
-    log_producer_config_set_skyeye_cmptId(config, (char*)"LR04");
-    log_producer_config_set_skyeye_cmptname(config, (char*)"FrameworkLib");
+    log_producer_config_set_skyeye_cmptId(config, (char*)SpDefine::cmptId);
+    log_producer_config_set_skyeye_cmptname(config, (char*)SpDefine::CmptName);
     log_producer_config_set_skyeye_version(config, (char*)"1.0");
     log_producer_config_set_persistent(config, 1);
     log_producer_config_set_openDb(config, 1);
@@ -774,11 +775,11 @@ SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleString
     }
 
     //新加统一日志配置
-    log_producer_config_set_united_appname(config, (char*)"LR04");
+    log_producer_config_set_united_appname(config, (char*)SpDefine::cmptId);
     log_producer_config_set_united_version(config, (char*)"2.0");
     log_producer_config_set_united_needArchived(config, 0);
-    log_producer_config_set_united_deployUnitId(config, (char*)"LR04.02_FrameworkLib");
-    log_producer_config_set_united_serviceUnitId(config, (char*)"LR04.02@FrameworkLib_PRD_PRD");
+    log_producer_config_set_united_deployUnitId(config, (char*)SpDefine::deployUnitId);
+    log_producer_config_set_united_serviceUnitId(config, (char*)SpDefine::serviceUnitId);
     log_producer_config_set_enable_guard(config, 1);
 
 #ifndef _WIN32

+ 0 - 4
Module/include/DevFSMCommBase.hpp

@@ -38,10 +38,6 @@ do {\
 	ent.dwReserved = reserved;	\
 } while (false)
 
-// 先不上厂商标识 [5/14/2020 7:34 @Gifur]
-#define HARDWARE_ENTITY_SET_VENDOR_NAME(ent, str)	\
-	ent.dwVendorId = 0/*(DWORD)DeviceBaseHelper::GetCurVendorType(str)*/ 
-
 #define HARDWARE_ENTITY_MAKE_ERRORCODE(ec)	\
 	MAKE_SLV_ERRORCODE(ec.dwEntityId, (ec.dwVendorId), ec.dwVendorErroCode)
 

+ 1 - 1
Module/include/EventCode.h

@@ -490,7 +490,7 @@ ERROR_ACCESSAUTH_CONNECT_ACS_x}
 #define LOG_EVT_HSPS_LIGHT_OFF 0x21700003
 #define LOG_EVT_HSPS_LOST_CONNECT 0x21700004
 
-#define LOG_EVT_HEALTH_FIRST_ENTER_MAINPADE 0x50100002			//IE启动以来首次进首页
+
 #define LOG_EVT_HEALTH_FIRST_ENTER_MAINPADE_FROM_HEALTH_START 0x50100003	//健康启动以来首次进首页
 #define LOG_WARN_HEALTH_INSTALL_FINISHED 0x50100004		//安装成功的标识
 #define LOG_WARN_HEALTH_INSTALL_RESET 0x50100005		//请求重新安装的标识

+ 4 - 6
Module/mod_CardIssuerStand/CardIssuerFSM.cpp

@@ -1763,14 +1763,11 @@ void CCardIssuerFSM::Load()
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("<Load>, open root.ini failed");
 		return;
 	}
-	CSimpleStringA csVendor("");
 	spConfig->ReadConfigValueInt("Device.CardIssuer", "Baudrate", m_baudRate);
 	spConfig->ReadConfigValueInt("Device.CardIssuer", "Port", m_port);
-	spConfig->ReadConfigValue("Device.CardIssuer", "Vendor", csVendor);
-	HARDWARE_ENTITY_SET_VENDOR_NAME(m_entCode, csVendor);	
 
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("m_baudRate:%d, m_port:%d, csVendor:%s,",
-			m_baudRate, m_port, csVendor.GetData()));
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("m_baudRate:%d, m_port:%d",
+			m_baudRate, m_port));
 
 	m_csDevSN = "";
 }
@@ -1979,7 +1976,8 @@ int CCardIssuerFSM::IssueCard(SpReqAnsContext<CardIssuerStandService_Issue_Req,
 	{
 		CSimpleStringA warnInfo = CSimpleStringA::Format("IssuerCard, hopper%d no more cards to issue. LocalRecord CardremainsEx:%d, Vendor return:NoCard(%d), CardCount(%d)",
 			m_currentHopper, m_remainsEx[m_currentHopper - 1], cis.eIssuerBin[m_currentHopper - 1],  cis.dwIssuerCount[m_currentHopper - 1]);
-		LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_No_More_Card_Issue, warnInfo.GetData());
+		//LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_No_More_Card_Issue, warnInfo.GetData());
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)(warnInfo.GetData());
 
 		DWORD dwUsrErrCode = 0;
 		if (cis.eIssuerBin[m_currentHopper - 1] == CI_ISSUEHOPPER_NOTSUPP)

+ 9 - 170
Module/mod_CardReadAdapter/CardReadAdapterFSM.cpp

@@ -130,8 +130,8 @@ unsigned int CCardReadAdapterFSM::s2_on_event(FSMEvent* pEvt)
 			//		--no matter what MachineType is,just call it 
 			pEvt->SetHandled();
 			CardReadEvent* cre = dynamic_cast<CardReadEvent*>(pEvt);
-			bool bCardIssuer, bCardSwiper, bContactlessCard;
-			bCardIssuer = bCardSwiper = bContactlessCard = false;
+			bool bCardIssuer, bContactlessCard;
+			bCardIssuer = bContactlessCard = false;
 			if (m_eMachineType == SP::Module::Comm::RVC_Stand2S || m_eMachineType == SP::Module::Comm::RVC_Stand1SPlus)
 			{
 				ContactlessCardReadTask* cTask = new ContactlessCardReadTask(this);
@@ -154,8 +154,8 @@ unsigned int CCardReadAdapterFSM::s2_on_event(FSMEvent* pEvt)
 					GetEntityBase()->GetFunction()->PostThreadPoolTask(iTask);
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("ReadTask to CardIssuer");
 				}
-				if (bCardIssuer || bCardSwiper || bContactlessCard)
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("ReadTask, bCardIssuer,bCardSwiper,bContactlessCard:%d,%d,%d", bCardIssuer, bCardSwiper, bContactlessCard);
+				if (bCardIssuer || bContactlessCard)
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("ReadTask, bCardIssuer,bContactlessCard:%d,%d", bCardIssuer, bContactlessCard);
 				else
 				{
 					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("ReadTask: can't find the right entity.");
@@ -480,7 +480,7 @@ unsigned int CCardReadAdapterFSM::s3_on_event(FSMEvent* pEvt)
 			ret = 0;
 			break;
 		}
-		else if (pEvt->param1 == 9)//CardSwiper Timeout,need to cancel ContactlessCard insert
+		else if (pEvt->param1 == 9)//ContactlessCard Timeout,need to cancel ContactlessCard insert
 		{
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ContactlessCard Timeout,need to cancel CardIssuer insert");
 			if (IsContactlessCardSessionOK())
@@ -669,7 +669,7 @@ int CCardReadAdapterFSM::DoWork(int type)
 int CCardReadAdapterFSM::CardIssuerRead(SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
-	if (m_bCancelAccept || (m_busCtx.eCardFromWhich == Card_In_ContactlessCard || m_busCtx.eCardFromWhich == Card_In_CardSwiper))
+	if (m_bCancelAccept || (m_busCtx.eCardFromWhich == Card_In_ContactlessCard))
 	{
 		char msg[128];
 		memset(msg, 0, 128);
@@ -992,7 +992,7 @@ int CCardReadAdapterFSM::CardIssuerRead(SpReqAnsContext<CardReadAdapterService_R
 int CCardReadAdapterFSM::ContactlessCardRead(SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
-	if (m_bCancelAccept || (m_busCtx.eCardFromWhich == Card_In_CardIssuer || m_busCtx.eCardFromWhich == Card_In_CardSwiper))
+	if (m_bCancelAccept || (m_busCtx.eCardFromWhich == Card_In_CardIssuer))
 	{
 		char msg[128];
 		memset(msg, 0, 128);
@@ -1212,158 +1212,7 @@ int CCardReadAdapterFSM::IssueCard(SpReqAnsContext<CardReadAdapterService_Issue_
 		return 1;
 	}
 }
-int CCardReadAdapterFSM::CardSwiperRead(SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx,int &eRetErr)
-{
-	//if (m_bCancelAccept || (m_busCtx.eCardFromWhich == Card_In_CardIssuer || m_busCtx.eCardFromWhich == Card_In_ContactlessCard))
-	//{
-	//	char msg[128];
-	//	memset(msg, 0, 128);
-	//	sprintf(msg, "Maybe the thread pool is wrong.CardSwiperRead,bCancel:%d,cardpos:%d", m_bCancelAccept, m_busCtx.eCardFromWhich);
-	//	LogWarn(Severity_Middle, Error_NotInit, CardReadAdapter_UserErrorCode_MayBe_ThreadPool_Wrong, msg);
-	//	return 3;
-	//}
-	//ErrorCodeEnum eErr = Error_Unexpect;
-
-	//DWORD elapsed = 0;
-	//DWORD dwStart = GetTickCountRVC();
-	//DWORD dwEnd = GetTickCountRVC();
-	//while (elapsed + ReadCard_Min_Time < ReadCard_TIMEOUT)//要给Read和PreOnline两阶段 至少预留12s左右
-	//{
-	//	if (IsTheEntity(ctx->Req.module, Module_CardSwiper) && IsCardSwiperSessionOK())
-	//	{
-	//		CardSwiperService_Read_Req req;
-	//		CardSwiperService_Read_Ans ans;
-	//		req.aid = ctx->Req.aid;
-	//		req.LightPos = 0;
-	//		if (ctx->Req.lightPos == 0)
-	//			req.LightPos = 7;
-	//		if ((ctx->Req.lightPos&LightPos_CardSwiper_Mag) == LightPos_CardSwiper_Mag)
-	//			req.LightPos += 1;
-	//		if ((ctx->Req.lightPos&LightPos_CardSwiper_IC) == LightPos_CardSwiper_IC)
-	//			req.LightPos += 2;
-	//		if ((ctx->Req.lightPos&LightPos_CardSwiper_RFIC) == LightPos_CardSwiper_RFIC)
-	//			req.LightPos += 4;
-	//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("CardSwiperRead, aid:%s,lightPos:%d",(const char*)req.aid,req.LightPos));
 
-	//		DWORD dwUserCode = 0;
-	//		m_busCtx.eCardProcStage = Card_ProcStage_WaitForCard;
-	//		eErr = (*m_pCardSwiper)(EntityResource::getLink().upgradeLink())->Read(req, ans, 60000, dwUserCode);
-	//		eRetErr = eErr;
-	//		if (eErr == Error_Succeed)
-	//		{
-	//			m_busCtx.eCardFromWhich = Card_In_CardSwiper;
-	//			m_busCtx.eCardProcStage = Card_ProcStage_Read;
-	//			//oilyang@20180913 由于CardSwiper没有插卡过程,直接进行pboc流程,需要提前取消其他实体的输入
-	//			if (IsCardIssuerSessionOK())
-	//				(*m_pCardIssuer)(EntityResource::getLink().upgradeLink())->CancelInsert();
-	//			if (IsContactlessCardSessionOK())
-	//				(*m_pContactless)(EntityResource::getLink().upgradeLink())->CancelInsert();
-	//			ctx->Ans.track1 = ans.track1;
-	//			ctx->Ans.track2 = ans.track2;
-	//			ctx->Ans.track3 = ans.track3;
-	//			if (ans.ICType == 5)//oilyang@20170204 如果插错卡,反馈为未检测到(有效)卡
-	//				ctx->Ans.ICType = 0;
-	//			else if (ans.ICType == 6)//身份证
-	//				ctx->Ans.ICType = 5;
-	//			else
-	//				ctx->Ans.ICType = ans.ICType;
-	//			ctx->Ans.ICCardNo = ans.ICData;
-	//			ctx->Ans.status = ans.status;
-	//			if (ans.CardPos == 2 || ans.CardPos == 5)
-	//				ctx->Ans.cardPos = CardPos_CardSwiper_IC_Insert;
-	//			else if (ans.CardPos == 4 || ans.CardPos == 6)
-	//				ctx->Ans.cardPos = CardPos_CardSwiper_RFIC;
-	//			else
-	//				ctx->Ans.cardPos = ans.CardPos;
-	//			ctx->Ans.t2Account = ans.t2Account;
-	//			ctx->Ans.t2Region = ans.t2Region;
-	//			ctx->Ans.t2CardSerial = ans.t2CardSerial;
-	//			ctx->Ans.t2CVC = ans.t2CVC;
-	//			ctx->Ans.t2ExpireDate = ans.t2ExpireDate;
-	//			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("ICType:%d,%d, accountNo:%s****%s", ctx->Ans.ICType, ans.ICType,
-	//				(const char*)ctx->Ans.t2Account.SubString(0, 4), (const char*)ctx->Ans.t2Account.SubString(ctx->Ans.t2Account.GetLength() - 4, 4)));
-	//			if (ans.ICType == 3 || ans.ICType == 4)
-	//			{
-	//				CardSwiperService_PreOnline_Req req;
-	//				CardSwiperService_PreOnline_Ans ans;
-	//				req.businessData = ctx->Req.businessData;
-	//				BroadcastReadICing(0);
-	//				dwEnd = GetTickCountRVC();
-	//				DWORD elapse1 = ReadCard_TIMEOUT - (dwEnd-dwStart);
-	//				if(elapse1 < 10000)//PreOnline较慢,预留一定时间
-	//				{
-	//					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("There is no more time to invoke PreOnline");
-	//					ctx->Ans.result = "";
-	//					return 9;
-	//				}
-	//				dwUserCode = 0;
-	//				eErr = (*m_pCardSwiper)(EntityResource::getLink().upgradeLink())->PreOnline(req, ans, elapse1, dwUserCode);
-	//				if (eErr == Error_Succeed)
-	//				{
-	//					ctx->Ans.result = ans.result;
-	//				}
-	//				else if(eErr == Error_Interact){
-	//					if(m_eMachineType == SP::Module::Comm::RVC_Desk2S){
-	//						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CardSwiper(RVC_Desk2S) return Error_Interact, no need loop.");
-	//						ctx->Ans.result = "";
-	//						ctx->Answer(Error_Unexpect, dwUserCode);
-	//						return 0;
-	//					}
-	//					else
-	//						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CardSwiper return Error_Interact, need loop.");
-	//					dwEnd = GetTickCountRVC();
-	//					elapsed = dwEnd - dwStart;
-	//					Sleep(200);
-	//					continue;
-	//				}else{
-	//					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("CardSwiper PreOnline failed return:%d", eErr));
-	//					ctx->Ans.result = "";
-	//				}
-	//			}
-	//		}else if(eErr == Error_Param){
-	//			eErr = Error_Unexpect;
-	//			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("TrackData maybe some wrong");
-	//		}else if(eErr == Error_Interact){
-	//			if(m_eMachineType == SP::Module::Comm::RVC_Desk2S){
-	//				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CardSwiper(RVC_Desk2S) return Error_Interact, no need loop.");
-	//				return 9;//Maybe vendor's QueryCardStatus timeout
-	//			}else{
-	//				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CardSwiper ReadCard:ActiveContactlessICCard or ICCommand failed, need loop");
-	//				dwEnd = GetTickCountRVC();
-	//				elapsed = dwEnd - dwStart;
-	//				Sleep(200);
-	//				continue;
-	//			}
-	//		}else{
-	//			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("CardSwiper Read failed return:%d", eErr));
-	//		}
-	//		if (eErr == Error_TimeOut)
-	//		{
-	//			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CardSwiper timeout.");
-	//			return 9;
-	//		}
-	//		else if (eErr == Error_InvalidState)
-	//		{
-	//			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CardSwiper in error state.");
-	//			return 1;
-	//		}
-	//		else{
-	//			ctx->Answer(eErr, dwUserCode);
-	//			return 0;
-	//		}
-	//	}
-	//	else
-	//	{
-	//		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("can't find the corresponding Entity.req.Module:%d", ctx->Req.module));
-	//		return 1;
-	//	}
-	//	break;
-	//}
-	//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("no more time to loop again");
-	//return 9;
-	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("can't find the corresponding Entity.req.Module:%d", ctx->Req.module));
-	return 1;
-}
 void CCardReadAdapterFSM::CancelRead()
 {
 	ErrorCodeEnum eErr = Error_Unexpect;
@@ -1795,7 +1644,7 @@ int CCardReadAdapterFSM::QueryCardInfo(SpReqAnsContext<CardReadAdapterService_Qu
 void CCardReadAdapterFSM::CheckAndReconnectSession()
 {
 	ErrorCodeEnum eErr = Error_Unexpect;
-	int cardIssuerCount = 0, contactlessCardCount = 0, cardSwiperCount = 0;
+	int cardIssuerCount = 0, contactlessCardCount = 0;
 	while (1)
 	{
 		//the first time to connect or need to reconnect
@@ -1908,12 +1757,7 @@ bool CCardReadAdapterFSM::IsContactlessCardSessionOK()
 		return true;
 	return false;
 }
-bool CCardReadAdapterFSM::IsCardSwiperSessionOK()
-{
-	//if (m_pCardSwiper != NULL && !m_pCardSwiper->QuerySessionClosed())
-	//	return true;
-	return false;
-}
+
 bool CCardReadAdapterFSM::IsTheEntity(int module,ModuleType eModule)
 {
 	if (module == 0)
@@ -2371,19 +2215,14 @@ int CCardReadAdapterFSM::OpenSafeLock(SpReqAnsContext<CardReadAdapterService_Ope
 }
 int CCardReadAdapterFSM::MagTransferInit(SpReqAnsContext<CardReadAdapterService_MagTransferInit_Req, CardReadAdapterService_MagTransferInit_Ans>::Pointer ctx)
 {
-	LOG_FUNCTION();
-
 	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Entity CardSwiper is not ok.");
 	ctx->Answer(Error_Unexpect);
-
 	return 0;
 }
 int CCardReadAdapterFSM::QueryConnInfo(SpReqAnsContext<CardReadAdapterService_QueryConnInfo_Req, CardReadAdapterService_QueryConnInfo_Ans>::Pointer ctx)
 {
-
 	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Entity CardSwiper is not ok.");
 	ctx->Answer(Error_Unexpect);
-
 	return 0;
 }
 void CCardReadAdapterFSM::DoExit()

+ 6 - 48
Module/mod_CardReadAdapter/CardReadAdapterFSM.h

@@ -110,8 +110,7 @@ enum CardFromWhichEntity//卡片信息从哪个实体返回
 {
 	Card_In_No_Where,
 	Card_In_CardIssuer,
-	Card_In_ContactlessCard,
-	Card_In_CardSwiper,
+	Card_In_ContactlessCard
 };
 enum CardProcStage//stage of card process
 {
@@ -142,19 +141,7 @@ enum CardPosType
 	CardPos_CardSwiper_RFIC,//3 : CardSwiper非接卡
 	CardPos_CardIssuer_Stand2S,//4:卡片在大机卡机里面
 	CardPos_ContactlessCard,//5:卡片在大机非接上面
-	CardPos_CardIssuer_Split,//6:卡片在便携发卡机里面
-
-	//CardPos_No_Card = 0,//0:检查超时,未发现设备有卡。
-	//CardPos_CardSwiper_Mag_OK,//1:CardSwiper刷卡且有磁道数据(至少有二磁道数据)
-	//CardPos_CardSwiper_IC,//2:CardSwiper插IC卡
-	//CardPos_CardSwiper_Mag_No_Track2,//3:CardSwiper刷卡,但二磁道数据缺失
-	//CardPos_CardSwiper_RFIC,//4 : CardSwiper非接卡
-	//CardPos_CardSwiper_Invalid,//5:CardSwiper插入接触卡, 卡面插反或无效卡
-	//CardPos_CardSwiper_ID,//6:CardSwiper非接IC位发现身份证
-	//CardPos_CardIssuer_Stand2S,//7:卡片在大机卡机里面
-	//CardPos_ContactlessCard_OK,//8:卡片在大机非接上面
-	//CardPos_ContactlessCard_ID,//9:在大机非接位发现身份证
-	//CardPos_CardIssuer_Split,//10:卡片在便携发卡机里面 
+	CardPos_CardIssuer_Split//6:卡片在便携发卡机里面
 };
 enum LightPos
 {
@@ -170,7 +157,6 @@ class CCardReadAdapterEntity;
 class CCardReadAdapterFSM;
 const int ONE_K = 1024;
 
-
 class CardIssueEvent : public FSMEvent
 {
 public:
@@ -767,16 +753,6 @@ public:
 	virtual ErrorCodeEnum OnInit();
 	virtual ErrorCodeEnum OnExit();
 
-	//unsigned int sReady_on_event(FSMEvent* event) 
-	//{
-	//	if (event->iEvt == USER_EVT_READ) {
-	//		// new read task
-	//		
-	//		event->SetHandled();
-	//		return 0;
-	//	}
-	//}
-
 	void s0_on_entry();
 	void s0_on_exit();
 	unsigned int s0_on_event(FSMEvent* event);
@@ -799,7 +775,6 @@ public:
 	int DoWork(int type);
 	int CardIssuerRead(SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx);
 	int ContactlessCardRead(SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx);
-	int CardSwiperRead(SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx,int &eRetErr);
 	int IssueCard(SpReqAnsContext<CardReadAdapterService_Issue_Req, CardReadAdapterService_Issue_Ans>::Pointer ctx);
 	void CancelRead();
 	void ReadWaitMore();
@@ -864,16 +839,14 @@ private:
 	SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer m_readCtx;
 
 	//m_lastModule:0~7
-	//0:all; 1:CardIssuer; 2:ContactlessCard; 4:CardSwiper
+	//0:all; 1:CardIssuer; 2:ContactlessCard
 	int m_lastModule,m_lastS2Event, m_lastS2EvtParam1;
 	SP::Module::Comm::What m_eMachineType;
 	WORD m_majorVerion,m_minorVerion;
 	///
 	int m_resetTimes;
-	HMODULE m_hVerdorDll;
-	//GUIConsoleService_ClientBase *m_pGUIConsoleClient;
 	bool m_devInit, m_bCancelAccept, m_bWaitingAccept, m_bWaitAccepteMore
-		, m_bCDA, m_bIssuingExit, m_bCardIssued, m_bCaptureCfgFlag, m_bHasHopper[3], m_bBTConncting
+		, m_bCDA, m_bIssuingExit, m_bCardIssued, m_bCaptureCfgFlag, m_bHasHopper[3]
 		, m_bCardActiveNotify;
 	ErrorCodeEnum m_testResult;
 	//m_CardInit,m_CardRemains,m_CardIssued,m_CardMixed,m_CardPercent
@@ -888,16 +861,14 @@ private:
 
 	char *m_pDataToARQC;
 	long xxTest;
-	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_csSite, m_csDevSN, m_terminalNo, m_devSN;
+	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_csSite, m_csDevSN, m_terminalNo;
 
 	char m_AuthCode[2];
-	bool m_bBTConnected;
 	SpReqAnsContext<CardReadAdapterService_PreOnlineOnStore_Req, CardReadAdapterService_PreOnlineOnStore_Ans>::Pointer m_crossCtx;
 	ULONGLONG m_ullCrossStart;
 
 	bool IsCardIssuerSessionOK();
 	bool IsContactlessCardSessionOK();
-	bool IsCardSwiperSessionOK();
 	bool IsTheEntity(int module,ModuleType eModule);
 	bool CheckHBSessionOrToConnect();
 	//oilyang@20230614 跨及时因为卡片的实际交易发生在卡库,需要在发起端对返回的UserErrorCode做二次映射,方便客户理解提示信息
@@ -979,20 +950,7 @@ struct ContactlessCardReadTask : public ITaskSp
 		fsm->PostEventFIFO(e);
 	}
 };
-struct CardSwiperReadTask : public ITaskSp
-{
-	CCardReadAdapterFSM* fsm;
-	SpReqAnsContext<CardReadAdapterService_Read_Req, CardReadAdapterService_Read_Ans>::Pointer ctx;
-	CardSwiperReadTask(CCardReadAdapterFSM* f) : fsm(f) {}
-	int x;
-	void Process()
-	{
-		CardReadFinishedEvent *e = new CardReadFinishedEvent();
-		e->ctx = ctx;
-		e->param1 = fsm->CardSwiperRead(ctx,x);
-		fsm->PostEventFIFO(e);
-	}
-};
+
 struct WriteTask : public ITaskSp
 {
 	CCardReadAdapterFSM* fsm;

+ 3 - 3
Module/mod_CenterSetting/mod_centersetting.h

@@ -78,7 +78,7 @@ public:
 	virtual void Handle_Downloadv2(SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer ctx)
 	{
 		DbgToBeidou(ctx->link, __FUNCTION__)();
-		DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("DownloadCenterSetting")("Handle_Download");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(CenterSettingService_LogCode_Downloadv2).setAPI(__FUNCTION__)(__FUNCTION__);
 		m_pEntity->DownloadCenterSetting(ctx);
 	}
 
@@ -86,7 +86,7 @@ public:
 	virtual void Handle_GetAccessUrl(SpReqAnsContext<CenterSettingService_GetAccessUrl_Req, CenterSettingService_GetAccessUrl_Ans>::Pointer ctx)
 	{
 		DbgToBeidou(ctx->link, __FUNCTION__)();
-		DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("GetAccessUrl")("Handle_GetAccessUrl");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(CenterSettingService_LogCode_GetAccessUrl).setAPI(__FUNCTION__)(__FUNCTION__);
 		auto rc = m_pEntity->GetAccessUrl(ctx->Ans.HostUrl); //获取初始化地址,是的,就是初始化地址,不要在意这里的名称问题,之前同事开发接口的时候估计随手一打
 		ctx->Answer(rc);
 	}
@@ -94,7 +94,7 @@ public:
 	virtual void Handle_GetCertainAceessUrl(SpReqAnsContext<CenterSettingService_GetCertainAceessUrl_Req, CenterSettingService_GetCertainAceessUrl_Ans>::Pointer ctx)
 	{
 		DbgToBeidou(ctx->link, __FUNCTION__)();
-		DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI("GetAccessHostUrl")("Handle_GetAccessHostUrl");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(CenterSettingService_LogCode_GetCertainAceessUrl).setAPI(__FUNCTION__)(__FUNCTION__);
 		auto rc = m_pEntity->GetCertainAceessUrl(ctx->Req.reqName, ctx->Ans.CertainAceessUrl); //获取准入地址,这个接口是后面加的
 		ctx->Answer(rc);
 	}

+ 1 - 1
Module/mod_ContactlessCard/ContactlessFSM.cpp

@@ -606,7 +606,7 @@ ErrorCodeEnum CContactlessCardFSM::Load()
 			}
 			else
 			{
-				SetErrPackage("Load::GetDevCategory", m_csDevNo, hr, MEC_DEVAPI_RF_GetDevCategory);
+				SetErrPackage("Load::GetDevCategory", m_csDevNo, eErrDev, MEC_DEVAPI_RF_GetDevCategory);
 				AlarmDEC();
 				return Error_DevCommFailed;
 			}

+ 19 - 0
Module/mod_DeviceControl/mod_DeviceControl.cpp

@@ -35,61 +35,80 @@
 void CDeviceControlServerSession::Handle_USB(SpReqAnsContext<DeviceControlService_USB_Req, DeviceControlService_USB_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_USB).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->USB(ctx);
 }
 void CDeviceControlServerSession::Handle_GetUkeyID(SpReqAnsContext<DeviceControlService_GetUkeyID_Req, DeviceControlService_GetUkeyID_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_GetUkeyID).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->GetUkeyID(ctx);
 }
 void CDeviceControlServerSession::Handle_InitToken(SpReqAnsContext<DeviceControlService_InitToken_Req, DeviceControlService_InitToken_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_InitToken).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->InitToken(ctx);
 }
 void CDeviceControlServerSession::Handle_QueryUSBStatus(SpReqAnsContext<DeviceControlService_QueryUSBStatus_Req, DeviceControlService_QueryUSBStatus_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_QueryUSBStatus).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->QueryUSBStatus(ctx);
 }
 void CDeviceControlServerSession::Handle_QueryHardwareInfo(SpReqAnsContext<DeviceControlService_QueryHardwareInfo_Req, DeviceControlService_QueryHardwareInfo_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_QueryHardwareInfo).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->QueryHardwareInfo(ctx);
 }
 void CDeviceControlServerSession::Handle_ReadCenterConfigStr(SpReqAnsContext<DeviceControlService_ReadCenterConfigStr_Req, DeviceControlService_ReadCenterConfigStr_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_ReadCenterConfigStr).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->ReadCenterConfigStr(ctx);
 }
 
 void CDeviceControlServerSession::Handle_ReadConfigValue(SpReqAnsContext<DeviceControlService_ReadConfigValue_Req, DeviceControlService_ReadConfigValue_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_ReadConfigValue).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->ReadConfigValue(ctx);
 }
 
 void CDeviceControlServerSession::Handle_GetDevInfo(SpReqAnsContext<DeviceControlService_GetDevInfo_Req, DeviceControlService_GetDevInfo_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_GetDevInfo).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->GetDevInfo(ctx);
 }
 
 void CDeviceControlServerSession::Handle_TestConnectivity(SpReqAnsContext<DeviceControlService_TestConnectivity_Req, DeviceControlService_TestConnectivity_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_TestConnectivity).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->TestConnectivity(ctx);
 }
 
 void CDeviceControlServerSession::Handle_GetVendorFileList(SpReqAnsContext<DeviceControlService_GetVendorFileList_Req, DeviceControlService_GetVendorFileList_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_GetVendorFileList).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->GetVendorFileList(ctx);
 }
 
 void CDeviceControlServerSession::Handle_TestAdapterFileAvailable(SpReqAnsContext<DeviceControlService_TestAdapterFileAvailable_Req, DeviceControlService_TestAdapterFileAvailable_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(DeviceControlService_LogCode_TestAdapterFileAvailable).setAPI(__FUNCTION__)(__FUNCTION__);
+
     m_pEntity->TestAdapterFileAvailable(ctx);
 }
 

+ 0 - 1
Module/mod_FingerPrint/CMakeLists.txt

@@ -13,7 +13,6 @@ add_module_libraries(${MODULE_PREFIX} ${MODULE_NAME} ${MOD_VERSION_STRING})
 target_include_directories(${MODULE_NAME} PRIVATE
 	${RVC_COMMOM_INCLUDE_DIR}
 	${DevHeadPath}
-	${MODULE_BASE_DIR}/mod_cardswiper
 	${OTHER_LIB_BASE_DIR}/libpublicFun
 )
 

+ 12 - 18
Module/mod_FingerPrint/FingerPrintFSM.cpp

@@ -315,29 +315,21 @@ ErrorCodeEnum CFingerPrintFSM::OnInit()
 
 int CFingerPrintFSM::Initial()
 {
-	LOG_FUNCTION();
-	ErrorCodeEnum errDev;
 	CSmartPointer<IEntityFunction> spEntityFunction = GetEntityBase()->GetFunction();
-	CSmartPointer<IConfigInfo> spConfig;
-	errDev = spEntityFunction->OpenConfig(Config_Root, spConfig);
-	if (errDev != Error_Succeed)
-	{
-		SetErrPackage("Initial::OpenConfig", m_csDevSN, errDev, FingerPrint_UserErrorCode_OPEN_ROOT_FAILED_ONINIT);
-		AlarmDEC();
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode("RTA2402")("指纹仪实体初始化时,打开root.ini文件失败");
-		return 2;
-	}
-
-
-	//TODO:device init
-	int initCount = 0;
-	ErrorCodeEnum err;
 	auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
 
-
 	BOOL triedFlag = FALSE;
 	if (pEntity->vendorLibInfo.IsNotConfig()) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Not config the vendor at root.ini");
+		CSmartPointer<IConfigInfo> spConfig;
+		ErrorCodeEnum errDev = spEntityFunction->OpenConfig(Config_Root, spConfig);
+		if (errDev != Error_Succeed)
+		{
+			SetErrPackage("Initial::OpenConfig", m_csDevSN, errDev, FingerPrint_UserErrorCode_OPEN_ROOT_FAILED_ONINIT);
+			AlarmDEC();
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode("RTA2402")("指纹仪实体初始化时,打开root.ini文件失败");
+			return 2;
+		}
 		CSimpleStringA strVendor(true);
 		CSimpleStringA strVersion(true);
 		CSimpleStringA strBatch(true);
@@ -368,6 +360,8 @@ int CFingerPrintFSM::Initial()
 			tmpVendorLibInfo.strVendor = strVendor;
 			tmpVendorLibInfo.strVersion = strVersion;
 			tmpVendorLibInfo.strBatch = strBatch;
+			LogWarn(Severity_Low, Error_Debug, FingerPrint_UserErrorCode_Compact_RootIni, tmpVendorLibInfo.toLibNameString());
+
 			pEntity->vendorLibInfo = tmpVendorLibInfo;
 			triedFlag = !tmpVendorLibInfo.IsNotConfig();
 		}
@@ -381,7 +375,7 @@ int CFingerPrintFSM::Initial()
 		return 0;
 	}
 	pEntity->InitializeVendorLogSwitch();
-	err = LoadUpAdapterLibrary();
+	ErrorCodeEnum err = LoadUpAdapterLibrary();
 	if (!IS_SUCCEED(err))
 	{
 		if (err != Error_NotExist) { //文件存在,只是因为其他原因导致加载失败的

+ 2 - 0
Module/mod_FingerPrint/FingerPrint_UserErrorCode.h

@@ -50,5 +50,7 @@
 #define FingerPrint_UserErrorCode_Real_Root_Config						( FingerPrint_UserErrorCode_Start + 41 )	//实际加载的root配置
 
 #define FingerPrint_UserErrorCode_FindFile_in_DepBak					( FingerPrint_UserErrorCode_Start + 50 )	//在旧Dep路径下找到文件
+#define FingerPrint_UserErrorCode_Compact_RootIni					( FingerPrint_UserErrorCode_Start + 51 )	//本地未做硬件配置,实体做兼容
+
 
 #endif

+ 9 - 10
Module/mod_HSPScanner/HSPScannerFSM.cpp

@@ -1318,13 +1318,14 @@ int CHSPScannerFSM::StartPreview(SpReqAnsContext<HSPScannerService_StartPreview_
 	ErrorCodeEnum erroCode = Error_Unexpect;
 	SetLastUserCode();
 	if (ctx->Req.colorType || ctx->Req.scanType || ctx->Req.rotateType) {
-		int retCode = SetPreviewParam(ctx->Req.colorType, ctx->Req.rotateType, ctx->Req.scanType);
-		if (retCode == 0)
+		const int retCode = SetPreviewParam(ctx->Req.colorType, ctx->Req.rotateType, ctx->Req.scanType);
+		if (retCode != 0)
 		{
-			erroCode = Error_Succeed;
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("SetPreviewParam return some wrong:0x%X", retCode);
+			erroCode = Error_DevCommFailed;
 		}
 		else {
-			erroCode = Error_DevCommFailed;
+			erroCode = Error_Succeed;
 		}
 	}
 	HspsDevStatus status = { 0 };
@@ -1994,8 +1995,9 @@ int CHSPScannerFSM::SetPreviewParam(int colorType, int rotateType, int scanType,
 		}
 		else {
 			SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, abortIfFault ? IsInBusiness() : false, ullEnd - ullStart, HSPScannerService_LogCode_SetProperty, CombineJsonContext(ParamValToString(Param_Color_Map[colorType])));
+			retCode |= 0x0001;
+			SetLastUserCode(GetAlarmDEC(MEC_DEVAPI_HSPSCANNER_SetParam));
 		}
-		retCode |= 0x0001;
 	}
 	//////////////////////////////////////////////////////////////////////////
 	if (rotateType > 0 && rotateType < 5) {
@@ -2007,10 +2009,8 @@ int CHSPScannerFSM::SetPreviewParam(int colorType, int rotateType, int scanType,
 		}
 		else {
 			SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, abortIfFault ? IsInBusiness() : false, ullEnd - ullStart, HSPScannerService_LogCode_SetProperty, CombineJsonContext(ParamValToString(Param_Rotate_Map[rotateType])));
-		}
-		if (FAILURED(erroCode))
-		{
 			retCode |= 0x0002;
+			SetLastUserCode(GetAlarmDEC(MEC_DEVAPI_HSPSCANNER_SetParam));
 		}
 	}
 	//////////////////////////////////////////////////////////////////////////
@@ -2023,9 +2023,8 @@ int CHSPScannerFSM::SetPreviewParam(int colorType, int rotateType, int scanType,
 		}
 		else {
 			SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, abortIfFault ? IsInBusiness() : false, ullEnd - ullStart, HSPScannerService_LogCode_SetProperty, CombineJsonContext(ParamValToString(Param_Scan_Map[scanType])));
-		}
-		if (FAILURED(erroCode)) {
 			retCode |= 0x0004;
+			SetLastUserCode(GetAlarmDEC(MEC_DEVAPI_HSPSCANNER_SetParam));
 		}
 	}
 	return retCode;

+ 16 - 12
Module/mod_HSPScanner/HSPScannerFSM.h

@@ -81,7 +81,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_StartPreview).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreview).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -98,7 +98,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_CancelPreview).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreview).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -115,7 +115,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_ScanImage).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImage).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -132,7 +132,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_ScanImageEx).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageEx).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -149,7 +149,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_ShowProperty).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ShowProperty).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -166,7 +166,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_SetProperty).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetProperty).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -183,7 +183,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_SetWinPos).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetWinPos).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -200,7 +200,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_GetDevStatus).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevStatus).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -217,7 +217,7 @@ public:
 	{
 		if(m_ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(HSPScannerService_LogCode_GetDevInfo).setResultCode("RTA2N0V")("Error_InvalidState");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevInfo).setResultCode("RTA2N0V")("Error_InvalidState");
 			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
 		}
 	}
@@ -495,13 +495,17 @@ struct SetPropertyInPreviewTask : public ITaskSp
 			eRet = Error_Succeed;
 		}
 		else {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("SetPreviewParam return some wrong:0x%X", retCode);
 			eRet = Error_DevCommFailed;
 		}
-		m_ctx->Answer(eRet);
-		if(ISSUCCEEDED(eRet))
+		if (ISSUCCEEDED(eRet)) {
 			pEvt->param1 = 0;
-		else
+			m_ctx->Answer(eRet);
+		}
+		else {
+			m_ctx->Answer(eRet, m_fsm->GetCustLastErrorCode());
 			pEvt->param1 = 1;
+		}
 		m_fsm->PostEventFIFO(pEvt);
 		return;
 	}

+ 3 - 19
Module/mod_HSPScanner/mod_HSPScanner.cpp

@@ -90,6 +90,7 @@ void CHSPScannerEntity::OnSysVarEvent(const char* pszKey, const char* pszValue,
 
 ErrorCodeEnum CHSPScannerEntity::CustomVendorLibInfo()
 {
+	/** 仅做调查使用  [Gifur@2024118]*/
 	if (vendorLibInfo.strVendor.Compare("keba", true) == 0
 		&& ((vendorLibInfo.strVersion == "7" && vendorLibInfo.strBatch == "1")
 			|| (vendorLibInfo.strVersion == "1" && vendorLibInfo.strBatch == "1"))) {
@@ -106,25 +107,8 @@ ErrorCodeEnum CHSPScannerEntity::CustomVendorLibInfo()
 		} 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()) {
-			CSmartPointer<IConfigInfo> spConfig;
-			GetFunction()->OpenConfig(Config_CenterSetting, spConfig);
-			CSimpleStringA strDepDirPath(true);
-			GetFunction()->GetPath("Dep", strDepDirPath);
-			strDepDirPath += "\\";
-			strDepDirPath += "HSPScanner.keba.7.2.dll";
-			if (ExistsFileA(strDepDirPath)) {
-				int value(0);
-				spConfig->ReadConfigValueInt(GetEntityName(), "KebaAdapterSwitch", value);
-				if (value == 0) {
-					LogWarn(Severity_Low, Error_Debug, LOG_WARN_HSPS_VENDORDLL_KEBA_MATCHED, strExistDriver);
-				} else {
-					LogWarn(Severity_Low, Error_Debug, LOG_WARN_HSPS_VENDORDLL_CHANGE, strDepDirPath);
-					vendorLibInfo.strVersion = "7";
-					vendorLibInfo.strBatch = "2";
-				}
-			}
+		if (!strExistDriver.IsNullOrEmpty() && isNewOne) {
+			LogWarn(Severity_Low, Error_Debug, LOG_WARN_HSPS_VENDORDLL_KEBA_MATCHED, strExistDriver);
 		}
 	}
 	return Error_Succeed;

+ 0 - 1
Module/mod_IDCertificate/IDCertFSM.cpp

@@ -1881,7 +1881,6 @@ int CIDCertFSM::Initial()
 	}
 
 	FulfillAdapterInfoFrom(pEntity->vendorLibInfo);
-	HARDWARE_ENTITY_SET_VENDOR_NAME(m_entCode, m_adapterInfo.strVendor);
 
 	pEntity->InitializeVendorLogSwitch();
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)

+ 0 - 1
Module/mod_ResourceWatcher/CMakeLists.txt

@@ -55,7 +55,6 @@ endif(MSVC)
 target_link_libraries(${MODULE_NAME}  ${${MODULE_PREFIX}_LIBS})  
 
 target_include_directories(${MODULE_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
-    ${MODULE_BASE_DIR}/mod_cardswiper
     ${MODULE_BASE_DIR}/mod_healthmanager
     ${MODULE_BASE_DIR}/mod_UpgradeMgr
     ${MODULE_BASE_DIR}/mod_chromium

+ 179 - 128
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -42,7 +42,9 @@
 #include <wlanapi.h>
 #include <Netlistmgr.h>  //网络检测添加
 #include <psapi.h>  
-#include <tlhelp32.h> 
+#include <tlhelp32.h>
+#include <WtsApi32.h>
+#pragma comment(lib, "WtsApi32.lib")
 #include "Mmdeviceapi.h"
 #include "Propidl.h"
 #include "Functiondiscoverykeys_devpkey.h"
@@ -109,63 +111,7 @@ const char* STRATUP_FILENAME_FROM_SCRIPTS = "spexplorerauto.lnk";
 
 
 #if defined(RVC_OS_WIN)
-void GetCurUserName(CSimpleStringA& strUserName)
-{
-	strUserName.Clear();
-	const DWORD INFO_BUFFER_SIZE = 128;
-	char infoBuf[INFO_BUFFER_SIZE];
-	ZeroMemory(infoBuf, INFO_BUFFER_SIZE);
-	DWORD bufCharCount = INFO_BUFFER_SIZE;
-	if (!GetUserName(infoBuf, &bufCharCount)) {
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetUserName failed, GLE=%u", GetLastError());
-	}
-	else {
-		strUserName = infoBuf;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("User name:%s", strUserName.GetData());
-	}
-}
-
-static void GetUserDesktopDirectory(CSimpleStringA& outDir)
-{
-	LPITEMIDLIST lp;
-    HRESULT hr = SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &lp);
-    if (hr == S_OK) {
-		CHAR lstr[128] = "";
-		SHGetPathFromIDListA(lp, lstr);
-		outDir = lstr;
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("GetUserDesktopDirectory1:%s", outDir.GetData());
-    }
-    else {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("SHGetSpecialFolderLocation failed:%d", hr);
-        outDir.Clear();
-    }
-
-	CSimpleStringA strUserName(true);
-	GetCurUserName(strUserName);
-    if (!strUserName.IsNullOrEmpty()) {
-        CSimpleStringA desktopFullPath = CSimpleStringA::Format("C:\\Users\\%s\\Desktop", strUserName.GetData());
-        if (desktopFullPath.Compare(outDir, true) != 0) {
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetUserDesktopDirectoryDiff:%s,%s", outDir.GetData(), desktopFullPath.GetData());
-			outDir = desktopFullPath;
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("GetUserDesktopDirectory2:%s", outDir.GetData());
-        }
-    }
-	return;
-}
-
-bool IsDesktopIconExist(CSimpleStringA& strPath) 
-{
-	CSimpleStringA s(true);
-	GetUserDesktopDirectory(s);
-    if (!s.IsNullOrEmpty()) {
-        s += "\\可视柜台.lnk";
-        strPath = s.GetData();
-        return !!ExistsFileA(s);
-    }
-    return false;
-}
-
-void GetAutoStartFile(std::string& userDirPath, std::vector<std::string>& userDirFiles, std::string& pubDirPath, std::vector<std::string>& pubDirFiles)
+void ResourceWatcherFSM::GetAutoStartFile(std::string& userDirPath, std::vector<std::string>& userDirFiles, std::string& pubDirPath, std::vector<std::string>& pubDirFiles)
 {
 	CSimpleStringA startMenuPublicPath(STARTUP_DIR_FULL_PATH);
 	auto arr = fileutil_get_sub_files(startMenuPublicPath);
@@ -181,10 +127,9 @@ void GetAutoStartFile(std::string& userDirPath, std::vector<std::string>& userDi
 		}
 		toolkit_array_free2(arr);
 	}
-	CSimpleStringA strUserName(true);
-	GetCurUserName(strUserName);
-	if (!strUserName.IsNullOrEmpty()) {
-		CSimpleStringA startMenuFullPath = CSimpleStringA::Format("C:\\Users\\%s\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup", strUserName.GetData());
+    CSimpleStringA startMenuFullPath(true);
+    GetUserStartupDirectory(startMenuFullPath);
+	if (!startMenuFullPath.IsNullOrEmpty()) {
 		arr = fileutil_get_sub_files(startMenuFullPath);
 		userDirPath = startMenuFullPath.GetData();
 		if (arr != NULL) {
@@ -231,12 +176,11 @@ ResourceWatcherFSM::ResourceWatcherFSM(void)
     :m_strTerminalNo(true),
     m_bFirstRunAfterBoot(FALSE),
     m_cpuTop(0), flag4DeleteKeyAutoStartFile(false), flag4DoAutoStartTaskIgnoreBoot(FALSE), m_skipDesktopDetect(FALSE)
+    , m_strCurrentUserName(true), m_strLoginedUserName(true)
 {
 #ifdef RVC_OS_WIN
-    m_forceStartupWithExeFlag = 0;
     m_iNonSignedTotal = 0;
     m_bNeedForceDiskCheck = false;
-    m_DoneDetectAutostart = true;
 #endif // RVC_OS_WIN
 }
 
@@ -458,8 +402,9 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
     if (m_bFirstRunAfterBoot) {
         DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("First time to run after system boot.");
     }
-    if (m_bFirstRunAfterBoot) {
+
 #if defined(RVC_OS_WIN)
+    if (m_bFirstRunAfterBoot) {
 		//GetSystemMetrics (SM_CMONITORS) 计数仅显示可见的显示器
 		const int screenNums = GetSystemMetrics(SM_CMONITORS);
 		const int aimScreenNums4Stand2S = 2;
@@ -474,8 +419,10 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
 				, CSimpleStringA::Format("{\"subject\":\"screen_count\",\"machine_type\":\"%s\",\"expect\":%d,\"actual\":%d}"
 					, m_RvcSysinfo.strMachineType.GetData(), aimScreenNums4Other, screenNums));
         }
-#endif //RVC_OS_WIN
     }
+    
+#endif //RVC_OS_WIN
+
     spCtSettingConfig->ReadConfigValueInt(m_pEntity->GetEntityName(), "DisplayCnt", m_iNonSignedDisplay);
     if (m_iNonSignedDisplay <= 0)
         m_iNonSignedDisplay = 10;
@@ -490,7 +437,6 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
         m_skipDesktopDetect = TRUE;
     }
     spRunConfig->ReadConfigValueInt("WarnRecord", "disk", m_diskLastWarnHour);
-
     return Error_Succeed;
 }
 
@@ -505,7 +451,7 @@ ErrorCodeEnum ResourceWatcherFSM::OnExit()
 void ResourceWatcherFSM::AfterInit()
 {
 #if defined(RVC_OS_WIN)
-    
+    InitUserInfo();
     if (m_bFirstRunAfterBoot) {
         InitCustomAutoStartFileSheet();
         AggerateAutoStatTask* task = new AggerateAutoStatTask(this);
@@ -1629,50 +1575,23 @@ ErrorCodeEnum ResourceWatcherFSM::CreateLink(int nType, const CSimpleStringA& ex
 	CHAR lstr[MAX_PATH] = "";
     if (nType == 0) {
 		CSimpleStringA s(true);
-		GetUserDesktopDirectory(s);
-        if (!s.IsNullOrEmpty()) {
-			s += "\\可视柜台.lnk";
+        const bool exist = IsDesktopIconExist(s);
+		if (!s.IsNullOrEmpty()) {
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to create %s", s.GetData());
 			if (Error_Succeed != (result = CreateLinkFile(exePath, "", s, icoPath))) {
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Create link file for DESKTOP fail");
 			}
         }
     }
-    else if (nType == 1) {
-        /** 这个函数会被拦截吗?  [Gifur@20241028]*/
-		HRESULT hr = SHGetSpecialFolderLocation(0, CSIDL_PROGRAMS, &lp);
-        if (SUCCEEDED(hr)) {
-			memset(lstr, 0, strlen(lstr));
-			SHGetPathFromIDListA(lp, lstr);
-			CSimpleStringA s = lstr;
-			s += "\\可视柜台.lnk";
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to create %s", s.GetData());
-			if (Error_Succeed != (result = CreateLinkFile(exePath, "", s, icoPath)))
-			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Create link file for PROGRAMS fail");
-			}
-		}
-		else {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SHGetSpecialFolderLocation failed %d", hr);
-		}
-    }
     else if (nType == 2) {
-        HRESULT hr = SHGetSpecialFolderLocation(0, CSIDL_STARTUP /*CSIDL_COMMON_STARTUP*/, &lp);
-        if (SUCCEEDED(hr)) {
-			memset(lstr, 0, strlen(lstr));
-			SHGetPathFromIDListA(lp, lstr);
-			CSimpleStringA s = lstr;
-			s += "\\";
-			s += STRATUP_FILENAME_FROM_SCRIPTS;
+		CSimpleStringA s(true);
+		const bool exist = IsStartupIconExist(s);
+		if (!s.IsNullOrEmpty()) {
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to create %s", s.GetData());
-			if (Error_Succeed != (result = CreateLinkFile(exePath, "", s, icoPath)))
-			{
+			if (Error_Succeed != (result = CreateLinkFile(exePath, "", s, icoPath))) {
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Create link file for STARTUP fail");
 			}
-        }
-        else {
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SHGetSpecialFolderLocation failed %d", hr);
-        }
+		}
     }
     else {
         DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("cannot support link create type: %d", nType);
@@ -1780,7 +1699,6 @@ bool ResourceWatcherFSM::GetRegValue(HKEY hKey, LPCTSTR lpcszParam, CSimpleStrin
 void ResourceWatcherFSM::DetectAutoStartupCover()
 {
     LOG_FUNCTION();
-
     CSimpleStringA strStartupPath(true);
     const int nStartupType = DetectAutoStartupType(strStartupPath);
     ErrorCodeEnum rc = Error_InvalidState;
@@ -1957,10 +1875,10 @@ int ResourceWatcherFSM::DetectAutoStartupType(CSimpleStringA& strValue)
         memset(szValue, '\0', MAX_PATH + 1);
         lResult = RegQueryValueExA(hKey, "Shell", NULL, &dwType, (LPBYTE)szValue, &dwSize);
         if (lResult == ERROR_SUCCESS) {
-            std::string strValue(szValue);
+            std::string sValue(szValue);
             regeditValue = szValue;
-            strValue = SP::Utility::ToLower(strValue);
-            CSimpleStringA value(strValue.c_str());
+            sValue = SP::Utility::ToLower(sValue);
+            CSimpleStringA value(sValue.c_str());
 			if (value.IsStartWith("wscript", true) && value.IsEndWith(".vbs", true)) {
 				LogWarn(Severity_Low, Error_Debug, LOG_WARN_AUTO_STARTUP_FROM_REGIST, regeditValue);
 				vbsType = 1;
@@ -2102,6 +2020,7 @@ void ResourceWatcherFSM::DeleteDuplicateAutoStartFile(bool toDeleteLastLegity)
 	autolist.push_back(CMB_LINK_FILE_NAME);
 	GetAutoStartFile(userPath, userlist, pubPath, publist);
 	if (!keyPublist.empty() || !keyUserlist.empty()) {
+        /** 移除集中配置中配置的文件(用户目录下)  [Gifur@20241031]*/
 		for (auto it = userlist.cbegin(); keyUserlist.size() > 0 && it != userlist.cend(); ++it) {
 			for (auto kt = keyUserlist.cbegin(); kt != keyUserlist.cend(); ++kt) {
 				CSimpleStringA strfilename(it->c_str());
@@ -2116,6 +2035,7 @@ void ResourceWatcherFSM::DeleteDuplicateAutoStartFile(bool toDeleteLastLegity)
 				}
 			}
             if (toDeleteLastLegity) {
+                /** 移除正规的文件(用户目录下)  [Gifur@20241031]*/
 				for (auto kt = autolist.cbegin(); kt != autolist.cend(); ++kt) {
 					CSimpleStringA strfilename(it->c_str());
 					if (strfilename.Compare(kt->c_str()) == 0) {
@@ -2130,6 +2050,7 @@ void ResourceWatcherFSM::DeleteDuplicateAutoStartFile(bool toDeleteLastLegity)
 				}
             }
 		}
+        /** 移除集中配置中配置的文件(公共目录下)  [Gifur@20241031]*/
 		for (auto it = publist.cbegin(); keyPublist.size() > 0 && it != publist.cend(); ++it) {
 			for (auto kt = keyPublist.cbegin(); kt != keyPublist.cend(); ++kt) {
 				CSimpleStringA strfilename(it->c_str());
@@ -2144,6 +2065,7 @@ void ResourceWatcherFSM::DeleteDuplicateAutoStartFile(bool toDeleteLastLegity)
 				}
 			}
             if (toDeleteLastLegity) {
+				/** 移除正规的文件(公共目录下)  [Gifur@20241031]*/
 				for (auto kt = autolist.cbegin(); kt != autolist.cend(); ++kt) {
 					CSimpleStringA strfilename(it->c_str());
 					if (strfilename.Compare(kt->c_str()) == 0) {
@@ -2171,7 +2093,7 @@ BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder(CSimpleStringA& strPath, in
 	std::string userPath(""), pubPath("");
 	GetAutoStartFile(userPath, userlist, pubPath, publist);
 
-    //检查是否由用户自定义的开机自启动快捷键
+    //检查是否由用户自定义的开机自启动快捷键
 	if (!result && (!keyPublist.empty() || !keyUserlist.empty())) {
 		for (auto it = userlist.cbegin(); !result && keyUserlist.size() > 0 && it != userlist.cend(); ++it) {
 			for (auto kt = keyUserlist.cbegin(); kt != keyUserlist.cend(); ++kt) {
@@ -2213,7 +2135,7 @@ BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder(CSimpleStringA& strPath, in
 		}
 	}
     if (!result) {
-        //检查是否旧安装向导安装的脚本
+        //检查是否有由旧安装向导安装的脚本
 		for (auto it = publist.cbegin(); !result && it != publist.cend(); ++it) {
 			CSimpleStringA strfilename(it->c_str());
 			const int tmpType = (strfilename.Compare(CMB_LINK_FILE_NAME) == 0 || (strfilename.IsStartWith("招商银行可视柜台") && strfilename.IsEndWith(".lnk"))) ? 0 : -1;
@@ -2252,7 +2174,7 @@ BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder(CSimpleStringA& strPath, in
 		}
     }
 	if (!result) {
-        //最终再检查是否由安装脚本执行的安装向导
+        //最终再检查是否由安装脚本执行的安装向导
 		for (auto it = publist.cbegin(); !result && it != publist.cend(); ++it) {
 			CSimpleStringA strfilename(it->c_str());
 			if (strfilename.Compare(STRATUP_FILENAME_FROM_SCRIPTS) == 0) {
@@ -2349,12 +2271,10 @@ void ResourceWatcherFSM::DetectVersionHasChangedAndWarn()
 
 void ResourceWatcherFSM::DetectDestopFileAndWarn(bool bClear, CSimpleStringA& strFileSaveList)
 {
-    CSimpleStringA strUserName(true);
-    GetCurUserName(strUserName);
-    if (!strUserName.IsNullOrEmpty()) {
+    if (!m_strLoginedUserName.IsNullOrEmpty()) {
 		CSimpleStringA filelist(true);
 		int dirCount(0), fileCount(0);
-        CSimpleStringA desktopFullPath = CSimpleStringA::Format("C:\\Users\\%s\\Desktop", strUserName.GetData());
+        CSimpleStringA desktopFullPath = CSimpleStringA::Format("C:\\Users\\%s\\Desktop", m_strLoginedUserName.GetData());
         CSimpleStringA desktopPublicPath("C:\\Users\\Public\\Desktop");
         CAutoArray<CSimpleStringA> desktopPaths;
         desktopPaths.Init(2);
@@ -2430,7 +2350,7 @@ void ResourceWatcherFSM::DetectDestopFileAndWarn(bool bClear, CSimpleStringA& st
         }
         LogWarn(Severity_Low, Error_Debug, LOG_INFO_DESKTOP_FILESTATUS
             ,CSimpleStringA::Format("{\"subject\":\"desktop_file\",\"clear_flag\":\"%d\",\"username\":\"%s\",\"file_count\":%d,\"dir_count\":%d,\"content\":\"%s\"}"
-				, bClear ? 1 : 0, strUserName.GetData(), fileCount, dirCount, filelist.GetLength() < 950 ? filelist.GetData() : (filelist.SubString(0, 950) + "....").GetData()));
+				, bClear ? 1 : 0, m_strLoginedUserName.GetData(), fileCount, dirCount, filelist.GetLength() < 950 ? filelist.GetData() : (filelist.SubString(0, 950) + "....").GetData()));
     }
 }
 
@@ -2855,19 +2775,6 @@ bool ResourceWatcherFSM::RegOperation4LnkFile()
     return bRet;
 }
 
-bool ResourceWatcherFSM::UpdateExe()
-{
-    int updateExe = 0;
-    CSmartPointer<IConfigInfo> spCtSettingConfig;
-    GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
-    spCtSettingConfig->ReadConfigValueInt("NonExclusive", "UpdateExe", updateExe);
-
-    if (updateExe == 1)
-        return true;
-
-    return false;
-}
-
 bool ResourceWatcherFSM::GetRegValueInt(HKEY hKey, LPCTSTR lpcszParam, DWORD& dwValue)
 {
 	DWORD dwType = REG_DWORD;
@@ -3780,7 +3687,7 @@ void ResourceWatcherFSM::GetSystemCPUStatus()
 
         // 转换为百分比
         double tRatio = 100.0 * (newProcessTime[tPid] - oldProcessTime[tPid]) / (kernel + user);
-        if (tRatio > 0.0);
+        if (tRatio > 0.0)
         {
             processCpu[tPid] = tRatio;
         }
@@ -4173,6 +4080,150 @@ void ResourceWatcherFSM::InitCustomAutoStartFileSheet()
   //  }
 }
 
+void ResourceWatcherFSM::InitUserInfo()
+{
+    if (m_bFirstRunAfterBoot) {
+		LPITEMIDLIST lp;
+		CHAR lstr[MAX_PATH] = "";
+		HRESULT hr = SHGetSpecialFolderLocation(0, CSIDL_COMMON_STARTUP, &lp);
+		if (SUCCEEDED(hr)) {
+			memset(lstr, 0, strlen(lstr));
+			SHGetPathFromIDListA(lp, lstr);
+			CSimpleStringA s = lstr;
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_COMMON_STARTUP: %s", s.GetData());
+		}
+		hr = SHGetSpecialFolderLocation(0, CSIDL_COMMON_DESKTOPDIRECTORY, &lp);
+		if (SUCCEEDED(hr)) {
+			memset(lstr, 0, strlen(lstr));
+			SHGetPathFromIDListA(lp, lstr);
+			CSimpleStringA s = lstr;
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_COMMON_DESKTOPDIRECTORY: %s", s.GetData());
+		}
+
+		hr = SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, &lp);
+		if (SUCCEEDED(hr)) {
+			memset(lstr, 0, strlen(lstr));
+			SHGetPathFromIDListA(lp, lstr);
+			CSimpleStringA s = lstr;
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_DESKTOP: %s", s.GetData());
+		}
+
+		hr = SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &lp);
+		if (SUCCEEDED(hr)) {
+			memset(lstr, 0, strlen(lstr));
+			SHGetPathFromIDListA(lp, lstr);
+			CSimpleStringA s = lstr;
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_DESKTOPDIRECTORY: %s", s.GetData());
+		}
+
+		CSimpleStringA desktopParentPath = "C:\\Users";
+		auto arr = fileutil_get_sub_dirs(desktopParentPath);
+		if (arr != NULL) {
+			for (int i = 0; i < arr->nelts; ++i) {
+				char* dir = ARRAY_IDX(arr, i, char*);
+				char* dirname = strrchr(dir, '\\');
+				if (dirname != NULL) { dirname += 1; }
+				else { dirname = dir; }
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("dir name:%s", dirname);
+			}
+			toolkit_array_free2(arr);
+		}
+    }
+
+	const DWORD INFO_BUFFER_SIZE = 128;
+	char infoBuf[INFO_BUFFER_SIZE];
+	ZeroMemory(infoBuf, INFO_BUFFER_SIZE);
+	DWORD bufCharCount = INFO_BUFFER_SIZE;
+	if (!GetUserName(infoBuf, &bufCharCount)) {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetUserName failed, GLE=%u", GetLastError());
+	}
+	else {
+		m_strCurrentUserName = infoBuf;
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Current user name:%s", m_strCurrentUserName.GetData());
+	}
+
+	DWORD dwSessionId = WTSGetActiveConsoleSessionId();
+	LPTSTR pBuffer = NULL;
+	DWORD dwBufferLen;
+	BOOL bRes = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessionId, WTSUserName, &pBuffer, &dwBufferLen);
+	if (bRes)
+	{
+		m_strLoginedUserName = pBuffer;
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Current logined user name:%s", m_strLoginedUserName.GetData());
+    }
+    else {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("WTSQuerySessionInformation failed, GLE=%u", GetLastError());
+    }
+	if (pBuffer) {
+		WTSFreeMemory(pBuffer);
+	}
+    const int diff_flag = IsUserSameName() ? 1 : 0;
+	LogWarn(Severity_Low, Error_Debug, LOG_INFO_USRNAME_INFO, CSimpleStringA::Format("{\"subject\":\"user_info\",\"username\":\"%s\",\"login_username\":\"%s\",\"diff\":%d}"
+        ,m_strCurrentUserName.GetData(), m_strLoginedUserName.GetData(), diff_flag));
+}
+
+void ResourceWatcherFSM::GetUserDesktopDirectory(CSimpleStringA& outDir)
+{
+    outDir.Clear();
+	if (!m_strLoginedUserName.IsNullOrEmpty()) {
+		CSimpleStringA desktopFullPath = CSimpleStringA::Format("C:\\Users\\%s\\Desktop", m_strLoginedUserName.GetData());
+		outDir = desktopFullPath;
+	}
+	else {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("LoginedUserName is empty.");
+	}
+	return;
+}
+
+bool ResourceWatcherFSM::IsDesktopIconExist(CSimpleStringA& strPath)
+{
+	CSimpleStringA s(true);
+	GetUserDesktopDirectory(s);
+	if (!s.IsNullOrEmpty()) {
+		s += "\\可视柜台.lnk";
+		strPath = s.GetData();
+		return !!ExistsFileA(s);
+	}
+	return false;
+}
+
+void ResourceWatcherFSM::GetUserStartupDirectory(CSimpleStringA& outDir)
+{
+	outDir.Clear();
+	//LPITEMIDLIST lp;
+	//HRESULT hr = SHGetSpecialFolderLocation(0, CSIDL_COMMON_STARTUP, &lp);
+	//if (SUCCEEDED(hr)) {
+ //       CHAR lstr[MAX_PATH];
+	//	memset(lstr, 0, strlen(lstr));
+	//	SHGetPathFromIDListA(lp, lstr);
+	//	CSimpleStringA desktopFullPath = lstr;
+	//	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_COMMON_STARTUP: %s", desktopFullPath.GetData());
+	//	outDir = desktopFullPath;
+	//}
+
+	if (!m_strLoginedUserName.IsNullOrEmpty()) {
+		CSimpleStringA startMenuFullPath = CSimpleStringA::Format("C:\\Users\\%s\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup", m_strLoginedUserName.GetData());
+		outDir = startMenuFullPath;
+    }
+    else {
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("LoginedUserName is empty.");
+    }
+	return;
+}
+
+bool ResourceWatcherFSM::IsStartupIconExist(CSimpleStringA& strPath)
+{
+	CSimpleStringA s(true);
+    GetUserStartupDirectory(s);
+	if (!s.IsNullOrEmpty()) {
+        s += "\\";
+		s += STRATUP_FILENAME_FROM_SCRIPTS;
+		strPath = s.GetData();
+		return !!ExistsFileA(s);
+	}
+	return false;
+}
+
 #endif // _MSC_VER end硬件资源监控相关系统功能 CPU、内存、硬盘、网络wifi
 
 #ifdef RVC_OS_LINUX

+ 17 - 25
Module/mod_ResourceWatcher/ResourceWatcherFSM.h

@@ -230,28 +230,14 @@ private:
 	BOOL m_skipDesktopDetect;
 
 #ifdef RVC_OS_WIN
-	bool m_DoneDetectAutostart;
-	//1:将VBS改成EXE,前提是VBS必须已在注册表
-	//2:设置使用EXE自启动
-	//3:不设置开机自启动(通过注册表)
-	int m_forceStartupWithExeFlag;
-	bool m_bIsVerified;
 	vector<CSimpleStringA>m_nonSignedFiles;
 	int m_iNonSignedTotal;
-
-	vector<CSimpleStringA> m_activeEntity, m_allEntity, m_vKeyEntity, m_vQueryStateEntity;
-	int m_restartNormal, m_restartSpecial, m_maxOsRestart, m_maxPowerRestart, m_warmLevel;
-	DWORD m_dwIssueCount, m_dwCaptureCount;
-	bool m_bInIssue, m_bFirstCalcCpu, m_bEverInMainPage, m_bHaveGetEntityList, m_bFWBEntityAdd;
 	bool m_bNeedForceDiskCheck;
-	int m_simulateTest;
-	CSimpleStringA m_csKeyEntity;
-#endif // RVC_OS_LINUX
+#endif // RVC_OS_WIN
 
     int m_iVerify;
     int m_iNonSignedDisplay;
 	int m_cpuHighPercent, m_memHighPercent, m_diskHighPercent;
-	FILE_LAYOUT_ENTRY m_FileEntry;
 
     BOOL checkActiveBefore;
 	BOOL firstMpage;
@@ -261,6 +247,10 @@ private:
 	//std::vector<std::string> delKeylist;
 	BOOL flag4DeleteKeyAutoStartFile;
 	BOOL flag4DoAutoStartTaskIgnoreBoot;
+
+	CSimpleStringA m_strCurrentUserName;
+	CSimpleStringA m_strLoginedUserName;
+
 public:
 	void CheckDiskFileSpace();
 
@@ -285,11 +275,6 @@ public:
 
     void LinkDetect(int detectType, const char* url, bool& status, unsigned int& delay, int warnFlag = 1);
 
-#if defined(RVC_OS_WIN)
-	int GetCpuUsageRatio(int pid);
-	ULONGLONG GetDiskUsedByte();
-#endif // RVC_OS_WIN
-
 	time_t GetPathTimeSeconds(const char* inPath);
 	void AutoDeleteFiles();
 	void CenterSettingDelete();
@@ -320,19 +305,19 @@ public:
 	/** 自己摸索,统信说需要操作系统定制方能解决 [Gifur@202198]*/
 	void ConfirmNotificationCenterDisable();
 #else
+	int GetCpuUsageRatio(int pid);
+	ULONGLONG GetDiskUsedByte();
 	bool GetVTMExePath(CSimpleStringA& strValue, bool FailIfNotExist);
 	bool CopyExeToRoot(const CSimpleStringA& csVersion, const CSimpleStringA& aimExePath);
 	bool RegOperation4LnkFile();
 	bool RegRdVtmVersion(CSimpleStringA& VTMpath, CSimpleStringA& vtmVersion, CSimpleStringA& verPath);
 	bool RegWtVtmPath(const CSimpleStringA& vtmExtPath, const CSimpleStringA& rootPath);
 	bool RegWtVtmVersion(const CSimpleStringA& vtmVer);
-	//nType: 0 桌面,1 开始菜单,2 启动列表
+	//nType: 0 桌面,2 启动列表
 	ErrorCodeEnum CreateLink(int nType, const CSimpleStringA& exePath);
 	ErrorCodeEnum CreateLinkFile(const CSimpleStringA& szStartAppPath, const CSimpleStringA& szAddCmdLine,
 		const CSimpleStringA& szDestLnkPath, const CSimpleStringA& szIconPath);
 	bool GetVtmVersionFromActiveTxt(CSimpleStringA& csVersion);
-	bool UpdateExe();
-
 	bool GetRegValueInt(HKEY hKey, LPCTSTR lpcszParam, DWORD& DwValue);
 	bool GetRegValue(HKEY hKey, LPCTSTR lpcszParam, CSimpleStringA& strValue);
 
@@ -366,7 +351,6 @@ public:
 			checkActiveBefore = TRUE;
 		}
 	}
-
 	void VerifySignature();
 	void DetectAndClearDesktopFile();
 	void VerifySignature(const CSimpleStringA& filePath);
@@ -376,8 +360,16 @@ public:
 	bool VerifyOtherCertificate(PCMSG_SIGNER_INFO pSignerInfo);
 
 	void DetectWallpaperAndWarn();
-
 	void InitCustomAutoStartFileSheet();
+	void InitUserInfo();
+	bool IsUserSameName() { return m_strLoginedUserName.Compare(m_strCurrentUserName) == 0; }
+	void GetUserDesktopDirectory(CSimpleStringA& outDir);
+	bool IsDesktopIconExist(CSimpleStringA& strPath);
+
+	void GetUserStartupDirectory(CSimpleStringA& outDir);
+	bool IsStartupIconExist(CSimpleStringA& strPath);
+
+	void GetAutoStartFile(std::string& userDirPath, std::vector<std::string>& userDirFiles, std::string& pubDirPath, std::vector<std::string>& pubDirFiles);
 #endif // RVC_OS_LINUX
 
 	void AlarmSystemBasicInfo();

+ 1 - 16
Module/mod_ResourceWatcher/ResourceWatcher_UserCode.h

@@ -19,14 +19,6 @@
 #define LOG_RESOURCEWATCHER_DNS_CONNECTION_INFO_UNEXPECT 0x50A0000E
 #define LOG_RESOURCEWATCHER_OPEN_ACTIVE_FAIL 0x50A0000F
 
-#define LOG_EVT_RSAKEY_LOST_RIGHTNOW	0x50A00011
-#define LOG_EVT_RSAKEY_LOST_OFFLINE		0x50A00012
-#define LOG_EVT_RSAKEY_ADD_RIGHTNOW		0x50A00013
-#define LOG_EVT_RSAKEY_ADD_OFFLINE		0x50A00014
-#define LOG_ERR_RSAKEY_MINOTOR_FAILED	0x50A00015
-#define LOG_RESOURCEWATCHER_DNS_CHANGE_NM_SUCC 0x50A00016
-#define LOG_RESOURCEWATCHER_DNS_CHANGE_NM_FAILED 0x50A00017
-#define LOG_RESOURCEWATCHER_DNS_INFO_UPLOAD 0x50A00018
 #define LOG_RESOURCEWATCHER_CLIPBOARD_RECOVER_ENABLE 0x50A00019
 #define LOG_RESOURCEWATCHER_FIRST_RUN_AFTER_BOOT 0x50A0001A
 #define LOG_RESOURCEWATCHER_SOGOU_PROCESS_STATUS_CHANGE 0x50A0001B
@@ -38,7 +30,6 @@
 #define LOG_ERR_SOGOU_INPUT_NOTINSTALLED	0x50A00021
 #define LOG_RESOURCEWATCHE_CHANGE_CURRENT_VERSION 0x50A00022
 #define LOG_RESOURCEWATCHE_DELETE_VERSION 0x50A00023
-#define LOG_RESOURCEWATCHE_RESTARTPC_AFTER_INSTALLED_SOGOUINPUT 0x50A00024
 #define LOG_RESOURCEWATCHE_INSTALL_THIRDPARTY 0x50A00025
 #define LOG_RESOURCEWATCHE_RESTART_THIRDPARTYPROGRAM 0x50A00026
 #define LOG_RESOURCEWATCHE_UNINSTALL_THIRDPARTYPROGRAM 0x50A00027
@@ -81,17 +72,11 @@
 #define LOG_INFO_AUTOSTART_FILESTATUS	0x50A00058
 #define LOG_INFO_AUTOSTART_INTEREST_FILESTATUS	0x50A00059
 #define LOG_INFO_LOCAL_VERSION	0x50A0005A //本地终端版本信息
-
+#define LOG_INFO_USRNAME_INFO	0x50A0005B //当前用户名称和登录用户名称
 
 #define LOG_RESOURCEWATCHER_OSD_RECOVER_ENABLE 0x50A00060
 #define LOG_RESOURCEWATCHER_OSD_REMOVE_SUCC 0x50A00061
 
-#define LOG_EVT_RSAKEY_LOST_RIGHTNOW	0x50A00011
-#define LOG_EVT_RSAKEY_LOST_OFFLINE		0x50A00012
-#define LOG_EVT_RSAKEY_ADD_RIGHTNOW		0x50A00013
-#define LOG_EVT_RSAKEY_ADD_OFFLINE		0x50A00014
-#define LOG_ERR_RSAKEY_MINOTOR_FAILED	0x50A00015
-
 #define LOG_EVT_RESOURCE_CPU_ERROR	0x50A00102                //CPU使用率过于异常 > 98%(mod_ResourceWatcher)
 #define LOG_EVT_RESOURCE_CPU_TOO_HIGH  0x50A00103		    //CPU使用率过高 (mod_ResourceWatcher)
 #define LOG_EVT_RESOURCE_MEMORY_TOO_HIGH   0x50A00104	//内存使用率过高 (mod_ResourceWatcher)

+ 41 - 26
Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp

@@ -1691,7 +1691,7 @@ namespace Task
 }
 
 //完成
-// 创建新版本目录,拷贝当前版本bin、cfg、dep、mod、imdep、res、install.ini,并修改Shell.ini相关配置
+// 创建新版本目录,拷贝当前版本bin、cfg、dep、mod、imdep、res
 ErrorCodeEnum CUpgradeTaskFSM::CreateNewVersion(CVersion NewSoftwareVersion,CSimpleStringA &strErrInfo)
 {
 	// 创建安装包日志文件
@@ -1775,15 +1775,15 @@ ErrorCodeEnum CUpgradeTaskFSM::CreateNewVersion(CVersion NewSoftwareVersion,CSim
 	}
 	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy cfg dir succ");
 
-	strSource = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "dep", strCurVerPath.GetData());
-	strDest = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "dep", strNewVerPath.GetData());
-	if (!RecursiveCopyDir(strSource, strDest,strErrMsg))
-	{
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy dep dir fail");
-		strErrInfo = CSimpleStringA::Format("copy dep dir fail: %s", strErrMsg.GetData());
-		return Error_Unexpect;
-	}
-	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy dep dir succ");
+	//strSource = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "dep", strCurVerPath.GetData());
+	//strDest = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "dep", strNewVerPath.GetData());
+	//if (!RecursiveCopyDir(strSource, strDest,strErrMsg))
+	//{
+	//	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy dep dir fail");
+	//	strErrInfo = CSimpleStringA::Format("copy dep dir fail: %s", strErrMsg.GetData());
+	//	return Error_Unexpect;
+	//}
+	//DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy dep dir succ");
 
 	strSource = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "mod", strCurVerPath.GetData());
 	strDest = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "mod", strNewVerPath.GetData());
@@ -1795,6 +1795,25 @@ ErrorCodeEnum CUpgradeTaskFSM::CreateNewVersion(CVersion NewSoftwareVersion,CSim
 	}
 	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy mod dir succ");
 
+	
+	strSource = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "dep", strCurVerPath.GetData());
+	strDest = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "dep", strNewVerPath.GetData());
+
+	// 检测dep目录是否存在
+	if (ExistsDirA(strSource))
+	{
+		if (!RecursiveCopyDir(strSource, strDest, strErrMsg))
+		{
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy dep dir fail");
+			strErrInfo = CSimpleStringA::Format("copy dep dir fail: %s", strErrMsg.GetData());
+			return Error_Unexpect;
+		}
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("copy dep dir succ");
+	}
+	else {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("dep dir is not exist,ignore copy");
+	}
+
 	strSource = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "res", strCurVerPath.GetData());
 	strDest = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "res", strNewVerPath.GetData());
 
@@ -1811,13 +1830,7 @@ ErrorCodeEnum CUpgradeTaskFSM::CreateNewVersion(CVersion NewSoftwareVersion,CSim
 	}
 	else
 	{
-		if (!CreateDirA(strDest, TRUE))
-		{
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create res dir fail");
-			strErrInfo = "create res dir fail";
-			return Error_Unexpect;
-		}
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create res dir succ");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("res dir is not exist,ignore copy");
 	}
 
 	strSource = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "imdep", strCurVerPath.GetData());
@@ -1836,13 +1849,7 @@ ErrorCodeEnum CUpgradeTaskFSM::CreateNewVersion(CVersion NewSoftwareVersion,CSim
 	}
 	else
 	{
-		if (!CreateDirA(strDest, TRUE))
-		{
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create imdep dir fail");
-			strErrInfo = "create imdep dir fail";
-			return Error_Unexpect;
-		}
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create imdep dir succ");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("imdep dir is not exist,ignore copy");
 	}
 	return Error_Succeed;
 }
@@ -4574,6 +4581,7 @@ int CUpgradeTaskFSM::ExecDepInstall(CSimpleStringA& strErrMsg)
 		}
 		else {
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ExecDepInstall fail ,pack_version is null");
+			strErrMsg = CSimpleStringA::Format("ExecDepInstall fail ,pack_version is null");
 			return 0;
 		}
 	}
@@ -6736,7 +6744,9 @@ void CUpgradeTaskFSM::s4_on_entry()
 {
 	//下载升级包
 	m_bTaskCancel = false;//默认任务非取消
+	m_downloadBreakOffCount = 0;
 	if(m_bDownloadIdle){
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CallState is not O , download is break off , wait a moment");
 		PostEventFIFO(new FSMEvent(CUpgradeTaskFSM::Event_Download_Idle));//进入不可下载状态
 	}else{
 		Task::DownloadPackTask* dTask = new Task::DownloadPackTask(this);
@@ -6781,7 +6791,13 @@ unsigned int CUpgradeTaskFSM::s4_on_event(FSMEvent* event)
 		}else if(event->param1 == 3){
 			//无效状态
 			if(m_bDownloadIdle){
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("upgradeTask download entry idle 10s");
+				if (m_downloadBreakOffCount > 60) {
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CallState is not O , download is break off , wait a moment");
+					m_downloadBreakOffCount = 0;
+				}
+				else {
+					m_downloadBreakOffCount++;
+				}
 				ScheduleTimer(3,10*1000);//等待下次是否空闲		
 			}else{
 				Task::DownloadPackTask* dTask = new Task::DownloadPackTask(this);
@@ -6866,7 +6882,6 @@ unsigned int CUpgradeTaskFSM::s4_on_event(FSMEvent* event)
 
 	}else if (event->iEvt == Event_Download_Idle){
 
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("upgradeTask download entry idle 10s");
 		ScheduleTimer(3,10*1000);//等待下次是否空闲
 
 	}else if (event->iEvt == Event_CancelTask){

+ 2 - 0
Module/mod_UpgradeMgr/UpgradeTaskFSM.h

@@ -348,6 +348,7 @@ public:
 		m_TempDepUpgradeFlag = false;//默认非适配器升级
 		m_queryNewTaskInterval = 240;//默认查询任务时间间隔
 		m_installStopCopyDep = false;//默认拷贝
+		m_downloadBreakOffCount = 0; 
 	}
 	~CUpgradeTaskFSM(){}
 	//具体实现方法
@@ -549,6 +550,7 @@ public:
 	CSimpleStringA m_fileSM3List;//版本文件hash集合字符串
 	DWORD m_beginSendSM3Time;//开始发送sm3hahs时间
 	int m_queryNewTaskCount;//查询新任务时无任务次数
+	int m_downloadBreakOffCount;
 
 	bool m_bDownloadIdle;	//是否下载空闲 true: 不能下载,false: 可下载
 	bool m_bTaskCancel;		//是否任务取消 true: 任务取消,false: 未取消

+ 5 - 1
Module/mod_UpgradeMgr/mod_UpgradeMgr.cpp

@@ -411,7 +411,7 @@ ErrorCodeEnum CUpgradeMgrEntity::RollbackUpdate(const CSimpleStringA &strVersion
 						if (ret < 4)
 						{
 							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("version [%s] parse fail", (const char*)strVersion);
-							rc = Error_Param;
+							return Error_Param;
 						}
 						else
 						{	//回退放入线程当中
@@ -421,9 +421,11 @@ ErrorCodeEnum CUpgradeMgrEntity::RollbackUpdate(const CSimpleStringA &strVersion
 								if (Error_Succeed == rc) {
 									DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("RollbackFlag thread start succ");
 									m_taskFSM.m_bRollbackTask = true;//启动线程
+									return Error_Succeed;
 								}
 								else {
 									DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("RollbackFlag thread start fail : %d", (int)rc);
+									return rc;
 								}
 							}
 							else {
@@ -440,9 +442,11 @@ ErrorCodeEnum CUpgradeMgrEntity::RollbackUpdate(const CSimpleStringA &strVersion
 							if (Error_Succeed == rc) {
 								DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("RollbackFlag Dep thread start succ");
 								m_taskFSM.m_bRollbackTask = true;//启动线程
+								return Error_Succeed;
 							}
 							else {
 								DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("RollbackFlag Dep thread start fail : %d", (int)rc);
+								return rc;
 							}
 						}
 						else {

+ 1 - 113
Module/mod_accessauth/AccessAuthFSM.cpp

@@ -60,8 +60,7 @@ int StrBuf2HexBuf(LPCTSTR strBuf, PBYTE* hexBuf)
 CAccessAuthFSM::CAccessAuthFSM()
 	:m_finishAccess(0), m_nAccessFailedCount(0)
 	, m_accessAuthHost(true), m_initDeviceHost(true)
-	, m_strNetworkCheckUrl(true), m_strDefaultDNS(true), m_strBackupDNS(true), m_fNetworkChecking(false)
-	, m_strDevPubKey(""), m_torelateDiffSyncTimeSecs(180), isServeEvent(false)
+	, m_torelateDiffSyncTimeSecs(180)
 {
 }
 
@@ -383,11 +382,6 @@ struct GetTokenTask : ITaskSp
 			m_fsm->doWarnMsg(AccessAuthorization_UserErrorCode_AccessAuth_NULL, strMsg.GetData(), true);
 			return;
 		}
-		CSystemStaticInfo si;
-		m_fsm->GetEntityBase()->GetFunction()->GetSystemStaticInfo(si);
-		
-		CAutoArray<CSimpleStringA> devNames;
-		DWORD rc = m_fsm->GetAllDevices(m_entity, devNames);
 
 		///**TODO(Gifur@3/11/2022): 诗友确定是否还需要连分行!!!!! */
 		CAccessAuthGetTokenReq getTokenReq;
@@ -772,41 +766,6 @@ ErrorCodeEnum CAccessAuthFSM::LoadCenterConfig()
 	return Error;
 }
 
-ErrorCodeEnum CAccessAuthFSM::GetIntFromCS(const char* pcSection, const char* pcKey, int& retInt)
-{
-	CSmartPointer<IEntityFunction> spFunction = m_pEntity->GetFunction();
-	CSmartPointer<IConfigInfo> spConfig;
-	ErrorCodeEnum Error = spFunction->OpenConfig(Config_CenterSetting, spConfig);
-	if (Error_Succeed == Error) 
-	{
-
-		Error = spConfig->ReadConfigValueInt(pcSection, pcKey, retInt);
-		if (Error_Succeed != Error) 
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("get retInt from CenterSetting.ini failed");
-		}
-	}
-	return Error;
-}
-
-ErrorCodeEnum CAccessAuthFSM::GetStrFromCS(const char* pcSection, const char* pcKey, CSimpleStringA& retStr)
-{
-	retStr = "";
-	CSmartPointer<IEntityFunction> spFunction = m_pEntity->GetFunction();
-	CSmartPointer<IConfigInfo> spConfig;
-	ErrorCodeEnum Error = spFunction->OpenConfig(Config_CenterSetting, spConfig);
-	if (Error_Succeed == Error) 
-	{
-		Error = spConfig->ReadConfigValue(pcSection, pcKey, retStr);
-		if (Error_Succeed != Error) 
-		{
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("GetStrFromCS")
-				("get retStr from CenterSetting.ini failed");
-		}
-	}
-	return Error;
-}
-
 bool CAccessAuthFSM::DecryptWithSessionKey(BYTE* encText, int encTextLen, BYTE* decTest, int& decTestLen)
 {
 	BYTE key[16] = { 0 };
@@ -823,50 +782,6 @@ bool CAccessAuthFSM::DecryptWithSessionKey(BYTE* encText, int encTextLen, BYTE*
 	return true;
 }
 
-int CAccessAuthFSM::RtsMapToUserCodeBakup(const char* pRtsCode, DWORD dwDefaultUserCode)
-{
-	CSmartPointer<IConfigInfo> pConfig;
-	m_pEntity->GetFunction()->OpenConfig(Config_Software, pConfig);
-	int tmpUserCode = 0;
-	pConfig->ReadConfigValueInt("RtsToUserCode", pRtsCode, tmpUserCode);
-	if (tmpUserCode > 0)
-		return tmpUserCode;
-	else
-		return dwDefaultUserCode;
-}
-
-int CAccessAuthFSM::RtsMapToUserCode(const char* pRtsCode, DWORD dwDefaultUserCode)
-{
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("RtsCode:%s", pRtsCode);
-	CSmartPointer<IConfigInfo> pConfig;
-	m_pEntity->GetFunction()->OpenConfig(Config_CenterSetting, pConfig);
-	int tmpUserCode = 0;
-	pConfig->ReadConfigValueInt("RtsToUserCode", pRtsCode, tmpUserCode);
-	if (tmpUserCode > 0) 
-	{
-		return tmpUserCode;
-	} 
-	else 
-	{
-		std::map<std::string, DWORD> RtsToUserCode;
-		RtsToUserCode["RTS1705"] = 0x5029000e;
-		RtsToUserCode["RTS1707"] = 0x50290019;
-		RtsToUserCode["RTS1711"] = 0x5029000b;
-		RtsToUserCode["RTS1712"] = 0x50290018;
-		RtsToUserCode["RTS1713"] = 0x50290019;
-		RtsToUserCode["RTS1714"] = 0x5029000a;
-		RtsToUserCode["RTS1715"] = 0x5029000f;
-
-		if (RtsToUserCode.find(pRtsCode) != RtsToUserCode.end()) {
-			return RtsToUserCode[pRtsCode];
-		} 
-		else 
-		{
-			return dwDefaultUserCode;
-		}
-	}
-}
-
 DWORD CAccessAuthFSM::HandleTimeSyn(long nTimeDiff, BYTE* nSessionKey)
 {
 	// 比较终端和服务器时间, 时差小于3分钟(默认,可通过集中配置配置)不纠正	
@@ -1184,33 +1099,6 @@ DWORD CAccessAuthFSM::GetTokenReq(CAccessAuthGetTokenReq* getTokenReq)
 	return rc;
 }
 
-DWORD CAccessAuthFSM::GetAllDevices(CEntityBase* pEntity, CAutoArray<CSimpleStringA>& devs)
-{
-	CSmartPointer<IConfigInfo> pConfig;
-	DWORD rc = pEntity->GetFunction()->OpenConfig(Config_Root, pConfig);
-	if (rc == Error_Succeed) 
-	{
-		int nCount(0);
-		rc = pConfig->ReadConfigValueInt("Device", "Number", nCount);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("nCount=%d", nCount);
-		if (rc == Error_Succeed && nCount > 0) 
-		{
-			devs.Init(nCount);
-
-			for (int i = 0; i < nCount; i++) 
-			{
-				CSimpleStringA str = CSimpleStringA::Format("%d", i + 1);
-				rc = pConfig->ReadConfigValue("Device", (const char*)str, devs[i]);
-			}
-		}
-	} 
-	else 
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetAllDevices OpenConfig error");
-	}
-	return rc;
-}
-
 void CAccessAuthFSM::UpdateWK()
 {
 	LOG_FUNCTION();

+ 0 - 39
Module/mod_accessauth/AccessAuthFSM.h

@@ -470,74 +470,35 @@ public:
 public:
 	static void HttpsLogCallBack(const char* logtxt);
 	CSimpleStringA GetmAccessAuthHost() { return m_accessAuthHost; }
-	CSimpleStringA GetmInitDeviceHost() { return m_initDeviceHost; }
 	bool DecryptWithSessionKey(BYTE* encText, int encTextLen, BYTE* decTest, int& decTestLen);
 	//oilyang@20210813 add bNeedEvent.
 	//no need to throw event defaultly except the KEY error to call for Close Page
 	void doWarnMsg(int errReason, std::string errMsg, bool bNeedEvent = false, string varMsg = "");
-	int RtsMapToUserCode(const char* pRtsCode, DWORD dwDefaultUserCode = ERR_ACCESSAUTH_UNKOWN);
-	int RtsMapToUserCodeBakup(const char* pRtsCode, DWORD dwDefaultUserCode = ERR_ACCESSAUTH_UNKOWN);
 	DWORD HandleTimeSyn(long nTimeDiff, BYTE* nSessionKey);
 	DWORD HandleGetToken(BYTE* token, BYTE* sharedKey, BYTE* token2, BYTE* retHash);
 	DWORD GetEncTerminalInfo(CBlob& encInfo);
 	DWORD GetTmk(string& tmk);
 	DWORD GetTokenReq(CAccessAuthGetTokenReq* getTokenReq);
-	DWORD GetAllDevices(CEntityBase* pEntity, CAutoArray<CSimpleStringA>& devs);
 	void UpdateWK();
 	DWORD InitDevice(SpReqAnsContext<AccessAuthService_InitDev_Req, AccessAuthService_InitDev_Ans>::Pointer &ctx);
 	
 	template<class T>
 	void AuthLogWarn(const T& ret, const string& url, const string& method, bool bNeedEvent = true);
-
 	void GetNetMsg(SpReqAnsContext<AccessAuthService_GetNetMsg_Req, AccessAuthService_GetNetMsg_Ans>::Pointer& ctx);
-#ifdef RVC_OS_WIN
-	DWORD GetDeviceInfo(CEntityBase* pCallerEntity, const CSimpleStringA& devDeviceName,
-		CSimpleStringA& strModel, CSimpleStringA& strVendor, CSimpleStringA& strVersion);
-	int IsInternetEnv();
-#endif // RVC_OS_WIN
-
 	CSimpleStringA GetEntryPermitSysVar();
 	ErrorCodeEnum SetEntryPermitSysVar(const CSimpleStringA& newVal);
 	ErrorCodeEnum LoadCenterConfig();
 
-	ErrorCodeEnum GetIntFromCS(const char* pcSection, const char* pcKey, int& retInt);
-	ErrorCodeEnum GetStrFromCS(const char* pcSection, const char* pcKey, CSimpleStringA& retStr);
-
 	bool containsChinese(const std::string& str);
-	void SetNetworkCheckingState(bool busing = true)
-	{
-		m_fNetworkChecking = busing;
-	}
-	void SetDevPubKey(CSimpleStringA csDevPubKey) { m_strDevPubKey = csDevPubKey; }
-	CSimpleStringA GetDevPubKey() { return m_strDevPubKey; }
-
-#ifdef RVC_OS_LINUX
-	bool m_bAccessACS;
-	CSimpleStringA GetmTerminalList() { return m_terminalList; }
-#endif // RVC_OS_LINUX
 
 private:
 	void GetDiffSyncTimeFromCenterSettings();
-
-public:
-	SpReqAnsContext<AccessAuthService_InitDev_Req, AccessAuthService_InitDev_Ans>::Pointer m_ctxInitDev;
-
 private:
 	int m_nAccessFailedCount;
 	CSimpleStringA m_accessAuthHost, m_initDeviceHost;
-	bool m_fNetworkChecking;
 	int m_torelateDiffSyncTimeSecs;
-
 	int m_finishAccess;
-	CSimpleStringA m_strNetworkCheckUrl;
-	//DNS Settings
-	CSimpleStringA m_strDefaultDNS;
-	CSimpleStringA m_strBackupDNS;
-	CSimpleStringA m_strDevPubKey;
-	bool isServeEvent;
-
 #ifdef RVC_OS_LINUX
-	CSimpleStringA m_terminalList;
 	int m_nCheckMD5;
 #endif // RVC_OS_LINUX
 };

+ 1 - 6
Module/mod_accessauth/mod_AccessAuth.cpp

@@ -1519,12 +1519,7 @@ pair<string, string> CAccessAuthEntity::GenerateTmkToKMC()
 #endif
 	return EncryptedByPubKey(tmpPubKey);
 }
-pair<string, string> CAccessAuthEntity::GenerateTmkToDevice()
-{
-	if (m_FSM.GetDevPubKey().GetLength() <= 0)
-		return make_pair("", "");
-	return EncryptedByPubKey(m_FSM.GetDevPubKey(), true);
-}
+
 pair<string, string> CAccessAuthEntity::EncryptedByPubKey(CSimpleStringA pubKey, bool bNeed04Head)
 {
 	LOG_FUNCTION();

+ 1 - 51
Module/mod_accessauth/mod_AccessAuth.h

@@ -55,56 +55,7 @@ public:
 
 	virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
-		LOG_FUNCTION();
-
-		ErrorCodeEnum result(Error_DataCheck);
-		do
-		{
-			if (m_FSM.RtsMapToUserCode("RTS1705", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1705", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1707", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1707", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1711", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1711", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1712", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1712", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1713", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1713", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1714", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1714", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1715", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1715", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1716", 0) != m_FSM.RtsMapToUserCodeBakup("RTS1716", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1717", 1) == m_FSM.RtsMapToUserCodeBakup("RTS1717", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-			if (m_FSM.RtsMapToUserCode("RTS1715", 0) == m_FSM.RtsMapToUserCodeBakup("RTS1707", 0)) {
-				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("%d", __LINE__);
-				break;
-			}
-
-			result = Error_Succeed;
-
-		} while (false);
-
+		ErrorCodeEnum result(Error_Succeed);
 		pTransactionContext->SendAnswer(result);
 	}
 
@@ -178,7 +129,6 @@ public:
 	CSimpleStringA m_strUserID, m_strPassword, m_strInitUrl;
 	SpReqAnsContext<AccessAuthService_InitializeNew_Req, AccessAuthService_InitializeNew_Ans>::Pointer m_ctx;
 	pair<string, string> GenerateTmkToKMC();
-	pair<string, string> GenerateTmkToDevice();
 	pair<string, string> EncryptedByPubKey(CSimpleStringA pubKey, bool bNeed04Head = false);
 	void GetTermSysInfo();
 

+ 17 - 13
Module/mod_cardissuerstore/CardIssuerFSM.cpp

@@ -1402,10 +1402,8 @@ ErrorCodeEnum CCardIssuerFSM::OnInit()
 	m_csMachineType = sysInfo.strMachineType;
 	m_csSite = sysInfo.strSite;
 	m_terminalNo = sysInfo.strTerminalID;
-	m_majorVerion = sysInfo.MachineVersion.GetMajor();
-	m_minorVerion = sysInfo.MachineVersion.GetMinor();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CardIssuer, MachineType:%s, Site:%s, TerminalNo:%s, MachineVersion:%d.%d",
-		m_csMachineType.GetData(), m_csSite.GetData(), m_terminalNo.GetData(), m_majorVerion, m_minorVerion);
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CardIssuer, MachineType:%s, Site:%s, TerminalNo:%s",
+		m_csMachineType.GetData(), m_csSite.GetData(), m_terminalNo.GetData());
 #ifdef RVC_OS_WIN
 	//如果是东信卡库,将CardLibDB_CMB.db3文件拷贝到运行时中,若运行时已存在该文件,不再拷贝
 	if(!m_csMachineType.Compare("RVC.CardStore", true))
@@ -1425,6 +1423,8 @@ ErrorCodeEnum CCardIssuerFSM::OnInit()
 			CSimpleStringA runinfodbFile = runinfoPath + "\\runcfg\\CardLibDB_CMB.db3";
 			CSimpleStringA depdbFile = depPath + "\\CardLibDB_CMB.db3";
 
+
+			//TODO 建议直接使用ExistsFileA等接口判断文件是否存在
 			WIN32_FIND_DATA findData;
 			if (FindFirstFileA((LPCTSTR)runinfodbFile, &findData) == INVALID_HANDLE_VALUE
 				&& FindFirstFileA((LPCTSTR)depdbFile, &findData) != INVALID_HANDLE_VALUE)	
@@ -1791,7 +1791,7 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
 	CSmartPointer<IEntityFunction> spEntityFunction = GetEntityBase()->GetFunction();
 	CSmartPointer<IConfigInfo> spConfig, spConfigCS;
 
-	CSimpleStringA csBinPath, csBackslash("\\");
+	CSimpleStringA csBinPath;
 	ErrorCodeEnum eErrPath = spEntityFunction->GetPath("Bin", csBinPath);
 	if (eErrPath != Error_Succeed)
 	{
@@ -2090,6 +2090,7 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
 void CCardIssuerFSM::Load()
 {
 	LOG_FUNCTION();
+	/** 使用封装的公共逻辑去获取适配器打开的相关信息,参考其他硬件实体  [Gifur@20241111]*/
 	CSmartPointer<IConfigInfo> spConfig;
 	ErrorCodeEnum eErrDev = GetEntityBase()->GetFunction()->OpenConfig(Config_Root, spConfig);
 	if (spConfig == NULL)
@@ -2097,14 +2098,10 @@ void CCardIssuerFSM::Load()
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("<Load>, open root.ini failed");
 		return;
 	}
-	CSimpleStringA csVendor("");
 	spConfig->ReadConfigValueInt("Device.CardIssuer", "Baudrate", m_baudRate);
 	spConfig->ReadConfigValueInt("Device.CardIssuer", "Port", m_port);
-	spConfig->ReadConfigValue("Device.CardIssuer", "Vendor", csVendor);
-	HARDWARE_ENTITY_SET_VENDOR_NAME(m_entCode, csVendor);	
 
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_baudRate:%d, m_port:%d, csVendor:%s,",
-			m_baudRate, m_port, csVendor.GetData());
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_baudRate:%d, m_port:%d", m_baudRate, m_port);
 
 	m_csDevSN = "";
 }
@@ -2386,7 +2383,8 @@ int CCardIssuerFSM::IssueCard(SpReqAnsContext<CardIssuerStoreService_IssueEx_Req
 	{
 		CSimpleStringA warnInfo = CSimpleStringA::Format("IssuerCard, hopper%d no more cards to issue. LocalRecord CardremainsEx:%d, Vendor return:NoCard(%d), CardCount(%d)",
 			m_currentHopper, m_remainsEx[m_currentHopper - 1], cis.eIssuerBin[m_currentHopper - 1],  cis.dwIssuerCount[m_currentHopper - 1]);
-		LogWarn(Severity_Middle, Error_Unexpect, CardIssuerStore_UserErrorCode_No_More_Card_Issue, warnInfo.GetData());
+		//LogWarn(Severity_Middle, Error_Unexpect, CardIssuerStore_UserErrorCode_No_More_Card_Issue, warnInfo.GetData());
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)(warnInfo.GetData());
 
 		DWORD dwUsrErrCode = 0;
 		if (cis.eIssuerBin[m_currentHopper - 1] == CI_ISSUEHOPPER_NOTSUPP)
@@ -7694,6 +7692,8 @@ int CCardIssuerFSM::AddAndReadCardFromBoxJS(SpReqAnsContext<CardIssuerStoreServi
 		CardNo card;
 		memset(&card, 0, sizeof(card));
 
+		ctx->Ans.reserved1.Init(3);
+
 		m_mapJsonErr["cardNo"] = JsonElem("");
 		l_beginTime = GetTickCountRVC();
 		eErr = m_hDevHelper->ReadAccount(card);
@@ -7709,6 +7709,9 @@ int CCardIssuerFSM::AddAndReadCardFromBoxJS(SpReqAnsContext<CardIssuerStoreServi
 			ctx->Ans.cardNo = card.account;
 			ctx->Ans.track2 = card.track2;
 			ctx->Ans.track3 = card.track3;
+			ctx->Ans.reserved1[0] = card.dwSize;
+			ctx->Ans.reserved1[1] = card.dwTrack2Size;
+			ctx->Ans.reserved1[2] = card.dwTrack3Size;
 			if (card.dwTrack3Size == 2)
 			{
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("maybe only IC card.");
@@ -8046,7 +8049,7 @@ bool CCardIssuerFSM::OperateNewCardStore(int slot, CSimpleStringA& addCardNo, CS
 			CSimpleStringA maskCardno = MaskCardno(addCardNo.GetData());
 			LogWarn(Severity_Low, Error_Succeed, CardIssuerStore_UserErrorCode_CardBin, CSimpleStringA::Format("cardBin:%s", maskCardno.GetData()));
 
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("card.account:%d, card serial %s", addCardNo.GetLength(), addCardSerial.GetData());
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("card.account len:%d, card serial %s", addCardNo.GetLength(), addCardSerial.GetData());
 			if (addCardSerial.GetLength() <= 0) {
 				bDataOK = false;
 			}
@@ -8089,8 +8092,9 @@ bool CCardIssuerFSM::OperateNewCardStore(int slot, CSimpleStringA& addCardNo, CS
 			else
 			{
 				//移回卡槽不成功,登记并吞卡
+				CSimpleStringA maskCardno = MaskCardno(addCardNo.GetData());
 				bool bTrans = true;
-				SetErrorAndLog(eErr, TryMapAPIRetToUEC(eErr, MEC_DEVAPI_CARDISSUER_MoveCardToSlot, bTrans), "DevAdapter::MoveCardToSlot", __FUNCTION__, false, l_endTime - l_beginTime, "QLR0402220100", CSimpleStringA::Format("OperateNewCardStore::MoveCardToSlot err, slot:%d, cardNo:%s", slot,addCardNo.GetData()));
+				SetErrorAndLog(eErr, TryMapAPIRetToUEC(eErr, MEC_DEVAPI_CARDISSUER_MoveCardToSlot, bTrans), "DevAdapter::MoveCardToSlot", __FUNCTION__, false, l_endTime - l_beginTime, "QLR0402220100", CSimpleStringA::Format("OperateNewCardStore::MoveCardToSlot err, slot:%d, cardNo:%s", slot, maskCardno.GetData()));
 				
 				eErr = MachineMoveCardBackNotHold();
 				if (eErr == Error_Succeed) {

+ 0 - 1
Module/mod_cardissuerstore/CardIssuerFSM.h

@@ -1304,7 +1304,6 @@ private:
 	int m_issueStatusFromFile, m_issueStatus/*the status maybe changed by Business call*/;
 	//1:default, 2:SCI, 3:no cfg
 	int m_machineType;
-	WORD m_majorVerion, m_minorVerion;
 	int m_port, m_baudRate, m_currentHopper, m_devOpenFailedCount;
 	int m_maxSlot,m_findCard,m_cardPos,m_currentFSMState,m_maxRetainCount, m_eacQueryFlag/*accout query*/
 		,m_ICRetryTimes;

+ 2 - 3
Module/mod_chromium/CModTools.cpp

@@ -1200,8 +1200,8 @@ namespace Chromium {
 
 	bool CModTools::isOutsidePad() {
 
-		if ((ConfigManager::getInstance().m_strSite.IsEndWith("FLB", true) || ConfigManager::getInstance().m_strSite.IsEndWith("SMM", true)) &&
-			ConfigManager::getInstance().m_strMachineType.IsEndWith("PAD", true))
+		if ((m_strSite.IsEndWith("FLB", true) || m_strSite.IsEndWith("SMM", true)) &&
+			m_strMachineType.IsEndWith("PAD", true))
 		{
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("isOutsidePad Yes");
 			return true;
@@ -1210,7 +1210,6 @@ namespace Chromium {
 		return false;
 	}
 
-
 	bool CModTools::findRestartCode(DWORD userCode) {
 		DWORD authArr_noretry_norestart[] = ERRARR_ACCESSAUTH_NORETRY_NORESTART;
 		DWORD authArr_retry_norestart[] = ERRARR_ACCESSAUTH_RETRY_NORESTART;

+ 0 - 1
Module/mod_chromium/CModTools.h

@@ -112,7 +112,6 @@ namespace Chromium {
 
 		/** 应该跟健康约定了,准入不过,通过监护进程触发框架重启,这里默认框架启动时间再加上10分钟 [Gifur@2022324]*/
 		std::string GetSpShellNextRebootTime();
-		bool isOutsidePad();
 		void setLimitReason(const char* reason);
 		int StandardToStamp(const char* str_time, bool dateOnly);
 		bool CheckTradeRecord();

+ 1 - 0
Module/mod_gpio/Gpio_UserErrorCode.h

@@ -15,5 +15,6 @@
 #define GPIO_UserErrorCode_ReadPort_Failed	0x20900208
 #define GPIO_UserErrorCode_DetectStatus_Failed	0x20900209
 
+#define GPIO_UserErrorCode_PortNumOldVersion	0x2090020A
 
 #endif //_CONTACTLESSCARD_USER_ERRORCODE_H

+ 6 - 1
Module/mod_gpio/mod_gpio.cpp

@@ -446,7 +446,7 @@ ErrorCodeEnum CGpioEntity::Initial()
         return eErrDev;
     }
 	CSimpleStringA csPort(true), csBaudrate(true);
-	CSimpleStringA csPortNum(true), csInOutDir(true);
+	CSimpleStringA csPortNum(true);
 	spConfigRoot->ReadConfigValue("Device.Gpio", "Port", csPort);
 	spConfigRoot->ReadConfigValue("Device.Gpio", "Baudrate", csBaudrate);
 	spConfigRoot->ReadConfigValue("Device.Gpio", "PortNum", csPortNum);
@@ -465,6 +465,11 @@ ErrorCodeEnum CGpioEntity::Initial()
 		}
 	}
 #endif
+	bool theSameFlag = false;
+	if ((m_bNewVersion && csPortNum.Compare("4") == 0) || (!m_bNewVersion && csPortNum.Compare("3") == 0)) { theSameFlag = true; }
+	LogWarn(Severity_Low, Error_Debug, GPIO_UserErrorCode_PortNumOldVersion
+		, CSimpleStringA::Format("Required:%s,NewVersion:%s,PortNum:%s", theSameFlag ? "True" : "False", m_bNewVersion ? "True" : "False", csPortNum.GetData()));
+
 	m_hDevHelper.SetAdapterName(GetEntityName());
     eErrDev = m_hDevHelper.LoadUp(dllName);
     if (eErrDev != Error_Succeed) {

+ 9 - 9
Module/mod_healthmanager/HealthManagerFSM.cpp

@@ -192,17 +192,17 @@ unsigned int CHealthManagerFSM::s4_on_event(FSMEvent* pEvt)
 		pEvt->SetHandled();
 		if (pEvt->param1 == 1)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode("QLR0402501V1").setLogCode("RTA510E")("VtmLoader load SIPphone entity failed, to Set TerminalStage M.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402501V1").setLogCode("RTA510E")("VtmLoader load SIPphone entity failed, to Set TerminalStage M.");
 			SetVtmLoadResult(VtmLoad_MediaLoadFail);
 			return pEvt->param1;
 		}
 		else if (pEvt->param1 == 2)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode("QLR0402501V1").setLogCode("RTA510F")("VtmLoader load SYNCSTART(boot cfg = 2) entity failed, to Set TerminalStage C.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402501V1").setLogCode("RTA510F")("VtmLoader load SYNCSTART(boot cfg = 2) entity failed, to Set TerminalStage C.");
 			SetVtmLoadResult(VtmLoad_OtherSyncEntityLoadFail);
 			return pEvt->param1;
 		}
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501A1")("VtmLoader load entitys ok.");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501A1")("VtmLoader load entitys ok.");
 		if (m_iAccessAuth == VtmLoad_AccessAuth_Init)
 		{
 			WaitToCallAccessAuthTask* pTask = new WaitToCallAccessAuthTask(this);
@@ -1029,7 +1029,7 @@ void CHealthManagerFSM::WaitToCallAccessAuthDoWork()
 		GetEntityBase()->GetFunction()->GetSysVar("AccessHavePath", csHavePath);
 		if (csHavePath.Compare("Y") == 0 || csHavePath.Compare("E") == 0)
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501A2")("AccessAuth entity ok.");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501A2")("AccessAuth entity ok.");
 			AccessAuthTask* pTask = new AccessAuthTask(this);
 			GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
 			break;
@@ -1038,7 +1038,7 @@ void CHealthManagerFSM::WaitToCallAccessAuthDoWork()
 		{
 			Sleep(5000);
 			LogWarn(Severity_High, Error_Unexpect, HealthManager_UserErrorCode_WaitForAccessAuthEntityIdle, "等待准入实体准备好");
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode("QLR0402501A2").setResultCode("RTA5107")("等待准入实体准备好");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402501A2").setResultCode("RTA5107")("等待准入实体准备好");
 		}
 	}
 }
@@ -1116,7 +1116,7 @@ void CHealthManagerFSM::WKUpdatePeriod()
 		eErrCode = (*m_pACClient)(EntityResource::getLink().upgradeLink())->UpdateWK();
 		if(Error_Succeed == eErrCode)
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501K1")("accessauth updatewk succ.");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501K1")("accessauth updatewk succ.");
 			pConfigRun->WriteConfigValue("Main", "WKSyncSuccTime", 
 				(const char*) CSimpleStringA::Format("0x%08X", (DWORD)CSmallDateTime::GetNow()));
 			pConfigRun->WriteConfigValueInt("Main", "WKSyncFailCount", 0);
@@ -1124,7 +1124,7 @@ void CHealthManagerFSM::WKUpdatePeriod()
 		}
 		else
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode("QLR0402501K1").setResultCode("RTA5103")("accessauth updatewk failed.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402501K1").setResultCode("RTA5103")("accessauth updatewk failed.");
 			nWKSyncFailCount++;
 			pConfigRun->WriteConfigValueInt("Main", "WKSyncFailCount", nWKSyncFailCount);
 		}
@@ -1480,7 +1480,7 @@ void CHealthManagerFSM::CheckIfPinPadOK()
 	//RVC.CardStore have no PinPad
 	if (m_sysInfo.strMachineType.Compare("RVC.CardStore", true) == 0)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501A3")("RVC.CardStore have no PinPad");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501A3")("RVC.CardStore have no PinPad");
 		return;
 	}
 	ULONGLONG ullWaitStart, ullWaitEnd;
@@ -1517,6 +1517,6 @@ void CHealthManagerFSM::CheckIfPinPadOK()
 	else
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("new PinPadService_ClientBase failed.GetLastError:%d", GetLastErrorRVC());
 	m_ullWaitForPinPad = ullWaitEnd - ullWaitStart;
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501A3").setCostTime(m_ullWaitForPinPad)("finish (or time out) check  PinPad");
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501A3").setCostTime(m_ullWaitForPinPad)("finish (or time out) check  PinPad");
 	return;
 }

+ 13 - 25
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -1173,29 +1173,29 @@ void CHealthManagerEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nL
 	case CONTROL_ACCESSAUTH_UNKNOWN:
 	{
 		if (dwUserCode == CONTROL_ACCESSAUTH_NORETRY_NORESTART) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501F1").setResultCode("RTA5108")("receive accessauth failed result:%d. no retry,no restart.", dwUserCode);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501F1").setResultCode("RTA5108")("receive accessauth failed result:%d. no retry,no restart.", dwUserCode);
 			m_bNeedAuthRetry = false;
 			m_bNeedGuardianRestart = false;
 		}
 		else if (dwUserCode == CONTROL_ACCESSAUTH_RETRY_NORESTART) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501F1").setResultCode("RTA5109")("receive accessauth failed result:%d. retry,no restart.", dwUserCode);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501F1").setResultCode("RTA5109")("receive accessauth failed result:%d. retry,no restart.", dwUserCode);
 			m_bNeedAuthRetry = true;
 			m_bNeedGuardianRestart = false;
 		}
 		else if (dwUserCode == CONTROL_ACCESSAUTH_RETRY_RESTART) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501F1").setResultCode("RTA510A")("receive accessauth failed result:%d. retry,restart.", dwUserCode);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501F1").setResultCode("RTA510A")("receive accessauth failed result:%d. retry,restart.", dwUserCode);
 			m_bNeedAuthRetry = true;
 			m_bNeedGuardianRestart = true;
 		}
 		else if (dwUserCode == CONTROL_ACCESSAUTH_UNKNOWN) {
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501F1").setResultCode("RTA510B")("receive accessauth failed result:%d. unknown access failed.no retry,restart.", dwUserCode);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501F1").setResultCode("RTA510B")("receive accessauth failed result:%d. unknown access failed.no retry,restart.", dwUserCode);
 			m_bNeedAuthRetry = false;
 			m_bNeedGuardianRestart = true;
 		}
 		m_fsm.SetVtmLoadResult(VtmLoad_AccessAuth_Fail);
 		if (m_bNeedAuthRetry)
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501F2")("retry AccessAuth");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501F2")("retry AccessAuth");
 			m_fsm.ToReAccessAuth();
 		}
 	}
@@ -1217,7 +1217,6 @@ void CHealthManagerEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nL
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Browser(Chromuim) to idle.");
 		LogWarn(Severity_Low, Error_Unexpect, HealthManager_UserErrorCode_Receive_Browser_Idle
 			, "Browser(Chromuim) to idle.");
-		m_bBrowserIdleFirst = true;
 		break;
 	case LOG_EVT_PINPAD_OPEN_SUC:
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("PinPad open suc.");
@@ -1242,6 +1241,10 @@ void CHealthManagerEntity::OnSysVarEvent(const char *pszKey, const char *pszValu
 			CSmartPointer<IConfigInfo> spConfigRun;
 			ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, spConfigRun);
 			m_bInMainPage = true;
+			m_bEnterMainPageEver = true;
+			spConfigRun->WriteConfigValueInt("Run", "UpgradeRestartTimes", 0);
+			spConfigRun->WriteConfigValueInt("Run", "UpgradeRestartOSTimes", 0);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("As have been in main page,reset UpgradeRestartTimes.");
 			if (!m_bHaveThrowMainPage)
 			{
 				m_bHaveThrowMainPage = true;
@@ -1262,21 +1265,6 @@ void CHealthManagerEntity::OnSysVarEvent(const char *pszKey, const char *pszValu
 				else
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501B2").setCostTime(dwToMainPageCostTime)(m_sysStaticInfo.InstallVersion.ToString().GetData());
 			}
-			if (m_bBrowserIdleFirst)
-			{
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("the first enter main page from browser started.");
-				m_bBrowserIdleFirst = false;
-				m_bEnterMainPageEver = true;
-				LogEvent(Severity_Middle, LOG_EVT_HEALTH_FIRST_ENTER_MAINPADE, "enter main page");
-				ULONGLONG dwElapse = SP::Module::Comm::RVCGetTickCount();//使用机器启动时间秒数
-				DWORD elapseTimeTemp = dwElapse / 1000;
-				CSimpleStringA xMsg = CSimpleStringA::Format("{\"Decripstion\":\"the first enter main page from browser started.\",\"version\":\"%s\",\"elapseTime\":\"%d\"}"
-					, m_sysStaticInfo.InstallVersion.ToString().GetData(), elapseTimeTemp);
-				LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_HEALTH_FIRST_ENTER_MAINPADE, xMsg.GetData());
-				spConfigRun->WriteConfigValueInt("Run", "UpgradeRestartTimes", 0);
-				spConfigRun->WriteConfigValueInt("Run", "UpgradeRestartOSTimes", 0);
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("As have been in main page,reset UpgradeRestartTimes.");
-			}
 		}
 		else
 			m_bInMainPage = false;
@@ -1463,7 +1451,7 @@ void CHealthManagerEntity::OnEntityStateHook(const char* pszEntityName, const ch
 		case EntityState_Lost:
 		{
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("%s trigger by %s: from %s to %s", pszEntityName, pszTriggerEntity, SpStrEntityState(eLastState), SpStrEntityState(eState));
-			CSimpleStringA tmpWarnMsg = CSimpleStringA::Format("%s lost. trig entity:%s,lastState:%d", pszEntityName, pszTriggerEntity, eLastState);
+			CSimpleStringA tmpWarnMsg = CSimpleStringA::Format("%s lost. trig entity:%s,lastState:%s", pszEntityName, pszTriggerEntity, SpStrEntityState(eLastState));
 			CEntityStaticInfo esi = { 0 };
 			ErrorCodeEnum ec = GetFunction()->GetEntityStaticInfo(pszEntityName, esi);
 			//0x101 0x21D
@@ -1484,7 +1472,7 @@ void CHealthManagerEntity::OnEntityStateHook(const char* pszEntityName, const ch
 				csResultCode = CSimpleStringA::Format("RTA51%c%c", iByteHigh + 0x30, iByteLow - 10 + 0x41);
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("resultcode:%s", csResultCode.GetData());
 			LogWarn(Severity_High, Error_Unexpect, HealthManager_UserErrorCode_EntityLost_Start + esi.wEntityDevelopID, tmpWarnMsg.GetData());
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode("QLR0402501S1").setResultCode(csResultCode.GetData())(tmpWarnMsg.GetData());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402501S1").setResultCode(csResultCode.GetData())(tmpWarnMsg.GetData());
 			//doing nothing before enter main page. HandShake will take it.
 			//AND if selfcheck is doing, no action at all
 			if (m_bEnterMainPageEver && m_modRunInfo[pszEntityName].abnormalCount < m_maxAbnormalTimes && !m_modRunInfo[pszEntityName].bAbnormalBusy)
@@ -1534,7 +1522,7 @@ void CHealthManagerEntity::ToCalcRebootHourAndMinute(int restartBegin, int resta
 }
 void CHealthManagerEntity::RealCheck(SpReqAnsContext<HealthManagerService_RealCheck_Req, HealthManagerService_RealCheck_Ans>::Pointer ctx)
 {
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501R1")("%s", ctx->Req.name.GetData());
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501R1")("%s", ctx->Req.name.GetData());
 	CheckEntity(ctx->Req.name, Test_ShakeHand);
 	ctx->Answer(Error_Succeed);
 }
@@ -1579,7 +1567,7 @@ void CHealthManagerEntity::OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp)
 			msgInfo["SelfTestReturnCode"] = SpStrError(new_entry->ErrorResult);
 			std::pair<bool, std::string> strResult;
 			strResult = generateJsonStr(msgInfo);
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode("QLR0402501S2")(strResult.second.c_str());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402501S2")(strResult.second.c_str());
 		}
 	}
 }

+ 3 - 3
Module/mod_healthmanager/mod_healthmanager.h

@@ -86,7 +86,7 @@ public:
 		m_bWaitRestartPC(false)
 		, m_bScreenLock(false)
 		, m_bSayIdle(false), m_bGuardianRun(false), m_guardianCount(1)
-		, m_menuChoice(""), m_menuPre(""), m_netState("N"), m_bBrowserIdleFirst(true)
+		, m_menuChoice(""), m_menuPre(""), m_netState("N")
 		, m_bInMainPage(false), m_stopSelfCheck(0)
 		, m_bEnterMainPageEver(false),m_bHaveThrowMainPage(false)
 		,m_bNeedAuthRetry(false), m_bNeedGuardianRestart(true), m_bNeedGuardian(true)
@@ -240,7 +240,7 @@ public:
 
 	void QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode("QLR0402501Q1")();
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402501Q1")();
 		QueryHardwareInfoTask* pTask = new QueryHardwareInfoTask(&m_fsm);
 		pTask->ctx = ctx;
 		GetFunction()->PostThreadPoolTask(pTask);
@@ -278,7 +278,7 @@ private:
 	int m_stopSelfCheck;
 	int m_restartHour, m_restartMinute, m_lastHour, m_guardianCount, m_maxAbnormalTimes, m_rebootHourBegin, m_rebootHourEnd;;
 	bool m_bWaitRestartPC, m_bScreenLock, m_bSayIdle
-		, m_bGuardianRun, m_bBrowserIdleFirst
+		, m_bGuardianRun
 		, m_bInMainPage, m_bEnterMainPageEver, m_bHaveThrowMainPage, m_bToRestartByCenterSetting;
 	bool m_bNeedAuthRetry/*需要重试准入*/, m_bNeedGuardianRestart/*需要重启*/, m_bNeedGuardian;
 	DWORD m_dwTimeOfAuthSuc;

+ 0 - 2
Module/mod_heartbeat/mod_heartbeat.h

@@ -31,8 +31,6 @@ public:
 		LOG_FUNCTION();
 		ErrorCodeEnum rt = m_fsm.Init(this);
 		GetFunction()->RegistSysVarEvent("TerminalStage", this);
-		CUUID uuidCardSwiper;
-		GetFunction()->SubscribeBroadcast("CardSwiper", "", this, uuidCardSwiper);
 		pTransactionContext->SendAnswer(rt);
 	}
 	virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)

+ 1 - 0
Module/mod_interactivecontrol/mod_interactivecontrol.h

@@ -15,6 +15,7 @@ using namespace LocalMediaPlay;
 #include "../mod_assistantchannel/AssistantChannel_client_g.h"
 #include "../mod_assistantchannel/chan_protocol.h"
 using namespace AssistantChannel;
+
 #include "../mod_SalesRecorder/SalesRecorder_client_g.h"
 #include "../mod_SalesRecorder/SalesRecorder_def_g.h"
 using namespace SalesRecorder;

+ 0 - 5
Module/mod_livenessdetection/CMakeLists.txt

@@ -30,8 +30,6 @@ if(MSVC)
 target_include_directories(${MODULE_NAME} PRIVATE
 	${RVC_COMMON_INCLUDE_DIR}
 	${CMAKE_CURRENT_SOURCE_DIR}
-	${RVC_TOOLKIT_INCLUDE_DIR}
-	${CONAN_INCLUDE_DIRS_FFMPEG}
 	${OTHER_LIB_PLATFORM_BASE_DIR}/libvideoframework
 	${OTHER_LIB_BASE_DIR}/rvcmediacommon
 	${OTHER_LIB_BASE_DIR}/libvideoqueue
@@ -46,8 +44,6 @@ else()
 target_include_directories(${MODULE_NAME} PRIVATE
 	${RVC_COMMON_INCLUDE_DIR}
 	${CMAKE_CURRENT_SOURCE_DIR}
-	${RVC_TOOLKIT_INCLUDE_DIR}
-	${CONAN_INCLUDE_DIRS_FFMPEG}
 	${OTHER_LIB_PLATFORM_BASE_DIR}/libvideoframework
 	${OTHER_LIB_BASE_DIR}/rvcmediacommon
 	${OTHER_LIB_BASE_DIR}/libvideoqueue
@@ -56,7 +52,6 @@ target_include_directories(${MODULE_NAME} PRIVATE
 	${ThirdPartyHeadRoot}/websocketpp
 	${ThirdPartyHeadRoot}/libjpeg
 	${CONAN_BOOST_ROOT}
-	${CONAN_INCLUDE_DIRS_OPENSSL}
 )
 endif(MSVC)
 

+ 9 - 2
Module/mod_livenessdetection/RvcFaceVideo.cpp

@@ -1,6 +1,8 @@
-#include "stdafx.h"
 #include <stdint.h>
 #include "RvcFaceVideo.h"
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
 
 #ifndef rvc_snprintf
 #ifdef _WIN32
@@ -77,6 +79,8 @@ RvcFaceVideo::~RvcFaceVideo(void)
 int RvcFaceVideo::InitVideoQueue(const char* strenvqueue, const char* stroptqueue, const char* strpreview_envqueue, const char* strpreview_optqueue)
 {
 	int iRet = -1;
+	
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("begin new copy video queue name.");
 
 	if (NULL != strenvqueue){
 		rvc_snprintf(m_env_videoname, MAX_PATH, "%s", strenvqueue);
@@ -91,9 +95,10 @@ int RvcFaceVideo::InitVideoQueue(const char* strenvqueue, const char* stroptqueu
 	}
 
 	if (NULL != strpreview_optqueue){
-		_snprintf(m_preview_opt_videoname, MAX_PATH, "%s", strpreview_optqueue);
+		rvc_snprintf(m_preview_opt_videoname, MAX_PATH, "%s", strpreview_optqueue);
 	}
 
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("begin new video queue.");
 	if (strlen(m_env_videoname)){
 		m_env_videoqueue = new Clibvideoqueue(m_env_videoname);
 		iRet = 0;
@@ -114,6 +119,8 @@ int RvcFaceVideo::InitVideoQueue(const char* strenvqueue, const char* stroptqueu
 		iRet = 0;
 	}
 
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("init video queue success.");
+
 	return iRet;
 }
 

+ 1 - 0
Module/mod_livenessdetection/RvcFaceVideo.h

@@ -1,6 +1,7 @@
 #pragma once
 #include "libvideoqueue.h"
 #include "videoutil.h"
+#include "SpBase.h"
 
 #ifndef MAX_PATH
 #define MAX_PATH          260

+ 0 - 3
Module/mod_livenessdetection/RvcWsServer.cpp

@@ -1,16 +1,13 @@
-#include "stdafx.h"
 #include <stdint.h>
 #include "RvcWsServer.h"
 #include <boost/thread/thread.hpp>
 #include <vector>
-
 #include <boost/thread/lock_guard.hpp>
 #include "SpBase.h"
 #include "jpeglib.h"
 #include "Event.h"
 #include "y2k_time.h"
 
-
 namespace LivenessDetection {
 
 #ifndef RVC_JPEG_QUALITY

+ 7 - 3
Module/mod_livenessdetection/RvcWsServer.h

@@ -8,9 +8,13 @@
 #include <functional>
 #include <memory>
 #include <vector>
-#if defined(RVC_OS_LINUX)
+
+#ifdef _WIN32
+#include <Windows.h>
+#include <process.h>
+#else
 #include <semaphore.h>
-#endif //RVC_OS_LINUX
+#endif
 
 
 #ifndef RVC_LIVENESS_WS_PORT
@@ -115,7 +119,7 @@ public:
 	volatile bool m_bconnected;			// connect flag
 	volatile bool m_bstarttrans;		// start transmit
 	volatile eCameraType m_ecameraid;	// camera id
-#if defined(RVC_OS_WIN)
+#if defined(_WIN32)
 	HANDLE m_work_thread;
 	HANDLE m_evt;
 #else

+ 32 - 0
Module/mod_livenessdetection/mod_livenessdetection.cpp

@@ -108,12 +108,17 @@ void CLivenessDetectionEntity::OnStarted()
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[LivenessDetectionFSM] Get Entity Configure Failed!");
 	}
 
+
 #ifdef RVC_OS_WIN
 	m_hWsServerThread = (HANDLE)_beginthreadex(NULL, 0, &start_wsserver, this, 0, NULL);
 	if (NULL == m_hWsServerThread){
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("create web socket server thread failed.");
 	}
 #else
+	if (GetCameraOnStatus()) {
+		InitVideoQueueInfo();
+	}
+
 	if (0 != pthread_create(&m_hWsServerThreadId, NULL, start_wsserver, (void*)this)) {
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("create web socket server thread failed.");
 	}
@@ -292,6 +297,28 @@ void CLivenessDetectionEntity::InitVideoQueueInfo()
 }
 
 
+bool CLivenessDetectionEntity::GetCameraOnStatus()
+{
+	bool bRet = false;
+	MediaControlClient* pMediaControlClient = new MediaControlClient(this);
+	ErrorCodeEnum erroCode = pMediaControlClient->Connect();
+	if (Error_Succeed != erroCode) {
+		pMediaControlClient->SafeDelete();
+		pMediaControlClient = NULL;
+	}
+	else {
+		MediaService_IsCameraOnStatus_Req req;
+		MediaService_IsCameraOnStatus_Ans ans;
+		if (Error_Succeed == pMediaControlClient->IsCameraOnStatus(req, ans, 5000)) {
+			bRet = ans.biscameraon;
+		}
+		pMediaControlClient->GetFunction()->CloseSession();
+		pMediaControlClient = NULL;
+	}
+
+	return bRet;
+}
+
 int CLivenessDetectionEntity::on_get_videodata(eVideoType eType, eCameraType ecameraid, int* width, int* height, unsigned char* bmpdata, int isize)
 {
 	int idatalen = 0;
@@ -367,6 +394,11 @@ ErrorCodeEnum CLivenessDetectionEntity::GetEntityConfigure()
 }
 
 
+MediaControlClient::MediaControlClient(CLivenessDetectionEntity* pEntity) : MediaService_ClientBase(pEntity)
+{
+
+}
+
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CLivenessDetectionEntity)
 SP_END_ENTITY_MAP()

+ 12 - 5
Module/mod_livenessdetection/mod_livenessdetection.h

@@ -2,11 +2,6 @@
 #define MOD_LIVENESSDETECTION_H
 #pragma once
 
-#include "SpBase.h"
-#ifdef RVC_OS_WIN
-#include "stdafx.h"
-#endif // RVC_OS_WIN
-
 #include "SpIni.h"
 #include "rvc_media_common.h"
 #include "Event.h"
@@ -24,6 +19,8 @@
 #include "RvcWsServer.h"
 #include "RvcFaceVideo.h"
 
+#include "../mod_mediacontroller/MediaController_client_g.h"
+using namespace MediaController;
 
 using namespace LivenessDetection;
 
@@ -39,6 +36,14 @@ private:
 	CLivenessDetectionEntity* m_pEntity;
 };
 
+
+class MediaControlClient : public MediaService_ClientBase
+{
+public:
+	MediaControlClient(CLivenessDetectionEntity* pEntity);
+};
+
+
 class CLivenessDetectionEntity : public CEntityBase, public ILogListener, public ISysVarListener
 {
 public:
@@ -88,6 +93,8 @@ private:
 
 	void InitVideoQueueInfo();
 
+	bool GetCameraOnStatus();
+
 	DeviceTypeEnum m_eDeviceType;
 	int nActiveCamera;
 	int m_iCameraState;

+ 49 - 0
Module/mod_mediacontroller/MediaController_client_g.h

@@ -471,6 +471,55 @@ public:
 		return Error;
 	}
 
+	ErrorCodeEnum IsCameraOnStatus(MediaService_IsCameraOnStatus_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	{
+		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
+		CAutoBuffer Buf = SpObject2Buffer(Req);
+		if (m_context.checkEmpty())
+		{
+			m_context.AutoGenerate();
+			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
+			m_context = m_context.upgradeLink();
+		}
+		auto ret = pFunc->AsyncRequest(MediaService_Method_IsCameraOnStatus, MediaService_MethodSignature_IsCameraOnStatus, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum IsCameraOnStatus(MediaService_IsCameraOnStatus_Req &Req, MediaService_IsCameraOnStatus_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = IsCameraOnStatus(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum IsCameraOnStatus(MediaService_IsCameraOnStatus_Req &Req, MediaService_IsCameraOnStatus_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = IsCameraOnStatus(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum IsCameraOnStatus(MediaService_IsCameraOnStatus_Req &Req, MediaService_IsCameraOnStatus_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = IsCameraOnStatus(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			CSimpleString str;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+
 
 	bool SafeDelete()
 	{

+ 23 - 0
Module/mod_mediacontroller/MediaController_def_g.h

@@ -24,6 +24,7 @@ namespace MediaController {
 #define MediaService_Method_GetVideoDevices 9
 #define MediaService_Method_GetCameraInfos 10
 #define MediaService_Method_ManipulateCameras 11
+#define MediaService_Method_IsCameraOnStatus 12
 
 #define MediaService_MethodSignature_GetVideoDeviceName -496217232
 #define MediaService_MethodSignature_StartCamera 749460891
@@ -37,6 +38,7 @@ namespace MediaController {
 #define MediaService_MethodSignature_GetVideoDevices 616397805
 #define MediaService_MethodSignature_GetCameraInfos -2116637958
 #define MediaService_MethodSignature_ManipulateCameras 755873072
+#define MediaService_MethodSignature_IsCameraOnStatus -491616205
 
 #define MediaService_LogCode_GetVideoDeviceName "QLR040220800"
 #define MediaService_LogCode_StartCamera "QLR040220801"
@@ -50,6 +52,7 @@ namespace MediaController {
 #define MediaService_LogCode_GetVideoDevices "QLR040220809"
 #define MediaService_LogCode_GetCameraInfos "QLR040220810"
 #define MediaService_LogCode_ManipulateCameras "QLR040220811"
+#define MediaService_LogCode_IsCameraOnStatus "QLR040220812"
 
 struct MediaService_GetVideoDeviceName_Req
 {
@@ -262,6 +265,26 @@ struct MediaService_ManipulateCameras_Ans
 
 };
 
+struct MediaService_IsCameraOnStatus_Req
+{
+
+	void Serialize(SpBuffer &Buf)
+	{
+	}
+
+};
+
+struct MediaService_IsCameraOnStatus_Ans
+{
+	bool biscameraon;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & biscameraon;
+	}
+
+};
+
 
 ///////////////////////////
 

+ 27 - 0
Module/mod_mediacontroller/MediaController_server_g.h

@@ -114,6 +114,13 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case MediaService_Method_IsCameraOnStatus:
+			if (dwSignature == MediaService_MethodSignature_IsCameraOnStatus) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -185,6 +192,11 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case MediaService_Method_IsCameraOnStatus:
+			if (dwSignature != MediaService_MethodSignature_IsCameraOnStatus) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -252,6 +264,11 @@ public:
 	/// override by user
 	}
 
+	virtual void Handle_IsCameraOnStatus(SpReqAnsContext<MediaService_IsCameraOnStatus_Req, MediaService_IsCameraOnStatus_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
 	virtual void OnRequest(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		CAutoBuffer Buf;
@@ -388,6 +405,16 @@ public:
 						Handle_ManipulateCameras(ctx);
 					}
 					break;
+				case MediaService_Method_IsCameraOnStatus:
+					{
+						SpReqAnsContext<MediaService_IsCameraOnStatus_Req,MediaService_IsCameraOnStatus_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<MediaService_IsCameraOnStatus_Req,MediaService_IsCameraOnStatus_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_IsCameraOnStatus(ctx);
+					}
+					break;
 				default:
 					assert(0);
 					break;

+ 24 - 17
Module/mod_mediacontroller/MediaService.xml

@@ -38,36 +38,36 @@
             	<param name="reserved1" type="int"/>
             	<param name="reserved2" type="string"/>
             </res>
-        </twoway>
+    </twoway>
 		<twoway name="GetAudioDevices" overlap="true">
             <req>
             	<param name="audioType" type="int"/>
             </req>
             <res>
             	<param name="retCode" type="int"/>
-		<param name="deviceCount" type="int"/>
-                <param name="strNames" type="string"/>
+							<param name="deviceCount" type="int"/>
+              <param name="strNames" type="string"/>
             </res>
         </twoway>
-	<twoway name="GetVideoDevices" overlap="true">
+	 <twoway name="GetVideoDevices" overlap="true">
             <res>
                	<param name="retCode" type="int"/>
-		<param name="deviceCount" type="int"/>
+								<param name="deviceCount" type="int"/>
                	<param name="strNames" type="string"/>
            </res>
-       	</twoway>
-	<twoway name="GetCameraInfos" overlap="true">
+   </twoway>
+	 <twoway name="GetCameraInfos" overlap="true">
             <res>
-		<param name="retCode" type="int"/>
-		<param name="EnvCamera" type="string"/>
-		<param name="EnvUsbPort" type="string"/>
-		<param name="EnvReserved" type="string"/>
-		<param name="OptCamera" type="string"/>
-		<param name="OptUsbPort" type="string"/>
-		<param name="OptReserved" type="string"/>
+							<param name="retCode" type="int"/>
+							<param name="EnvCamera" type="string"/>
+							<param name="EnvUsbPort" type="string"/>
+							<param name="EnvReserved" type="string"/>
+							<param name="OptCamera" type="string"/>
+							<param name="OptUsbPort" type="string"/>
+							<param name="OptReserved" type="string"/>
             </res>
-        </twoway>
-	<twoway name="ManipulateCameras" overlap="true">
+   </twoway>
+	 <twoway name="ManipulateCameras" overlap="true">
             <req>
             	<!--操作意图指令: 0:获取并接管设备权限;1:归还设备权限,不再占用-->
             	<param name="cmdType" type="int"/>
@@ -81,7 +81,14 @@
             	<param name="reserved1" type="int"/>
             	<param name="reserved2" type="string"/>
             </res>
-        </twoway>
+		</twoway>
+    <twoway name="IsCameraOnStatus" overlap="true">
+      <req>
+      </req>
+      <res>
+        <param name="biscameraon" type="bool"/>
+      </res>
+    </twoway>
 	</class>
 	<!-- 内置摄像头切换外接摄像头失败消息 -->
 	<message name="ExternalCameraSwitchFailed">

+ 8 - 0
Module/mod_mediacontroller/mod_mediacontroller.cpp

@@ -2116,6 +2116,14 @@ void MediaServiceSession::Handle_ManipulateCameras(SpReqAnsContext<MediaService_
 	ctx->Answer(Error_Succeed);
 }
 
+void MediaServiceSession::Handle_IsCameraOnStatus(SpReqAnsContext<MediaService_IsCameraOnStatus_Req, MediaService_IsCameraOnStatus_Ans>::Pointer ctx)
+{
+	DbgToBeidou(ctx->link, __FUNCTION__)();
+
+	ctx->Ans.biscameraon = m_pEntity->m_bStartCamera;
+
+	ctx->Answer(Error_Succeed);
+}
 
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CMediaControllerEntity)

+ 1 - 0
Module/mod_mediacontroller/mod_mediacontroller.h

@@ -57,6 +57,7 @@ public:
 	virtual void Handle_GetVideoDevices(SpReqAnsContext<MediaService_GetVideoDevices_Req, MediaService_GetVideoDevices_Ans>::Pointer ctx);
 	virtual void Handle_GetCameraInfos(SpReqAnsContext<MediaService_GetCameraInfos_Req, MediaService_GetCameraInfos_Ans>::Pointer ctx);
 	virtual void Handle_ManipulateCameras(SpReqAnsContext<MediaService_ManipulateCameras_Req, MediaService_ManipulateCameras_Ans>::Pointer ctx);
+	virtual void Handle_IsCameraOnStatus(SpReqAnsContext<MediaService_IsCameraOnStatus_Req, MediaService_IsCameraOnStatus_Ans>::Pointer ctx);
 
 private:
 	CMediaControllerEntity *m_pEntity;

+ 0 - 4
Module/mod_pinpad/PinPadFSM.cpp

@@ -318,7 +318,6 @@ int CPinPadFSM::Initial()
 
 	CSimpleStringA csDepPath(""), csBackslash(SPLIT_SLASH_STR);
 
-	m_devSN = "";
 	eErrDev = pEntity->LoadVendorLibName();
 	if (eErrDev != Error_Succeed)
 	{
@@ -328,11 +327,8 @@ int CPinPadFSM::Initial()
 		return Error_DevLoadFileFailed;
 	}
 	FulfillAdapterInfoFrom(pEntity->vendorLibInfo);
-	HARDWARE_ENTITY_SET_VENDOR_NAME(m_entCode, m_adapterInfo.strVendor);
-
 	pEntity->InitializeVendorLogSwitch();
 
-
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to load vendor dll[%s]", m_adapterInfo.adapterFilePath.IsNullOrEmpty() ? "null or empty" : m_adapterInfo.adapterFilePath.GetData());
 
 	eErrDev = LoadUpAdapterLibrary();

+ 2 - 2
Module/mod_pinpad/PinPadFSM.h

@@ -174,7 +174,7 @@ public:
 		, m_dwDevCommFailCount(0), m_dwPinPadRunCount(0), m_eDevState(DEVICE_STATUS_NOT_READY), m_encryptkey(1)
 		, m_bSM(false), m_bSMLoaded(false), m_iInWhatPage(PageType_Init), m_szModel(""), m_szType("")
 		, m_szVendor(""),m_csMachineType(true), m_csSite(true), m_terminalNo(true), m_port(true), m_Baudrate(true)
-		, m_devSN(""), m_bPinInputJS(false), m_bUseBackupSN(true){
+		, m_bPinInputJS(false), m_bUseBackupSN(true){
 			HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x206);
 			ZeroMemory(&m_adapterInfo, sizeof(m_adapterInfo));
 	}
@@ -289,7 +289,7 @@ private:
 	bool m_bFrontCancel,m_bWaitingMore,m_bExit,m_bPlainPin,m_bEntityExit
 		,m_bPinInput,m_bLoadKey,m_bEncrypt,m_bSM,m_bSMLoaded, m_bPinInputJS, m_bUseBackupSN/*if use backup sn*/;
 	ULLINT m_ullBeginTime, m_ullEndTime,m_ullConnectCost;
-	CSimpleStringA m_deviceNo, m_port, m_Baudrate, m_devCheckData,m_keySNSM,m_szModel,m_szType,m_szVendor,m_devSN/*fwb SN*/;
+	CSimpleStringA m_deviceNo, m_port, m_Baudrate, m_devCheckData,m_keySNSM,m_szModel,m_szType,m_szVendor;
 	char m_buf[4];
 	DWORD m_dwDevCommFailCount,m_dwPinPadRunCount;
 	DevStateEnum m_eDevState;

+ 101 - 207
Module/mod_vtmloader/VtmLoaderFSM.cpp

@@ -1,5 +1,6 @@
 #include "stdafx.h"
 #include <algorithm>
+#include <winpr/file.h>
 #include "fileutil.h"
 #include "VtmLoaderFSM.h"
 #include "VtmLoader_UserCode.h"
@@ -1797,78 +1798,6 @@ bool CVtmLoaderFSM::GetConfig()
 		, m_sysInfo.strTerminalID.GetData(), m_sysInfo.strMachineModel.GetData(), m_sysInfo.strMachineType.GetData(), m_sysInfo.MachineVersion.ToString().GetData(),m_sysInfo.CurrDepVersion.GetData()
 		, m_sysInfo.strSite.GetData(), m_sysInfo.eScreen, m_sysInfo.EnrolGPS.GetLatitude(), m_sysInfo.EnrolGPS.GetLongitude(), m_sysInfo.strEnrolAddr.GetData());
 
-
-	int i = 0;
-	ErrorCodeEnum ec1(Error_Succeed);
-
-	do 
-	{
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("============================== the %d times", i);
-		do
-		{
-			/** 获取适配器版本,例如:0.0.0.1 */
-			GetEntityBase()->GetFunction()->GetSystemStaticInfo(m_sysInfo);
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Dep version1:%s", m_sysInfo.CurrDepVersion.GetData());
-		} while (false);
-
-		do
-		{
-			/** 纯获取适配器版本,实时读取depver.txt文件 例如:0.0.0.1*/
-			CSimpleStringA csDepVersion(true);
-			GetEntityBase()->GetFunction()->GetRunningDepVersion(csDepVersion);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Dep version2:%s", csDepVersion);
-		} while (false);
-
-		do
-		{
-			//适配器的根目录,例如:D:\Run\dep
-			CSimpleStringA csDepPath(true);
-			ErrorCodeEnum ec = GetEntityBase()->GetFunction()->GetPath("DepBase", csDepPath);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[DepBase]%s,%s", SpStrError(ec), csDepPath.GetData());
-		} while (false);
-
-		do
-		{
-			//新适配器路径,例如:D:\Run\dep\0.0.0.1
-			CSimpleStringA csDepPath(true);
-			ErrorCodeEnum ec = GetEntityBase()->GetFunction()->GetPath("Dep", csDepPath);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[Dep]%s,%s", SpStrError(ec), csDepPath.GetData());
-		} while (false);
-
-		do
-		{
-			//旧的适配器Dep路径,例如:D:\Run\version\7.5.1.1\dep
-			CSimpleStringA csDepPath(true);
-			ErrorCodeEnum ec = GetEntityBase()->GetFunction()->GetPath("DepBak", csDepPath);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[DepBak]%s,%s", SpStrError(ec), csDepPath.GetData());
-		} while (false);
-
-		//do
-		//{
-		//	//更新适配器版本号文件内容
-		//	CSimpleStringA csVersion("0.0.0.2");
-		//	ec1 = GetEntityBase()->GetFunction()->GetPrivilegeFunction()->RewriteDepVersion(csVersion, true);
-		//	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[RewriteDepVersion] %s,%s", SpStrError(ec1), csVersion.GetData());
-		//} while (false);
-
-
-		do 
-		{
-#if defined(_MSC_VER)
-			const char* name = "PATH";
-#else
-			const char* name = "LD_LIBRARY_PATH";
-#endif //_MSC_VER
-			char value[1281];
-			memset(value, 0, sizeof(value));
-			size_t sz = 1280;
-			int rc = toolkit_getenv(name, value, &sz);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[ENV] %d,%s", rc, value);
-
-		} while (false);
-
-	} while (ec1 == Error_Succeed && i++ <= 0);
-
 	int tmpSec = 0;
 	if (Error_Succeed == pConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "refreshTokenWaitSec", tmpSec) && tmpSec > 0)
 		m_refreshWaitSec = tmpSec;
@@ -1892,15 +1821,6 @@ ErrorCodeEnum CVtmLoaderFSM::SubscribeEntitysEvents()
 	//want to do what?
 
 	auto rc = Error_Succeed;
-	//auto pFunc = GetEntityBase()->GetFunction();
-	//auto rc = pFunc->SubscribeLog(m_SubLogID2, this, Log_Event, Severity_None, Error_IgnoreAll, -1, "Gpio");
-
-	//// 准入成功事件
-	//rc = pFunc->SubscribeLog(m_SubLogID3, this, Log_Event, Severity_None, Error_IgnoreAll, 0x50200001, "AccessAuthorization");
-
-	// 业务首页加载事件
-	//rc = pFunc->SubscribeLog(m_SubLogID3, this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_HEALTH_FIRST_ENTER_MAINPADE, "HealthManager");
-
 	return rc;
 }
 int CVtmLoaderFSM::HttpConnCheck(CSimpleStringA csHttAddr, HttpAddrType eType)
@@ -2861,6 +2781,8 @@ bool CVtmLoaderFSM::CheckConfigInfoInTestRoom()
 #endif
 	if (bNeedCheckOK)
 	{
+		DoSpecialJobInTestRoom();
+		//to check MachineType
 		CSmartPointer<IConfigInfo> spConfigRoot;
 		if (GetEntityBase()->GetFunction()->OpenConfig(Config_Root, spConfigRoot) != Error_Succeed)
 		{
@@ -2872,139 +2794,51 @@ bool CVtmLoaderFSM::CheckConfigInfoInTestRoom()
 			LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型(%s)不对,请检查", m_sysInfo.strMachineType.GetData()));
 			return false;
 		}
-		CSimpleStringA csMachineModel(true);
-		spConfigRoot->ReadConfigValue("terminalinfo", "machineModel", csMachineModel);
-		if (csMachineModel.IsNullOrEmpty())
-		{
-			LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, "机具类型为空,请检查(terminalinfo/machineModel)");
-			return false;
-		}
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_USER)("to check machine model:%s", csMachineModel.GetData());
-		const int maxMachineModel = 32;
-		char* validMachineList[maxMachineModel] = { "E1080","VTM_E1000","E1080-L","BST260L-AQ3","GWI BST260L-AQ1","BS9000","ZSS9000","VTM700-A01","KS218","ZSS9100",
-			"KL286D","ZT2617-A01","MX9200CM","KK1000I(1365张)","KL286","DT-7000I64A","CASH35AG-1227","CASH35AG-JR10(G)","BST260T","KK1000I-2(1092张)",
-			"CASH35AG-3211","KK1000I-3(500张)","VTM-295","GWI BST260L","VTM700-A02","SAC401-D-02","E1090","DT-7000I64A-048","ZT2619","VTM-6200B15G",
-			"VTM700-A03","CASH35AG-1201" };
-		//first, to check if the machine model in the valid machine list
-		int xSn = 0;
-		for (xSn = 0; xSn < maxMachineModel; ++xSn)
-			if (csMachineModel.Compare(validMachineList[xSn], false) == 0)
-			{
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_USER)("match machine model:%s", validMachineList[xSn]);
-				break;
-			}
-		if (xSn >= maxMachineModel)
-		{
-			LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型不存在,请检查:%s", csMachineModel.GetData()));
-			return false;
-		}
-		//second, to check if the key entity config matching the machine model
-		//for RVC.Stand2S/RVC.Stand1SPlus/RVC.CardPrinter to check pinpad
-		//for RVC.CardStore to check IDCertificate
 
-		CSimpleStringA strVendor(true);
-		if (m_sysInfo.strMachineType.Compare("RVC.CardStore") == 0)
-			spConfigRoot->ReadConfigValue("Device.IDCertificate", "Vendor", strVendor);
-		else
-			spConfigRoot->ReadConfigValue("Device.PinPad", "Vendor", strVendor);
-
-		//gwi
-		if (csMachineModel.Compare("BST260L-AQ3") == 0 || csMachineModel.Compare("GWI BST260L-AQ1") == 0
-			|| csMachineModel.Compare("GWI BST260L") == 0 || csMachineModel.Compare("VTM700-A01") == 0
-			|| csMachineModel.Compare("BST260T") == 0 || csMachineModel.Compare("VTM700-A02") == 0 || csMachineModel.Compare("VTM700-A03") == 0
-			)
+		//to check Terminal App Version
+		CSmartPointer<IConfigInfo> spConfigCen;
+		if (GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spConfigCen) == Error_Succeed)
 		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("gwi", true) != 0)
-			{
-				if (m_sysInfo.strMachineType.Compare("RVC.CardStore") != 0)
-					LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,密码键盘模块厂商:%s"
-						, csMachineModel.GetData(), strVendor.GetData()));
-				else
-					LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,身份证模块厂商:%s"
-						, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
-			}
-		}
-		//keba
-		if (csMachineModel.Compare("E1080") == 0 || csMachineModel.Compare("VTM_E1000") == 0
-			|| csMachineModel.Compare("E1080-L") == 0 || csMachineModel.Compare("E1090") == 0
-			)
-		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("keba", true) != 0)
-			{
-				LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,密码键盘模块厂商:%s"
-					, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
-			}
-		}
-		//zt
-		if (csMachineModel.Compare("ZT2617-A01") == 0 || csMachineModel.Compare("ZT2619") == 0)
-		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("szzt", true) != 0)
-			{
-				LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,身份证模块厂商:%s"
-					, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
-			}
-		}
-		//Eastcom
-		if (csMachineModel.Compare("KK1000I(1365张)") == 0 || csMachineModel.Compare("KK1000I-2(1092张)") == 0
-			|| csMachineModel.Compare("KK1000I-3(500张)") == 0)
-		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("Eastcom", true) != 0)
-			{
-				LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,身份证模块厂商:%s"
-					, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
-			}
-		}
-		//cw
-		if (csMachineModel.Compare("CASH35AG-1227") == 0 || csMachineModel.Compare("CASH35AG-JR10(G)") == 0
-			|| csMachineModel.Compare("CASH35AG-3211") == 0 || csMachineModel.Compare("CASH35AG-1201") == 0
-			)
-		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("cw", true) != 0)
-			{
-				if (m_sysInfo.strMachineType.Compare("RVC.CardStore") != 0)
-					LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,密码键盘模块厂商:%s"
-						, csMachineModel.GetData(), strVendor.GetData()));
-				else
-					LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,身份证模块厂商:%s"
-						, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
-			}
-		}
-		//grg
-		if (csMachineModel.Compare("DT-7000I64A") == 0 || csMachineModel.Compare("DT-7000I64A-048") == 0)
-		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("grg", true) != 0)
-			{
-				LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,密码键盘模块厂商:%s"
-					, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
-			}
-		}
-		//Glodpac
-		if (csMachineModel.Compare("SAC401-D-02") == 0)
-		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("Goldpac", true) != 0)
+			CSimpleStringA csWinVerPrefix(""), csUosVerPrefix(""), csStaticVerPrefix("");
+			spConfigCen->ReadConfigValue(GetEntityBase()->GetEntityName(), "WinVerPrefix", csWinVerPrefix);
+			spConfigCen->ReadConfigValue(GetEntityBase()->GetEntityName(), "UosVerPrefix", csUosVerPrefix);
+			csStaticVerPrefix = CSimpleStringA::Format("%d.%d",m_sysInfo.InstallVersion.GetMajor(), m_sysInfo.InstallVersion.GetMinor());
+#if defined(RVC_OS_LINUX)
+			if (csUosVerPrefix.IsNullOrEmpty())
+				return true;
+			else
 			{
-				LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,密码键盘模块厂商:%s"
-					, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
-			}
+				CAutoArray<CSimpleStringA> arrVer = csUosVerPrefix.Split('.');
+				if (arrVer.GetCount() > 1)
+				{
+					int major = atoi(arrVer[0].GetData());
+					int minor = atoi(arrVer[1].GetData());
+					if (m_sysInfo.InstallVersion.GetMajor() > major || (m_sysInfo.InstallVersion.GetMajor() == major && m_sysInfo.InstallVersion.GetMinor() > minor))
+					{
+						DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("current version:%s, csUosVerPrefix:%s", m_sysInfo.InstallVersion.ToString().GetData(), csUosVerPrefix.GetData());
+						return false;
+					}
+				}
 		}
-		//nantian
-		if (csMachineModel.Compare("VTM-6200B15G") == 0)
-		{
-			if (strVendor.IsNullOrEmpty() || strVendor.Compare("nantian", true) != 0)
+#else
+			if (csWinVerPrefix.IsNullOrEmpty())
+				return true;
+			else
 			{
-				LogWarn(Severity_High, Error_Unexpect, VtmLoader_BootInfoPrint, CSimpleStringA::Format("机型和模块配置信息不匹配,机型:%s,密码键盘模块厂商:%s"
-					, csMachineModel.GetData(), strVendor.GetData()));
-				return false;
+				CAutoArray<CSimpleStringA> arrVer = csWinVerPrefix.Split('.');
+				if (arrVer.GetCount() > 1)
+				{
+					int major = atoi(arrVer[0].GetData());
+					int minor = atoi(arrVer[1].GetData());
+					if (m_sysInfo.InstallVersion.GetMajor() > major || (m_sysInfo.InstallVersion.GetMajor() == major && m_sysInfo.InstallVersion.GetMinor() > minor))
+					{
+						DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("current version:%s, csWinVerPrefix:%s", m_sysInfo.InstallVersion.ToString().GetData(), csWinVerPrefix.GetData());
+						return false;
+					}
+				}
 			}
+#endif
 		}
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("check machine model ok");
 	}
 	
 	return true;
@@ -3110,4 +2944,64 @@ bool CVtmLoaderFSM::IfInExcludedLoadList(CSimpleStringA csEntityName)
 			return true;
 	}
 	return false;
+}
+void CVtmLoaderFSM::DoSpecialJobInTestRoom()
+{
+	//special job including the following things:
+	//1.switch to the terminal app version you want
+	//2.delete other version directory you want
+	//3.just do it simple and straightforward
+	CSmartPointer<IConfigInfo> spConfigCen, spRunCfg;
+	if (GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spConfigCen) == Error_Succeed)
+	{
+		CSimpleStringA csHaveSwitchVerTo("");
+		ErrorCodeEnum eErr = GetEntityBase()->GetFunction()->OpenConfig(Config_Run, spRunCfg);
+		if (eErr == Error_Succeed)
+			spRunCfg->ReadConfigValue(GetEntityBase()->GetEntityName(), "HaveSwitchVerTo", csHaveSwitchVerTo);
+
+		CSimpleStringA csSwitchVerTo("");
+		spConfigCen->ReadConfigValue(GetEntityBase()->GetEntityName(), "SwitchVerTo", csSwitchVerTo);
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("SwitchVerTo:[%s], HaveSwitchVerTo:[%s]", csSwitchVerTo.GetData(), csHaveSwitchVerTo.GetData());
+		if (csSwitchVerTo.IsNullOrEmpty() || csSwitchVerTo.Compare(csHaveSwitchVerTo) == 0)
+			return;
+		//更新终端应用版本号文件内容
+		CSimpleStringA csRun(true), csActiveFilePath(true);
+		eErr = GetEntityBase()->GetFunction()->GetPath("Run", csRun);
+		if (eErr != Error_Succeed)
+		{
+			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("get path of Run failed:%s", SpStrError(eErr));
+			return;
+		}
+		csActiveFilePath = csRun + SPLIT_SLASH_STR + "version" + SPLIT_SLASH_STR + "active.txt";
+
+		HANDLE hFile = ::CreateFileA(csActiveFilePath.GetData(), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+		BOOL bSetSucc = FALSE;
+		if (hFile == INVALID_HANDLE_VALUE)
+		{
+			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("open %s failed! err=%u", csActiveFilePath, GetLastError());
+			return;
+		}
+		DWORD dwWrittenLen(0);
+		bSetSucc = WriteFile(hFile, csSwitchVerTo.GetData(), csSwitchVerTo.GetLength(), &dwWrittenLen, NULL);
+		FlushFileBuffers(hFile);
+		SetEndOfFile(hFile);
+		CloseHandle(hFile);
+
+		spRunCfg->WriteConfigValue(GetEntityBase()->GetEntityName(), "HaveSwitchVerTo", csSwitchVerTo.GetData());
+
+
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("write version [%s] succeed", csSwitchVerTo.GetData());
+
+#if defined(RVC_OS_LINUX)
+		if (bSetSucc) {
+			mode_t f_attrib = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH | S_IWOTH;
+			chmod(csActiveFilePath.GetData(), f_attrib);
+		}
+		else {
+			DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("bSetSucc fail");
+		}
+#endif //RVC_OS_LINUX
+		Sleep(10000);
+		GetEntityBase()->GetFunction()->GetPrivilegeFunction()->Reboot(RebootTrigger_ManualLocal, RebootWayEnum::RebootWay_Framework);
+	}
 }

+ 2 - 5
Module/mod_vtmloader/VtmLoaderFSM.h

@@ -174,17 +174,14 @@ private:
 	ErrorCodeEnum SubscribeEntitysEvents();
 	void GetDns(string& dns);
 	void ToCheckIfInstalling();
-	
+	void DoSpecialJobInTestRoom();
 
 private:
 	CSystemStaticInfo m_sysInfo;
-	CSimpleStringA m_strNetworkCheckUrl, m_csErrEntity, m_defaultSystemId, m_terminalNoFromWeb, m_csEntityList;
+	CSimpleStringA m_csErrEntity, m_defaultSystemId, m_terminalNoFromWeb, m_csEntityList;
 	int m_sleepEnterOpMS, m_iCanIgnoreAddrDetect, m_iDetectInterval, m_iNoCheckMachineModel;
 	ULLINT m_ullMaxAddrDetectTime, m_ullNetCardCost, m_ullNetDetectCost, m_ullGetConfigCost, m_ullEntityLoadStart;
 	int m_httpCheckResult[2];
-	//DNS Settings
-	CSimpleStringA m_strDefaultDNS;
-	CSimpleStringA m_strBackupDNS;
 	LoadStage m_eStage;
 	vector<CSimpleStringA> m_vCoreBoot, m_vSafeLoad, m_vOperating;
 	map<CSimpleStringA, EntityLoadInfo> m_coreBootOpt;

+ 1 - 1
Module/mod_vtmloader/mod_vtmloader.cpp

@@ -87,7 +87,7 @@ void CVtmLoaderEntity::OnEntityStateHook(const char* pszEntityName, const char*
 	{
 	case EntityState_Lost:
 	{
-		CSimpleStringA tmpWarnMsg = CSimpleStringA::Format("%s lost. trig entity:%s,lastState:%d", pszEntityName, pszTriggerEntity, eLastState);
+		CSimpleStringA tmpWarnMsg = CSimpleStringA::Format("%s lost. trig entity:%s,lastState:%s", pszEntityName, pszTriggerEntity, SpStrEntityState(eLastState));
 		CEntityStaticInfo esi = { 0 };
 		ErrorCodeEnum ec = GetFunction()->GetEntityStaticInfo(pszEntityName, esi);
 		//0x101 0x21D

+ 6 - 5
Other/liblog4rvcother/log4upload.cpp

@@ -1,5 +1,6 @@
 #include "log4upload.h"
 #include "log4rvcother.h"
+#include "SpDefine.h"
 #include <algorithm>
 #include <string>
 #include <cctype>
@@ -193,8 +194,8 @@ bool upload_helper::initialize(const cmb::log_init_config& cfg)
         pinst_log_producer_config_set_send_thread_count(config, 1);
         pinst_log_producer_config_set_persistent_max_log_count(config, 50 * 1000);
         pinst_log_producer_config_set_skyeye_servname(config, (char*)"Terminal");
-        pinst_log_producer_config_set_skyeye_cmptId(config, (char*)"LR04");
-        pinst_log_producer_config_set_skyeye_cmptname(config, (char*)"FrameworkLib");
+        pinst_log_producer_config_set_skyeye_cmptId(config, (char*)SpDefine::cmptId);
+        pinst_log_producer_config_set_skyeye_cmptname(config, (char*)SpDefine::CmptName);
         pinst_log_producer_config_set_skyeye_version(config, (char*)"1.0");
         pinst_log_producer_config_set_persistent(config, 1);
 
@@ -215,11 +216,11 @@ bool upload_helper::initialize(const cmb::log_init_config& cfg)
 #endif
 
         //新加统一日志配置
-        pinst_log_producer_config_set_united_appname(config, (char*)"LR04");
+        pinst_log_producer_config_set_united_appname(config, (char*)SpDefine::cmptId);
         pinst_log_producer_config_set_united_version(config, (char*)"2.0");
         pinst_log_producer_config_set_united_needArchived(config, 0);
-        pinst_log_producer_config_set_united_deployUnitId(config, (char*)"LR04.02@FrameworkLib_PRD_PRD");
-        pinst_log_producer_config_set_united_serviceUnitId(config, (char*)"LR04.02_FrameworkLib");
+        pinst_log_producer_config_set_united_deployUnitId(config, (char*)SpDefine::deployUnitId);
+        pinst_log_producer_config_set_united_serviceUnitId(config, (char*)SpDefine::serviceUnitId);
 
         _client = pinst_create_log_producer_client(config, NULL, NULL);
         res = (_client != nullptr);