Sfoglia il codice sorgente

!10707 高拍仪JS化
Merge pull request !10707 from 80374374/feature_hsps_js

Gifur 6 mesi fa
parent
commit
398ab848fe

BIN
DevAdapter/simulator/assets/simulator_hsps_01.jpg


BIN
DevAdapter/simulator/assets/simulator_hsps_02.jpg


BIN
DevAdapter/simulator/assets/simulator_hsps_03.jpg


+ 10 - 0
DevAdapter/simulator/hspscanner.1.1/hspscanner_httpans.h

@@ -16,3 +16,13 @@ typedef struct HspsDevStatusAns {
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(isConnected, inPreview, inShow)
 }HspsDevStatusAns;
+
+typedef struct ScanImageAns {
+	int ImageType;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(ImageType)
+}ScanImageAns;
+
+typedef struct DevOpenAns {
+	int timeoutMillsec;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(timeoutMillsec)
+}DevOpenAns;

+ 46 - 14
DevAdapter/simulator/hspscanner.1.1/hspscanner_impl.cpp

@@ -121,10 +121,18 @@ DEVICEBASE_API ErrorCodeEnum  GetDevAdapterVersion(DevSoftVersion& retVesion)
 ErrorCodeEnum HSPSClassImpl::DevOpen()
 {
     ErrorCodeEnum err = Error_Succeed;
-
-    err = SimulatorHttpFunction(EntityName, "DevOpen");
+    DevOpenAns ans;
+    err = SimulatorHttpFunction(EntityName, "DevOpen", ans);
     LOG4VTM(INFO, "DevOpen err = " << err);
-
+    if (err == Error_Succeed) {
+        if (ans.timeoutMillsec > 0) {
+#ifdef _MSC_VER
+            Sleep(ans.timeoutMillsec);
+#else
+            usleep(ans.timeoutMillsec * 1000);
+#endif 
+        }
+    }
     return err;
 }
 
@@ -151,24 +159,48 @@ ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
 ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
 {
     ErrorCodeEnum err = Error_NotImpl;
+    static unsigned long times = 0;
+	ScanImageAns ans;
 
-    err = SimulatorHttpFunction(EntityName, "ScanImage");
+    err = SimulatorHttpFunction(EntityName, "ScanImage", ans);
     LOG4VTM(INFO, "ScanImage err = " << err);
-
     if (err == Error_Succeed)
     {
-        string srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "HspTest.jpg";
-
+		string srcPath("");
+        bool doit(true);
+        if (ans.ImageType == 2) {
+			srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "simulator_hsps_01.jpg";
+        }
+        else if (ans.ImageType == 1) {
+            srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "simulator_hsps_02.jpg";
+        }
+        else if (ans.ImageType == 3) {
+            doit = false;
+        }
+        else {
+            if (times % 3 == 0) {
+				srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "simulator_hsps_01.jpg";
+            }
+            else if (times % 3 == 1) {
+				srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "simulator_hsps_02.jpg";
+			}
+			else if (times % 3 == 2) {
+				srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "simulator_hsps_03.jpg";
+			}
+            times++;
+        }
+        if (doit) {
+			LOG4VTM(INFO, "ScanImage file = " << srcPath);
 #ifdef _WIN32
-        CopyFileA(srcPath.c_str(), pszFileName, TRUE);
+			CopyFileA(srcPath.c_str(), pszFileName, TRUE);
 #else
-        string cmdStr = "cp " + srcPath + " " + pszFileName;
-        char buff[256] = { 0 };
-        sprintf(buff, cmdStr.c_str());
-        system(buff);
+			string cmdStr = "cp " + srcPath + " " + pszFileName;
+			char buff[256] = { 0 };
+			sprintf(buff, cmdStr.c_str());
+			system(buff);
 #endif 
+        }
     }
-
     return err;
 }
 
@@ -182,7 +214,7 @@ ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg, int& nBtLen, const char*
 
     if (err == Error_Succeed)
     {
-        string srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "HspTest.jpg";
+        string srcPath = GetCurrentDirectory() + SPLIT_SLASH_STR + "agent.jpg";
 
 #ifdef _WIN32
         CopyFileA(srcPath.c_str(), pszFileName, TRUE);

+ 1 - 0
Framework/Common/SpFSM.h

@@ -29,6 +29,7 @@ enum FSMEventEnum
 {
 	EVT_INTERNAL, // internal usage
 	EVT_TIMER, // timer evt
+	EVT_MAINPAGE_DISPLAY, //the business main page display
 	EVT_USER, // use defin Event must from here
 };
 

+ 0 - 2
Framework/spbase/SpEntity.cpp

@@ -166,8 +166,6 @@ static void task_callback(threadpool_t *threadpool, void *arg, param_size_t para
 	ITaskSp *pTask = (ITaskSp*)arg;
 	SpEntity *pEntity = (SpEntity*)param1;
 
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("task_callback pTask = %p", pTask);
-
 #ifdef _WIN32
 	SetthreadGroup(GetCurrentThreadId(), pEntity->GetEntityBase()->GetEntityName());
 	try {

+ 2 - 2
Framework/spbase/SpFSM.cpp

@@ -128,7 +128,7 @@ ErrorCodeEnum FSMBase::PostExitEvent()
 
 void FSMBase::PostEventLIFO(FSMEvent *e)
 {
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("post event last in first out: %d", e->iEvt);
+	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("post event last in first out: %d", e->iEvt);
 	try
 	{
 		SpEntity *pEntity = dynamic_cast<SpEntity*>(m_pEntity->m_pEntityFunction);
@@ -142,7 +142,7 @@ void FSMBase::PostEventLIFO(FSMEvent *e)
 
 void FSMBase::PostEventFIFO(FSMEvent *e)
 {
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("post event first in first out: %d", e->iEvt);
+	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("post event first in first out: %d", e->iEvt);
 	try
 	{
 		SpEntity *pEntity = dynamic_cast<SpEntity*>(m_pEntity->m_pEntityFunction);

+ 3 - 1
Framework/spshell/spshell.cpp

@@ -127,6 +127,8 @@ static bool IsSpPathType(const CSimpleStringA& value, const char* key)
         lastIsNum = !(path[i] == '.');
         if (!lastIsNum) dotCnt++;
     }
+	//if (i == path.GetLength() && dotCnt == 3 && lastIsNum) return true; //D:\Run\version\3.7.1.0
+
     if (i >= path.GetLength() || dotCnt != 3 || !lastIsNum)
         return false;
     return true;
@@ -183,7 +185,7 @@ static void ResetEnvPath()
     // append bin sub dir to %PATH%
 	strcat(path, SPLIT_SLASH_STR "bin");
 	strcat(buf, path);
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("nwe path:%s", buf);
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("new path:%s", buf);
 	SetEnvironmentVariableA(name, buf);
 	free(buf);
 	SetEnvironmentVariableA("ModuleName", "SpShell");

+ 2 - 13
Module/include/DevEntityCommBase.hpp

@@ -258,7 +258,6 @@ inline void CDevAdptEntityBase::InitializeVendorLogSwitch()
 		stLogConfig.strLevel = str;
 	}
 
-	bool fromLocal = false;
 	if (stLogConfig.strLevel.Compare("OFF", true) != 0) {
 
 		stLogConfig.strType = "UPLOAD";
@@ -271,18 +270,8 @@ inline void CDevAdptEntityBase::InitializeVendorLogSwitch()
 		GetFunction()->GetPath("Dbg", stLogConfig.strLogPath);
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DbgPath: %s", stLogConfig.strLogPath.GetData());
 		stLogConfig.Settle();
-
-        do {
-            CEntityStaticInfo staticInfo;
-            GetFunction()->GetEntityStaticInfo(GetEntityName(), staticInfo);
-            DWORD dwUsrCode = fromLocal ? 0xFFFEE : 0xFFFEF;
-            dwUsrCode |= (staticInfo.wEntityDevelopID << 20);
-            LogWarn(Severity_Low, Error_Debug, dwUsrCode,
-                    CSimpleStringA::Format("{\"RecordLevel\":\"%s\", \"RecordType\":\"%s\", \"DeterminedBy\":\"%s\"}",
-                                           stLogConfig.strLevel.GetData(),
-                                           stLogConfig.strType.GetData(),
-                                           fromLocal ? "LocalMaintain" : "CenterSettings"));
-        } while (false);
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("{\"RecordLevel\":\"%s\", \"RecordType\":\"%s\"}",
+			stLogConfig.strLevel.GetData(),stLogConfig.strType.GetData());
 	}
 }
 

+ 17 - 11
Module/include/DevFSMCommBase.hpp

@@ -602,7 +602,7 @@ class CCommDevFSM : public FSMImpl<TFSM>
 {
 
 public:
-	CCommDevFSM() :m_FirstStart(TRUE), m_iInWhatPage(PageType_Init),m_bOpened(false), m_bOpening(true), m_eDevState(DEVICE_STATUS_NOT_READY),m_contiErrTimes(0)
+	CCommDevFSM() : m_iInWhatPage(PageType_Init),m_bOpened(false), m_bOpening(true), m_eDevState(DEVICE_STATUS_NOT_READY),m_contiErrTimes(0), m_preUIState('X')
 	{
 
 	}
@@ -849,6 +849,7 @@ public:
 
 	void OnUIState4SetWhatPage(const char* pcszValue) {
 		if (pcszValue != NULL && strlen(pcszValue) > 0) {
+			bool trigger(false);
 			//增加页面位置判断
 			if (_strnicmp(pcszValue, "M", strlen("M")) == 0) {
 				SetInWhatPage(PageType_MainPage);
@@ -859,13 +860,25 @@ public:
 			else {
 				SetInWhatPage(PageType_Other);
 			}
+			
+			if (m_preUIState != pcszValue[0]) {
+				if (pcszValue[0] == 'M') {
+					trigger = true;
+				}
+				m_preUIState = pcszValue[0];
+			}
+
+			if (trigger) {
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("just test EVT_MAINPAGE_DISPLAY");
+				this->PostEventFIFO(new FSMEvent(EVT_MAINPAGE_DISPLAY));
+			}
 		}
 	}
 
 	virtual DevStateEnum GetDevState() const { 
 		return m_eDevState; 
 	}
-	void SetDevState(DevStateEnum val) { 
+	void SetDevState(DevStateEnum val = DEVICE_STATUS_NORMAL) {
 		m_eDevState = val; 
 	}
 
@@ -878,7 +891,6 @@ protected:
 
 	DevAdptLibHelper<TDevClass> m_hDevHelper;
 	DevEntityErrorCode m_entCode;
-	BOOL m_FirstStart;
 	int m_iInWhatPage/*在哪个页面,区分首页,用户桌面,其他页*/;
 
 	ErrorPackageEx m_errPkgEx;
@@ -975,7 +987,7 @@ protected:
 	virtual void OnHardwareShakeHand(CSmartPointer<ITransactionContext> pTransactionContext);
 
 private:
-		std::map<std::string, DWORD> m_WarnCodeMap;
+	char m_preUIState;
 };
 
 template<class TFSM, class TDevClass>
@@ -1005,15 +1017,9 @@ inline ErrorCodeEnum CCommDevFSM<TFSM, TDevClass>::GetAndSplitDevErrInfo(
 		if (devErrInfo.dwErrMsgLen > MAX_DEV_ERROR_MSG_LEN) {
 			wdDevErrCode = (WORD)((devErrInfo.dwErrMsgLen >> 16) & 0x0000FFFF);
 		}
-		if (bDisplayFunName) {
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(lpszFuncNameForDisplay)("Invoke <%s> failed, Dev_GLE: DevErrCode[%d], ErrMsg[%s]",
-				lpszFuncNameForDisplay, wdDevErrCode, (LPCTSTR)csErrMsg);
-		} else {
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Dev_GLE: DevErrCode[%d], ErrMsg[%s]", wdDevErrCode, (LPCTSTR)csErrMsg);
-		}
 	} else {
 		if (bDisplayFunName) {
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetLastErr")("Invoke <%s> failed, and unfortunately Dev_GLE failed returned EC: %s",
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetLastErr")("Invoke <%s> failed, and Dev_GLE failed returned EC: %s",
 				lpszFuncNameForDisplay, SpStrError(erroCode));
 			csErrMsg = CSimpleStringA::Format("Invoke <%s> failed", lpszFuncNameForDisplay);
 		} else {

+ 14 - 7
Module/mod_HSPScanner/HSPSCanner_UserErrorCode.h

@@ -7,11 +7,11 @@
 
 
 #define LOG_ERR_HSPS_DEVOPEN_FAILED 0x21700001
-#define LOG_EVT_HSPS_LIGHT_ON 0x21700002
-#define LOG_EVT_HSPS_LIGHT_OFF 0x21700003
-#define LOG_EVT_HSPS_LOST_CONNECT 0x21700004
-#define LOG_EVT_HSPS_READ_IMAGE_FILE_FAILED 0x21700005
+#define LOG_ERR_HSPS_PREVIEW_FAILED 0x21700003
+#define LOG_EVT_HSPS_CANCEL_PREVIEW_FAILED 0x21700004
+#define LOG_EVT_HSPS_SCANIMAGE_FAILED 0x21700005
 #define LOG_EVT_HSPS_READ_IMAGEEX_FILE_FAILED 0x21700006
+#define HSPScanner_UserErrorCode_SetParam_Position 0x21700007
 #define LOG_EVT_SCANNERSET_HSPSCNT_UPLOAD_VENDORINFO 0x21700102
 #define LOG_EVT_SCANNERSET_HSPSCNT_ROOTINFO 0x21700103
 #define LOG_EVT_HSPSCANNER_SetPreview_Close 0x21700104
@@ -30,11 +30,10 @@
 #define HSPScanner_UserErrorCode_DLLNAME_FAILED						0x2170020A
 #define HSPScanner_UserErrorCode_DLLNAME_NOCFG						0x2170020B
 #define HSPScanner_UserErrorCode_DEVICE_OFFLINE						0x2170020C
-#define HSPScanner_UserErrorCode_IMAGE_CLEAR					0x2170020D
 #define HSPScanner_UserErrorCode_NOT_SUPPORT					0x2170020E
 #define HSPScanner_UserErrorCode_REAL_ROOT_CONFIG	0x2170020F
 
-#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_START						 0x21700210
+#define LOG_DEBUG_HSPS_CRITICAL_OPERATION_START			0x21700210
 #define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGE_START  0x21700211
 #define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGEEX_START  0x21700212
 
@@ -45,8 +44,9 @@
 #define LOG_WARN_HSPS_RESIZE_IMAGEEX_FILE_FAILED				0x21700217 //ex图片缩小失败
 #define LOG_WARN_HSPS_RESIZE_FUNCTION_SUCCEED					0x21700218 //resize函数执行成功
 
-#define LOG_WARN_HSPS_VENDORDLL_CHANGE					0x21700219 //修改加载DLL的名称
 #define LOG_WARN_HSPS_VENDORDLL_KEBA_MATCHED	    0x2170021A //符合切换科堡适配器的告警
+#define LOG_WARN_HSPS_INVALID_OPERATION	    0x2170021B
+#define LOG_WARN_HSPS_OPENING_NOW 0x2170021C
 
 #define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGE_SUCC   0x21700220
 #define LOG_DEBUG_HSPS_CRITICAL_OPERATION_SCANIMAGE_FAILED 0x21700221
@@ -55,4 +55,11 @@
 
 #define HSPScanner_UserErrorCode_FindFile_in_DepBak 0x21700225
 
+#define HSPScanner_UserErrorCode_SetParam_Color 0x21700226
+#define HSPScanner_UserErrorCode_SetParam_Rotate 0x21700227
+#define HSPScanner_UserErrorCode_SetParam_Scan 0x21700228
+#define HSPScanner_UserErrorCode_SetParam_View 0x21700229
+#define HSPScanner_UserErrorCode_SetParam_Hide 0x2170022A
+
+
 #endif

+ 130 - 11
Module/mod_HSPScanner/HSPScanner.xml

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="gb2312" ?>
+<?xml version="1.0" encoding="utf-8" ?>
 <entity name="HSPScanner">
 	<class name="HSPScannerService" overlap="true" exclusive="false">
 		<twoway name="StartPreview" overlap="true">
@@ -15,7 +15,7 @@
 				<param name="reserved4" type="short"/>
 			</req>
 			<res>
-				<!--failed bit: 1, 2, 4, 8 ... 预览成功通过上下文返回,retCode用于各项参数的设置结果-->
+				<!--failed bit: 1, 2, 4, 8 ... 棰勮�鎴愬姛閫氳繃涓婁笅鏂囪繑鍥烇紝retCode鐢ㄤ簬鍚勯」鍙傛暟鐨勮�缃�粨鏋�-->
 				<param name="retCode" type="int" />
 				<param name="reserved1" type="int" />
 				<param name="reserved2" type="array_int" />
@@ -29,7 +29,7 @@
 			<res>
 			</res>
 		</twoway>
-    <!--接口名称和功能:请求拍照。拍照成功后会调用硬件适配器隐藏窗口-->
+    <!--鎺ュ彛鍚嶇О鍜屽姛鑳斤細璇锋眰鎷嶇収銆傛媿鐓ф垚鍔熷悗浼氳皟鐢ㄧ‖浠堕€傞厤鍣ㄩ殣钘忕獥鍙�-->
 		<twoway name="ScanImage" overlap="true">
 			<req>
 				<param name="reserved1" type="int"/>
@@ -68,7 +68,7 @@
 				<param name="reserved4" type="short"/>
 			</req>
 			<res>
-				<!--failed bit: 1, 2, 4, 8 ... 预览成功通过上下文返回,retCode用于各项参数的设置结果-->
+				<!--failed bit: 1, 2, 4, 8 ... 棰勮�鎴愬姛閫氳繃涓婁笅鏂囪繑鍥烇紝retCode鐢ㄤ簬鍚勯」鍙傛暟鐨勮�缃�粨鏋�-->
 				<param name="retCode" type="int" />
 				<param name="reserved1" type="int" />
 				<param name="reserved2" type="array_int" />
@@ -78,7 +78,7 @@
 			<req>
 				<!--0:hide 1:show 2:custom -->
 				<param name="type" type="int"/>
-				<!--默认比例16:9 reserved4保留使用,注意在 type = 2 时以下值有效-->
+				<!--榛樿�姣斾緥16:9 reserved4淇濈暀浣跨敤锛屾敞鎰忓湪 type = 2 鏃朵互涓嬪€兼湁鏁�-->
 				<param name="pointX" type="int"/>
 				<param name="pointY" type="int"/>
 				<param name="nWidth" type="int"/>
@@ -88,7 +88,7 @@
 			</res>
 		</twoway>
 		<twoway name="ShowProperty" overlap="true">
-      <!--直接调用厂商硬件适配器接口-->
+      <!--鐩存帴璋冪敤鍘傚晢纭�欢閫傞厤鍣ㄦ帴鍙�-->
 			<req>
 			</req>
 			<res>
@@ -105,18 +105,137 @@
 				<param name="reserved2" type="array_string"/>	
 			</res>
 		</twoway>
-		<twoway name="GetDevInfo" overlap="true" method_id="65535">
+    <!-- 鑾峰彇璁惧�妯″潡淇℃伅锛屾垚鍔熸椂errorCode涓篍rror_Succeed(0)锛屽強鐩稿叧鏁版嵁 -->
+    <!-- 1銆佽�澶囨湭鎵撳紑锛宔rrorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N01 -->
+    <!-- 2銆佺‖浠舵湭閰嶇疆锛宔rrorCode涓篍rror_NotConfig,rtaCode涓篟TA2N0J -->
+    <!-- 3銆佺‖浠舵帀绾匡紝errorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N0K -->
+    <twoway name="GetDevInfo" overlap="true" jsflag="true" method_id="65535">
 			<req>
 			</req>
 			<res>
-				<param name="type" type="string" />
+        <!--璁惧�閫傞厤鍣―evCategoryInfo鐨剆zType-->
+        <param name="type" type="string" />
+        <!--璁惧�閫傞厤鍣―evCategoryInfo鐨剆zModel-->
 				<param name="model" type="string" />
-				<param name="version" type="string" />
-				<param name="state" type="int" />
+        <!--璁惧�閫傞厤鍣―evCategoryInfo鐨剉ersion-->
+        <param name="version" type="string" />
+        <!--纭�欢瀹炰綋鍐呯疆鐨勭姸鎬侊紝鐩�墠鏆傛棤浣跨敤鍦烘櫙锛屾湁闇€瑕佸湪璁ㄨ�濡備綍瀹氫箟-->
+        <param name="state" type="int" />
 			</res>
 		</twoway>
 		<oneway name="Exit" overlap="true">			
-		</oneway>							
+		</oneway>
+    <!-- 棰勮�锛屾垚鍔熸椂杩斿洖Error_Succeed锛屽強鐩稿叧鏁版嵁 -->
+    <!-- 1銆佽�澶囨湭鎵撳紑锛宔rrorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N01 -->
+    <!-- 2銆佺‖浠舵湭閰嶇疆锛宔rrorCode涓篍rror_NotConfig,rtaCode涓篟TA2N0J -->
+    <!-- 3銆佺‖浠舵帀绾匡紝errorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N0K -->
+    <!-- 4銆佽皟鐢ㄧ‖浠�-棰勮�澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N03 -->
+    <!-- 5銆佽皟鐢ㄧ‖浠�-璁剧疆瑙掑害澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0Y -->
+    <!-- 6銆佽皟鐢ㄧ‖浠�-璁剧疆鐢诲箙澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0Z -->
+    <!-- 7銆佽皟鐢ㄧ‖浠�-璁剧疆鑹插僵澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0W -->
+    <!-- 8銆佽皟鐢ㄧ‖浠�-璁剧疆鍧愭爣澶у皬澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N07 -->
+    <!-- 9銆佽皟鐢ㄧ‖浠�-鏄剧ず棰勮�绐楀彛澶辫触锛堥�瑙�&闅愯棌鐨勭姸鎬侊級锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0R -->
+    <!-- 璇存槑琛ュ厖锛�
+     * 濡傞渶璁剧疆鍙傛暟锛屽皢鍦ㄩ�瑙堝墠璁剧疆锛岃�缃�弬鏁板け璐ュ垯鎻愬墠杩斿洖锛屾棤璁哄綋鏃舵槸鍚﹀凡缁忓�浜庨�瑙堢姸鎬�
+     * 澶勪簬棰勮�浣嗛殣钘忥紙鍏充簬闅愯棌锛岃�涓嬫柟瀵瑰彇娑堥�瑙堢殑璇存槑锛夌姸鎬侊紝鍒欎細鐩存帴鏄剧ず绐楀彛锛屽�鏋滃叾浠栧弬鏁版湁鍊硷紝浠嶇劧浼樺厛璁剧疆鍙傛暟锛堝け璐ュ垯鎻愬墠杩斿洖锛夛紝鍐嶆樉绀虹獥鍙�
+    -->
+    <twoway name="StartPreviewJS" jsflag="true" overlap="true">
+      <req>
+        <!--0锛氳烦杩囪�搴﹁�缃�紝涓嶇敓鏁堬紱1锛氫笉鏃嬭浆瑙掑害锛�2锛氶『鏃堕拡鏃嬭浆90锛�3锛氶『鏃堕拡鏃嬭浆180锛�4锛氶『鏃堕拡鏃嬭浆270-->
+        <param name="rotate" type="short" />
+        <!--0锛氳烦杩囩敾骞呰�缃�紝涓嶇敓鏁堬紱1锛氬叏鐢诲箙锛�2锛欰4鐢诲箙锛�3锛氳韩浠借瘉澶у皬鐢诲箙-->
+        <param name="scan" type="short"/>
+        <!--0锛氳烦杩囪壊褰╄�缃�紝涓嶇敓鏁堬紱1锛氬僵鑹诧紱2锛氶粦鐧�-->
+        <param name="color" type="short" />
+        <!--0锛氳烦杩囧潗鏍�&澶у皬璁剧疆锛屼笉鐢熸晥锛�1锛氳�缃��瑙堢獥鍙e潗鏍囷紝鍙�湁姝ゅ€间负1鏃舵墠浼氳�鍙杙os_x|y|w-->
+        <param name="pos" type="short"/>
+        <!--璁剧疆棰勮�绐楀彛鍧愭爣鐨刋杞村潗鏍囷紝褰損os涓嶄负0鏃惰�鍊兼墠鏈夋晥-->
+        <param name="pos_x" type="short"/>
+        <!--璁剧疆棰勮�绐楀彛鍧愭爣鐨刌杞村潗鏍囷紝褰損os涓嶄负0鏃惰�鍊兼墠鏈夋晥-->
+        <param name="pos_y" type="short"/>
+        <!--璁剧疆棰勮�绐楀彛鐨勭獥鍙e�搴︼紝褰損os涓嶄负0鏃惰�鍊兼墠鏈夋晥-->
+        <param name="pos_w" type="short"/>
+        <param name="reserved1" type="int"/>
+      </req>
+      <res>
+      </res>
+    </twoway>
+    <!-- 鍙栨秷棰勮�锛屾垚鍔熸椂杩斿洖Error_Succeed(0)锛屽強鐩稿叧鏁版嵁 -->
+    <!-- 1銆佽�澶囨湭鎵撳紑锛宔rrorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N01 -->
+    <!-- 2銆佺‖浠舵湭閰嶇疆锛宔rrorCode涓篍rror_NotConfig,rtaCode涓篟TA2N0J -->
+    <!-- 3銆佺‖浠舵帀绾匡紝errorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N0K -->
+    <!-- 4銆佽皟鐢ㄧ‖浠�-鍙栨秷棰勮�澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N04 -->
+    <!-- 5銆佽皟鐢ㄧ‖浠�-闅愯棌棰勮�绐楀彛澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0Q -->
+    <!-- 璇存槑琛ュ厖锛�
+     * 褰撹�姹備粎涓洪殣钘忛�瑙堢獥鍙f椂锛�1锛夐�瑙�&闅愯棌鐘舵€佹椂鐩存帴杩斿洖鎴愬姛锛�2锛夐�瑙�&闈為殣钘忔椂璋冪敤闅愯棌锛�3锛夐潪棰勮�鏃惰繑鍥炴棤鏁堟搷浣滐紝errorCode涓篍rror_InvalidState锛宺taCode涓篟TA2N0V
+     * 褰撶洿鎺ュ叧闂��瑙堟椂锛�1锛夐潪棰勮�鏃剁洿鎺ヨ繑鍥炴垚鍔燂紱2锛夐�瑙�&闅愯棌鐘舵€佹椂璋冪敤纭�欢鍙栨秷棰勮�
+    -->
+    <twoway name="CancelPreviewJS" jsflag="true" overlap="true">
+      <req>
+        <!--鏄�惁浠呬负闅愯棌棰勮�绐楀彛锛屽�鏋滀负false锛岃〃绀鸿皟鐢ㄧ‖浠跺叧闂�憚鍍忓ご锛宼rue琛ㄧず浠呬负闅愯棌棰勮�绐楀彛涓嶅叧闂�憚鍍忓ご锛岄粯璁ゆ槸鍏抽棴鎽勫儚澶�-->
+        <param name="hide" type="bool"/>
+      </req>
+      <res>
+      </res>
+    </twoway>
+    <!--鎷嶇収锛屾垚鍔熸椂杩斿洖Error_Succeed(0)锛屽強鐩稿叧鏁版嵁-->
+    <!-- 1銆佽�澶囨湭鎵撳紑锛宔rrorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N01 -->
+    <!-- 2銆佺‖浠舵湭閰嶇疆锛宔rrorCode涓篍rror_NotConfig,rtaCode涓篟TA2N0J -->
+    <!-- 3銆佺‖浠舵帀绾匡紝errorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N0K -->
+    <!-- 4銆侀潪棰勮�鐘舵€佹棤娉曟媿鐓э紝errorCode涓篍rror_InvalidState,rtaCode涓篟TA2N0V -->
+    <!-- 5銆佽皟鐢ㄧ‖浠�-鎷嶇収澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N05 -->
+    <!-- 6銆佽皟鐢ㄧ‖浠�-闅愯棌棰勮�绐楀彛澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0Q -->
+    <!-- 7銆佹媿鐓ф垚鍔熷悗锛屽帇缂╃収鐗囧け璐ワ紝errorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0N -->
+    <!-- 璇存槑琛ュ厖锛�
+     * 褰撻渶瑕侀殣钘忔椂锛屽墠鎻愭槸銆愭媿鐓ф垚鍔熴€戞墠浼氳皟鐢ㄩ殣钘忛�瑙堢獥鍙o紝濡傛灉闅愯棌绐楀彛澶辫触锛屼竴鏍锋墧瀹氫负鎷嶇収涓嶆垚鍔�
+     * 鍙��澶勪簬棰勮�鐘舵€佷腑锛屽氨璁や负鍙�繘琛屾媿鐓э紝涓嶅尯鍒嗘槸鍚﹂殣钘忛�瑙堢獥鍙�
+     * 璋冪敤鎷嶇収鎴愬姛锛屼絾鏄�‖浠舵病鏈夎繑鍥炲浘鐗囨暟鎹�紝浠嶈�涓烘垚鍔熴€傚彧鏈夐渶瑕佸帇缂╂椂锛堝簲鐢ㄤ粙鍏ワ級锛屼細鍥犱负鍘嬬缉鍥剧墖澶辫触鑰屾姤閿欒繑鍥�
+    -->
+    <twoway name="ScanImageJS" jsflag="true" overlap="true">
+      <req>
+        <!--鎷嶇収鍚庢槸鍚﹁嚜鍔ㄩ殣钘忛�瑙堢獥鍙o紝濡傛灉涓篺alse锛岃〃绀轰粎涓烘媿鐓т笉鍋氬叾浠栨搷浣滐紝true琛ㄧず鎷嶇収鍚庤嚜鍔ㄩ殣钘忛�瑙堢獥鍙o紝搴曞眰榛樿�鏄�媿鐓у悗鑷�姩闅愯棌棰勮�绐楀彛-->
+        <param name="hide" type="bool"/>
+        <!-- 鏄�惁鍘嬬缉鍥剧墖鍜屽帇缂╃殑闃堝€硷紝鍗曚綅KB锛屼负0琛ㄧず涓嶅帇缂╋紝涓氬姟鐩�墠瀹氱殑鏄�500KB -->
+        <param name="compress" type="int" />
+        <param name="reserved1" type="int" />
+      </req>
+      <res>
+        <!--杩斿洖鐓х墖鐨勬暟鎹�祦-->
+        <param name="imageData" type="blob"/>
+      </res>
+    </twoway>
+    <!-- 璁剧疆鍙傛暟锛屾垚鍔熸椂杩斿洖Error_Succeed(0)锛屽強鐩稿叧鏁版嵁 -->
+    <!-- 1銆佽�澶囨湭鎵撳紑锛宔rrorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N01 -->
+    <!-- 2銆佺‖浠舵湭閰嶇疆锛宔rrorCode涓篍rror_NotConfig,rtaCode涓篟TA2N0J -->
+    <!-- 3銆佺‖浠舵帀绾匡紝errorCode涓篍rror_DevNotAvailable,rtaCode涓篟TA2N0K -->
+    <!-- 4銆佽皟鐢ㄧ‖浠�-璁剧疆瑙掑害澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0Y -->
+    <!-- 5銆佽皟鐢ㄧ‖浠�-璁剧疆鐢诲箙澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0Z -->
+    <!-- 6銆佽皟鐢ㄧ‖浠�-璁剧疆鑹插僵澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N0W -->
+    <!-- 7銆佽皟鐢ㄧ‖浠�-璁剧疆鍧愭爣澶у皬澶辫触锛宔rrorCode涓篍rror_Unexpect,rtaCode涓篟TA2N07 -->
+    <!-- 璇存槑琛ュ厖锛�
+     * 闄や互涓婄�1-3绉嶆儏鍐碉紝鍦ㄥ叾浠栦换浣曠姸鎬佷腑閮芥敮鎸佽�缃�弬鏁帮紝鎴愬姛涓庡惁鐢辫皟鐢ㄧ‖浠剁粨鏋滃喅瀹�
+    -->
+    <twoway name="SetParamJS" jsflag="true" overlap="true">
+      <req>
+        <!--0锛氳烦杩囪�缃�紝涓嶇敓鏁堬紱1锛氫笉鏃嬭浆瑙掑害锛�2锛氶『鏃堕拡鏃嬭浆90锛�3锛氶『鏃堕拡鏃嬭浆180锛�4锛氶『鏃堕拡鏃嬭浆270-->
+        <param name="rotate" type="short" />
+        <!--0锛氳烦杩囪�缃�紝涓嶇敓鏁堬紱1锛氬叏鐢诲箙锛�2锛欰4鐢诲箙锛�3锛氳韩浠借瘉澶у皬鐢诲箙-->
+        <param name="scan" type="short"/>
+        <!--0锛氳烦杩囪�缃�紝涓嶇敓鏁堬紱1锛氬僵鑹诧紱2锛氶粦鐧�-->
+        <param name="color" type="short" />
+        <!--0锛氳烦杩囪�缃�紝涓嶇敓鏁堬紱1锛氳�缃��瑙堢獥鍙e潗鏍囷紝鍙�湁姝ゅ€间负1鏃舵墠浼氳�鍙杙os_x|y|w-->
+        <param name="pos" type="short"/>
+        <!--璁剧疆棰勮�绐楀彛鍧愭爣鐨刋杞村潗鏍囷紝褰損os涓嶄负0鏃惰�鍊兼墠鏈夋晥-->
+        <param name="pos_x" type="short"/>
+        <!--璁剧疆棰勮�绐楀彛鍧愭爣鐨刌杞村潗鏍囷紝褰損os涓嶄负0鏃惰�鍊兼墠鏈夋晥-->
+        <param name="pos_y" type="short"/>
+        <!--璁剧疆棰勮�绐楀彛鐨勭獥鍙e�搴︼紝褰損os涓嶄负0鏃惰�鍊兼墠鏈夋晥-->
+        <param name="pos_w" type="short"/>
+        <param name="reserved1" type="int"/>
+      </req>
+      <res>
+      </res>
+    </twoway>
 	</class>
 		<message name="StatusMsg">
 			<param name="status" type="int"/>

File diff suppressed because it is too large
+ 401 - 344
Module/mod_HSPScanner/HSPScannerFSM.cpp


+ 563 - 283
Module/mod_HSPScanner/HSPScannerFSM.h

@@ -21,23 +21,23 @@ using namespace HSPScanner;
 #define ISSUCCEEDED(hr) ((hr) == Error_Succeed)
 #define FAILURED(hr) (!(ISSUCCEEDED(hr)))
 
-#define SAFE_FREE_LIBRARY(hModule)	\
-	do {							\
-	if(hModule){					\
-	FreeLibrary(hModule);		\
-	hModule = NULL;				\
-	}							\
-	}while(0)
-
-
-
-
 enum EvtType
 {
 	USER_EVT_STARTPREVIEW = (EVT_USER + 1),
 	USER_EVT_STARTPREVIEW_FINISHED,
 	USER_EVT_SETPROPERTYINVIEW_FINISHED,
 
+	USER_EVT_STARTPREVIEW_JS,
+	USER_EVT_STARTPREVIEW_JS_DONE,
+
+	USER_EVT_CANCELPREVIEW_JS,
+	USER_EVT_CANCELPREVIEW_JS_DONE,
+
+	USER_EVT_SCANIMAGE_JS,
+	USER_EVT_SCANIMAGE_JS_DONE,
+
+	USER_EVT_SETPARAM_JS,
+
 	USER_EVT_STOPPREVIEW,
 	USER_EVT_HIDEPREVIEW,
 	USER_EVT_STOPPREVIEW_FINISHED,
@@ -64,165 +64,41 @@ enum EvtType
 	USER_EVT_EXIT,
 	USER_EVT_EXIT_FINISHED,
 
-	USER_EVT_NOCFG,
 	USER_EVT_GOTOHELL,
-	USER_EVT_OPENSUCC,
-
-	USER_EVT_QUIT
+	USER_EVT_QUIT,
+	USER_EVT_INIT,
+	USER_EVT_INIT_FINISHED
 };
 
-class StartPreviewEvent : public FSMEvent
+namespace JS
 {
-public:
-	StartPreviewEvent() : FSMEvent(USER_EVT_STARTPREVIEW){}
-	~StartPreviewEvent(){}
-	SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
+	struct PreviewSettings
 	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreview).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
+		short rotate;
+		short scan;
+		short color;
+		short pos;
+		short pos_x;
+		short pos_y;
+		short pos_w;
 
-class StopPreviewEvent : public FSMEvent
-{
-public:
-	StopPreviewEvent() : FSMEvent(USER_EVT_STOPPREVIEW){}
-	~StopPreviewEvent(){}
-	SpReqAnsContext<HSPScannerService_CancelPreview_Req,
-		HSPScannerService_CancelPreview_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreview).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
+		//0:do nothing,1:show, 2:hide
+		short view;
 
-class ScanImageEvent : public FSMEvent
-{
-public:
-	ScanImageEvent() : FSMEvent(USER_EVT_SCANIMAGE){}
-	~ScanImageEvent(){}
-	SpReqAnsContext<HSPScannerService_ScanImage_Req, 
-		HSPScannerService_ScanImage_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImage).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
+		PreviewSettings(const HSPScannerService_SetParamJS_Req& rhs) :rotate(rhs.rotate), scan(rhs.scan), color(rhs.color), pos(rhs.pos)
+			, pos_x(rhs.pos_x), pos_y(rhs.pos_y), pos_w(rhs.pos_w),view(0) {}
 
-class ScanImageExEvent : public FSMEvent
-{
-public:
-	ScanImageExEvent() : FSMEvent(USER_EVT_SCANIMAGE_EX){}
-	~ScanImageExEvent(){}
-	SpReqAnsContext<HSPScannerService_ScanImageEx_Req, 
-		HSPScannerService_ScanImageEx_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageEx).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
+		PreviewSettings(const HSPScannerService_StartPreviewJS_Req& rhs) :rotate(rhs.rotate), scan(rhs.scan), color(rhs.color), pos(rhs.pos)
+			, pos_x(rhs.pos_x), pos_y(rhs.pos_y), pos_w(rhs.pos_w),view(0) {}
 
-class ShowPropertyEvent : public FSMEvent
-{
-public:
-	ShowPropertyEvent() : FSMEvent(USER_EVT_SHOWPROPERTY){}
-	~ShowPropertyEvent(){}
-	SpReqAnsContext<HSPScannerService_ShowProperty_Req, 
-		HSPScannerService_ShowProperty_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ShowProperty).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
+		PreviewSettings(bool show) :rotate(0), scan(0), color(0), pos(0), pos_x(0), pos_y(0), pos_w(0), view(show ? 1 : 2) {}
 
-class SetPropertyEvent : public FSMEvent
-{
-public:
-	SetPropertyEvent() : FSMEvent(USER_EVT_SETPROPERTY){}
-	~SetPropertyEvent(){}
-	SpReqAnsContext<HSPScannerService_SetProperty_Req, 
-		HSPScannerService_SetProperty_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetProperty).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
+		bool IsAvailable() const {
+			return (rotate != 0 || scan != 0 || color != 0 || pos != 0);
 		}
-	}
-};
-
-class SetWinPosEvent : public FSMEvent
-{
-public:
-	SetWinPosEvent() : FSMEvent(USER_EVT_SETWINPOS){}
-	~SetWinPosEvent(){}
-	SpReqAnsContext<HSPScannerService_SetWinPos_Req, 
-		HSPScannerService_SetWinPos_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetWinPos).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
-
-class GetDevStatusEvent : public FSMEvent
-{
-public:
-	GetDevStatusEvent() : FSMEvent(USER_EVT_GETSTATUS){}
-	~GetDevStatusEvent(){}
-	SpReqAnsContext<HSPScannerService_GetDevStatus_Req, 
-		HSPScannerService_GetDevStatus_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevStatus).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
-
-class GetDevInfoEvent : public FSMEvent
-{
-public:
-	GetDevInfoEvent() : FSMEvent(USER_EVT_GETINFO){}
-	~GetDevInfoEvent(){}
-	SpReqAnsContext<HSPScannerService_GetDevInfo_Req, 
-		HSPScannerService_GetDevInfo_Ans>::Pointer m_ctx;
-	virtual void OnUnhandled()
-	{
-		if(m_ctx != NULL)
-		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevInfo).setResultCode("RTA2N0V")("Error_InvalidState");
-			m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
-		}
-	}
-};
-
+		void SetDisplay(bool display) { if (display) view = 1; else view = 2; }
+	};
+}
 
 class CHSPScannerFSM : public CCommDevFSM<CHSPScannerFSM, CHSPSClass>, public IFSMStateHooker
 {
@@ -235,141 +111,181 @@ public:
 
 	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
 
-	enum {s0, s1, s2, s3, s4, s5, s6, s7, s8};
+	enum {
+		sIdle, sPreview, sProperty, sFault, sPicture, sFault_Offline, sHidePreview, sExit, sInit
+	};
 
 	BEGIN_FSM_STATE(CHSPScannerFSM)
-		FSM_STATE_ENTRY(s0, "Idle", s0_on_entry, s0_on_exit, s0_on_event)
-		FSM_STATE_ENTRY(s1, "Previewing", s1_on_entry, s1_on_exit, s1_on_event)
-		FSM_STATE_ENTRY(s2, "Property", s2_on_entry, s2_on_exit, s2_on_event)
-		FSM_STATE_ENTRY(s3, "Failed", s3_on_entry, s3_on_exit, s3_on_event)
-		FSM_STATE_ENTRY(s4, "Picturing", s4_on_entry, s4_on_exit, s4_on_event)
-		FSM_STATE_ENTRY(s5, "DeviceOff", s5_on_entry, s5_on_exit, s5_on_event)
-		FSM_STATE_ENTRY(s6, "HidPreviewing", s6_on_entry, s6_on_exit, s6_on_event)
-		FSM_STATE_ENTRY(s7, "Exit", s7_on_entry, s7_on_exit, s7_on_event)
-		FSM_STATE_ENTRY(s8, "Idiot", s8_on_entry, s8_on_exit, s8_on_event)
+		FSM_STATE_ENTRY(sIdle, "Idle", s0_Idle_on_entry, s0_Idle_on_exit, s0_Idle_on_event)
+		FSM_STATE_ENTRY(sPreview, "Previewing", s1_Preview_on_entry, s1_Preview_on_exit, s1_Preview_on_event)
+		FSM_STATE_ENTRY(sProperty, "Property", s2_on_entry, s2_on_exit, s2_on_event)
+		FSM_STATE_ENTRY(sFault, "Failed", s3_Failed_on_entry, s3_Failed_on_exit, s3_Failed_on_event)
+		FSM_STATE_ENTRY(sPicture, "Picturing", s4_ScanImage_on_entry, s4_ScanImage_on_exit, s4_ScanImage_on_event)
+		FSM_STATE_ENTRY(sFault_Offline, "DeviceOff", s5_DeviceOff_on_entry, s5_DeviceOff_on_exit, s5_DeviceOff_on_event)
+		FSM_STATE_ENTRY(sHidePreview, "HidePreview", s6_HidePreview_on_entry, s6_HidePreview_on_exit, s6_HidePreview_on_event)
+		FSM_STATE_ENTRY(sExit, "Exit", s7_Exit_on_entry, s7_Exit_on_exit, s7_Exit_on_event)
+		FSM_STATE_ENTRY(sInit, "Init", s8_Init_on_entry, s8_Init_on_exit, s8_Init_on_event)
 	END_FSM_STATE()
 
 	
-	BEGIN_FSM_RULE(CHSPScannerFSM, s0)
-		//2 reserved in s0 state.
-		FSM_RULE_ENTRY(s0, s1, USER_EVT_STARTPREVIEW_FINISHED, 0)
-		FSM_RULE_ENTRY(s0, s3, USER_EVT_STARTPREVIEW_FINISHED, 1)
-		FSM_RULE_ENTRY(s0, s0, USER_EVT_STARTPREVIEW_FINISHED, 2)
+	BEGIN_FSM_RULE(CHSPScannerFSM, sIdle)
+		//2 reserved in sIdle state.
+		FSM_RULE_ENTRY(sIdle, sPreview, USER_EVT_STARTPREVIEW_FINISHED, 0) //成功预览
+		FSM_RULE_ENTRY(sIdle, sFault, USER_EVT_STARTPREVIEW_FINISHED, 1) //预览失败
+		FSM_RULE_ENTRY(sIdle, sIdle, USER_EVT_STARTPREVIEW_FINISHED, 2) // 错误还不足够严重,停留在当前状态
 
-		FSM_RULE_ENTRY(s3, s1, USER_EVT_STARTPREVIEW_FINISHED, 0)
-		FSM_RULE_ENTRY(s3, s0, USER_EVT_RESET, 0)
-		FSM_RULE_ENTRY(s3, s3, USER_EVT_RESET, 1)
-		FSM_RULE_ENTRY(s3, s1, USER_EVT_RESET, 2)
-		FSM_RULE_ENTRY_ANY(s3, s0, USER_EVT_OPENSUCC)
+		FSM_RULE_ENTRY(sFault, sPreview, USER_EVT_STARTPREVIEW_FINISHED, 0)
+		FSM_RULE_ENTRY(sFault, sIdle, USER_EVT_RESET, 0)
+		//FSM_RULE_ENTRY(sFault, sFault, USER_EVT_RESET, 1)
+		FSM_RULE_ENTRY(sFault, sPreview, USER_EVT_RESET, 2)
 
-		FSM_RULE_ENTRY(s1, s2, USER_EVT_SHOWPROPERTY, 0)
-		FSM_RULE_ENTRY_ANY(s2, s1, USER_EVT_SHOWPROPERTY_FINISHED)
+		FSM_RULE_ENTRY(sPreview, sProperty, USER_EVT_SHOWPROPERTY, 0)
+		FSM_RULE_ENTRY_ANY(sProperty, sPreview, USER_EVT_SHOWPROPERTY_FINISHED)
 
-		//3 reserved in s1 state.
-		FSM_RULE_ENTRY(s1, s3, USER_EVT_STOPPREVIEW_FINISHED, 0)
-		FSM_RULE_ENTRY(s1, s3, USER_EVT_STOPPREVIEW_FINISHED, 4)
+		//3 reserved in sPreview state.
+		FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_STOPPREVIEW_FINISHED, 0)
+		FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_STOPPREVIEW_FINISHED, 4)
 
-		// Try s6 state --Josephus at 10:10:05 2016/11/22
-		//FSM_RULE_ENTRY(s1, s0, USER_EVT_STOPPREVIEW_FINISHED, 1) //隐藏
-		FSM_RULE_ENTRY(s1, s6, USER_EVT_STOPPREVIEW_FINISHED, 1)
+		// Try sHidePreview state --Josephus at 10:10:05 2016/11/22
+		//FSM_RULE_ENTRY(sPreview, sIdle, USER_EVT_STOPPREVIEW_FINISHED, 1) //隐藏
+		FSM_RULE_ENTRY(sPreview, sHidePreview, USER_EVT_STOPPREVIEW_FINISHED, 1)
 
-		FSM_RULE_ENTRY(s1, s0, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
-		FSM_RULE_ENTRY(s1, s1, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重
+		FSM_RULE_ENTRY(sPreview, sIdle, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
+		FSM_RULE_ENTRY(sPreview, sPreview, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重,停留在当前状态
 
-		FSM_RULE_ENTRY(s1, s4, USER_EVT_SCANIMAGE, 0)
-		FSM_RULE_ENTRY(s1, s4, USER_EVT_SCANIMAGE_EX, 0)
+		FSM_RULE_ENTRY(sPreview, sPicture, USER_EVT_SCANIMAGE, 0)
+		FSM_RULE_ENTRY(sPreview, sPicture, USER_EVT_SCANIMAGE_EX, 0)
 
-		//5 reserved in s4 state.
-		FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 1) //删除旧照片获取照片名称失败
-		FSM_RULE_ENTRY(s4, s3, USER_EVT_SCANIMAGEFINISHED, 2) //拍摄返回失败
-		FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 3) //EX 分配资源失败
-		FSM_RULE_ENTRY(s4, s3, USER_EVT_SCANIMAGEFINISHED, 4) //打开照片文件失败
+		//5 reserved in sPicture state.
+		FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 1) //删除旧照片获取照片名称失败
+		FSM_RULE_ENTRY(sPicture, sFault, USER_EVT_SCANIMAGEFINISHED, 2) //拍摄返回失败
+		FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 3) //EX 分配资源失败
+		FSM_RULE_ENTRY(sPicture, sFault, USER_EVT_SCANIMAGEFINISHED, 4) //打开照片文件失败
 
 		
-		FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 0) //成功拍摄
-		// Try s6 state. --Josephus at 11:13:02 2016/11/22
-		FSM_RULE_ENTRY(s4, s6, USER_EVT_SCANIMAGEFINISHED, 6) //成功拍摄且做了隐藏操作
+		FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 0) //成功拍摄
+		// Try sHidePreview state. --Josephus at 11:13:02 2016/11/22
+		FSM_RULE_ENTRY(sPicture, sHidePreview, USER_EVT_SCANIMAGEFINISHED, 6) //成功拍摄且做了隐藏操作
 
-		FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 5)
+		FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 5)
 
-		FSM_RULE_ENTRY_ANY(s3, s5, USER_EVT_DISCONNECT)
-		FSM_RULE_ENTRY(s5, s0, EVT_TIMER, 1)
-		FSM_RULE_ENTRY(s5, s1, EVT_TIMER, 2)
+		FSM_RULE_ENTRY_ANY(sFault, sFault_Offline, USER_EVT_DISCONNECT)
+		FSM_RULE_ENTRY(sFault_Offline, sIdle, EVT_TIMER, 1)
+		FSM_RULE_ENTRY(sFault_Offline, sPreview, EVT_TIMER, 2)
+		FSM_RULE_ENTRY(sFault_Offline, sHidePreview, EVT_TIMER, 3)
 
-		FSM_RULE_ENTRY(s0, s5, USER_EVT_DISCONNECT, 0)
-		FSM_RULE_ENTRY(s1, s5, USER_EVT_DISCONNECT, 0)
-		FSM_RULE_ENTRY(s4, s5, USER_EVT_DISCONNECT, 0)
-		FSM_RULE_ENTRY(s6, s5, USER_EVT_DISCONNECT, 0)
+		FSM_RULE_ENTRY(sIdle, sFault_Offline, USER_EVT_DISCONNECT, 0)
+		FSM_RULE_ENTRY(sPreview, sFault_Offline, USER_EVT_DISCONNECT, 0)
+		FSM_RULE_ENTRY(sPicture, sFault_Offline, USER_EVT_DISCONNECT, 0)
+		FSM_RULE_ENTRY(sHidePreview, sFault_Offline, USER_EVT_DISCONNECT, 0)
 
-		FSM_RULE_ENTRY(s6, s1, USER_EVT_STARTPREVIEW_FINISHED, 0) //成功预览
-		FSM_RULE_ENTRY(s6, s3, USER_EVT_STARTPREVIEW_FINISHED, 1) //预览失败
-		FSM_RULE_ENTRY(s6, s6, USER_EVT_STARTPREVIEW_FINISHED, 2) // 错误还不足够严重
-		FSM_RULE_ENTRY(s6, s0, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
-		FSM_RULE_ENTRY(s6, s3, USER_EVT_STOPPREVIEW_FINISHED, 0) //关闭预览失败
-		FSM_RULE_ENTRY(s6, s6, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重
+		FSM_RULE_ENTRY(sHidePreview, sPreview, USER_EVT_STARTPREVIEW_FINISHED, 0) //成功预览
+		FSM_RULE_ENTRY(sHidePreview, sFault, USER_EVT_STARTPREVIEW_FINISHED, 1) //预览失败
+		FSM_RULE_ENTRY(sHidePreview, sHidePreview, USER_EVT_STARTPREVIEW_FINISHED, 2) // 错误还不足够严重,停留在当前状态
+		FSM_RULE_ENTRY(sHidePreview, sIdle, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
+		FSM_RULE_ENTRY(sHidePreview, sFault, USER_EVT_STOPPREVIEW_FINISHED, 0) //关闭预览失败
+		FSM_RULE_ENTRY(sHidePreview, sHidePreview, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重,停留在当前状态
 
 
-		FSM_RULE_ENTRY_ANY(s1, s7, USER_EVT_EXIT)
-		FSM_RULE_ENTRY_ANY(s2, s7, USER_EVT_EXIT)
-		FSM_RULE_ENTRY_ANY(s6, s7, USER_EVT_EXIT)
-		FSM_RULE_ENTRY(s7, s0, USER_EVT_EXIT_FINISHED, 0)
-		FSM_RULE_ENTRY(s7, s3, USER_EVT_EXIT_FINISHED, 1)
+		FSM_RULE_ENTRY_ANY(sPreview, sExit, USER_EVT_EXIT)
+		FSM_RULE_ENTRY_ANY(sProperty, sExit, USER_EVT_EXIT)
+		FSM_RULE_ENTRY_ANY(sHidePreview, sExit, USER_EVT_EXIT)
+		FSM_RULE_ENTRY(sExit, sIdle, USER_EVT_EXIT_FINISHED, 0)
+		FSM_RULE_ENTRY(sExit, sPreview, USER_EVT_EXIT_FINISHED, 2)
+		FSM_RULE_ENTRY(sExit, sHidePreview, USER_EVT_EXIT_FINISHED, 3)
+		FSM_RULE_ENTRY(sExit, sFault_Offline, USER_EVT_EXIT_FINISHED, 4)
+
+		FSM_RULE_ENTRY(sExit, sFault, USER_EVT_EXIT_FINISHED, 1)
+
+		FSM_RULE_ENTRY_ANY(sIdle, sInit, USER_EVT_INIT)
+		FSM_RULE_ENTRY_ANY(sIdle, sFault, USER_EVT_GOTOHELL)
+
+		/** JS Compoent  [Gifur@20241114]*/
+		FSM_RULE_ENTRY(sIdle, sPreview, USER_EVT_STARTPREVIEW_JS_DONE, 0)
+		FSM_RULE_ENTRY(sIdle, sFault, USER_EVT_STARTPREVIEW_JS_DONE, 1) //预览失败
+		FSM_RULE_ENTRY(sIdle, sIdle, USER_EVT_STARTPREVIEW_JS_DONE, 2) // 错误还不足够严重,停留在当前状态
+
+		FSM_RULE_ENTRY(sHidePreview, sPreview, USER_EVT_STARTPREVIEW_JS, 1)
+
+		FSM_RULE_ENTRY(sPreview, sIdle, USER_EVT_CANCELPREVIEW_JS_DONE, 1) //取消预览成功
+		FSM_RULE_ENTRY(sPreview, sHidePreview, USER_EVT_CANCELPREVIEW_JS_DONE, 2) //隐藏成功
+		FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_CANCELPREVIEW_JS_DONE, 4)
+
+		FSM_RULE_ENTRY(sHidePreview, sIdle, USER_EVT_CANCELPREVIEW_JS_DONE, 0)
+
+		FSM_RULE_ENTRY(sPreview, sHidePreview, USER_EVT_SCANIMAGE_JS_DONE, 2)
+		FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_SCANIMAGE_JS_DONE, 4)
+
+		FSM_RULE_ENTRY_ANY(sPreview, sExit, EVT_MAINPAGE_DISPLAY)
+		FSM_RULE_ENTRY_ANY(sHidePreview, sExit, EVT_MAINPAGE_DISPLAY)
+		/** JS Compoent Done [Gifur@20241114]*/
+
+		FSM_RULE_ENTRY_ANY(sInit, sIdle, USER_EVT_INIT_FINISHED)
+		FSM_RULE_ENTRY_ANY(sInit, sFault, USER_EVT_GOTOHELL)
 
-		FSM_RULE_ENTRY_ANY(s0, s8, USER_EVT_NOCFG)
-		FSM_RULE_ENTRY_ANY(s0, s3, USER_EVT_GOTOHELL)
-		
 	END_FSM_RULE()
 
-	virtual void s0_on_entry();
-	virtual void s0_on_exit();
-	virtual unsigned int s0_on_event(FSMEvent* e);
+	virtual void s0_Idle_on_entry();
+	virtual void s0_Idle_on_exit();
+	virtual unsigned int s0_Idle_on_event(FSMEvent* e);
 
-	virtual void s1_on_entry();
-	virtual void s1_on_exit();
-	virtual unsigned int s1_on_event(FSMEvent* e);
+	virtual void s1_Preview_on_entry();
+	virtual void s1_Preview_on_exit();
+	virtual unsigned int s1_Preview_on_event(FSMEvent* e);
 
 	virtual void s2_on_entry();
 	virtual void s2_on_exit();
 	virtual unsigned int s2_on_event(FSMEvent* e);
 
-	virtual void s3_on_entry();
-	virtual void s3_on_exit();
-	virtual unsigned int s3_on_event(FSMEvent* e);
+	virtual void s3_Failed_on_entry();
+	virtual void s3_Failed_on_exit();
+	virtual unsigned int s3_Failed_on_event(FSMEvent* e);
 
-	virtual void s4_on_entry();
-	virtual void s4_on_exit();
-	virtual unsigned int s4_on_event(FSMEvent* e);
+	virtual void s4_ScanImage_on_entry();
+	virtual void s4_ScanImage_on_exit();
+	virtual unsigned int s4_ScanImage_on_event(FSMEvent* e);
 
-	virtual void s5_on_entry();
-	virtual void s5_on_exit();
-	virtual unsigned int s5_on_event(FSMEvent* e);
+	virtual void s5_DeviceOff_on_entry();
+	virtual void s5_DeviceOff_on_exit();
+	virtual unsigned int s5_DeviceOff_on_event(FSMEvent* e);
 
-	virtual void s6_on_entry();
-	virtual void s6_on_exit();
-	virtual unsigned int s6_on_event(FSMEvent* e);
+	virtual void s6_HidePreview_on_entry();
+	virtual void s6_HidePreview_on_exit();
+	virtual unsigned int s6_HidePreview_on_event(FSMEvent* e);
 
-	virtual void s7_on_entry();
-	virtual void s7_on_exit();
-	virtual unsigned int s7_on_event(FSMEvent* e);
+	virtual void s7_Exit_on_entry();
+	virtual void s7_Exit_on_exit();
+	virtual unsigned int s7_Exit_on_event(FSMEvent* e);
 
-	virtual void s8_on_entry() {
-		SetDevState(DEVICE_STATUS_NOCFG);
-		SetLastUserCode(HSPScanner_UserErrorCode_DLLNAME_NOCFG);
-	}
-	virtual void s8_on_exit() {
-		SetDevState(DEVICE_STATUS_NORMAL);
-	}
-	virtual unsigned int s8_on_event(FSMEvent* e);
+	virtual void s8_Init_on_entry();
+	virtual void s8_Init_on_exit();
+	virtual unsigned int s8_Init_on_event(FSMEvent* e);
 
 	virtual void OnStateTrans(int iSrcState, int iDstState);
 
+	/** JS Component  [Gifur@20241112]*/
+	//0,succ;1 failed;
+	int StartPreviewJS(SpReqAnsContext<HSPScannerService_StartPreviewJS_Req,
+		HSPScannerService_StartPreviewJS_Ans>::Pointer ctx);
+	//0,succ;1 failed;
+	int CancelPreview(SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req,
+		HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx);
+	//0,succ;1 failed;
+	int ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Req,
+		HSPScannerService_ScanImageJS_Ans>::Pointer ctx);
+	//0,succ;1 failed;
+	int SetParam(SpReqAnsContext<HSPScannerService_SetParamJS_Req,
+		HSPScannerService_SetParamJS_Ans>::Pointer ctx);
+	/** JS Component Done  [Gifur@20241112]*/
+
+	//0,succ;1 failed
 	int StartPreview(SpReqAnsContext<HSPScannerService_StartPreview_Req,
 		HSPScannerService_StartPreview_Ans>::Pointer ctx);
-
+	//1隐藏成功;4:隐藏失败;2:取消预览成功;0:取消预览失败
 	int StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_Req,
 		HSPScannerService_CancelPreview_Ans>::Pointer ctx);
 	
-	bool ResizeImage(const CSimpleStringA& fileName);
+	bool ResizeImage(const CSimpleStringA& fileName, int kbSize);
 	
 	int ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 		HSPScannerService_ScanImage_Ans>::Pointer ctx);
@@ -402,41 +318,40 @@ public:
 	{
 		return dwLastUserCode;
 	}
-	LPCTSTR MapCode2RTAString(DWORD dwValue = 0);
 
 	int SetPreviewParam(int colorType, int rotateType, int scanType, bool abortIfFault = false);
 
-private:
-	int m_version, m_batch;
+	ErrorCodeEnum TryToOpenDevice();
+	LPCTSTR MapCode2RTAString(DWORD dwValue);
+
 
+	int Initial();
+protected:
+	
+	ErrorCodeEnum SetPreviewProperty(const JS::PreviewSettings& val, const char* logCode = "");
+
+	void ToSwithLight(bool turnOn = true);
+private:
 	ErrorCodeEnum m_ecSelfTest;
-	DWORD m_dwErroCode;
-	BOOL m_bOperating;
-	int m_nTickTimes;
 	int m_nFatalTimes;
 	int m_nSrcState;
-
 	int m_nRecX, m_nRecY, m_nRecW;
 
 	EvtType m_desiredAction;
-	CSimpleStringA m_csMachineType;
-	DevCategoryInfo m_devCat;
-	CSimpleStringA m_csDevNo;
-
 	DWORD dwLastUserCode;
 	DWORD m_dwMaxImageSize;
-
-public:
-
-	DWORD GetCustLastErrorCode() { return m_dwErroCode; }
-	void SetCustLastErrorCode(DWORD dwVal = 0) { m_dwErroCode = dwVal; }
-	ErrorCodeEnum TryToOpenDevice();
+	bool m_lightOn;
 
 private:
+
 	BOOL GetCurImageName(CSimpleStringA& csImagName, bool bExt = false);
 	BOOL DelAndGetNewFileName(CSimpleStringA& csfileName, bool bInBusiness = false);
 	ErrorCodeEnum DeleteFileIfExisted(LPCTSTR fileName);
+
+	ErrorCodeEnum GetDevStatusFromAdapter(HspsDevStatus& status, bool fromBusiness = false);
+
 	//  --Josephus at 16:33:57 20161214
+	// to replace when JS
 	// 0: disconnected;
 	// 1: connected;
 	// -1: invalid;
@@ -444,17 +359,289 @@ private:
 	{
 		if(!m_hDevHelper || !m_bOpened) return -1;
 		HspsDevStatus status = {0};
-		if(m_hDevHelper->GetDevStatus(status) == Error_Succeed)
-		{
-			if(status.isConnected == 0)
-				return 0;
-			else
-				return 1;
-		}
+		if(GetDevStatusFromAdapter(status) == Error_Succeed)
+			return (status.isConnected == 0) ? 0 : 1;
 		return -1;
 	}
 	
 	void InitialMaxResizeValue();
+
+	void ClearPictureFileSure()
+	{
+		CSimpleStringA strNoUsed(true);
+		GetCurImageName(strNoUsed);
+		DelAndGetNewFileName(strNoUsed);
+		GetCurImageName(strNoUsed, true);
+		DelAndGetNewFileName(strNoUsed);
+	}
+};
+
+class StartPreviewEvent : public FSMEvent
+{
+public:
+	StartPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_STARTPREVIEW) {}
+	~StartPreviewEvent() {}
+	SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreview)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+class StopPreviewEvent : public FSMEvent
+{
+public:
+	StopPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_STOPPREVIEW) {}
+	~StopPreviewEvent() {}
+	SpReqAnsContext<HSPScannerService_CancelPreview_Req,
+		HSPScannerService_CancelPreview_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreview)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+class ScanImageEvent : public FSMEvent
+{
+public:
+	ScanImageEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SCANIMAGE) {}
+	~ScanImageEvent() {}
+	SpReqAnsContext<HSPScannerService_ScanImage_Req,
+		HSPScannerService_ScanImage_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImage)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+class ScanImageExEvent : public FSMEvent
+{
+public:
+	ScanImageExEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SCANIMAGE_EX) {}
+	~ScanImageExEvent() {}
+	SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
+		HSPScannerService_ScanImageEx_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageEx)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+class ShowPropertyEvent : public FSMEvent
+{
+public:
+	ShowPropertyEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SHOWPROPERTY) {}
+	~ShowPropertyEvent() {}
+	SpReqAnsContext<HSPScannerService_ShowProperty_Req,
+		HSPScannerService_ShowProperty_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ShowProperty)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+class SetPropertyEvent : public FSMEvent
+{
+public:
+	SetPropertyEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SETPROPERTY) {}
+	~SetPropertyEvent() {}
+	SpReqAnsContext<HSPScannerService_SetProperty_Req,
+		HSPScannerService_SetProperty_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetProperty)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+class SetWinPosEvent : public FSMEvent
+{
+public:
+	SetWinPosEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SETWINPOS) {}
+	~SetWinPosEvent() {}
+	SpReqAnsContext<HSPScannerService_SetWinPos_Req,
+		HSPScannerService_SetWinPos_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetWinPos)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+class GetDevStatusEvent : public FSMEvent
+{
+public:
+	GetDevStatusEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_GETSTATUS) {}
+	~GetDevStatusEvent() {}
+	SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
+		HSPScannerService_GetDevStatus_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevStatus)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+
+/** No use now  [Gifur@2025318]*/
+class GetDevInfoEvent : public FSMEvent
+{
+public:
+	GetDevInfoEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_GETINFO) {}
+	~GetDevInfoEvent() {}
+	SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
+		HSPScannerService_GetDevInfo_Ans>::Pointer m_ctx;
+	CHSPScannerFSM* m_fsm;
+	virtual void OnUnhandled()
+	{
+		if (m_ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevInfo)
+				.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState");
+			m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+		}
+	}
+};
+
+/** JS Component  [Gifur@20241112]*/
+namespace JS {
+
+	class StartPreviewEvent : public FSMEvent
+	{
+	public:
+		StartPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_STARTPREVIEW_JS) {}
+		~StartPreviewEvent() {}
+		SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer m_ctx;
+		CHSPScannerFSM* m_fsm;
+		virtual void OnUnhandled()
+		{
+			if (m_ctx != NULL)
+			{
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreviewJS)
+					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("StartPreviewEvent::Error_InvalidState");
+				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+			}
+		}
+	};
+
+	class CancelPreviewEvent : public FSMEvent
+	{
+	public:
+		CancelPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_CANCELPREVIEW_JS) {}
+		~CancelPreviewEvent() {}
+		SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer m_ctx;
+		CHSPScannerFSM* m_fsm;
+		virtual void OnUnhandled()
+		{
+			if (m_ctx != NULL)
+			{
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreviewJS)
+					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("CancelPreviewEvent::Error_InvalidState");
+				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+			}
+		}
+	};
+
+	class ScanImageEvent : public FSMEvent
+	{
+	public:
+		ScanImageEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SCANIMAGE_JS) {}
+		~ScanImageEvent() {}
+		SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer m_ctx;
+		CHSPScannerFSM* m_fsm;
+		virtual void OnUnhandled()
+		{
+			if (m_ctx != NULL)
+			{
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageJS)
+					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("ScanImageEvent::Error_InvalidState");
+				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+			}
+		}
+	};
+
+	class SetParamEvent : public FSMEvent
+	{
+	public:
+		SetParamEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SETPARAM_JS) {}
+		~SetParamEvent() {}
+		SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer m_ctx;
+		CHSPScannerFSM* m_fsm;
+		virtual void OnUnhandled()
+		{
+			if (m_ctx != NULL)
+			{
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetParamJS)
+					.setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("SetParamEvent::Error_InvalidState");
+				m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
+			}
+		}
+	};
+}
+/** JS Component Done  [Gifur@20241112]*/
+
+struct InitTask : public ITaskSp
+{
+	CHSPScannerFSM* fsm;
+	InitTask(CHSPScannerFSM* f) : fsm(f) {}
+
+	void Process()
+	{
+		const int ret = fsm->Initial();
+		if (ret == 0) {
+			FSMEvent* e = new FSMEvent(USER_EVT_INIT_FINISHED);
+			fsm->PostEventFIFO(e);
+		}
+		else {
+			FSMEvent* e = new FSMEvent(USER_EVT_GOTOHELL);
+			fsm->PostEventFIFO(e);
+		}
+	}
 };
 
 struct StartPreviewTask : public ITaskSp
@@ -517,7 +704,6 @@ struct SetPropertyInPreviewTask : public ITaskSp
 	}
 };
 
-
 struct StopPreviewTask : public ITaskSp
 {
 	CHSPScannerFSM* m_fsm;
@@ -686,18 +872,112 @@ struct GetDevInfoTask : public ITaskSp
 	}
 };
 
-struct OpenDeviceTask : public ITaskSp
+struct ExitClearTask : public ITaskSp
 {
 	CHSPScannerFSM* m_fsm;
-	OpenDeviceTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
+	ExitClearTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
 	void Process()
 	{
-		if (!m_fsm->m_bOpened) {
-				if (Error_Succeed == m_fsm->TryToOpenDevice()) {
-					m_fsm->PostEventFIFO(new FSMEvent(USER_EVT_OPENSUCC));
-				}
+		FSMEvent* pEvt = new FSMEvent(USER_EVT_EXIT_FINISHED);
+		if (ISSUCCEEDED(m_fsm->OnDevExit())) {
+			pEvt->param1 = 0;
 		}
+		else {
+			pEvt->param1 = 1;
+		}
+		m_fsm->PostEventFIFO(pEvt);
+		return;
 	}
 };
 
+/** JS Compoent  [Gifur@20241112]*/
+namespace JS {
+
+	struct StartPreviewTask : public ITaskSp
+	{
+		CHSPScannerFSM* m_fsm;
+		SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer m_ctx;
+		StartPreviewTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
+		void Process()
+		{
+			FSMEvent* pEvt = new FSMEvent(USER_EVT_STARTPREVIEW_JS_DONE);
+			pEvt->param1 = m_fsm->StartPreviewJS(m_ctx);
+			m_fsm->PostEventFIFO(pEvt);
+			return;
+		}
+		void SetContext(
+			SpReqAnsContext<HSPScannerService_StartPreviewJS_Req,
+			HSPScannerService_StartPreviewJS_Ans>::Pointer ctx)
+		{
+			m_ctx = ctx;
+			return;
+		}
+	};
+
+	struct CancelPreviewTask : public ITaskSp
+	{
+		CHSPScannerFSM* m_fsm;
+		SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer m_ctx;
+		CancelPreviewTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
+		void Process()
+		{
+			FSMEvent* pEvt = new FSMEvent(USER_EVT_CANCELPREVIEW_JS_DONE);
+			pEvt->param1 = m_fsm->CancelPreview(m_ctx);
+			pEvt->param2 = m_ctx->Req.hide ? 1 : 0;
+			m_fsm->PostEventFIFO(pEvt);
+			return;
+		}
+		void SetContext(
+			SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req,
+			HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx)
+		{
+			m_ctx = ctx;
+			return;
+		}
+	};
+
+	struct ScanImageTask : public ITaskSp
+	{
+		CHSPScannerFSM* m_fsm;
+		SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer m_ctx;
+		ScanImageTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
+		void Process()
+		{
+			FSMEvent* pEvt = new FSMEvent(USER_EVT_SCANIMAGE_JS_DONE);
+			////0,succ;1 failed;
+			pEvt->param1 = m_fsm->ScanImageJS(m_ctx);
+			///1 说明隐藏,0说明关闭
+			pEvt->param2 = m_ctx->Req.hide ? 1 : 0;
+			m_fsm->PostEventFIFO(pEvt);
+			return;
+		}
+		void SetContext(
+			SpReqAnsContext<HSPScannerService_ScanImageJS_Req,
+			HSPScannerService_ScanImageJS_Ans>::Pointer ctx)
+		{
+			m_ctx = ctx;
+			return;
+		}
+	};
+
+	struct SetParamTask : public ITaskSp
+	{
+		CHSPScannerFSM* m_fsm;
+		SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer m_ctx;
+		SetParamTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
+		void Process()
+		{
+			m_fsm->SetParam(m_ctx);
+			return;
+		}
+		void SetContext(
+			SpReqAnsContext<HSPScannerService_SetParamJS_Req,
+			HSPScannerService_SetParamJS_Ans>::Pointer ctx)
+		{
+			m_ctx = ctx;
+			return;
+		}
+	};
+}
+
 #endif //_HSPSCANNER_FSM_H_

+ 196 - 0
Module/mod_HSPScanner/HSPScanner_client_g.h

@@ -513,6 +513,202 @@ public:
 		return ret;
 	}
 
+	ErrorCodeEnum StartPreviewJS(HSPScannerService_StartPreviewJS_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(HSPScannerService_Method_StartPreviewJS, HSPScannerService_MethodSignature_StartPreviewJS, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum StartPreviewJS(HSPScannerService_StartPreviewJS_Req &Req, HSPScannerService_StartPreviewJS_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = StartPreviewJS(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum StartPreviewJS(HSPScannerService_StartPreviewJS_Req &Req, HSPScannerService_StartPreviewJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = StartPreviewJS(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 StartPreviewJS(HSPScannerService_StartPreviewJS_Req &Req, HSPScannerService_StartPreviewJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = StartPreviewJS(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;
+	}
+
+	ErrorCodeEnum CancelPreviewJS(HSPScannerService_CancelPreviewJS_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(HSPScannerService_Method_CancelPreviewJS, HSPScannerService_MethodSignature_CancelPreviewJS, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum CancelPreviewJS(HSPScannerService_CancelPreviewJS_Req &Req, HSPScannerService_CancelPreviewJS_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = CancelPreviewJS(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum CancelPreviewJS(HSPScannerService_CancelPreviewJS_Req &Req, HSPScannerService_CancelPreviewJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = CancelPreviewJS(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 CancelPreviewJS(HSPScannerService_CancelPreviewJS_Req &Req, HSPScannerService_CancelPreviewJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = CancelPreviewJS(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;
+	}
+
+	ErrorCodeEnum ScanImageJS(HSPScannerService_ScanImageJS_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(HSPScannerService_Method_ScanImageJS, HSPScannerService_MethodSignature_ScanImageJS, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum ScanImageJS(HSPScannerService_ScanImageJS_Req &Req, HSPScannerService_ScanImageJS_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = ScanImageJS(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum ScanImageJS(HSPScannerService_ScanImageJS_Req &Req, HSPScannerService_ScanImageJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = ScanImageJS(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 ScanImageJS(HSPScannerService_ScanImageJS_Req &Req, HSPScannerService_ScanImageJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = ScanImageJS(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;
+	}
+
+	ErrorCodeEnum SetParamJS(HSPScannerService_SetParamJS_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(HSPScannerService_Method_SetParamJS, HSPScannerService_MethodSignature_SetParamJS, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum SetParamJS(HSPScannerService_SetParamJS_Req &Req, HSPScannerService_SetParamJS_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = SetParamJS(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum SetParamJS(HSPScannerService_SetParamJS_Req &Req, HSPScannerService_SetParamJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = SetParamJS(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 SetParamJS(HSPScannerService_SetParamJS_Req &Req, HSPScannerService_SetParamJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = SetParamJS(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()
 	{

+ 110 - 0
Module/mod_HSPScanner/HSPScanner_def_g.h

@@ -22,6 +22,10 @@ namespace HSPScanner {
 #define HSPScannerService_Method_GetDevStatus 7
 #define HSPScannerService_Method_GetDevInfo 65535
 #define HSPScannerService_Method_Exit 8
+#define HSPScannerService_Method_StartPreviewJS 9
+#define HSPScannerService_Method_CancelPreviewJS 10
+#define HSPScannerService_Method_ScanImageJS 11
+#define HSPScannerService_Method_SetParamJS 12
 
 #define HSPScannerService_MethodSignature_StartPreview 220854261
 #define HSPScannerService_MethodSignature_CancelPreview 961536349
@@ -33,6 +37,10 @@ namespace HSPScanner {
 #define HSPScannerService_MethodSignature_GetDevStatus -321104988
 #define HSPScannerService_MethodSignature_GetDevInfo 296205965
 #define HSPScannerService_MethodSignature_Exit -1158854104
+#define HSPScannerService_MethodSignature_StartPreviewJS -364206811
+#define HSPScannerService_MethodSignature_CancelPreviewJS -771733850
+#define HSPScannerService_MethodSignature_ScanImageJS -719300712
+#define HSPScannerService_MethodSignature_SetParamJS 1301088866
 
 #define HSPScannerService_LogCode_StartPreview "QLR040221700"
 #define HSPScannerService_LogCode_CancelPreview "QLR040221701"
@@ -44,6 +52,10 @@ namespace HSPScanner {
 #define HSPScannerService_LogCode_GetDevStatus "QLR040221707"
 #define HSPScannerService_LogCode_GetDevInfo "QLR040221799"
 #define HSPScannerService_LogCode_Exit "QLR040221708"
+#define HSPScannerService_LogCode_StartPreviewJS "QLR040221709"
+#define HSPScannerService_LogCode_CancelPreviewJS "QLR040221710"
+#define HSPScannerService_LogCode_ScanImageJS "QLR040221711"
+#define HSPScannerService_LogCode_SetParamJS "QLR040221712"
 
 struct HSPScannerService_StartPreview_Req
 {
@@ -276,6 +288,104 @@ struct HSPScannerService_Exit_Info
 
 };
 
+struct HSPScannerService_StartPreviewJS_Req
+{
+	short rotate;
+	short scan;
+	short color;
+	short pos;
+	short pos_x;
+	short pos_y;
+	short pos_w;
+	int reserved1;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & rotate & scan & color & pos & pos_x & pos_y & pos_w & reserved1;
+	}
+
+};
+
+struct HSPScannerService_StartPreviewJS_Ans
+{
+
+	void Serialize(SpBuffer &Buf)
+	{
+	}
+
+};
+
+struct HSPScannerService_CancelPreviewJS_Req
+{
+	bool hide;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & hide;
+	}
+
+};
+
+struct HSPScannerService_CancelPreviewJS_Ans
+{
+
+	void Serialize(SpBuffer &Buf)
+	{
+	}
+
+};
+
+struct HSPScannerService_ScanImageJS_Req
+{
+	bool hide;
+	int compress;
+	int reserved1;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & hide & compress & reserved1;
+	}
+
+};
+
+struct HSPScannerService_ScanImageJS_Ans
+{
+	CBlob imageData;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & imageData;
+	}
+
+};
+
+struct HSPScannerService_SetParamJS_Req
+{
+	short rotate;
+	short scan;
+	short color;
+	short pos;
+	short pos_x;
+	short pos_y;
+	short pos_w;
+	int reserved1;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & rotate & scan & color & pos & pos_x & pos_y & pos_w & reserved1;
+	}
+
+};
+
+struct HSPScannerService_SetParamJS_Ans
+{
+
+	void Serialize(SpBuffer &Buf)
+	{
+	}
+
+};
+
 
 ///////////////////////////
 

+ 108 - 0
Module/mod_HSPScanner/HSPScanner_server_g.h

@@ -100,6 +100,34 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case HSPScannerService_Method_StartPreviewJS:
+			if (dwSignature == HSPScannerService_MethodSignature_StartPreviewJS) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case HSPScannerService_Method_CancelPreviewJS:
+			if (dwSignature == HSPScannerService_MethodSignature_CancelPreviewJS) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case HSPScannerService_Method_ScanImageJS:
+			if (dwSignature == HSPScannerService_MethodSignature_ScanImageJS) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case HSPScannerService_Method_SetParamJS:
+			if (dwSignature == HSPScannerService_MethodSignature_SetParamJS) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -161,6 +189,26 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case HSPScannerService_Method_StartPreviewJS:
+			if (dwSignature != HSPScannerService_MethodSignature_StartPreviewJS) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case HSPScannerService_Method_CancelPreviewJS:
+			if (dwSignature != HSPScannerService_MethodSignature_CancelPreviewJS) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case HSPScannerService_Method_ScanImageJS:
+			if (dwSignature != HSPScannerService_MethodSignature_ScanImageJS) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case HSPScannerService_Method_SetParamJS:
+			if (dwSignature != HSPScannerService_MethodSignature_SetParamJS) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -218,6 +266,26 @@ public:
 	/// override by user
 	}
 
+	virtual void Handle_StartPreviewJS(SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
+	virtual void Handle_CancelPreviewJS(SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
+	virtual void Handle_ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
+	virtual void Handle_SetParamJS(SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
 	virtual void OnRequest(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		CAutoBuffer Buf;
@@ -334,6 +402,46 @@ public:
 						Handle_Exit(ctx);
 					}
 					break;
+				case HSPScannerService_Method_StartPreviewJS:
+					{
+						SpReqAnsContext<HSPScannerService_StartPreviewJS_Req,HSPScannerService_StartPreviewJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<HSPScannerService_StartPreviewJS_Req,HSPScannerService_StartPreviewJS_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_StartPreviewJS(ctx);
+					}
+					break;
+				case HSPScannerService_Method_CancelPreviewJS:
+					{
+						SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req,HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req,HSPScannerService_CancelPreviewJS_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_CancelPreviewJS(ctx);
+					}
+					break;
+				case HSPScannerService_Method_ScanImageJS:
+					{
+						SpReqAnsContext<HSPScannerService_ScanImageJS_Req,HSPScannerService_ScanImageJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<HSPScannerService_ScanImageJS_Req,HSPScannerService_ScanImageJS_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_ScanImageJS(ctx);
+					}
+					break;
+				case HSPScannerService_Method_SetParamJS:
+					{
+						SpReqAnsContext<HSPScannerService_SetParamJS_Req,HSPScannerService_SetParamJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<HSPScannerService_SetParamJS_Req,HSPScannerService_SetParamJS_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_SetParamJS(ctx);
+					}
+					break;
 				default:
 					assert(0);
 					break;

+ 28 - 0
Module/mod_HSPScanner/mod_HSPScanner.cpp

@@ -73,6 +73,34 @@ void CHSPScannerServerSession::Handle_Exit(SpOnewayCallContext<HSPScannerService
 	m_pEntity->Exit(ctx);
 }
 
+void CHSPScannerServerSession::Handle_StartPreviewJS(SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer ctx)
+{
+	DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_StartPreviewJS).setAPI(__FUNCTION__)(__FUNCTION__);
+	m_pEntity->StartPreviewJS(ctx);
+}
+
+void CHSPScannerServerSession::Handle_CancelPreviewJS(SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx)
+{
+	DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreviewJS).setAPI(__FUNCTION__)(__FUNCTION__);
+	m_pEntity->CancelPreviewJS(ctx);
+}
+
+void CHSPScannerServerSession::Handle_ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer ctx)
+{
+	DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_ScanImageJS).setAPI(__FUNCTION__)(__FUNCTION__);
+	m_pEntity->ScanImageJS(ctx);
+}
+
+void CHSPScannerServerSession::Handle_SetParamJS(SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer ctx)
+{
+	DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_SetParamJS).setAPI(__FUNCTION__)(__FUNCTION__);
+	m_pEntity->SetParamJS(ctx);
+}
+
 void CHSPScannerEntity::OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName)
 {
 	if ((_strnicmp(pszKey, "UIState", strlen("UIState")) == 0))

+ 41 - 11
Module/mod_HSPScanner/mod_HSPScanner.h

@@ -51,6 +51,11 @@ public:
 
 	virtual void Handle_Exit(SpOnewayCallContext<HSPScannerService_Exit_Info>::Pointer ctx);
 
+	virtual void Handle_StartPreviewJS(SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer ctx);
+	virtual void Handle_CancelPreviewJS(SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx);
+	virtual void Handle_ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer ctx);
+	virtual void Handle_SetParamJS(SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer ctx);
+
 private:
 	CHSPScannerEntity *m_pEntity;
 };
@@ -109,7 +114,7 @@ public:
 	void Preview(SpReqAnsContext<HSPScannerService_StartPreview_Req,
 		HSPScannerService_StartPreview_Ans>::Pointer ctx)
 	{
-		StartPreviewEvent* pEvent = new StartPreviewEvent();
+		StartPreviewEvent* pEvent = new StartPreviewEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}
@@ -117,7 +122,7 @@ public:
 	void CancelPreview(SpReqAnsContext<HSPScannerService_CancelPreview_Req,
 		HSPScannerService_CancelPreview_Ans>::Pointer ctx)
 	{
-		StopPreviewEvent* pEvent = new StopPreviewEvent();
+		StopPreviewEvent* pEvent = new StopPreviewEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}
@@ -125,7 +130,7 @@ public:
 	void ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
 		HSPScannerService_ScanImage_Ans>::Pointer ctx)
 	{
-		ScanImageEvent* pEvent = new ScanImageEvent();
+		ScanImageEvent* pEvent = new ScanImageEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}
@@ -133,7 +138,7 @@ public:
 	void ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
 		HSPScannerService_ScanImageEx_Ans>::Pointer ctx)
 	{
-		ScanImageExEvent* pEvent = new ScanImageExEvent();
+		ScanImageExEvent* pEvent = new ScanImageExEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}
@@ -147,15 +152,12 @@ public:
 		HSPScannerService_GetDevInfo_Ans>::Pointer ctx)
 	{
 		m_fsm.GetDevInfo(ctx);
-		//GetDevInfoEvent* pEvent = new GetDevInfoEvent();
-		//pEvent->m_ctx = ctx;
-		//m_fsm.PostEventFIFO(pEvent);
 	}
 
 	void GetDevStatus(SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
 		HSPScannerService_GetDevStatus_Ans>::Pointer ctx)
 	{
-		GetDevStatusEvent* pEvent = new GetDevStatusEvent();
+		GetDevStatusEvent* pEvent = new GetDevStatusEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}
@@ -163,7 +165,7 @@ public:
 	void SetWinPos(SpReqAnsContext<HSPScannerService_SetWinPos_Req,
 		HSPScannerService_SetWinPos_Ans>::Pointer ctx)
 	{
-		SetWinPosEvent* pEvent = new SetWinPosEvent();
+		SetWinPosEvent* pEvent = new SetWinPosEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}
@@ -171,7 +173,7 @@ public:
 	void ShowProperty(SpReqAnsContext<HSPScannerService_ShowProperty_Req,
 		HSPScannerService_ShowProperty_Ans>::Pointer ctx)
 	{
-		ShowPropertyEvent* pEvent = new ShowPropertyEvent();
+		ShowPropertyEvent* pEvent = new ShowPropertyEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}
@@ -179,7 +181,35 @@ public:
 	void SetProperty(SpReqAnsContext<HSPScannerService_SetProperty_Req,
 		HSPScannerService_SetProperty_Ans>::Pointer ctx)
 	{
-		SetPropertyEvent* pEvent = new SetPropertyEvent();
+		SetPropertyEvent* pEvent = new SetPropertyEvent(&m_fsm);
+		pEvent->m_ctx = ctx;
+		m_fsm.PostEventFIFO(pEvent);
+	}
+
+	void StartPreviewJS(SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer ctx)
+	{
+		JS::StartPreviewEvent* pEvent = new JS::StartPreviewEvent(&m_fsm);
+		pEvent->m_ctx = ctx;
+		m_fsm.PostEventFIFO(pEvent);
+	}
+
+	void CancelPreviewJS(SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx)
+	{
+		JS::CancelPreviewEvent* pEvent = new JS::CancelPreviewEvent(&m_fsm);
+		pEvent->m_ctx = ctx;
+		m_fsm.PostEventFIFO(pEvent);
+	}
+
+	void ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer ctx)
+	{
+		JS::ScanImageEvent* pEvent = new JS::ScanImageEvent(&m_fsm);
+		pEvent->m_ctx = ctx;
+		m_fsm.PostEventFIFO(pEvent);
+	}
+
+	void SetParamJS(SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer ctx)
+	{
+		JS::SetParamEvent* pEvent = new JS::SetParamEvent(&m_fsm);
 		pEvent->m_ctx = ctx;
 		m_fsm.PostEventFIFO(pEvent);
 	}

+ 1 - 0
Module/mod_gpio/GpioFSM.cpp

@@ -288,6 +288,7 @@ ErrorCodeEnum CGPIOFSM::OnInit()
 	initParam.dir[2] = false;
 	initParam.dir[3] = false;
 	initParam.dwPortNum = 3;
+	//Gpio.keba.1.1 , Gpio.Hyosung.1.1, Gpio.kxd.1.1 需要配置引脚数(PortNum)为 3
 	if (m_adapterInfo.GetPortNumInt() == 4) {
 		m_bNewVersion = TRUE;
 		initParam.dwPortNum = 4;

+ 1 - 1
Module/mod_pinpad/PinPadFSM.cpp

@@ -675,7 +675,7 @@ ErrorCodeEnum CPinPadFSM::GetEncryptText(SpReqAnsContext<PinPadService_GetInputS
 		DWORD dwUserCode = SetErrorAndLog(errCode, MEC_DEVAPI_EPP_StartPinInput, "DevAdapter::StartPinInput", __FUNCTION__, IsInBusiness(), m_ullEndTime - m_ullBeginTime, PinPadService_LogCode_GetInputSM);
 		CSimpleStringA tmpRTA(true), tmpDesc(true);
 		if (GetEntityBase()->GetFunction()->GetVTMErrMsg(dwUserCode, tmpDesc, tmpRTA) == Error_Succeed)
-			DbgToBeidou(ctxSM->link, "GetEncryptTextJS").setReturnCode(tmpRTA)();
+			DbgToBeidou(ctxSM->link, "GetEncryptText").setReturnCode(tmpRTA)();
 		ctxSM->Answer(Error_DevCommFailed, dwUserCode);
 		return Error_DevCommFailed;
 	}

Some files were not shown because too many files changed in this diff