Преглед изворни кода

#IQRV #comment [Module] keba/2021.0312.01 二期ST

gifur пре 4 година
родитељ
комит
b090e8d89b
49 измењених фајлова са 1401 додато и 1106 уклоњено
  1. 1 1
      DevAdapter/CMakeLists.txt
  2. 14 2
      DevAdapter/keba/CMakeLists.txt
  3. 26 21
      DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevCtrl.cpp
  4. 3 4
      DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevCtrl.h
  5. 6 5
      DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevDefine.h
  6. 1 4
      DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_ComIO.cpp
  7. 3 4
      DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_ComIO.h
  8. 12 2
      DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_DevCtrlImpl.cpp
  9. 4 4
      DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_DevCtrlImpl.h
  10. 1 1
      DevAdapter/keba/CardIssuer.keba.1.1/CMakeLists.txt
  11. 42 63
      DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.cpp
  12. 1 2
      DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.h
  13. 1 1
      DevAdapter/keba/ContactlessCard.keba.1.1/CMakeLists.txt
  14. 0 0
      DevAdapter/keba/ContactlessCard.keba.1.1/ContactlessCard.cpp
  15. 0 4
      DevAdapter/keba/ContactlessCard.keba.1.1/resource.h
  16. 1 1
      DevAdapter/keba/FingerPrint.keba.1.1/CMakeLists.txt
  17. 1 1
      DevAdapter/keba/Gpio.keba.1.1/CMakeLists.txt
  18. 3 1
      DevAdapter/keba/Gpio.keba.1.1/GpioClassImpl_DistrBusUSB.h
  19. 1 1
      DevAdapter/keba/Gpio.keba.1.1/KEBA_DevCtrl.cpp
  20. 18 19
      DevAdapter/keba/HSPScanner.keba.1.1/CMakeLists.txt
  21. 660 0
      DevAdapter/keba/HSPScanner.keba.1.1/CkDBus.cpp
  22. 131 0
      DevAdapter/keba/HSPScanner.keba.1.1/CkDBus.h
  23. 1 1
      DevAdapter/keba/HSPScanner.keba.1.1/CkLog.h
  24. 28 3
      DevAdapter/keba/HSPScanner.keba.1.1/dllmain.cpp
  25. 0 388
      DevAdapter/keba/HSPScanner.keba.1.1/hspscannerform.cpp
  26. 0 117
      DevAdapter/keba/HSPScanner.keba.1.1/hspscannerform.h
  27. 0 32
      DevAdapter/keba/HSPScanner.keba.1.1/hspscannerform.ui
  28. 201 223
      DevAdapter/keba/HSPScanner.keba.1.1/hspscannerimpl.cpp
  29. 26 15
      DevAdapter/keba/HSPScanner.keba.1.1/hspscannerimpl.h
  30. 1 1
      DevAdapter/keba/IDCertificate.keba.1.1/CMakeLists.txt
  31. 4 4
      DevAdapter/keba/IDCertificate.keba.1.1/idcertificate.cpp
  32. 2 2
      DevAdapter/keba/IDCertificate.keba.1.1/idcertificate.h
  33. 1 1
      DevAdapter/keba/PinPad.keba.1.1/CMakeLists.txt
  34. 4 10
      DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.cpp
  35. 4 7
      DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.h
  36. 1 2
      DevAdapter/keba/PinPad.keba.1.1/ZT598MGFDDef.h
  37. 2 2
      DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevCtrl.h
  38. 30 29
      DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevImpl.cpp
  39. 1 2
      DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevImpl.h
  40. 19 1
      DevAdapter/keba/ThermalPrint.keba.1.1/CMakeLists.txt
  41. 5 6
      DevAdapter/keba/ThermalPrint.keba.1.1/DevCtrl.cpp
  42. 33 31
      DevAdapter/keba/ThermalPrint.keba.1.1/ThermalPrint.cpp
  43. 2 0
      DevAdapter/keba/ThermalPrint.keba.1.1/stdafx.h
  44. 1 1
      DevAdapter/keba/Ups.keba.1.1/CMakeLists.txt
  45. 1 2
      DevAdapter/keba/Ups.keba.1.1/UpsClassImpl_East.cpp
  46. 1 1
      DevAdapter/keba/WatchDog.keba.1.1/CMakeLists.txt
  47. 100 68
      DevAdapter/keba/WatchDog.keba.1.1/WatchDogClassImpl.cpp
  48. 2 3
      DevAdapter/keba/WatchDog.keba.1.1/WatchDogClassImpl.h
  49. 1 13
      DevAdapter/keba/WatchDog.keba.1.1/dllmain.cpp

+ 1 - 1
DevAdapter/CMakeLists.txt

@@ -139,7 +139,7 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 
 # 通过conan的方式管理厂商库
 if(DEVADAPTER_USING_CONAN)
-    set(KEBA_CONAN_LIB_NAME keba/2021.0201.01@LR04.02_VendorLib/testing)
+    set(KEBA_CONAN_LIB_NAME keba/2021.0312.01@LR04.02_VendorLib/testing)
 	set(NANTIAN_CONAN_LIB_NAME nantian/2021.0310.01@LR04.02_VendorLib/testing)
 	set(GRG_CONAN_LIB_NAME grg/2021.0311.01@LR04.02_VendorLib/testing)
 	set(CW_CONAN_LIB_NAME cw/2021.0310.01@LR04.02_VendorLib/testing)

+ 14 - 2
DevAdapter/keba/CMakeLists.txt

@@ -12,8 +12,20 @@ set(CMAKE_KEBA_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
 rvc_define_dependen_dirs()
 
 # 遍历当前目录下带有CMakeLists.txt文件的文件夹
-rvc_traverse_sub_cmake_dirs()
-
+#rvc_traverse_sub_cmake_dirs()
+#add_subdirectory(deps)
+add_subdirectory(CardIssuer.keba.1.1)
+add_subdirectory(ContactlessCard.keba.1.1)
+add_subdirectory(FingerPrint.keba.1.1)
+add_subdirectory(Gpio.keba.1.1)
+#add_subdirectory(HSPScannerService_keba)
+add_subdirectory(HSPScanner.keba.1.1)
+add_subdirectory(IDCertificate.keba.1.1)
+add_subdirectory(PinPad.keba.1.1)
+add_subdirectory(ThermalPrint.keba.1.1)
+add_subdirectory(Ups.keba.1.1)
+add_subdirectory(WatchDog.keba.1.1)
+#add_subdirectory(ZKebaAdapterTest)
 #  =-=-=-=-=-=-=-=-=-= {VendorName}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
 rvc_aggereate_runtime_file()
 

+ 26 - 21
DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevCtrl.cpp

@@ -74,6 +74,7 @@ WORD CACT_Sankyo_DevCtrl::Close()
 
 WORD CACT_Sankyo_DevCtrl::GetDevStatus(LPDevStatus lpDevStatus)
 {
+    LOG_FUNCTION();
 	CRTCHUSensorInfo chuSnsInfo = {0};
 	CRTHoppersInfo hoppersInfo = {0};
 	BYTE bySt0 = '0';
@@ -121,9 +122,11 @@ WORD CACT_Sankyo_DevCtrl::GetDevStatus(LPDevStatus lpDevStatus)
 	}
 
 	wResult = GetDevErrCode(&errReply);
+    LogM("wResult = GetDevErrCode(&errReply)=%d; line=%d" ,wResult,__LINE__);
 	if (wResult != CRT_SUCCESS)
 	{
         wRes = m_pDevCtrlImpl->GetResErrorType(wResult);
+        LogM("wRes = m_pDevCtrlImpl->GetResErrorType(wResult)=%d; line=%d" ,wRes,__LINE__);
         if (wRes == CRT_RES_TYPE_SHUTTER_FAIL)
         {
             lpDevStatus->cardStatus.wShutter = CARD_READER_SHUTTER_FAIL;
@@ -148,6 +151,7 @@ WORD CACT_Sankyo_DevCtrl::GetDevStatus(LPDevStatus lpDevStatus)
 		}
 
 		wRes = m_pDevCtrlImpl->GetNomalResValue(errReply.message.positiveReply);
+        LogM("wRes = m_pDevCtrlImpl->GetNomalResValue(errReply.message.positiveReply)=%d; line=%d" ,wRes,__LINE__);
 		if (wRes == EXWORDHL(CRT_RES_NO_CARD_IN_CHU))
 		{
 			lpDevStatus->cardStatus.wCardPos = CARD_READER_CARD_POS_NOCARD;
@@ -168,8 +172,9 @@ WORD CACT_Sankyo_DevCtrl::GetDevStatus(LPDevStatus lpDevStatus)
 			}
 		}
 	}
-
+    usleep(50*1000);
 	wResult = GetHopperStatus(&hoppersInfo);
+    LogM("wResult = GetHopperStatus(&hoppersInfo)=%d; line=%d" ,wRes,__LINE__);
 	if (wResult == CRT_SUCCESS)
 	{
 		//HOPPER_1
@@ -244,7 +249,7 @@ WORD CACT_Sankyo_DevCtrl::GetDevSN(LPSTR lpDevSN)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -311,7 +316,7 @@ WORD CACT_Sankyo_DevCtrl::Reset(WORD wAction)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -357,7 +362,7 @@ WORD CACT_Sankyo_DevCtrl::PermitInsertion(WORD wCardType)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -383,7 +388,7 @@ WORD CACT_Sankyo_DevCtrl::DenyInsertion()
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -469,7 +474,7 @@ WORD CACT_Sankyo_DevCtrl::ReadTrackData(LPMediaData lpMediaData, int nMediaCnt)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet == FALSE)
 	{
 		return CRT_OFFLINE;
@@ -532,7 +537,7 @@ WORD CACT_Sankyo_DevCtrl::EjectCard()
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -558,7 +563,7 @@ WORD CACT_Sankyo_DevCtrl::RetainCard()
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -584,7 +589,7 @@ WORD CACT_Sankyo_DevCtrl::ReIntakeCard()
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -626,7 +631,7 @@ WORD CACT_Sankyo_DevCtrl::DispenseCard(WORD wHopperNum)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -679,7 +684,7 @@ WORD CACT_Sankyo_DevCtrl::ChipPower(WORD wChipPower)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -721,7 +726,7 @@ WORD CACT_Sankyo_DevCtrl::ReturnOffRetractCounter()
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet = FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -1080,7 +1085,7 @@ WORD CACT_Sankyo_DevCtrl::GetDevErrCode(LPREPLY lpErrReply)
 
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, lpErrReply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, lpErrReply, CMD_TIMEOUT_INQ);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -1097,6 +1102,7 @@ WORD CACT_Sankyo_DevCtrl::GetDevErrCode(LPREPLY lpErrReply)
 
 WORD CACT_Sankyo_DevCtrl::GetCHUStatus(LPCRTCHUSensorInfo lpCHUInfo, LPBYTE lpbyStMark)
 {
+    LOG_FUNCTION();
 	COMMAND command;
 	command.bCommandTag = CMD_TAG;
 	command.bCommandCode = 0x31;
@@ -1112,8 +1118,7 @@ WORD CACT_Sankyo_DevCtrl::GetCHUStatus(LPCRTCHUSensorInfo lpCHUInfo, LPBYTE lpby
 	WORD wResult = CRT_SUCCESS;
 	//BYTE byICCst = 0;
 	CRTResSensor resSensor = {0};
-
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -1129,7 +1134,6 @@ WORD CACT_Sankyo_DevCtrl::GetCHUStatus(LPCRTCHUSensorInfo lpCHUInfo, LPBYTE lpby
 	{
 		*lpbyStMark = reply.message.positiveReply.StatusCode.bSt0;
 		memcpy(&resSensor, reply.message.positiveReply.Data.bBody, sizeof(resSensor));
-		//GetIccStatus(&byICCst);
 		m_pDevCtrlImpl->GetCHUSensorInfo(lpCHUInfo, resSensor/*, byICCst*/);
 	}
 
@@ -1152,8 +1156,9 @@ WORD CACT_Sankyo_DevCtrl::GetHopperStatus(LPCRTHoppersInfo lpHoppersInfo)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 	BYTE szSnsInfo[8] = {0x00};
-
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    LogM("BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ=%d) line=%d",CMD_TIMEOUT_INQ,__LINE__);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
+    LogM("BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ=%d) line=%d",CMD_TIMEOUT_INQ,__LINE__);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -1190,7 +1195,7 @@ WORD CACT_Sankyo_DevCtrl::GetIccStatus(LPBYTE lpbyIccStatus)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -1239,7 +1244,7 @@ WORD CACT_Sankyo_DevCtrl::SetWriteMode(WORD wMode)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;
@@ -1292,7 +1297,7 @@ WORD CACT_Sankyo_DevCtrl::WriteDataToTrack(const MediaData writeData)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply);
+    BOOL bRet = m_pDevCtrlImpl->ExecuteCommand(command, &reply, CMD_TIMEOUT_ACT);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;

+ 3 - 4
DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevCtrl.h

@@ -1,11 +1,10 @@
-#pragma once
-
-/* 字节对齐设置为1 */
-#pragma pack(push,1)
+#pragma once
 
 #include "stdafx.h"
 #include "ACT_SDK_DevCtrlImpl.h"
 
+/* 字节对齐设置为1 */
+#pragma pack(push,1)
 
 class CACT_Sankyo_DevCtrl
 {

+ 6 - 5
DevAdapter/keba/CardIssuer.keba.1.1/ACT-Sankyo_DevDefine.h

@@ -1,12 +1,12 @@
-#pragma once
-
-/* 字节对齐设置为1 */
-#pragma pack(push,1)
+#pragma once
 
 #include "stdafx.h"
 #ifndef __CRTDEV_DEF_H
 #define __CRTDEV_DEF_H
 
+/* 字节对齐设置为1 */
+#pragma pack(push,1)
+
 //--------------------------------COMMAND--------------------------------------
 #define CMD_MAX_REPORT_LEN			(1024)
 #define	CMD_STX						(0xF2)
@@ -16,7 +16,8 @@
 #define CMD_CRCC_MIX_LEN			(6)
 #define CMD_TEXT_MIX_LEN			(3)
 #define	CMD_REPORT_MIX_TEXT_LEN		(6)
-#define CMD_TIMEOUT					(30000)
+#define CMD_TIMEOUT_INQ				(3000)
+#define CMD_TIMEOUT_ACT             (30000)
 
 #define	EXWORDHL(X)		(WORD)((((WORD)LOBYTE(X))<<8) | (HIBYTE(X)))
 

+ 1 - 4
DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_ComIO.cpp

@@ -71,9 +71,8 @@ long CACT_SDK_ComIO::SendAndRecv(const COMMAND cmdData, LPREPLY lpReply, DWORD d
 	ulCmdLen = 2 + cmdData.Data.dwSize;
 
     LogXM(bySendData, (UINT)ulCmdLen, "SendAndRecv->SendData");
-
     lRet = m_fnExecute(m_hDevice, bySendData, (int)ulCmdLen, (int)dwTimeOut, &m_cmdResult);
-	if (lRet == F5_S_SUCCESS)
+    if (lRet == F5_S_SUCCESS)
 	{
 		lpReply->replyType = PositiveReply;
 		lpReply->message.positiveReply.StatusCode.bSt0 = m_cmdResult.P.st0;
@@ -85,7 +84,6 @@ long CACT_SDK_ComIO::SendAndRecv(const COMMAND cmdData, LPREPLY lpReply, DWORD d
 		{
 			memcpy(&lpReply->message.positiveReply.Data.bBody, m_cmdResult.RDTBuff, m_cmdResult.RDTLength);
 			lpReply->message.positiveReply.Data.dwSize = m_cmdResult.RDTLength;
-
             LogXM(m_cmdResult.RDTBuff, m_cmdResult.RDTLength, "Com Read RDTBuff");
 		}
 	}
@@ -102,7 +100,6 @@ long CACT_SDK_ComIO::SendAndRecv(const COMMAND cmdData, LPREPLY lpReply, DWORD d
             {
                 memcpy(&lpReply->message.negativeReply.Data.bBody, m_cmdResult.RDTBuff, m_cmdResult.RDTLength);
                 lpReply->message.negativeReply.Data.dwSize = m_cmdResult.RDTLength;
-
                 LogXM(m_cmdResult.RDTBuff, m_cmdResult.RDTLength, "lRet = F5_E_COMMAND_FAILED,Com Read RDT");
             }
         }

+ 3 - 4
DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_ComIO.h

@@ -1,7 +1,4 @@
-#pragma once
-
-/* 字节对齐设置为1 */
-#pragma pack(push,1)
+#pragma once
 
 #include "ACT-Sankyo_DevDefine.h"
 #include "F5Sanapi.h"
@@ -11,6 +8,8 @@
 
 using namespace std;
 
+/* 字节对齐设置为1 */
+#pragma pack(push,1)
 
 typedef int  (*fnConnect)(
     __in const char*,

+ 12 - 2
DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_DevCtrlImpl.cpp

@@ -42,9 +42,18 @@ BOOL CACT_SDK_DevCtrlImpl::ExecuteCommand(const COMMAND cmdToSend, LPREPLY lpRep
     }
     if (cmdToSend.bCommandCode == 0x30 && cmdToSend.bParameterCode == 0x32)
     {
-        //usleep(1000 * 1000);
         usleep(500 * 1000);
     }
+    if (cmdToSend.bCommandCode == 0x31 && cmdToSend.bParameterCode == 0x33)
+    {
+        usleep(100 * 1000);
+        LogM("usleep(100000); line=%d",__LINE__);
+    }
+    if (cmdToSend.bCommandCode == 0x40 && cmdToSend.bParameterCode == 0x32)
+    {
+        usleep(100 * 1000);
+        LogM("usleep(100000); line=%d",__LINE__);
+    }
     lRet = m_pSDKComIO->SendAndRecv(cmdToSend, lpReply, dwTimeOut);
     if (lRet != F5_S_SUCCESS)
     {
@@ -52,6 +61,7 @@ BOOL CACT_SDK_DevCtrlImpl::ExecuteCommand(const COMMAND cmdToSend, LPREPLY lpRep
         {
             //usleep(1000 * 1000);
             usleep(500 * 1000);
+            LogM("lRet == F5_E_DEV_NOT_READY line=%d",__LINE__);
             lRet = m_pSDKComIO->SendAndRecv(cmdToSend, lpReply, dwTimeOut);
             if (lRet != F5_S_SUCCESS)
             {
@@ -278,7 +288,7 @@ WORD CACT_SDK_DevCtrlImpl::SendAPDU(ChipInfo ChipData, LPREPLY lpReply)
 	REPLY reply;
 	WORD wResult = CRT_SUCCESS;
 
-	BOOL bRet = ExecuteCommand(command, &reply);
+    BOOL bRet = ExecuteCommand(command, &reply, CMD_TIMEOUT_INQ);
 	if (bRet == FALSE)
 	{
 		wResult = CRT_OFFLINE;

+ 4 - 4
DevAdapter/keba/CardIssuer.keba.1.1/ACT_SDK_DevCtrlImpl.h

@@ -1,12 +1,12 @@
 #pragma once
 
-/* 字节对齐设置为1 */
-#pragma pack(push,1)
-
 #include "ACT_SDK_ComIO.h"
 //编译版本
 #define  FILE_VERSION  2
 
+/* 字节对齐设置为1 */
+#pragma pack(push,1)
+
 class CACT_SDK_DevCtrlImpl
 {
 public:
@@ -16,7 +16,7 @@ public:
 public:
 	BOOL OpenDevice(LPCSTR lpComNum, const DWORD dwBaudRate);
 	void CloseDevice();
-	BOOL ExecuteCommand(const COMMAND cmdToSend, LPREPLY lpReply, DWORD dwTimeOut = CMD_TIMEOUT);
+    BOOL ExecuteCommand(const COMMAND cmdToSend, LPREPLY lpReply, DWORD dwTimeOut = CMD_TIMEOUT_ACT);
 
 public:
 	BOOL GetCHUSensorInfo(LPCRTCHUSensorInfo lpSnsInfo, CRTResSensor resSensor/*, BYTE bICCStatus*/);

+ 1 - 1
DevAdapter/keba/CardIssuer.keba.1.1/CMakeLists.txt

@@ -6,7 +6,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 42 - 63
DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.cpp

@@ -47,7 +47,7 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
     strcpy(devCategory.szType, "PVER=ACT#MID=ACT-F5-5540-0SH");
     strcpy(devCategory.szModel, "CM=V2.0");
     strcpy(devCategory.szVendor, "keba");
-    LogM("CardIssuerClassImpl->GetDevCategory():devCategory.szType=%s,devCategory.szModel=%s,devCategory.szVendor=%s",devCategory.szType,devCategory.szModel,devCategory.szVendor);
+    LogM("CardIssuerClassImpl->GetDevCategory():devCategory.szType=%s,devCategory.szModel=%s,devCategory.szVendor=%s line=%d",devCategory.szType,devCategory.szModel,devCategory.szVendor,__LINE__);
 
     char sPath[256], sFile[128] = {0};
     GetCurModulePath(sPath, sFile);
@@ -70,61 +70,53 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 
 ErrorCodeEnum CardIssuerClassImpl::Reset()
 {
-//    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
     std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
-    //LogM("CardIssuerClassImpl::entry->Reset()");
-
     int nRet=m_pACT_Sankyo_DevCtrl->Reset(CARD_READER_DEV_ACT_HOLD);
-    LogM("CardIssuerClassImpl::leave->Reset() ret=[%d]!", nRet);
+    LogM("CardIssuerClassImpl::leave->Reset() ret=[%d]! line=%d", nRet,__LINE__);
     return ErrorCodeToCMB(nRet);
 }
 
 ErrorCodeEnum CardIssuerClassImpl::DevClose()
 {
     LOG_FUNCTION();
-
-    //LogM("CardIssuerClassImpl::entry->DevClose()");
     m_pACT_Sankyo_DevCtrl->Close();
     m_bDevOpen = false;
-    LogM("CardIssuerClassImpl::leave->DevClose() sucessfull!");
+    LogM("CardIssuerClassImpl::leave->DevClose() sucessfull! line=%d",__LINE__);
     return Error_Succeed;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
     LOG_FUNCTION();
-    //LogM("CardIssuerClassImpl::entry->GetLastErr()");
-
     devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
     memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
     devErrInfo.dwErrMsgLen = (m_wDevErrCode << 16);
     memcpy(devErrInfo.szErrMsg, m_szErrMsg, MIN(devErrInfo.dwErrMsgLen, MAX_DEV_ERROR_MSG_LEN));
     devErrInfo.dwErrMsgLen += (strlen(devErrInfo.szErrMsg) & 0x0000FFFF);
-
-    LogM("GetLastErr->szErrMsg=%s",devErrInfo.szErrMsg);
+    LogM("GetLastErr->szErrMsg=%s,line=%d",devErrInfo.szErrMsg,__LINE__);
     return Error_Succeed;
 }
 
 ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort,DWORD dwBaudRate)
 {
     LOG_FUNCTION();
-    LogM("DevOpen(dwPort=%d,DWORD dwBaudRate=%d)",dwPort,dwBaudRate);
+    LogM("DevOpen(dwPort=%d,DWORD dwBaudRate=%d line=%d)",dwPort,dwBaudRate,__LINE__);
     WORD wRet = m_pACT_Sankyo_DevCtrl->Open(dwPort, dwBaudRate);
     if (wRet == CRT_SUCCESS)
     {
         m_bDevOpen = true;
         wRet = m_pACT_Sankyo_DevCtrl->Reset(CARD_READER_DEV_ACT_HOLD);
-        LogM("leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset() wRet=[%d]", wRet);
+        LogM("leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset() wRet=[%d] line=%d", wRet,__LINE__);
         if (wRet == CRT_SUCCESS)
         {
             wRet = m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter();
-            LogM("leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset()->ReturnOffRetractCounter() wRet=[%d]", wRet);
+            LogM("leave->CardIssuer->DevOpen()->m_pACT_Sankyo_DevCtrl->Reset()->ReturnOffRetractCounter() wRet=[%d] line=%d", wRet,__LINE__);
         }
-        LogM("CardIssuerClassImpl::leave->CardIssuer->DevOpen() sucessful");
+        LogM("CardIssuerClassImpl::leave->CardIssuer->DevOpen() sucessful line=%d",__LINE__);
         return Error_Succeed;
     }
-    LogM("CardIssuerClassImpl::DevOpen() fail, wRet=[%d]", wRet);
+    LogM("CardIssuerClassImpl::DevOpen() fail, wRet=[%d] line=%d", wRet,__LINE__);
     return ErrorCodeToCMB(wRet);
 }
 //
@@ -144,7 +136,6 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus_Private(CardIssuerStatus &devSta
     DevStatus getStatus = {0};
     WORD wRet = CRT_SUCCESS;
     wRet = m_pACT_Sankyo_DevCtrl->GetDevStatus(&getStatus);
-    LogM("CardIssuerClassImpl::m_pACT_Sankyo_DevCtrl->GetDevStatus() wRet=[%d]", wRet);
     if (wRet == CRT_SUCCESS)
     {
         // eMedia
@@ -301,11 +292,11 @@ ErrorCodeEnum CardIssuerClassImpl::GetDevStatus_Private(CardIssuerStatus &devSta
 ErrorCodeEnum CardIssuerClassImpl::GetDeviceSN(char *&pDevSN)
 {
 //    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-     std::lock_guard<std::mutex> lock(m_mutex);
+    std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
-    LogM("CardIssuerClassImpl::entry->GetDeviceSN(pDevSN=%d)",pDevSN);
+    LogM("CardIssuerClassImpl::entry->GetDeviceSN(pDevSN=%d) line=%d",pDevSN,__LINE__);
     memcpy(pDevSN, "100000000001", strlen("100000000001"));
-    LogM("CardIssuerClassImpl::leave->GetDeviceSN(pDevSN=%d) sucessful !!",pDevSN);
+    LogM("CardIssuerClassImpl::leave->GetDeviceSN(pDevSN=%d) sucessful !! line=%d",pDevSN,__LINE__);
     return Error_Succeed;
 }
 //
@@ -317,7 +308,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
 //    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
      std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
-    LogM("CardIssuerClassImpl::MoveCard( eCardPos=%d,  hopperNo=%d)",eCardPos,hopperNo);
+    LogM("CardIssuerClassImpl::MoveCard( eCardPos=%d,  hopperNo=%d line=%d )",eCardPos,hopperNo,__LINE__);
 
     CardIssuerStatus devStatus;
     memset(&devStatus, 0x00, sizeof(CardIssuerStatus));
@@ -330,8 +321,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
         if(CI_RETAIN_NOTSUPP == devStatus.eRetainBin) //回收盒未放置
         {
             SaveErrorInfo("CARD_READER_RETAINBIN_NOT_POS", "CI_RETAIN_NOTSUPP", Error_Hardware);
-            LogM("MoveCard(),m_szErrMsg={%s} ,m_wDevErrCode=[%d]", m_szErrMsg, m_wDevErrCode);
-
+            LogM("MoveCard(),m_szErrMsg={%s} ,m_wDevErrCode=[%d] line=%d", m_szErrMsg, m_wDevErrCode,__LINE__);
             return Error_Hardware;
         }
 
@@ -340,22 +330,22 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
         if (wRet == CRT_SUCCESS)
         {
             wRet = m_pACT_Sankyo_DevCtrl->RetainCard();
-            LogM("CardIssuerClassImpl::MoveCard()->CheckReleaseIC()->RetainCard() wRet=[%d]", wRet);
+            LogM("CardIssuerClassImpl::MoveCard()->CheckReleaseIC()->RetainCard() wRet=[%d] line=%d", wRet,__LINE__);
         }
     }
     else if (eCardPos == CI_MOVECARD_FROM_HOPPER)
     {
         wRet = m_pACT_Sankyo_DevCtrl->DispenseCard(hopperNo);
-        LogM("CardIssuerClassImpl::leave->MoveCard()->DispenseCard() wRet=[%d]", wRet);
+        LogM("CardIssuerClassImpl::leave->MoveCard()->DispenseCard() wRet=[%d] line=%d", wRet,__LINE__);
     }
     else if (eCardPos == CI_MOVECARD_FRONT_GATE)
     {
         wRet = m_pACT_Sankyo_DevCtrl->CheckReleaseIC();
-        LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() wRet=[%d]", wRet);
+        LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() wRet=[%d] line=%d", wRet,__LINE__);
         if (wRet == CRT_SUCCESS)
         {
             wRet = m_pACT_Sankyo_DevCtrl->EjectCard();
-            LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC()->EjectCard() wRet=[%d]", wRet);
+            LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC()->EjectCard() wRet=[%d] line=%d", wRet,__LINE__);
         }
     }
     else if (eCardPos == CI_MOVECARD_RETRIEVE)
@@ -366,7 +356,7 @@ ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo)
     else if (eCardPos == CI_MOVECARD_MAG_POSITION)
     {
         wRet = m_pACT_Sankyo_DevCtrl->CheckReleaseIC();
-        LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() wRet=[%d]", wRet);
+        LogM("CardIssuerClassImpl::leave->MoveCard()->CheckReleaseIC() wRet=[%d] line=%d", wRet,__LINE__);
     }
     return ErrorCodeToCMB(wRet);
 }
@@ -378,7 +368,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
 //    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
      std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
-    LogM("CardIssuerClassImpl::entry->SetCardInType(eCardIn=%d)",eCardIn);
+    LogM("CardIssuerClassImpl::entry->SetCardInType(eCardIn=%d) line=%d",eCardIn,__LINE__);
     WORD wRet = CRT_SUCCESS;
     if (eCardIn == CI_CARD_IN_TYPE_ALL)
     {
@@ -392,7 +382,7 @@ ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
     {
         wRet = m_pACT_Sankyo_DevCtrl->DenyInsertion();
     }
-    LogM("CardIssuerClassImpl::leave->SetCardInType() wRet=[%d]", wRet);
+    LogM("CardIssuerClassImpl::leave->SetCardInType() wRet=[%d] line=%d", wRet,__LINE__);
     return ErrorCodeToCMB(wRet);
 }
 //
@@ -403,7 +393,7 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 //    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
      std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
-    LogM("CardIssuerClassImpl::entry->MagRead(magTracks.eRange=%d)",magTracks.eRange);
+    LogM("CardIssuerClassImpl::entry->MagRead(magTracks.eRange=%d) line=%d",magTracks.eRange,__LINE__);
     MediaData trackDataLst[3] = {0};
     int nTrackCnt = 0;
     int i = 0,j=0;
@@ -428,7 +418,7 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
         trackDataLst[nTrackCnt++].wMediaID = CARD_READER_MEDIA_TRACK3;
     }
     WORD wRet = m_pACT_Sankyo_DevCtrl->ReadTrackData(trackDataLst, nTrackCnt);
-    LogM("CardIssuerClassImpl::leave->MagRead()->ReadTrackData() wRet=[%d]", wRet);
+    LogM("CardIssuerClassImpl::leave->MagRead()->ReadTrackData() wRet=[%d] line=%d", wRet,__LINE__);
     if (wRet == CRT_SUCCESS)
     {
         for (i = 0; i < MAX_MAG_TRACK_NUM; i++)
@@ -492,12 +482,10 @@ ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
 //
 ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks,MagWriteModeEnum eWriteMode)
 {
-//    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-     std::lock_guard<std::mutex> lock(m_mutex);
-    LOG_FUNCTION();
-
-    LogM("CardIssuerClassImpl::entry->MagWrite(magTracks.track=%d, eWriteMode=%d)",magTracks.track,eWriteMode);
 
+    std::lock_guard<std::mutex> lock(m_mutex);
+    LOG_FUNCTION();
+    LogM("CardIssuerClassImpl::entry->MagWrite(magTracks.track=%d, eWriteMode=%d  line=%d)",magTracks.track,eWriteMode,__LINE__);
     MediaData trackDataLst[3] = {0};
     int nTrackCnt = 0;
     int i = 0;
@@ -567,13 +555,10 @@ ErrorCodeEnum CardIssuerClassImpl::SetIssuerCounter(DWORD dwCount,int hopperNo)
 //
 ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 {
-//    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-     std::lock_guard<std::mutex> lock(m_mutex);
+    std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
-
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE);
-    LogM("CardIssuerClassImpl::leave->ActiveICCard()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE) nRet=[%d] !!", nRet);
-
+    LogM("CardIssuerClassImpl::leave->ActiveICCard()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_ACTIVE) nRet=[%d] line=%d!!", nRet,__LINE__);
     return ErrorCodeToCMB(nRet);
 }
 //
@@ -581,12 +566,10 @@ ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
 //
 ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 {
-//    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-     std::lock_guard<std::mutex> lock(m_mutex);
+    std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
-
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT);
-    LogM("CardIssuerClassImpl::leave->ContactIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT) nRet=[%d] !!", nRet);
+    LogM("CardIssuerClassImpl::leave->ContactIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_CONTACT) nRet=[%d] line=%d!!", nRet,__LINE__);
     return ErrorCodeToCMB(nRet);
 }
 //
@@ -594,12 +577,10 @@ ErrorCodeEnum CardIssuerClassImpl::ContactIC()
 //
 ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 {
-//    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-     std::lock_guard<std::mutex> lock(m_mutex);
+    std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE);
-    LogM("CardIssuerClassImpl::leave->ReleaseIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE) nRet=[%d] !!", nRet);
-
+    LogM("CardIssuerClassImpl::leave->ReleaseIC()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_RELEASE) nRet=[%d] line=%d!!", nRet,__LINE__);
     return ErrorCodeToCMB(nRet);
 }
 //
@@ -607,18 +588,16 @@ ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
 //
 ErrorCodeEnum CardIssuerClassImpl::WarmReset()
 {
-//    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-     std::lock_guard<std::mutex> lock(m_mutex);
+    std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
     int nRet=m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM);
-    LogM("CardIssuerClassImpl::leave->WarmReset()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM) nRet=[%d] !!", nRet);
+    LogM("CardIssuerClassImpl::leave->WarmReset()->m_pACT_Sankyo_DevCtrl->ChipPower(CARD_READER_ICC_WARM) nRet=[%d] line=%d!!", nRet,__LINE__);
     return ErrorCodeToCMB(nRet);
 }
 
 ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf,CmdInfo &recvBuf)
 {
-//    CSetupMutex baseMutex(CARDISSUER_ADAPTER_MUTEX);
-     std::lock_guard<std::mutex> lock(m_mutex);
+    std::lock_guard<std::mutex> lock(m_mutex);
     LOG_FUNCTION();
     WORD wRet = CRT_SUCCESS;
     ChipIOData chipData = {0x00};
@@ -634,7 +613,7 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf,CmdInfo &recvBuf)
     }
 
     wRet = m_pACT_Sankyo_DevCtrl->ChipIO(&chipData);
-    LogM("CardIssuerClassImpl::ICCommand->ChipIO wRet=[%d] !!", wRet);
+    LogM("CardIssuerClassImpl::ICCommand->ChipIO wRet=[%d] line=%d!!", wRet,__LINE__);
     if (wRet == CRT_SUCCESS)
     {
         recvBuf.dwSize = chipData.recvData.dwDataLen;
@@ -647,7 +626,7 @@ ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf,CmdInfo &recvBuf)
 ErrorCodeEnum CardIssuerClassImpl::ActiveContactlessICCard(char fstType, char scdType, char thdType, char &outType)
 {
     LOG_FUNCTION();
-    LogM("Error_NotImpl");
+    LogM("Error_NotImpl line=%d",__LINE__);
     return Error_NotImpl;
 }
 //
@@ -694,24 +673,24 @@ ErrorCodeEnum CardIssuerClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &rec
 ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType,const char *pDevSN, BYTE &btType)
 {
     LOG_FUNCTION();
-    LogM("CardIssuerClassImpl::entry->CardIssuer->DevOpenEx(dwPort=%d,dwBaudRate=%d, btOpenType,pDevSN=%s, btType)",dwPort,dwBaudRate,pDevSN);
+    LogM("CardIssuerClassImpl::entry->CardIssuer->DevOpenEx(dwPort=%d,dwBaudRate=%d, btOpenType,pDevSN=%s, line=%d)",dwPort,dwBaudRate,pDevSN,__LINE__);
     btType=2;
     WORD wRet = m_pACT_Sankyo_DevCtrl->Open(dwPort, dwBaudRate);
     if (wRet == CRT_SUCCESS)
     {
         m_bDevOpen = true;
         wRet = m_pACT_Sankyo_DevCtrl->Reset(CARD_READER_DEV_ACT_HOLD);
-        LogM("CardIssuerClassImpl::leave->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset() wRet=[%d]", wRet);
+        LogM("CardIssuerClassImpl::leave->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset() wRet=[%d] line=%d", wRet,__LINE__);
         if (wRet == CRT_SUCCESS)
         {
             btType = DEV_OPEN_TYPE_COM;
             wRet = m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter();
-            LogM("CardIssuerClassImpl::entry->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset()->m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter()wRet=[%d]", wRet);
+            LogM("CardIssuerClassImpl::entry->DevOpenEx()->m_pACT_Sankyo_DevCtrl->Reset()->m_pACT_Sankyo_DevCtrl->ReturnOffRetractCounter()wRet=[%d] line=%d", wRet,__LINE__);
         }
-        LogM("CardIssuerClassImpl::leave->DevOpenEx() sucessfull");
+        LogM("CardIssuerClassImpl::leave->DevOpenEx() sucessfull line=%d",__LINE__);
         return Error_Succeed;
     }
-    LogM("CardIssuerClassImpl::leave->DevOpenEx() failed");
+    LogM("CardIssuerClassImpl::leave->DevOpenEx() failed line=%d",__LINE__);
     return ErrorCodeToCMB(wRet);
 }
 //	返回值Error_Succeed表示成功,其他值表示失败

+ 1 - 2
DevAdapter/keba/CardIssuer.keba.1.1/CardIssuerClassImpl_ACT-Sankyo.h

@@ -4,8 +4,6 @@
 //#include "log4vendor.h"
 #include "CardIssuerClass.h"
 #include "ACT-Sankyo_DevCtrl.h"
-
-
 #include <mutex>
 
 #define CARDISSUER_ADAPTER_MUTEX		"CardIssuerAdapterMutex"
@@ -16,6 +14,7 @@ public:
 	CardIssuerClassImpl();
 	~CardIssuerClassImpl();
 
+protected:
 
 	virtual ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
 

+ 1 - 1
DevAdapter/keba/ContactlessCard.keba.1.1/CMakeLists.txt

@@ -6,7 +6,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 0 - 0
DevAdapter/keba/ContactlessCard.keba.1.1/ContactlessCard.cpp


+ 0 - 4
DevAdapter/keba/ContactlessCard.keba.1.1/resource.h

@@ -1,4 +0,0 @@
-#ifndef RESOURCE_H
-#define RESOURCE_H
-
-#endif // RESOURCE_H

+ 1 - 1
DevAdapter/keba/FingerPrint.keba.1.1/CMakeLists.txt

@@ -10,7 +10,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 1 - 1
DevAdapter/keba/Gpio.keba.1.1/CMakeLists.txt

@@ -6,7 +6,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 3 - 1
DevAdapter/keba/Gpio.keba.1.1/GpioClassImpl_DistrBusUSB.h

@@ -1,7 +1,7 @@
 #pragma once
 #ifndef GPIOCLASSIMPL_DISTRBUSUSB_H
 #define GPIOCLASSIMPL_DISTRBUSUSB_H
-#pragma pack(push,1)
+//#pragma pack(push,1)
 
 
 #include "GpioClass.h"
@@ -9,6 +9,8 @@
 //#include "log4vendor.h"
 
 using namespace std;
+#pragma pack(push,1)
+
 
 #define _DISTRBUSUSB_DEVICENAME "\\\\.\\DIO$"
 enum Method : int

+ 1 - 1
DevAdapter/keba/Gpio.keba.1.1/KEBA_DevCtrl.cpp

@@ -13,7 +13,7 @@
 //#include <errno.h>
 //#include <sys/time.h>
 //#include <sys/stat.h>
-#include <alsa/asoundlib.h>
+//#include <alsa/asoundlib.h>
 
 #include "stdafx.h"
 //#include "KEBA_DevCtrl.h"

+ 18 - 19
DevAdapter/keba/HSPScanner.keba.1.1/CMakeLists.txt

@@ -3,15 +3,17 @@ set(${MODULE_PREFIX}_VENDOR "keba")
 set(${MODULE_PREFIX}_VERSION "1")
 set(${MODULE_PREFIX}_BATCH "1")
 
-set(CMAKE_PREFIX_PATH $ENV{QTDIR5113})
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTOUIC ON)
+if(NOT RVC_INTEGRATE_BUILD)
+    set(CMAKE_PREFIX_PATH $ENV{QTDIR5113})
+    set(CMAKE_INCLUDE_CURRENT_DIR ON)
+    set(CMAKE_AUTOMOC ON)
+    set(CMAKE_AUTOUIC ON)
+endif()
 
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}
@@ -22,7 +24,7 @@ message(STATUS "include_directories: ${INCLUDE_KEBA}")
 
 #收录当前目录下的所有* . cpp文件
 aux_source_directory(. SRC_LIST)
-set(HEADERS  hspscannerform.ui hspscannerimpl.h hspscannerform.h )
+set(HEADERS   stdafx.h hspscannerimpl.h  CkLog.h stdafx.h CkDBus.h)
 
 
 # 包含要编译的实现文件,rvc_dev_config_library 内使用
@@ -31,14 +33,14 @@ set(${MODULE_PREFIX}_SRCS SHARED
 )
 
 if(RVC_INTEGRATE_BUILD)
-	if(NOT CONAN_QT_ROOT)
-		conan_cmake_run( REQUIRES  qt/5.11.3@LR04.02_ThirdParty/stable BASIC_SETUP CMAKE_TARGETS)
-	endif()
-	find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED HINTS ${CONAN_QT_ROOT} NO_SYSTEM_ENVIRONMENT_PATH )
-	message(STATUS "CONAN_QT_ROOT: ${CONAN_QT_ROOT}")
+    if(NOT CONAN_QT_ROOT)
+        conan_cmake_run( REQUIRES  qt/5.11.3@LR04.02_ThirdParty/stable BASIC_SETUP CMAKE_TARGETS)
+    endif(NOT CONAN_QT_ROOT )
+    find_package(Qt5 COMPONENTS Core DBus REQUIRED 
+        HINTS ${CONAN_QT_ROOT} NO_SYSTEM_ENVIRONMENT_PATH )
     conan_cmake_run( REQUIRES  opencv/3.1.0@LR04.02_ThirdParty/stable BASIC_SETUP CMAKE_TARGETS)
 else()
-    find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+    find_package(Qt5 COMPONENTS Core DBus REQUIRED)
     find_package(OpenCV REQUIRED)
 endif(RVC_INTEGRATE_BUILD)
 #生成动态库
@@ -55,9 +57,6 @@ target_link_libraries(${MODULE_FULL_NAME} ${VENDOR_LOG_LIB_NAME})
 #链接keba依赖的日志库以及锁库
 target_link_libraries(${MODULE_FULL_NAME} Common.keba)
 
- target_link_libraries(${MODULE_FULL_NAME}  Qt5::Core Qt5::Gui)
- target_link_libraries(${MODULE_FULL_NAME}  Qt5::Widgets)
-
 #链接OpenCV
 if(RVC_INTEGRATE_BUILD)
     #链接银行opencv头文件路径和库路径和依赖opencv库
@@ -69,11 +68,11 @@ else()
     target_include_directories(${MODULE_FULL_NAME} PUBLIC ${OpenCV_INCLUDE_DIRS})
     #链接opencv依赖的库
     target_link_libraries( ${MODULE_FULL_NAME}   ${OpenCV_LIBS})
-    #链接Qt依赖的库
-    target_link_libraries(${MODULE_FULL_NAME}  Qt5::Core Qt5::Gui)
-    target_link_libraries(${MODULE_FULL_NAME}  Qt5::Widgets)
-endif(RVC_INTEGRATE_BUILD)
 
+endif(RVC_INTEGRATE_BUILD)
+    #链接Qt依赖的库
+    target_link_libraries(${MODULE_FULL_NAME}  Qt5::Core)
+    target_link_libraries(${MODULE_FULL_NAME}  Qt5::DBus)
 
 #设置动态库输出路径:/data/home/keba/DevAdapter/cmbsz/lib/gcc_aarch64或者gcc_x64
 

+ 660 - 0
DevAdapter/keba/HSPScanner.keba.1.1/CkDBus.cpp

@@ -0,0 +1,660 @@
+#include "stdafx.h"
+#include "CkDBus.h"
+
+LOG_EXTERN()
+
+pid_t CkDBus::m_pid_Client = 0;
+pid_t CkDBus::m_pid_Service = 0;
+CkDBus::CkDBus()
+{
+    //m_DbusConn = &QDBusConnection::sessionBus();
+
+}
+
+CkDBus::~CkDBus()
+{
+
+}
+
+
+bool CkDBus::StartDBusServer(QDBusConnection *lpBus, CkDBus *lpObj)
+{
+    //m_DbusConn =
+    if ((lpBus == nullptr) || (lpObj == nullptr))
+    {
+        return false;
+    }
+
+    if (lpBus->registerService(lpObj->m_DBusInf_S.sDBusName) == false)
+    {
+        return false;
+    }
+
+    if (lpBus->registerObject(lpObj->m_DBusInf_S.sObjectName, lpObj, QDBusConnection::ExportAllSlots) == false)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+
+bool CkDBus::StartDBusClient(QDBusConnection *lpBus, CkDBus *lpObj)
+{
+    //m_DbusConn =
+    if ((lpBus == nullptr) || (lpObj == nullptr))
+    {
+        return false;
+    }
+
+    if (lpBus->registerService(lpObj->m_DBusInf_C.sDBusName) == false)
+    {
+        return false;
+    }
+
+    if (lpBus->registerObject(lpObj->m_DBusInf_C.sObjectName, lpObj, QDBusConnection::ExportAllSlots) == false)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+
+DBusInfo CkDBus::GetDBusInfo_C(LPCSTR lpszWndName)
+{
+    DBusInfo dbusInf;
+    memset(&dbusInf, 0x00, sizeof(dbusInf));
+
+    sprintf(dbusInf.sDBusName, "%s.%s", AP_DBUS_NAME_PREF_C, lpszWndName);
+    strcpy(dbusInf.sInterfaceName, AP_DBUS_INTF_NAME_C);
+    strcpy(dbusInf.sObjectName, AP_DBUS_OBJECT_NAME_C);
+    strcpy(dbusInf.sMethodName, AP_DBUS_METHOD_NAME);
+
+    return dbusInf;
+}
+
+
+DBusInfo CkDBus::GetDBusInfo_S(LPCSTR lpszWndName)
+{
+    DBusInfo dbusInf;
+    memset(&dbusInf, 0x00, sizeof(dbusInf));
+
+    sprintf(dbusInf.sDBusName, "%s.%s", AP_DBUS_NAME_PREF_S, lpszWndName);
+    strcpy(dbusInf.sInterfaceName, AP_DBUS_INTF_NAME_S);
+    strcpy(dbusInf.sObjectName, AP_DBUS_OBJECT_NAME_S);
+    strcpy(dbusInf.sMethodName, AP_DBUS_METHOD_NAME);
+
+    return dbusInf;
+}
+
+
+//带超时的调用Dbus远程函数的方法  对方函数有int返回值
+//const char *bus_name, const char *iface, const char *ObjectPath, const char *method,
+long CkDBus::CallRemoteFunc_ReplyTimeout(LPDBusInfo lpDbusNames, LPARAM lParam, UINT uTimeout, LPDWORD lpdwResult)
+{
+    long lRet = 1;
+    // 0: NG 1:OK
+    DWORD dwRet = 0;
+    // Return of callback
+
+    DBusError err;
+    // initialiset the errors
+    dbus_error_init(&err);
+
+    // connect to the session bus and check for errors
+    DBusConnection *conn = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
+    if (dbus_error_is_set(&err))
+    {
+        fprintf(stderr, "Connection Error (%s)\n", err.message);
+        dbus_error_free(&err);
+        return 0;
+    }
+
+    if (nullptr == conn)
+    {
+        return 0;
+    }
+
+    DBusMessage* msg = dbus_message_new_method_call( lpDbusNames->sDBusName, // target bus for the method call
+                                                     lpDbusNames->sObjectName, // object to call on
+                                                     lpDbusNames->sInterfaceName, // interface to call on
+                                                     lpDbusNames->sMethodName); // method name
+    if (nullptr == msg)
+    {
+       fprintf(stderr, "Message Null\n");
+       return 0;
+    }
+
+    // append arguments
+    DBusMessageIter args;
+    dbus_message_iter_init_append(msg, &args);
+
+    long long _lParam = lParam;
+    if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT64, &_lParam))
+    {
+        fprintf(stderr, "Out Of Memory!\n");
+        return 0;
+    }
+
+    DBusPendingCall* pending;
+    // 发送消息(-1表示使用默认超时)
+    /// Parameters:
+    /// connection	            the connection
+    /// message	                the message to send
+    /// pending_return	        return location for a DBusPendingCall object, or NULL if connection is disconnected or when you try
+    ///                         to send Unix file descriptors on a connection that does not support them.
+    /// timeout_milliseconds	timeout in milliseconds, -1 (or DBUS_TIMEOUT_USE_DEFAULT) for default or DBUS_TIMEOUT_INFINITE for
+    ///                         no timeout
+    /// Returns:
+    /// FALSE if no memory, TRUE otherwise.
+    ///
+    if (!dbus_connection_send_with_reply (conn, msg, &pending, uTimeout))
+    {
+        fprintf(stderr, "Out Of Memory!\n");
+        return 0;
+    }
+    if (nullptr == pending)
+    {
+        fprintf(stderr, "Pending Call Null\n");
+        return 0;
+    }
+
+    // 阻塞直到发送的消息队列为空
+    dbus_connection_flush(conn);
+    //printf("Request Sent\n");
+
+    // 释放消息
+    dbus_message_unref(msg);
+
+    // 阻塞至消息返回
+    dbus_pending_call_block(pending);
+
+    // 获取返回消息
+    msg = dbus_pending_call_steal_reply(pending);
+    if (nullptr == msg)
+    {
+        fprintf(stderr, "Reply Null\n");
+        return 0;
+    }
+
+    // 释放pending
+    dbus_pending_call_unref(pending);
+
+    int nRet;
+    // 读取参数
+    if (!dbus_message_iter_init(msg, &args))
+    {
+        fprintf(stderr, "Message has no arguments!\n");
+        return 0;
+    }
+    else if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&args))
+    {
+        fprintf(stderr, "Argument is not int!\n");
+        return 0;
+    }
+    else
+    {
+        dbus_message_iter_get_basic(&args, &nRet);
+    }
+
+    //printf("Got Reply, nRet = %d\n", nRet);
+
+    // 释放方法返回的消息
+    dbus_message_unref(msg);
+    dbus_connection_flush(conn);
+    dbus_connection_close(conn);
+
+    dwRet = (DWORD)nRet;
+    if (lpdwResult != NULL)
+    {
+        *lpdwResult = dwRet;
+    }
+
+    return lRet;
+}
+
+
+
+bool CkDBus::CallRemoteFunc_Post(LPDBusInfo lpDbusNames, LPARAM lParam)
+{
+    DBusError err;
+    // initialiset the errors
+    dbus_error_init(&err);
+
+    // connect to the session bus and check for errors
+    DBusConnection *conn = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
+    if (dbus_error_is_set(&err))
+    {
+        fprintf(stderr, "Connection Error (%s)\n", err.message);
+        dbus_error_free(&err);
+        return false;
+    }
+
+    if (nullptr == conn)
+    {
+        return false;
+    }
+
+    DBusMessage* msg = dbus_message_new_method_call( lpDbusNames->sDBusName, // target for the method call
+                                                     lpDbusNames->sObjectName, // object to call on
+                                                     lpDbusNames->sInterfaceName, // interface to call on
+                                                     lpDbusNames->sMethodName); // method name
+    if (nullptr == msg)
+    {
+       fprintf(stderr, "Message Null\n");
+       return false;
+    }
+
+    // append arguments
+    DBusMessageIter args;
+    dbus_message_iter_init_append(msg, &args);
+
+    long long _lParam = lParam;
+    if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT64, &_lParam))
+    {
+        fprintf(stderr, "Out Of Memory!\n");
+        return false;
+    }
+
+    dbus_uint32_t serial = 0;
+    if (!dbus_connection_send(conn, msg, &serial))
+    {
+        fprintf(stderr, "send error");
+        return false;
+    }
+
+    dbus_connection_flush(conn);
+    printf("dbus msg sent.\n");
+
+    // free reply and close connection
+    dbus_message_unref(msg);
+    dbus_connection_close(conn);
+
+    return true;
+}
+
+long CkDBus::CallRemoteFunc_Send(LPDBusInfo lpDbusNames, LPARAM lParam)
+{
+    DBusError err;
+    // initialiset the errors
+    dbus_error_init(&err);
+
+    // connect to the session bus and check for errors
+    DBusConnection *conn = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
+    if (dbus_error_is_set(&err))
+    {
+        fprintf(stderr, "Connection Error (%s)\n", err.message);
+        dbus_error_free(&err);
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+
+    if (nullptr == conn)
+    {
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+
+    DBusMessage* msg = dbus_message_new_method_call( lpDbusNames->sDBusName, // target for the method call
+                                                     lpDbusNames->sObjectName, // object to call on
+                                                     lpDbusNames->sInterfaceName, // interface to call on
+                                                     lpDbusNames->sMethodName); // method name
+    if (nullptr == msg)
+    {
+       fprintf(stderr, "Message Null\n");
+       return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+
+    // append arguments
+    DBusMessageIter args;
+    dbus_message_iter_init_append(msg, &args);
+
+    long long _lParam = lParam;
+    if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT64, (void*)&_lParam))
+    {
+        fprintf(stderr, "Out Of Memory!\n");
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+
+    DBusPendingCall* pending;
+    // 发送消息(-1表示使用默认超时)
+    int tout = 60000;
+    int i = 0;
+//    for(i = 0; i < (int)sizeof(int) * 8 - 1; i++)
+//    {
+//        tout = tout << 1;
+//        tout++;
+//    }
+    printf("tout = 0x%x\n", tout);
+    //if (!dbus_connection_send_with_reply (conn, msg, &pending, -1))
+    if (!dbus_connection_send_with_reply (conn, msg, &pending, tout))
+    {
+        fprintf(stderr, "Out Of Memory!\n");
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+    if (nullptr == pending)
+    {
+        fprintf(stderr, "Pending Call Null\n");
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+
+    // 阻塞直到发送的消息队列为空
+    dbus_connection_flush(conn);
+
+    //printf("Request Sent\n");
+
+    // 释放消息
+    dbus_message_unref(msg);
+
+    // 阻塞至消息返回
+    dbus_pending_call_block(pending);
+
+    // 获取返回消息
+    msg = dbus_pending_call_steal_reply(pending);
+    if (nullptr == msg)
+    {
+        fprintf(stderr, "Reply Null\n");
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+
+    // 释放pending
+    dbus_pending_call_unref(pending);
+
+    int nRet;
+    // 读取参数
+    if (!dbus_message_iter_init(msg, &args))
+    {
+        fprintf(stderr, "Message has no arguments!\n");
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+    else if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&args))
+    {
+        fprintf(stderr, "Argument is not int!\n");
+        return LFS_ERR_INVALID_DBUS_OBJECT;
+    }
+    else
+    {
+        dbus_message_iter_get_basic(&args, &nRet);
+    }
+
+    //printf("Got Reply, nRet = %d\n", nRet);
+
+    // 释放方法返回的消息
+    dbus_message_unref(msg);
+    dbus_connection_flush(conn);
+    dbus_connection_close(conn);
+
+    return (long)nRet;
+}
+
+
+
+
+int CkDBus::ProcFuncSlot(LPARAM lParam)
+{
+    HRESULT hResult = LFS_SUCCESS;
+    return 0;
+}
+
+void* CkDBus::shmget_ptr(char* name,size_t len)
+{
+    int shmid;
+    void *shmptr;
+    key_t key;
+
+    char sPath[256];
+    char sFullPath[256];
+    memset(sPath, 0x00, sizeof(sPath));
+    memset(sFullPath, 0x00, sizeof(sFullPath));
+    bool bRet = GetCurModulePath(sPath, nullptr);
+    if(bRet)
+    {
+        sprintf(sFullPath, "%s/keba/%s", sPath, name); //拼出完整路径
+    }
+
+    if(!QFile::exists(sFullPath))//如果不存在文件
+    {
+        //通过指定ftok的文件名,生成文件
+        QFile file(sFullPath);     //建立指向文件的QFile对象
+        file.open(QIODevice::WriteOnly|QIODevice::Text); //路径下没有文件,使用下面代码在当前路径下创建文件
+        file.close(); //关闭文件
+    }
+
+    if((key = ftok(sFullPath, 99)) < 0)
+    {
+      printf("ftok error:%s,path=[%s]\n", strerror(errno), sFullPath);
+      key = FTOK_DEFAULT;
+    }
+
+    if((shmid = shmget(key, len, IPC_CREAT|0666)) < 0)
+    {
+        printf("shmget error:%s\n", strerror(errno));
+        return NULL;
+    }
+
+    if((shmptr = shmat(shmid, 0, 0)) == (void*)-1)
+    {
+        printf("shmat error:%s\n", strerror(errno));
+        return NULL;
+    }
+
+    return shmptr;
+}
+
+int CkDBus::StartExe(LPSTR lpszExeName)
+{
+    pid_t fpid = -1;
+    char sPath[256];
+    char sFullPath[256];
+    memset(sPath, 0x00, sizeof(sPath));
+    memset(sFullPath, 0x00, sizeof(sFullPath));
+
+    bool bRet = GetCurModulePath(sPath, nullptr);
+    if(bRet)
+    {
+        sprintf(sFullPath, "%s/keba/%s", sPath, lpszExeName); //拼出so完整路径
+    }
+
+    chmod(sFullPath,0777);
+
+    fpid = fork();
+    if (fpid < 0)
+    {
+        return -1;
+    }
+
+    if (fpid == 0)
+    {
+        int nRet = execl(sFullPath, "", (char*)NULL);
+        if (nRet < 0)
+        {
+            exit(errno);
+        }
+    }
+    //system(sFullPath);
+}
+
+QString CkDBus::GetExePath(LPSTR lpszExeName)
+{
+    QString strPath;
+    char sPath[256];
+    char sFullPath[256];
+    memset(sPath, 0x00, sizeof(sPath));
+    memset(sFullPath, 0x00, sizeof(sFullPath));
+
+    bool bRet = GetCurModulePath(sPath, nullptr);
+    if(bRet)
+    {
+        sprintf(sFullPath, "%s/keba/%s", sPath, lpszExeName); //拼出exe完整路径
+    }
+    strPath = sFullPath;
+    LogM("GetExePath(lpszExeName=%s),function=%s,line=%d",strPath.toStdString().c_str(),__FUNCTION__,__LINE__);
+    return strPath;
+}
+
+
+
+//封装 QT 的共享内存类
+CkSharedMemory::CkSharedMemory(QString key)
+{
+    pM = new QSharedMemory(key);
+}
+CkSharedMemory::~CkSharedMemory()
+{
+    bool bRet = pM->detach();
+    if(bRet)
+    {
+        LogM("pM->detach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+    else
+    {
+        LogM("pM->detach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+
+    delete pM;
+}
+
+bool CkSharedMemory::Release()
+{
+    LOG_FUNCTION();
+
+    bool bRet = pM->detach();
+    if(bRet)
+    {
+        LogM("pM->detach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+        return true;
+    }
+    else
+    {
+        LogM("pM->detach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+        return false;
+    }
+}
+
+//判断是否进程唯一
+bool CkSharedMemory::IsTheOnly()
+{
+    LOG_FUNCTION();
+
+    bool bRet = pM->attach(); //先附到进程
+    if(bRet)
+    {
+        LogM("pM->attach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+    else
+    {
+        LogM("pM->attach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+
+    bRet = pM->detach(); //再脱离进程
+    if(bRet)
+    {
+        LogM("pM->detach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+    else
+    {
+        LogM("pM->detach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+
+    bRet = pM->create(1); //执行创建
+    if(bRet)
+    {
+        return true;  //创建成功,说明此进程当前唯一
+    }
+    else
+    {
+        bRet = pM->detach();
+        if(bRet)
+        {
+            LogM("pM->detach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+        }
+        else
+        {
+            LogM("pM->detach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+        }
+    }
+    return false;
+}
+
+
+//主动方调用此函数,创建指定大小空间
+void* CkSharedMemory::GetWritePtr(int size)
+{
+    LOG_FUNCTION();
+
+    bool bRet = pM->attach(); //先附到进程
+    if(bRet)
+    {
+        LogM("pM->attach()=true!, function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+    else
+    {
+        LogM("pM->attach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+
+    bRet = pM->detach(); //再脱离进程
+    if(bRet)
+    {
+        LogM("pM->detach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+    else
+    {
+        LogM("pM->detach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+    }
+
+    bRet = pM->create(size);
+    if(bRet) //创建成功,说明此共享内存当前独享
+    {
+        LogM("pM->create(%d)=true!,function=%s,line=%d",size,__FUNCTION__,__LINE__);
+        return pM->data();
+    }
+    else //创建未成功,说明此共享内存在别的进程在用,进行附加即可
+    {
+        LogM("pM->create(%d)=false!, function=%s,line=%d",size,__FUNCTION__,__LINE__);
+        bRet = pM->attach();
+        if(bRet)
+        {
+            LogM("pM->attach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+            return pM->data();
+        }
+        else
+        {
+            LogM("pM->attach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+        }
+    }
+
+    return nullptr;
+}
+
+//被动方调用此函数
+void* CkSharedMemory::GetReadPtr()
+{
+    LOG_FUNCTION();
+
+    bool bRet = pM->attach();
+    if(bRet)
+    {
+        LogM("pM->attach()=true!,function=%s,line=%d",__FUNCTION__,__LINE__);
+
+        return pM->data();
+    }
+    else
+    {
+        LogM("pM->attach()=false!,function=%s,line=%d",__FUNCTION__,__LINE__);
+
+        return nullptr;
+    }
+}
+
+bool CkSharedMemory::Lock()
+{
+    LOG_FUNCTION();
+
+    return pM->lock();
+}
+bool CkSharedMemory::UnLock()
+{
+    LOG_FUNCTION();
+
+    return pM->unlock();
+}
+

+ 131 - 0
DevAdapter/keba/HSPScanner.keba.1.1/CkDBus.h

@@ -0,0 +1,131 @@
+#ifndef CKDBUS_H
+#define CKDBUS_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <QObject>
+#include <QtDBus/QtDBus>
+#include <dbus/dbus.h>
+#include <unistd.h>
+
+#include "CommDef.h"
+#include "lfsapi.h"
+#include "HSPScannerClass.h"
+
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+//dbus info
+#define AP_DBUS_NAME_PREF_C         "ckap.ap.bus_client"
+#define AP_DBUS_INTF_NAME_C         "ckap.ap.interface_client"
+#define AP_DBUS_OBJECT_NAME_C		"/ckap/ap/object_client"
+
+#define AP_DBUS_NAME_PREF_S         "ckap.ap.bus_server"
+#define AP_DBUS_INTF_NAME_S         "ckap.ap.interface_server"
+#define AP_DBUS_OBJECT_NAME_S		"/ckap/ap/object_server"
+
+#define AP_DBUS_METHOD_NAME         "ProcFuncSlot"
+
+#define FTOK_DEFAULT   99101
+#define  CkSharedMemoryKey      "HSPScanner.keba"
+#define SERVICE_NAME            "HSPScannerService.keba"
+
+#pragma pack(push,1)
+
+// Structure for D-Bus
+typedef struct tag_DBusInfo
+{
+    CHAR sDBusName[MAX_PATH];
+    CHAR sObjectName[MAX_PATH];
+    CHAR sInterfaceName[MAX_PATH];
+    CHAR sMethodName[MAX_PATH];
+} DBusInfo, *LPDBusInfo;
+
+//执行函数所需的参数
+typedef struct tag_FuncInfo
+{
+    CHAR sFuncName[MAX_PATH];
+    pid_t pid_Client;
+    pid_t pid_Service;
+
+    int Param1;
+    int Param2;
+    int Param3;
+    CHAR sFileName[MAX_PATH]; //文件名
+    BYTE BtImg[1024*1024*10];  //存储图片字节流缓冲区
+    HspsDevStatus   status;
+    DevCategoryInfo devCategory;
+    DevErrorInfo devErrInfo;
+} FuncInfo, *LPFuncInfo;
+
+//Dbus发送的参数
+typedef struct tag_DBusRQInfo
+{
+    DBusInfo dbusInf;
+    FuncInfo funcInf;
+} DBusRQInfo, *LPDBusRQInfo;
+
+
+class CkDBus : public QObject
+{
+    Q_OBJECT
+    Q_CLASSINFO("D-Bus Interface", AP_DBUS_INTF_NAME_S)
+public:
+    CkDBus();
+    virtual ~CkDBus();
+
+public:
+    static DBusInfo GetDBusInfo_C(LPCSTR lpszWndName);
+    static DBusInfo GetDBusInfo_S(LPCSTR lpszWndName);
+
+    static bool StartDBusServer(QDBusConnection* lpBus, CkDBus* lpObj);
+    static bool StartDBusClient(QDBusConnection* lpBus, CkDBus* lpObj);
+
+    static long CallRemoteFunc_ReplyTimeout(LPDBusInfo lpDbusNames, LPARAM lParam, UINT uTimeout, LPDWORD lpdwResult);
+    static bool CallRemoteFunc_Post(LPDBusInfo lpDbusNames, LPARAM lParam);
+    static long CallRemoteFunc_Send(LPDBusInfo lpDbusNames, LPARAM lParam);
+    static void* shmget_ptr(char* name,size_t len);
+    static int StartExe(LPSTR lpszExeName);
+    static QString GetExePath(LPSTR lpszExeName);
+
+    static pid_t m_pid_Client;
+    static pid_t m_pid_Service;
+
+public slots:
+    int ProcFuncSlot(LPARAM lParam);
+
+public:
+    DBusInfo m_DBusInf_C;
+    DBusInfo m_DBusInf_S;
+
+};
+
+
+class CkSharedMemory
+{
+public:
+    CkSharedMemory(QString key);
+    virtual ~CkSharedMemory();
+
+    bool Release();
+
+    bool IsTheOnly();
+
+    void* GetWritePtr(int size);
+    void* GetReadPtr();
+
+    bool Lock();
+    bool UnLock();
+
+private:
+    QSharedMemory* pM;
+};
+
+
+
+#pragma pack(pop)
+    //QDBusConnection *m_DbusConn;// = QDBusConnection::sessionBus();
+#endif // CKDBUS_H

+ 1 - 1
DevAdapter/keba/HSPScanner.keba.1.1/CkLog.h

@@ -2,7 +2,7 @@
 #ifndef CKLOG_H
 #define CKLOG_H
 
-//#define CMBLOG4            //是否使用招行日志库开关
+#define CMBLOG4            //是否使用招行日志库开关
 #define CKLOG              //是否使用公司日志库开关
 
 #include <stdio.h>

+ 28 - 3
DevAdapter/keba/HSPScanner.keba.1.1/dllmain.cpp

@@ -1,5 +1,8 @@
-#include "stdafx.h"
+#include "stdafx.h"
 #include "hspscannerimpl.h"
+#include "CkDBus.h"
+#include <QProcess>
+
 
 #define DEVICEBASE_EXPORTS
 
@@ -8,8 +11,13 @@
 DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
 {
     LOG_INIT("HSPScanner", "/home/keba/", "/home/keba/keba-HSPScanner.log");
-    pBaseObj = new HSPSClassImpl();
 
+//    //获取服务端的程序完整路径
+//    QString strPath = CkDBus::GetExePath(SERVICE_NAME);
+//    QProcess::startDetached(strPath); //分离式启动外部服务程序,外部程序启动后,当主程序退出时并不退出,而是继续运行
+//    sleep(2); //等待2秒后继续
+
+    pBaseObj = new HSPSClassImpl();
     if (pBaseObj == nullptr)
     {
        LogM("CreateDevComponent HSPSClassImpl failed!");
@@ -17,10 +25,12 @@ DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
     }
 
     LogM("CreateDevComponent HSPSClassImpl scessufull!");
-	return Error_Succeed;
+    return Error_Succeed;
 }
 DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
 {
+    LOG_FUNCTION();
+
     if (pBaseObj == nullptr)
 		return Error_Param;
 
@@ -30,6 +40,21 @@ DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
     pTmp = nullptr;
     pBaseObj = nullptr;
 
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    LPDBusRQInfo lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
+    DBusInfo DBusInfs = CkDBus::GetDBusInfo_S("HSPScanner");
+
+//    memset(lpRQInf, 0x00, sizeof(DBusRQInfo));
+//    strcpy(lpRQInf->funcInf.sFuncName, "DevClose");
+//    lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+//    long lRet = CkDBus::CallRemoteFunc_Send(&DBusInfs, (long)CkDBus::m_pid_Client);
+//    LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+    //主动关闭服务端
+//    memset(lpRQInf, 0x00, sizeof(DBusRQInfo));
+//    strcpy(lpRQInf->funcInf.sFuncName, "CloseServer");//关闭服务端
+//    lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+//    CkDBus::CallRemoteFunc_Send(&DBusInfs, (long)CkDBus::m_pid_Client);
+
 	return Error_Succeed;
 }
 

+ 0 - 388
DevAdapter/keba/HSPScanner.keba.1.1/hspscannerform.cpp

@@ -1,388 +0,0 @@
-#include "hspscannerform.h"
-#include "ui_hspscannerform.h"
-
-LOG_EXTERN()
-
-HSPScannerForm::HSPScannerForm(QWidget *parent) :
-    QWidget(parent),
-    ui(new Ui::HSPScannerForm)
-{
-    ui->setupUi(this);
-    Qt::WindowFlags flags = windowFlags();
-    this->setWindowFlags(flags | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
-
-    m_ViewTimer = new QTimer(this);
-    connect(m_ViewTimer, SIGNAL(timeout()), this, SLOT(onCamTimer()));
-
-    m_bIsGrey = false;
-    m_bIsOpen = m_bIsView = false;
-    m_bIsHide = true;
-    m_iRotate = 0;
-    m_iScanSz = 0;
-    m_iCamIdx = -1;
-
-    SetPos(0, 0 , DEFAULT_DIALOG_WIDTH, DEFAULT_DIALOG_HEIGHT); //SetPos(1080, 0 , 384, 216);
-    m_dA4Pos[0] = 0.07;
-    m_dA4Pos[1] = 0.07;
-    m_dA4Pos[2] = 0.93;
-    m_dA4Pos[3] = 0.93;
-
-    m_dIDPos[0] = 0.35;
-    m_dIDPos[1] = 0.35;
-    m_dIDPos[2] = 0.65;
-    m_dIDPos[3] = 0.65;
-
-    m_iCamAll[0] = DEFAULT_DIALOG_WIDTH; //DEFAULT_DIALOG_WIDTH
-    m_iCamAll[1] = DEFAULT_DIALOG_HEIGHT;
-}
-
-HSPScannerForm::~HSPScannerForm()
-{
-    delete ui;
-    delete m_ViewTimer;
-}
-
-void HSPScannerForm::SetPos(int iX, int iY, int iW, int iH)
-{
-    LOG_FUNCTION();
-
-    this->move(iX, iY);
-    ui->labViewPos->move(iX, iY);
-    this->resize(iW, iH);
-    ui->labViewPos->resize(iW, iH);
-    ui->labViewPos->setAlignment(Qt::AlignCenter);
-    QPalette label_palette;
-    label_palette.setColor(QPalette::Background, QColor(200,200,200));
-
-    ui->labViewPos->setAutoFillBackground(true);
-    ui->labViewPos->setPalette(label_palette);
-}
-
-void HSPScannerForm::SetSize(float dA4[], float dID[], int iAll[])
-{
-    LOG_FUNCTION();
-
-        memcpy(m_dA4Pos, dA4, sizeof(m_dA4Pos));
-        memcpy(m_dIDPos, dID, sizeof(m_dIDPos));
-        memcpy(m_iCamAll, iAll, sizeof(m_iCamAll));
-}
-
-QImage HSPScannerForm::Mat2QImage(cv::Mat cvImg)
-{
-    LOG_FUNCTION();
-
-    QImage qImg;
-    if(cvImg.channels() == 3) //3 channels color image
-        {
-            qImg = QImage((const unsigned char*)(cvImg.data),
-                                        cvImg.cols, cvImg.rows,
-                                        cvImg.cols * cvImg.channels(),
-                                        QImage::Format_RGB888);
-        }
-        else if(cvImg.channels() == 1) //grayscale image
-        {
-            qImg = QImage((const unsigned char*)(cvImg.data),
-                                        cvImg.cols, cvImg.rows,
-                                        cvImg.cols * cvImg.channels(),
-                                        QImage::Format_Indexed8);
-        }
-        else
-        {
-            qImg = QImage((const unsigned char*)(cvImg.data),
-                                        cvImg.cols, cvImg.rows,
-                                        cvImg.cols * cvImg.channels(),
-                                        QImage::Format_RGB888);
-        }
-
-        return qImg.rgbSwapped();
-}
-
-void HSPScannerForm::onCamTimer()
-{
-    LOG_FUNCTION();
-
-    std::lock_guard<std::mutex> lock(m_mutex);//自动锁
-
-        cv::Mat mMat1, mMat2;
-
-        LogM("Read Start!");
-        m_cvCamera.read(mMat1);
-        //m_cvCamera >> mMat1;
-        LogM("Read End!");
-
-        cv::Size size = mMat1.size();
-        if(mMat1.empty())
-        {
-            m_cvCamera.release();
-            m_ViewTimer->stop();
-            m_bIsView = false;
-        }
-        //if(mMat1.empty()) return;
-
-        //灰度  mMat1-> mMat2
-        if(m_bIsGrey)
-            cv::cvtColor(mMat1, mMat2, cv::COLOR_RGB2GRAY);
-        else
-            mMat2 = mMat1;
-
-        m_Capture = mMat2; //保存当前帧数据
-        //
-        if(m_iScanSz == 0)//HSPS_SCAN_FULL 全画幅扫描
-        {
-            //mMat1 = mMat2;
-        }
-        else if(m_iScanSz == 1)//HSPS_SCAN_A4 A4尺寸扫描
-        {
-         /*
-            int _x = (int)(size.width * m_dA4Pos[0]);
-            int _y = (int)(size.height * m_dA4Pos[1]);
-            int _width = (int)(size.width * (m_dA4Pos[2] - m_dA4Pos[0]));
-            int _height = (int)(size.height * (m_dA4Pos[3] - m_dA4Pos[1]));
-            cv::Rect rA4(_x, _y, _width, _height);
-        */
-            cv::Rect rA4((int)(size.width * m_dA4Pos[0]), (int)(size.height * m_dA4Pos[1]),
-                  (int)(size.width * (m_dA4Pos[2] - m_dA4Pos[0])), (int)(size.height * (m_dA4Pos[3] - m_dA4Pos[1])));
-            m_rA4 = rA4;
-            cv::rectangle(mMat2, m_rA4, cv::Scalar(0, 255, 0)); //画长方形
-
-//            mMat2 = cv::Mat(cv::Size(rA4.width, rA4.height), mMat1.type());
-//            mMat1(rA4).convertTo(mMat2, mMat2.type(), 1, 0);
-        }
-        else if(m_iScanSz == 2) //HSPS_SCAN_IDCARD 身份证尺寸扫描
-        {
-            cv::Rect rID((int)(size.width * m_dIDPos[0]), (int)(size.height * m_dIDPos[1]),
-                     (int)(size.width * (m_dIDPos[2] - m_dIDPos[0])), (int)(size.height * (m_dIDPos[3] - m_dIDPos[1])));
-            m_rID = rID;
-            cv::rectangle(mMat2, m_rID, cv::Scalar(0, 255, 0)); //画长方形
-
-//            mMat2 = cv::Mat(cv::Size(rID.width, rID.height), mMat1.type());
-//            mMat1(rID).convertTo(mMat2, mMat2.type(), 1, 0);
-//            cv::blur(mMat1, mMat2, cv::Size(rID.width, rID.height));
-//            cv::medianBlur;
-        }
-
-//        HSPS_ROTATE_NOANGLE,	// 物理环境的上方为预览窗口的上方 Positive direction. 保持最初状态不旋转
-//        HSPS_ROTATE_LEFT,		// 物理环境的左侧为预览窗口的上方  从最初状态向左旋转90度
-//        HSPS_ROTATE_MIRROR,   // 物理环境的下方为预览窗口的上方 Opposite/Nagative direction. 从最初状态向左或向右旋转180度
-//        HSPS_ROTATE_RIGHT,	// 物理环境的右侧为预览窗口的上方  从最初状态向右旋转90度
-
-//        enum RotateFlags {
-//            ROTATE_90_CLOCKWISE = 0, //!<Rotate 90 degrees clockwise 顺时针方向旋转90度
-//            ROTATE_180 = 1, //!<Rotate 180 degrees clockwise 顺时针方向旋转180度
-//            ROTATE_90_COUNTERCLOCKWISE = 2, //!<Rotate 270 degrees clockwise 顺时针方向旋转270度
-//        };
-        if(m_iRotate == 0)
-            mMat1 = mMat2;
-        else if(m_iRotate == 1)//从最初状态向左旋转90度,即顺时针方向旋转270度
-            ROTATE(mMat2, mMat1, Enum_ROTATE_90_COUNTERCLOCKWISE);
-        else if(m_iRotate == 2) //从最初状态向左或向右旋转180度
-            ROTATE(mMat2, mMat1, Enum_ROTATE_180);
-        else if(m_iRotate == 3) //从最初状态向右旋转90度,即顺时针方向旋转90度
-            ROTATE(mMat2, mMat1, Enum_ROTATE_90_CLOCKWISE);
-
-        if(this->isHidden()) return;
-
-        QImage image = Mat2QImage(mMat1);
-        QPixmap pixmap = QPixmap::fromImage(image);
-        int iH = height();
-        int iW = ((iH * pixmap.width()) / pixmap.height());
-        QPixmap fiPixmap = pixmap.scaled(iW, iH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
-        ui->labViewPos->setPixmap(fiPixmap);
-}
-
-int HSPScannerForm::GetPic(const char* sFile)
-{
-    LOG_FUNCTION();
-    LogM("GetPic(%s)", sFile);
-
-    std::lock_guard<std::mutex> lock(m_mutex);//自动锁
-
-        if(!m_cvCamera.isOpened()) return ERR_NOT_OPENED;
-        if(m_Capture.empty()) return ERR_VIEW_FAIL;
-
-        cv::Mat mMat1;
-        if(m_iScanSz == 0)//HSPS_SCAN_FULL 全画幅扫描
-        {
-            mMat1 = m_Capture;
-        }
-        else if(m_iScanSz == 1)//HSPS_SCAN_A4 A4尺寸扫描
-        {
-            mMat1 = cv::Mat(cv::Size(m_rA4.width, m_rA4.height), m_Capture.type());
-            m_Capture(m_rA4).convertTo(mMat1, mMat1.type(), 1, 0);
-        }
-        else if(m_iScanSz == 2) //HSPS_SCAN_IDCARD 身份证尺寸扫描
-        {
-            mMat1 = cv::Mat(cv::Size(m_rID.width, m_rID.height), m_Capture.type());
-            m_Capture(m_rID).convertTo(mMat1, mMat1.type(), 1, 0);
-        }
-
-        if(cv::imwrite(sFile, mMat1)) //保存成文件
-        {
-            LogM("cv::imwrite(%s) OK!", sFile);
-            return 0;
-        }
-
-        return ERR_VIEW_FAIL;
-}
-
-int HSPScannerForm::Open(const char* sID)
-{
-    LOG_FUNCTION();
-
-    if(m_cvCamera.isOpened()) return 0;
-    m_iCamIdx = GetCamIndex(sID);
-    if(m_iCamIdx < 0) return ERR_NO_DEVICE;
-
-    m_cvCamera.open(m_iCamIdx);
-    if(m_cvCamera.isOpened())
-    {
-            //m_cvCamera.release();
-            m_bIsOpen = true;
-
-//            m_cvCamera.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度
-//            m_cvCamera.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
-//            m_cvCamera.set(CV_CAP_PROP_FPS, 30);//帧率 帧/秒
-//            m_cvCamera.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度
-//            m_cvCamera.set(CV_CAP_PROP_CONTRAST,40);//对比度 40
-//            m_cvCamera.set(CV_CAP_PROP_SATURATION, 50);//饱和度 50
-//            m_cvCamera.set(CV_CAP_PROP_HUE, 50);//色调 50
-//            m_cvCamera.set(CV_CAP_PROP_EXPOSURE, 50);//曝光 50 获取摄像头参数
-//            double cps_FOURCC = m_cvCamera.get(CV_CAP_PROP_FOURCC);
-//            LogD("CV_CAP_PROP_FOURCC=[%f]", cps_FOURCC);
-//            m_cvCamera.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
-
-            double cps_W = m_cvCamera.get(cv::CAP_PROP_FRAME_WIDTH);
-            double cps_H = m_cvCamera.get(cv::CAP_PROP_FRAME_HEIGHT);
-            LogD("CAP_PROP_FRAME_WIDTH=[%f]", cps_W);
-            LogD("CAP_PROP_FRAME_HEIGHT=[%f]", cps_H);
-
-            return 0;
-    }
-    m_bIsOpen = false;
-    return ERR_OPEN_FAIL;
-}
-
-int HSPScannerForm::Close()
-{
-    LOG_FUNCTION();
-
-        if(isVisible()) hide();
-        if(m_cvCamera.isOpened())
-             m_cvCamera.release();
-
-        m_bIsOpen = false;
-        return 0;
-}
-
-int HSPScannerForm::Preview(bool b)
-{
-    LOG_FUNCTION();
-
-        if(!m_bIsOpen) return ERR_NOT_OPENED;
-        if(b)
-        {
-                if(!m_cvCamera.isOpened())
-                    m_cvCamera.open(m_iCamIdx);
-                if(!m_cvCamera.isOpened())
-                    return ERR_OPEN_FAIL;
-
-                m_cvCamera.set(cv::CAP_PROP_FRAME_WIDTH, m_iCamAll[0]); //
-                m_cvCamera.set(cv::CAP_PROP_FRAME_HEIGHT, m_iCamAll[1]);
-
-                double fps = m_cvCamera.get(cv::CAP_PROP_FPS); //CAP_PROP_FRAME_WIDTH  CAP_PROP_FRAME_HEIGHT
-                double cps_W = m_cvCamera.get(cv::CAP_PROP_FRAME_WIDTH);
-                double cps_H = m_cvCamera.get(cv::CAP_PROP_FRAME_HEIGHT);
-                LogD("CAP_PROP_FPS=[%f]", fps);
-                LogD("CAP_PROP_FRAME_WIDTH=[%f]", cps_W);
-                LogD("CAP_PROP_FRAME_HEIGHT=[%f]", cps_H);
-
-                if(fps < 10) fps = 10;
-                m_ViewTimer->start(int(1000/fps));
-                m_bIsView = true;
-        }
-        else
-        {
-            m_bIsView =false;
-            m_ViewTimer->stop();
-            m_cvCamera.release();
-        }
-
-        return 0;
-}
-
-int HSPScannerForm::Show(bool b)
-{
-    if(!m_bIsOpen) return ERR_NOT_OPENED;
-
-        m_bIsHide = !b;
-        if(b)
-            this->show();
-        else
-            this->hide();
-
-        return 0;
-}
-
-int HSPScannerForm::State()
-{
-        return 0;
-}
-
-bool HSPScannerForm::GetVideoID(int iIndex, char* sGet)
-{
-    char sTemp[128];
-    sprintf(sTemp, "/sys/class/video4linux/video%d/device/modalias", iIndex);
-    FILE* fp = fopen(sTemp, "r");
-    if(fp == nullptr) return false;
-
-    int iLen = fread(sTemp, 1, 100, fp);
-    sTemp[iLen] = 0;
-    fclose(fp);
-    strcpy(sGet, sTemp);
-
-    return true;
-}
-
-int HSPScannerForm::GetCamIndex(const char* sIn)
-{
-        char sSys[128]; //usb:v04F2pB61E  d0425dcE  usb:v1B17p0509
-        for(int ia = 0; ia < 10; ia++)
-        {
-            if(GetVideoID(ia, sSys) == false) return -1;
-            if(memcmp(sIn, sSys, strlen(sIn)) == 0) return ia;
-        }
-
-        return -1;
-}
-
-/*
-enum RotateFlags {
-    ROTATE_90_CLOCKWISE = 0, //!<Rotate 90 degrees clockwise
-    ROTATE_180 = 1, //!<Rotate 180 degrees clockwise
-    ROTATE_90_COUNTERCLOCKWISE = 2, //!<Rotate 270 degrees clockwise
-};
-*/
-
-#if defined(OpenCV31)
-void rotate(cv::Mat src, cv::Mat& dst, int rotateCode) //
-{
-    double angle = 90.0;
-    if(rotateCode == Enum_ROTATE_90_COUNTERCLOCKWISE)//从最初状态向左旋转90度,即顺时针方向旋转270度
-        angle = 90.0;
-    else if(rotateCode == Enum_ROTATE_180) //从最初状态向左或向右旋转180度
-        angle = 180.0;
-    else if(rotateCode == Enum_ROTATE_90_CLOCKWISE) //从最初状态向右旋转90度,即顺时针方向旋转90度
-        angle = 270.0;
-
-    cv::Size src_sz = src.size();
-    cv::Size dst_sz(src_sz.width, src_sz.height);
-
-    cv::Point center = cv::Point(src.cols / 2, src.rows / 2);//旋转中心
-    cv::Mat rot_mat = cv::getRotationMatrix2D(center, angle, 1.0);//获得仿射变换矩阵
-
-    cv::warpAffine(src, dst, rot_mat, dst_sz);
-}
-#endif
-
-
-

+ 0 - 117
DevAdapter/keba/HSPScanner.keba.1.1/hspscannerform.h

@@ -1,117 +0,0 @@
-#ifndef HSPSCANNERFORM_H
-#define HSPSCANNERFORM_H
-
-#define OpenCV31 //是否使用OpenCV 3.1版本
-
-#include "stdafx.h"
-#include <QWidget>
-#include <QObject>
-#include <QString>
-#include <QImage>
-//#include <QLabel>
-//#include <QPixmap>
-//#include <QPainter>
-//#include <QMessageBox>
-#include <QColor>
-#include <QTimer>
-#include <QLabel>
-#include <QThread>
-
-#include <opencv2/opencv.hpp>
-#include <mutex>
-
-using namespace std;
-//using namespace cv;
-
-#define DEFAULT_DIALOG_HEIGHT (DEFAULT_DIALOG_WIDTH * 9 / 16)
-
-#define  ERR_NO_DEVICE  -1
-#define  ERR_NOT_OPENED  -2
-#define  ERR_OPEN_FAIL  -3
-#define  ERR_VIEW_FAIL  -4
-//编译版本
-#define  FILE_VERSION  2
-
-//OpenCV版本
-#if defined(OpenCV31)
-enum HRotateFlags {
-    ROTATE_90_CLOCKWISE = 0, //!<Rotate 90 degrees clockwise
-    ROTATE_180 = 1, //!<Rotate 180 degrees clockwise
-    ROTATE_90_COUNTERCLOCKWISE = 2, //!<Rotate 270 degrees clockwise
-};
-#define Enum_ROTATE_90_CLOCKWISE        HRotateFlags::ROTATE_90_CLOCKWISE
-#define Enum_ROTATE_180                 HRotateFlags::ROTATE_180
-#define Enum_ROTATE_90_COUNTERCLOCKWISE HRotateFlags::ROTATE_90_COUNTERCLOCKWISE
-
-void rotate(cv::Mat src, cv::Mat& dst, int rotateCode);
-
-#define ROTATE(src, dst, rotateCode)   \
-        rotate(src, dst, rotateCode)
-
-#else
-#define Enum_ROTATE_90_CLOCKWISE        cv::RotateFlags::ROTATE_90_CLOCKWISE
-#define Enum_ROTATE_180                 cv::RotateFlags::ROTATE_180
-#define Enum_ROTATE_90_COUNTERCLOCKWISE cv::RotateFlags::ROTATE_90_COUNTERCLOCKWISE
-
-#define ROTATE(src, dst, rotateCode)   \
-        cv::rotate(src, dst, rotateCode)
-#endif
-
-namespace Ui {
-class HSPScannerForm;
-}
-
-class HSPScannerForm : public QWidget
-{
-    Q_OBJECT
-
-public:
-    explicit HSPScannerForm(QWidget *parent = nullptr);
-    ~HSPScannerForm();
-
-    void SetPos(int iX, int iY, int iW, int iH);
-    void SetSize(float dA4[], float dID[], int iAll[]);
-    QImage Mat2QImage(cv::Mat cvImg);
-    int GetPic(const char* sFile);
-    int Open(const char* sID);
-    int Close();
-    int Preview(bool b);
-    int Show(bool b);
-    int State();
-    bool GetVideoID(int iIndex, char* sGet);
-    int GetCamIndex(const char* sIn);
-
-private slots:
-    void onCamTimer();
-
-private:
-    Ui::HSPScannerForm *ui;
-    cv::VideoCapture m_cvCamera;
-
-    QTimer* m_ViewTimer;
-
-public:
-    bool m_bIsGrey;
-    bool m_bIsOpen;
-    bool m_bIsView;
-    bool m_bIsHide;
-    int m_iRotate;
-    int m_iScanSz;
-    int m_iCamIdx;
-
-    float m_dA4Pos[4];
-    float m_dIDPos[4];
-    int m_iCamAll[2];
-
-    cv::Rect m_rA4; //
-    cv::Rect m_rID;
-
-    cv::Mat m_Capture;
-
-    queue<cv::Mat> m_queCapture;
-
-    std::mutex m_mutex;
-
-};
-
-#endif // HSPSCANNERFORM_H

+ 0 - 32
DevAdapter/keba/HSPScanner.keba.1.1/hspscannerform.ui

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>HSPScannerForm</class>
- <widget class="QWidget" name="HSPScannerForm">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>640</width>
-    <height>480</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <widget class="QLabel" name="labViewPos">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>10</y>
-     <width>621</width>
-     <height>461</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string/>
-   </property>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 201 - 223
DevAdapter/keba/HSPScanner.keba.1.1/hspscannerimpl.cpp

@@ -1,192 +1,196 @@
 #include "hspscannerimpl.h"
-//#include "cmb.h"
+#include "CkDBus.h"
 
-#include <opencv2/core.hpp>
-#include <opencv2/highgui.hpp>
-#include <opencv2/videoio.hpp>
 
 LOG_EXTERN()
 
-//HSPSThread::HSPSThread() : QThread(0)
-//{
-//   start();
-//}
-
-//void HSPSThread::run()
-//{
-//   exec();
-//}
-
 HSPSClassImpl::HSPSClassImpl()
 {
     m_sLibPath[0] = 0;
-    //m_pHSPSThread = new QThread();
-    //m_CamDevice.moveToThread(m_pHSPSThread);
-    //m_pHSPSThread->start();
+    m_DBusInf_S = CkDBus::GetDBusInfo_S("HSPScanner");
+    //m_lpRQInf=(LPDBusRQInfo)CkDBus::shmget_ptr(FTOK_FILE, sizeof(DBusRQInfo));
+
+    CkDBus::m_pid_Client = GetProcessId();  //
+    //m_HSPScannerSercive_Pid=CkDBus::m_HSPScannerSercive_Pid;
+    m_bOpen=false;
 }
+
 HSPSClassImpl::~HSPSClassImpl()
 {
         //m_pHSPSThread->exit();
+
+//    CkDBus::Kill_HSPScannerSercive();
+//    shmdt(m_lpRQInf);
 }
 
+//pid_t m_pid_Client;
+//pid_t m_pid_Service;
+
 ErrorCodeEnum HSPSClassImpl::DevOpen()
 {
     LOG_FUNCTION();
 
-    //SIni ini;
-    char sA4[32], sID[32], sAll[32], sUsb[64];
-
-    //拍照裁剪范围设置
-//    if(ini.GetValueFromIniFile("ini", "HSPScan", "SizeA4", sA4, 30) &&
-//         ini.GetValueFromIniFile("ini", "HSPScan", "SizeID", sID, 30) &&
-//         ini.GetValueFromIniFile("ini", "HSPScan", "SizeAll", sAll, 30))
-//    {
-//            float dA4[4], dID[4];
-//            int iSize[2];
-//            int i1 = sscanf(sA4, "%f,%f,%f,%f", &dA4[0], &dA4[1], &dA4[2], &dA4[3] );
-//            int i2 = sscanf(sID, "%f,%f,%f,%f", &dID[0], &dID[1], &dID[2], &dID[3] );
-//            int i3 = sscanf(sAll, "%dx%d", &iSize[0], &iSize[1]);
-//            if(i1 > 3 && i2 > 3 && i3 > 1)
-//                    m_CamDevice.SetSize(dA4, dID, iSize);
-//    }
-
-//    m_dA4Pos[0] = 0.07;
-//    m_dA4Pos[1] = 0.07;
-//    m_dA4Pos[2] = 0.93;
-//    m_dA4Pos[3] = 0.93;
-//    m_dIDPos[0] = 0.35;
-//    m_dIDPos[1] = 0.35;
-//    m_dIDPos[2] = 0.65;
-//    m_dIDPos[3] = 0.65;
-//    m_iCamAll[0] = 2560;
-//    m_iCamAll[1] = 1440;
-
-
-    float dA4[4], dID[4];
-    int iSize[2];
-    int i1 = sscanf("0.07,0.07,0.93,0.93", "%f,%f,%f,%f", &dA4[0], &dA4[1], &dA4[2], &dA4[3] );
-    int i2 = sscanf("0.35,0.35,0.65,0.65", "%f,%f,%f,%f", &dID[0], &dID[1], &dID[2], &dID[3] );
-    int i3 = sscanf("1024x768", "%dx%d", &iSize[0], &iSize[1]);
-    if(i1 > 3 && i2 > 3 && i3 > 1)
-       m_CamDevice.SetSize(dA4, dID, iSize);
-
-//摄像头的 pid 和 vid
-//    if(!ini.GetValueFromIniFile("ini", "HSPScan", "Camera", sUsb, 30))
-//    {
-//            strcpy(sUsb, "usb:v1B17p0509"); //usb:v1B17p0509   //usb:v04F2pB61E
-//    }
-    strcpy(sUsb, "usb:v1B17p0509"); //S500L vid pid
-    //strcpy(sUsb, "usb:v5986p026A"); //usb:v5986p026A
-
-    GetCurModulePath(m_sLibPath, nullptr);
-    int iRet = m_CamDevice.Open(sUsb);
-
-    return GetErrorInfo(iRet, "DevOpen");
-}
+    //获取服务端的程序完整路径
+    QString strPath = CkDBus::GetExePath(SERVICE_NAME);
+    chmod(strPath.toStdString().c_str(),777);
+    QProcess::startDetached(strPath); //分离式启动外部服务程序,外部程序启动后,当主程序退出时并不退出,而是继续运行
+    sleep(2); //等待2秒后继续
+
+    if(m_bOpen)
+    {
+        LogD("DevOpen() already beopened,line=%d",__LINE__);
+        return Error_Succeed;
+    }
+
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
 
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "DevOpen");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
 
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+    m_bOpen=true;
+    return (ErrorCodeEnum)lRet;
+}
 
 ErrorCodeEnum HSPSClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 {
     LOG_FUNCTION();
 
-        if(!m_CamDevice.m_bIsOpen)
-            return GetErrorInfo(ERR_NOT_OPENED, "ScanImage");
-
-        memset(&devCategory, 0, sizeof(devCategory));
-
-        strcpy(devCategory.szModel, "FWID=Cam00001");
-        strcpy(devCategory.szVendor, "keba");
-        strcpy(devCategory.szType, "Keba.HSPScanner.S500L"); //Keba.HSPScanner.S500L
-
-        char sPath[256], sFile[128] = {0};
-        GetCurModulePath(sPath, sFile);
-        short v1,v2;
-        getFileVer(sFile, v1, v2);
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
 
-        devCategory.version.wMajor = v1;
-        devCategory.version.wMinor = v2;
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "GetDevCategory");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
 
-        devCategory.version.wRevision = 0xffff;
-        devCategory.version.wBuild = FILE_VERSION;
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
 
-        if(m_CamDevice.State())
-            devCategory.eState = DEVICE_STATUS_NORMAL;
-        else
-            devCategory.eState = DEVICE_STATUS_NOT_READY;
+    devCategory=m_lpRQInf->funcInf.devCategory;
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
 
-        return Error_Succeed;
+    return (ErrorCodeEnum)lRet;
 }
 
-
 ErrorCodeEnum HSPSClassImpl::Reset()
 {
     LOG_FUNCTION();
 
-    if(!m_CamDevice.m_bIsOpen)
-            return GetErrorInfo(ERR_NOT_OPENED, "ScanImage");
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
+
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "Reset");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
 
-        int iRet = 0;
-        return GetErrorInfo(iRet, "Reset");
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+
+    return (ErrorCodeEnum)lRet;
 }
 
 ErrorCodeEnum HSPSClassImpl::DevClose()
 {
     LOG_FUNCTION();
 
-        m_CamDevice.Close();
-        //Sleep(50);
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
 
-        return Error_Succeed;
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "DevClose");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+
+    LogM("适配器将主动关闭服务端 服务端pid=[%ld],line=%d", (long)CkDBus::m_pid_Service,__LINE__);
+//    //主动关闭服务端
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "CloseServer");//关闭服务端
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+    lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+    LogM("适配器关闭服务端lRet=%d, 服务端pid=[%ld],line=%d",lRet, (long)CkDBus::m_pid_Service,__LINE__)
+    return (ErrorCodeEnum)lRet;
 }
 
 ErrorCodeEnum HSPSClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
-        memcpy(&devErrInfo, &m_DevErrInfo, sizeof(DevErrorInfo));
-        return Error_Succeed;
+    LOG_FUNCTION();
+
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
+
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "GetLastErr"); 
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+    devErrInfo=m_lpRQInf->funcInf.devErrInfo;
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+
+    return (ErrorCodeEnum)lRet;
+
 }
 
 ErrorCodeEnum HSPSClassImpl::SetParam(ParamType type, ParamTypeValue value)
 {
     LOG_FUNCTION();
+	LogM("HSPSClassImpl::SetParam(type=%d,value=%d),line=%d",type,value,__LINE__);
 
-        switch(type)
-        {
-            case HSPS_MODEL_COLOR:
-                m_CamDevice.m_bIsGrey = (value == HSPS_COLOR_GREY);
-                break;
-            case HSPS_MODEL_ROTATE:
-                m_CamDevice.m_iRotate = (value - HSPS_ROTATE_NOANGLE);
-                break;
-            case HSPS_MODEL_SCANSIZE:
-                m_CamDevice.m_iScanSz = (value - HSPS_SCAN_FULL);
-                break;
-            case HSPS_MODEL_VIEW:
-                m_CamDevice.Show(value == HSPS_VIEW_SHOW);
-                break;
-        }
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
 
-        return Error_Succeed;
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "SetParam");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+    m_lpRQInf->funcInf.Param1=type;
+    m_lpRQInf->funcInf.Param2=value;
+
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+        CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+
+    return (ErrorCodeEnum)lRet;
 }
 
 //nValue 值为0时关闭预览并隐藏窗口
 ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
 {
     LOG_FUNCTION();
+	LogM("HSPSClassImpl::SetPreview(nValue=%d),line=%d",nValue,__LINE__);
+
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
+
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "SetPreview");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+    m_lpRQInf->funcInf.Param1= nValue;
 
-        int iRet = 0;
-        if(nValue == 1)
-        {
-                iRet = m_CamDevice.Preview(nValue == 1);
-                if(iRet == 0)
-                    m_CamDevice.Show(true);
-        }
-        else
-        {
-            iRet = m_CamDevice.Preview(nValue == 1);
-        }
-
-        return GetErrorInfo(iRet, "SetPreview");
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+
+    return (ErrorCodeEnum)lRet;
 }
 
     //
@@ -198,13 +202,23 @@ ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
 ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
 {
     LOG_FUNCTION();
+	LogM("HSPSClassImpl::ScanImage(pszFileName=%s),line=%d",pszFileName,__LINE__);
+
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
+
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "ScanImage");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+    strcpy(m_lpRQInf->funcInf.sFileName,pszFileName);
 
-        if(!m_CamDevice.m_bIsView)
-            return GetErrorInfo(ERR_NOT_OPENED, "ScanImage");
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
 
-        int iRet = m_CamDevice.GetPic(pszFileName);
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
 
-        return GetErrorInfo(iRet, "ScanImage");
+    return (ErrorCodeEnum)lRet;
 }
 
 //	Scan Image from device and return the image data in byte format.
@@ -223,42 +237,30 @@ ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char*
 {
     LOG_FUNCTION();
 
-        if(!m_CamDevice.m_bIsView)
-                return GetErrorInfo(ERR_NOT_OPENED, "ScanImageEx");
-
-        char sFile[300];
-        bool bFile = false;
-        if(nullptr != pszFileName && strlen(pszFileName))
-        {
-            strcpy(sFile, pszFileName);
-            bFile = true;
-        }
-        else
-            sprintf(sFile, "%s/hsps-temp.jpg", m_sLibPath);
-
-        ErrorCodeEnum eRet = Error_Succeed;
-        int iRet = m_CamDevice.GetPic(sFile);
-        if(iRet != 0) return GetErrorInfo(iRet, "ScanImageEx");
-
-        FILE* fp = fopen(sFile, "rb");
-        fseek(fp, 0, SEEK_END);
-        int iLen = ftell(fp);
-        if(iLen <= nBtLen)
-        {
-                fseek(fp, 0, SEEK_SET);
-                fread(pBtImg, 1, iLen, fp);
-                nBtLen = iLen;
-        }
-        else
-        {
-            eRet = Error_TooSmallBuffer;
-            nBtLen = iLen;
-        }
-
-        fclose(fp);
-        if(!bFile) remove(sFile);
-
-        return eRet;
+    LogM("HSPSClassImpl::ScanImageEx(pBtImg, nBtLen=[%d], pszFileName=[%s])", nBtLen, pszFileName);
+
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
+
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    //memset(pBtImg, 0x00, nBtLen);
+    strcpy(m_lpRQInf->funcInf.sFuncName, "ScanImageEx");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+    m_lpRQInf->funcInf.Param1 = nBtLen;
+    if(nullptr != pszFileName && strlen(pszFileName) > 0)
+        strcpy(m_lpRQInf->funcInf.sFileName, pszFileName);
+
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+
+
+    memcpy(pBtImg,  m_lpRQInf->funcInf.BtImg, m_lpRQInf->funcInf.Param1);
+    nBtLen = m_lpRQInf->funcInf.Param1;
+
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+
+    return (ErrorCodeEnum)lRet;
 }
 
     //
@@ -271,9 +273,25 @@ ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg,  int& nBtLen, const char*
 ErrorCodeEnum HSPSClassImpl::SetViewPos(int nX, int nY, int nWidth)
 {
     LOG_FUNCTION();
+	LogM("HSPSClassImpl::SetViewPos(nX=%d, nY=%d, nWidth=%d),line=%d",nX, nY, nWidth,__LINE__);
 
-        m_CamDevice.SetPos(nX, nY, nWidth, nWidth*9/16);
-        return Error_Succeed;
+
+    CkSharedMemory ckMem(CkSharedMemoryKey);
+    m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
+
+    memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+    strcpy(m_lpRQInf->funcInf.sFuncName, "SetViewPos");
+    m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
+    m_lpRQInf->funcInf.Param1=nX;
+    m_lpRQInf->funcInf.Param2=nY;
+    m_lpRQInf->funcInf.Param3=nWidth;
+    long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+	LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
+
+    if(m_lpRQInf->funcInf.pid_Service > 0)
+           CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
+
+    return (ErrorCodeEnum)lRet;
 }
 
     //
@@ -293,61 +311,21 @@ ErrorCodeEnum HSPSClassImpl::GetDevStatus(HspsDevStatus& status)
 {
         LOG_FUNCTION();
 
-        status.isConnected = m_CamDevice.m_bIsOpen;
-        status.inPreview = m_CamDevice.m_bIsView;
-        status.inShow = !m_CamDevice.m_bIsHide;
+        CkSharedMemory ckMem(CkSharedMemoryKey);
+        m_lpRQInf = (LPDBusRQInfo)ckMem.GetWritePtr(sizeof(DBusRQInfo));
 
-        return Error_Succeed;
-}
+        memset(m_lpRQInf, 0x00, sizeof(DBusRQInfo));
+        strcpy(m_lpRQInf->funcInf.sFuncName, "GetDevStatus");
+        m_lpRQInf->funcInf.pid_Client = CkDBus::m_pid_Client;
 
-const static CmbErrorDef HSPSErrInfo[] = {
-        {0,             "命令执行成功", Error_Succeed, DEC_SUCCESS},
-        {ERR_NO_DEVICE, "未发现设备", Error_Hardware, DEC_DEV_NOT_FOUND},
-        {ERR_NOT_OPENED, "设备尚未打开", Error_Param, DEC_DEV_NOT_OPENED},
-        {ERR_OPEN_FAIL, "设备打开失败", Error_Hardware, DEC_HARDWARE},
-        {ERR_VIEW_FAIL, "启动预览失败", Error_Hardware, DEC_HARDWARE}
-    };
+        long lRet = CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (long)CkDBus::m_pid_Client);
+		LogM("CkDBus::CallRemoteFunc_Send(&m_DBusInf_S, (LPARAM)m_lpRQInf.func=%s)=%ld,line=%d",m_lpRQInf->funcInf.sFuncName,lRet,__LINE__);
 
-ErrorCodeEnum HSPSClassImpl::GetErrorInfo(int iCode, char* sErr, ...)
-{
-    size_t iLenOne = sizeof(CmbErrorDef);
-    size_t iLenAll = sizeof(HSPSErrInfo);
-    int iCount = iLenAll / iLenOne;
-    char sErrInfo[256] = "";
-    DWORD dSta = 0;
-    int iErr = -1;
-    for(int ia=0; ia < iCount; ia++)
-    {
-            if(HSPSErrInfo[ia].iCode == iCode)
-            {
-                    dSta = HSPSErrInfo[ia].iInf;
-                    strcpy(sErrInfo, HSPSErrInfo[ia].sInf);
-                    iErr = HSPSErrInfo[ia].iRet;
-                    break;
-            }
-    }
+        status=m_lpRQInf->funcInf.status;
+
+        if(m_lpRQInf->funcInf.pid_Service > 0)
+               CkDBus::m_pid_Service = m_lpRQInf->funcInf.pid_Service;
 
-        char sErrAll[300];
-        va_list arglist;
-        va_start(arglist, sErr);
-        vsnprintf(sErrAll, 128, sErr, arglist);
-        va_end(arglist);
-
-        if(sErrInfo[0])
-        {
-            strcat(sErrAll, " ");
-            strcat(sErrAll, sErrInfo);
-        }
-
-        sErrAll[200] = 0;
-        //iLenOne = strlen(sErrAll);
-        iLenOne = sprintf(m_DevErrInfo.szErrMsg, "{\"ErrCode\":\"%d\",\"Description\":\"%s\"}", iErr, sErrAll);
-        m_DevErrInfo.dwErrMsgLen = ((dSta << 16) & 0xffff0000) + iLenOne;
-
-        if(iErr != Error_Succeed)
-            LogW("%s", m_DevErrInfo.szErrMsg)
-        else
-            LogM("%s", m_DevErrInfo.szErrMsg)
-
-        return (ErrorCodeEnum)iErr;
+        return (ErrorCodeEnum)lRet;
 }
+

+ 26 - 15
DevAdapter/keba/HSPScanner.keba.1.1/hspscannerimpl.h

@@ -2,9 +2,14 @@
 #define HSPSCANNERIMPL_H
 
 #include "stdafx.h"
+#include <QObject>
+
 #include "HSPScannerClass.h"
 #include <QThread>
-#include "hspscannerform.h"
+//#include "hspscannerform.h"
+//#include "ThreadWorker.h"
+#include "CkDBus.h"
+
 
 typedef struct
 {
@@ -14,22 +19,14 @@ typedef struct
     int iInf;
 } CmbErrorDef;
 
-//class HSPSThread : public QThread
-//{
-//    Q_OBJECT
-
-//public:
-//    HSPSThread();
-//    //~HSPSThread();
-//    void run();
-//};
-
 
 class HSPSClassImpl : public CHSPSClass
 {
+    //Q_OBJECT
+
 public:
     HSPSClassImpl();
-    ~HSPSClassImpl();
+    virtual ~HSPSClassImpl();
 
 public:
 
@@ -118,17 +115,31 @@ public:
     //	code and anything in favour of location problem.
     virtual ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
 
+//Q_SIGNALS:
+//    void startThreadWork_signal();
 
 private:
-    HSPScannerForm m_CamDevice;
+//    WorkerClass *m_WorkerObj;
+//    QThread*  m_WorkerThread;
+//    void startWorkerThread();
+
+    //HSPScannerForm m_CamDevice;
+
+
     //HSPSThread m_HSPSThread;
-    QThread*  m_pHSPSThread;
+    //QThread*  m_pHSPSThread;
 
     DevErrorInfo m_DevErrInfo;
 
+    DBusInfo m_DBusInf_C;
+    DBusInfo m_DBusInf_S;
+
     char m_sLibPath[256];
+    LPDBusRQInfo m_lpRQInf;
+
+    bool m_bOpen;
+
 
-    ErrorCodeEnum GetErrorInfo(int iCode, char* sErr, ...);
 };
 
 #endif // HSPSCANNERIMPL_H

+ 1 - 1
DevAdapter/keba/IDCertificate.keba.1.1/CMakeLists.txt

@@ -6,7 +6,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release  Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 4 - 4
DevAdapter/keba/IDCertificate.keba.1.1/idcertificate.cpp

@@ -175,7 +175,7 @@ ErrorCodeEnum IDCerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
     devCategory.version.wBuild = 2;
 
 
-    memcpy(devCategory.szModel, "FWID=", strlen("STYLE=IG#FUNCTION=ITF"));
+    memcpy(devCategory.szModel, "STYLE=IG#FUNCTION=ITF", strlen("STYLE=IG#FUNCTION=ITF"));
     LogM("GetDevCategory() return:\n\
                       devCategory.szType = %s, \n\
                       devCategory.szVendor = %s, \n\
@@ -501,7 +501,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerAuthenticate()
     std::string dllPath;
     int bRet = GetDllPathLocal(dllPath);
     memcpy(PhotoPath, dllPath.c_str(), dllPath.length());
-    dllPath += "ck.bmp";
+    dllPath += "zp.bmp";
     char FileName0[256]={0};
     memcpy(FileName0, dllPath.c_str(), dllPath.length());
     std::string strLog = "IDCerAuthenticate(),PhotoPath=[" + dllPath + "]";
@@ -602,7 +602,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetData(IDCerInfo &idCerInfo)
     int bRet = GetDllPathLocal(dllPath);
     std::string ckStr = dllPath + "ck.bmp";
     std::string zpStr = dllPath + "zp.bmp";
-    std::string commond="cp"+std::string(" ")+ckStr+std::string(" ")+zpStr;
+    std::string commond="mv"+std::string(" ")+ckStr+std::string(" ")+zpStr;
     system(commond.c_str());
     std::string strLog = "IDCerGetData(),ckStr=[" + ckStr + "],zpStr=[" + zpStr + "]";
     LogM("%s",strLog.c_str());
@@ -933,7 +933,7 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx(IDCerInfoEx &idCerInfoEx)
 
     std::string ckStr = dllPath + "ck.bmp";
     std::string zpStr = dllPath + "zp.bmp";
-    std::string commond="cp"+std::string(" ")+ckStr+std::string(" ")+zpStr;
+    std::string commond="mv"+std::string(" ")+ckStr+std::string(" ")+zpStr;
     system(commond.c_str());
 
     std::string strLog = "IDCerGetData(),ckStr=[" + ckStr + "],zpStr=[" + zpStr + "]";

+ 2 - 2
DevAdapter/keba/IDCertificate.keba.1.1/idcertificate.h

@@ -1,11 +1,11 @@
 #pragma once
 #ifndef IDCERTIFICATE_H
 #define IDCERTIFICATE_H
-#pragma pack(push,1)
+//#pragma pack(push,1)
 
 #include "IDCerClass.h"
 #include "stdafx.h"
-
+#pragma pack(push,1)
 
 
 class IDCerClassImpl : public IDCerClass

+ 1 - 1
DevAdapter/keba/PinPad.keba.1.1/CMakeLists.txt

@@ -10,7 +10,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 4 - 10
DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.cpp

@@ -1,4 +1,4 @@
-#include "PinPadClassImpl_ZT598M.h"
+#include "PinPadClassImpl_ZT598M.h"
 #include <cstdio>
 
 #define DES_KEY_NAME_PREFIX "DESKey"
@@ -129,7 +129,7 @@ ErrorCodeEnum PinPadClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
     memset(&devCategory.version, 0, sizeof(devCategory.version));
     if(m_bDevOpen)
     {
-        sprintf(devCategory.szType, "keba.PinPad.%s %s", m_sDevModel, m_sSMVer);
+        sprintf(devCategory.szType, "PVER=SZZT#MID=keba.PinPad.%s-%s", m_sDevModel, m_sSMVer);
         sprintf(devCategory.szModel, "PID=%s", m_szMainChipSN);
         sprintf(devCategory.szVendor,"keba");
     }
@@ -508,7 +508,7 @@ END_LABEL:
     return ret;
 }
 
-LONG PinPadClassImpl::StartPinInputCommon(BYTE byLen)
+ErrorCodeEnum PinPadClassImpl::StartPinInputCommon(BYTE byLen)
 {
     LOG_FUNCTION();
     LogM("==>Enter PinPadClassImpl::StartPinInputCommon()");
@@ -564,13 +564,7 @@ ErrorCodeEnum PinPadClassImpl::StartPinInput(BYTE byLen)
     LONG lRet = STATUS_SUCCESS;
     m_bConfirm = TRUE;
     m_nCurrentEntryMode = PIN_ENTRY;
-    lRet = StartPinInputCommon(byLen);
-    if(lRet != STATUS_SUCCESS)
-    {
-        ret = SaveErrorInfo(lRet);
-        goto END_LABEL;
-    }
-END_LABEL:
+    ret = StartPinInputCommon(byLen);
     LogM("<==Leave PinPadClassImpl::StartPinInput()return %d", ret);
     return ret;
 }

+ 4 - 7
DevAdapter/keba/PinPad.keba.1.1/PinPadClassImpl_ZT598M.h

@@ -1,18 +1,15 @@
-#pragma once
+#pragma once
 #ifndef PINPADCLASSIMPL_ZT598M_H
 #define PINPADCLASSIMPL_ZT598M_H
-#pragma pack(push,1)
-
-
 
+#include "stdafx.h"
 #include "common.h"
 //招行公共头文件
-#include "stdafx.h"
 #include <string.h>
 #include "ZT598MGFD_DevCtrl.h"
 #include <assert.h>
 //#include "log4vendor.h"
-
+#pragma pack(push,1)
 //编译版本
 #define  FILE_VERSION  1
 
@@ -167,7 +164,7 @@ protected://GetData GetPin GetPinBlock
 
 
 
-    LONG StartPinInputCommon(BYTE byLen);
+    ErrorCodeEnum StartPinInputCommon(BYTE byLen);
 
 
 #ifdef WRITE_ENLARGE_KEY_INDEX_FILE

+ 1 - 2
DevAdapter/keba/PinPad.keba.1.1/ZT598MGFDDef.h

@@ -1,8 +1,7 @@
 #pragma once
-#pragma pack(push,1)
 
 #include "PinpadDef.h"
-
+#pragma pack(push,1)
 
 #define READ_A980_FW_VERSION				0x62
 

+ 2 - 2
DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevCtrl.h

@@ -1,13 +1,13 @@
 #pragma once
-#pragma pack(push,1)
 
 /*
 Öмä½Ó¿ÚµÄʵÏÖ¡£
 */
 #include "stdafx.h"
 #include "ZT598MGFD_DevImpl.h"
-
 #include <unistd.h>
+#pragma pack(push,1)
+
 
 #define EPP_MAIN_KEY_CODE_COUNT			16
 #define EPP_FUNCTION_KEY_CODE_COUNT		8

+ 30 - 29
DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevImpl.cpp

@@ -1,4 +1,4 @@
-#include "ZT598MGFD_DevImpl.h"
+#include "ZT598MGFD_DevImpl.h"
 LOG_EXTERN()
 
 CZT598M1FD_DevImpl::CZT598M1FD_DevImpl(BOOL bIsFather)
@@ -106,7 +106,6 @@ BOOL CZT598M1FD_DevImpl::ExchangeData(const LPEPPExchangeDataField lpstSendInfo,
         return FALSE;
     }
 
-    //dwSizeoff;
     lpstEPPExchangeDataHeadSection = (LPEPPExchangeDataHeadSection)m_bySndBuff;
     wFixedLen = sizeof(EPPExchangeDataHeadSection) + sizeof(EPPExchangeDataTailSection);
     wSndBufflen += lpstEPPExchangeDataHeadSection->wLen + wFixedLen;
@@ -119,13 +118,7 @@ BOOL CZT598M1FD_DevImpl::ExchangeData(const LPEPPExchangeDataField lpstSendInfo,
     {
         wLoop++;
     }
-    m_stCommInfo.cdSndData.dwDataLen = sizeof(m_bySndBuff);
-    m_stCommInfo.cdRcvData.dwDataLen = sizeof(m_byRcvBuff);
-    LogM( "Send start.....");
-    //dwLen = m_lpIDevComm->SendData(m_bySndBuff, m_stCommInfo.cdSndData.dwDataLen);
     dwLen = m_lpIDevComm->SendData(m_bySndBuff, wSndBufflen);
-    LogM( "wSndBufflen = %d, m_stCommInfo.cdSndData.dwDataLen = %d", wSndBufflen, m_stCommInfo.cdSndData.dwDataLen);
-    LogM( "Send end.....");
     if (dwLen == 0)
     {
         LogXE( m_bySndBuff, wSndBufflen , "Send");
@@ -145,35 +138,43 @@ BOOL CZT598M1FD_DevImpl::ExchangeData(const LPEPPExchangeDataField lpstSendInfo,
             //NULL, uMaskOffset, uMaskLen, uMaskCnt);
     }
 
-
-    LogM( "Receive 1st start.....");
-    dwReceiveLen=m_lpIDevComm->ReceiveData(m_byRcvBuff,m_stCommInfo.dwTimeout);
-    LogM( "Receive 1st end.....");
-    if(dwReceiveLen == 0)
+    //LogM( "Receive 1st start.....");
+    INT nNeedRcvLen = 5;
+    for (INT i = 0; i < 3 && dwReceiveLen ==0; i++)
     {
-        //usleep(100000);
-        LogE( "The received data is empty!");
-        LogM( "Receive 2nd start.....");
-        m_stCommInfo.cdRcvData.dwDataLen = sizeof(m_byRcvBuff);
-        dwReceiveLen = m_lpIDevComm->ReceiveData(m_byRcvBuff,m_stCommInfo.dwTimeout);
-        LogM( "Receive 2nd end.....");
+        usleep(10000);
+        dwReceiveLen=m_lpIDevComm->ReceiveData(m_byRcvBuff,m_stCommInfo.dwTimeout, TRUE);
+        if ((m_lpIDevComm->GetError() != ERROR_SUCCESS))
+        {
+            LogXE( m_bySndBuff, wSndBufflen , "received data:%d FAILED!", i);
+            return FALSE;
+        }
         if(dwReceiveLen == 0)
         {
-            //usleep(10);
-            LogE( "The received data is empty!");
-            m_stCommInfo.cdRcvData.dwDataLen = sizeof(m_byRcvBuff);
-            LogM( "Receive 3rd start.....");
-            dwReceiveLen = m_lpIDevComm->ReceiveData(m_byRcvBuff,m_stCommInfo.dwTimeout);
-            LogM( "Receive 3rd end.....");
+            LogXE( m_bySndBuff, wSndBufflen , "received data:%d is empty", i);
+            if(i > 2)
+            {
+                return FALSE;
+            }
         }
     }
-    if(dwReceiveLen == 0)
+    lpstEPPExchangeDataHeadSection = (LPEPPExchangeDataHeadSection)m_byRcvBuff;
+    nNeedRcvLen = lpstEPPExchangeDataHeadSection->wLen + 8;
+    INT nRcvOffset = dwReceiveLen;
+    nNeedRcvLen -= dwReceiveLen;
+    while(nNeedRcvLen > 0)
     {
-        LogE( "The received data is empty!");
-        return FALSE;
+        dwReceiveLen=m_lpIDevComm->ReceiveData(m_byRcvBuff + nRcvOffset,m_stCommInfo.dwTimeout, TRUE);
+        if ((m_lpIDevComm->GetError() != ERROR_SUCCESS))
+        {
+            LogXE( m_bySndBuff, wSndBufflen , "Continue received data is empty!");
+            return FALSE;
+        }
+        nRcvOffset += dwReceiveLen;
+        nNeedRcvLen -= dwReceiveLen;
     }
-
     LogXM( m_byRcvBuff, dwReceiveLen, "Rcv");
+
     bRet = ParseResponse(lpstReceiveInfo, &uMaskCnt, uMaskOffset, uMaskLen);
     if (lpstEPPExchangeDataHeadSection->byCmd == READ_ENTRY_TEXT)
     {

+ 1 - 2
DevAdapter/keba/PinPad.keba.1.1/ZT598MGFD_DevImpl.h

@@ -1,10 +1,9 @@
 #pragma once
-#pragma pack(push,1)
 
 #include "stdafx.h"
 #include "ZT598MGFDDef.h"
 #include <unistd.h>
-
+#pragma pack(push,1)
 
 class CZT598M1FD_DevImpl
 {

+ 19 - 1
DevAdapter/keba/ThermalPrint.keba.1.1/CMakeLists.txt

@@ -6,11 +6,17 @@ set(${MODULE_PREFIX}_VENDOR "keba")
 set(${MODULE_PREFIX}_VERSION "1")
 set(${MODULE_PREFIX}_BATCH "1")
 
+if(NOT RVC_INTEGRATE_BUILD)
+    set(CMAKE_PREFIX_PATH $ENV{QTDIR5113})
+    set(CMAKE_INCLUDE_CURRENT_DIR ON)
+    set(CMAKE_AUTOMOC ON)
+    set(CMAKE_AUTOUIC ON)
+endif()
 
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}
@@ -25,6 +31,16 @@ aux_source_directory(. SRC_LIST)
 set(${MODULE_PREFIX}_SRCS SHARED
         ${SRC_LIST}
         )
+if(RVC_INTEGRATE_BUILD)
+    if(NOT CONAN_QT_ROOT)
+        conan_cmake_run( REQUIRES  qt/5.11.3@LR04.02_ThirdParty/stable BASIC_SETUP CMAKE_TARGETS)
+    endif(NOT CONAN_QT_ROOT )
+    find_package(Qt5 COMPONENTS Core REQUIRED 
+        HINTS ${CONAN_QT_ROOT} NO_SYSTEM_ENVIRONMENT_PATH )
+else()
+    find_package(Qt5 COMPONENTS Core REQUIRED)
+endif(RVC_INTEGRATE_BUILD)
+
 # 适配器工程需要通过此宏替代 add_library
 rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
 
@@ -44,6 +60,8 @@ target_link_libraries(${MODULE_FULL_NAME} ${VENDOR_LOG_LIB_NAME})
 #target_link_libraries(${MODULE_FULL_NAME} DevComm.keba Algorithm.keba DataConvert.keba winfunc.keba FileDir.keba INIAccess.keba FileAccess.keba TraceManager.keba SerialComm.keba)
 target_link_libraries(${MODULE_FULL_NAME} Common.keba)
 #设置动态库输出路径:/data/home/keba/DevAdapter/cmbsz/lib/gcc_aarch64或者gcc_x64
+#链接OpenCV
+target_link_libraries(${MODULE_FULL_NAME}  Qt5::Core )
 SET(LIBRARY_OUTPUT_PATH ${VENDOR_CURRENT_LIB_DIR})
 message(STATUS "LIBRARY_OUTPUT_PATH: ${VENDOR_CURRENT_LIB_DIR}")
 #  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=

+ 5 - 6
DevAdapter/keba/ThermalPrint.keba.1.1/DevCtrl.cpp

@@ -36,7 +36,7 @@ DWORD	DeviceCtrl::Open(LPSTR cDeviceID, int dwBaudRate)
 	LOG_FUNCTION();
     memcpy(m_cDeviceID, cDeviceID, strlen(cDeviceID));
     // 接收串口号
-    int ret = g_SerialComm.Connect(cDeviceID, dwBaudRate, 0, 2, &m_hDevHnd, 8);
+    int ret = g_SerialComm.Connect(cDeviceID, dwBaudRate, 2, 1, &m_hDevHnd, 8);
     if( ret == 0) //返回0, 串口打开成功
     {
         LogM("串口打开成功: %d   COM:%s\r\n", ret, m_cDeviceID);
@@ -355,7 +355,7 @@ DWORD	DeviceCtrl::SendCommand( WORD wOperationID, LPBYTE lpbyOptionData, WORD wD
     {
         byCmdData[0] = 0x1D;	//GS
         byCmdData[1] = 0x56;	//V
-        byCmdData[2] = 0x42;	//66
+        byCmdData[2] = 0x41;	//66
         byCmdData[3] = 0x00;	//0
         wCmdSize = 4;
     }
@@ -1001,6 +1001,8 @@ DWORD	DeviceCtrl::SendCommand( WORD wOperationID, LPBYTE lpbyOptionData, WORD wD
         byData = byExeData;
     }
     //Write Command
+    LogXM(byData, wCmdSize, "Send Before");
+
     iRet = g_SerialComm.SendData(m_hDevHnd, byData, wCmdSize );
     /*char* pBuf = (char*)byData;
     int writedCount;
@@ -1031,7 +1033,7 @@ DWORD	DeviceCtrl::SendCommand( WORD wOperationID, LPBYTE lpbyOptionData, WORD wD
 	
     LogM("f_WriteData iRet=%d, wDataSize = %d", iRet, wCmdSize);
 
-    LogXM(byData, wCmdSize, "byData");
+    LogXM(byData, wCmdSize, "Send");
     if (bFlag)
     {
         bFlag = FALSE;
@@ -1043,12 +1045,9 @@ DWORD	DeviceCtrl::SendCommand( WORD wOperationID, LPBYTE lpbyOptionData, WORD wD
     }
     if ( iRet < 0 )
     {
-        LogXE(byData, wCmdSize, "Send");
         return HARDWARE_ERROR;
     }
 
-    LogXM(byData, wCmdSize, "Send");
-
     return ERROR_SUCCESS;
 }
 

+ 33 - 31
DevAdapter/keba/ThermalPrint.keba.1.1/ThermalPrint.cpp

@@ -315,7 +315,7 @@ ErrorCodeEnum ThermalPrint::DevOpen(BYTE btPort, DWORD dwBaudRate)
     LogM("DevOpen(dwPort = %d, dwBaudRate = %d) Entry.", btPort, dwBaudRate);
     DWORD dwReturn = Error_Succeed;
     char cDeviceID[256];
-    sprintf(cDeviceID, "/dev/ttyUSB%d", btPort);
+    sprintf(cDeviceID, "/dev/ttyUSB%d", (int)btPort - 1);
 
     dwReturn = DeviceTask.Open(cDeviceID, (int)dwBaudRate);
 
@@ -541,7 +541,7 @@ ErrorCodeEnum ThermalPrint::ControlAction(PrintAction eAction, DWORD dwValue1, D
             bPrintTextFlag = FALSE;
         }
         //DeviceTask.bCutPaper();
-        dwReturn = DeviceTask.SendCommand( PAPERFEEDCUT );
+        dwReturn = DeviceTask.SendCommand( PAPERDIRCETCUTEX );
         /*if (m_nPaperType == PAPER_LABEL)
         {
             dwReturn = DeviceTask.SendCommand( PAPERFEEDCUT );
@@ -1081,37 +1081,44 @@ ErrorCodeEnum ThermalPrint::SetFont(FontStyle eType, DWORD dwValue1, DWORD dwVal
 //打印文本数据函数
 ErrorCodeEnum ThermalPrint::PrintText(BYTE *pData, DWORD dwDataLen)
 {
+    if ((pData == NULL) || (dwDataLen == 0))
+    {
+        SaveErrorInfo("Parameter is invalid!");
+        LogE("Parameter is invalid!");
+        return Error_Param;
+    }
+
     CHAR* inputData = new CHAR[dwDataLen+1];
     memset(inputData, 0x00, dwDataLen+1);
     memcpy(inputData, pData, dwDataLen);
     LOG_FUNCTION();
     LogM("PrintText(pData %s, dwDataLen %d) is called.", pData, dwDataLen);
 
-    if (inputData != NULL)
+    char byDate[100] = {0};
+    CDataConvert::StringUTF8toASCII(inputData, byDate, sizeof(byDate));
+    if (strlen(byDate) == 0)
     {
-        delete[] inputData;
-        inputData = NULL;
-    }
-
-    BYTE byDate ;
-    if ((pData == NULL) || (dwDataLen == 0))
-    {
-        SaveErrorInfo("Parameter is invalid!");
-        LogE("Parameter is invalid!");
+        LogE("StringUTF8toASCII fail! strlen(byDate) == 0");
         return Error_Param;
     }
+    LogXM(byDate, strlen(byDate), "StringUTF8toASCII result OK");
 
-    DWORD dwRet = DeviceTask.SendData(pData, (WORD)dwDataLen);	//发送打印内容
+    DWORD dwRet = DeviceTask.SendData((LPBYTE)byDate, (WORD)strlen(byDate));	//发送打印内容
     if (dwRet != Error_Succeed)
     {
-        LogXE(pData, dwDataLen, "Send");
+        LogXE(byDate, (WORD)strlen(byDate), "Send");
         SaveErrorInfo("Send command failed, make sure device is ok!");
         LogE("Send command failed, make sure device is ok!");
         return Error_Hardware;
     }
     LogM("ThermalPrint::PrintText(%s, %d)", pData, dwDataLen);
-    LogXM(pData, dwDataLen, "Send");
+    LogXM(byDate, strlen(byDate), "Send");
     bPrintTextFlag = TRUE;
+    if (inputData != NULL)
+    {
+        delete[] inputData;
+        inputData = NULL;
+    }
     return Error_Succeed;
 }
 
@@ -1559,14 +1566,8 @@ ErrorCodeEnum ThermalPrint::PrintImage(BYTE *pData, DWORD dwDataLen)
 {
     LOG_FUNCTION();
     LogM("PrintImage(pData, dwDataLen= %d) Entry.", dwDataLen);
-    LogXM(pData, dwDataLen, "Input")
-    /*if (g_ImageFile == NULL)
-    {
-        g_ImageFile = new BYTE[dwDataLen];
-        memset(g_ImageFile, 0x00, dwDataLen);
-        g_size = dwDataLen;
-        memcpy(g_ImageFile, pData, dwDataLen);
-    }*/
+    LogXM(pData, dwDataLen, "Input pData")
+
     if ((pData == NULL) || (dwDataLen == 0))
     {
         SaveErrorInfo("Parameter is invalid!");
@@ -1586,22 +1587,23 @@ ErrorCodeEnum ThermalPrint::PrintImage(BYTE *pData, DWORD dwDataLen)
         DeviceTask.SendCommand( FEEDLINEPRINT );
         bPrintTextFlag = FALSE;
     }
-    DWORD dwImageLen = 0;
+
     LPBYTE pImageFileHead = pData;
     CImageProcessing imagepro;
-    int nOutLen = 0;
     //Base64解码
-    string strImage = imagepro.Decode((const char*)pImageFileHead, dwDataLen, nOutLen);
-    //	strImage数据格式为:BITMAPFILEHEADER + BITMAPINFOHEADER + 图像实际数据
+    QByteArray Base64Aarray((char*)pData);
+    QByteArray fromBase64Array = QByteArray::fromBase64(Base64Aarray);
+    LogXM(fromBase64Array.data(), fromBase64Array.size(), "fromBase64Array pData");
+    //	fromBase64Array数据格式为:BITMAPFILEHEADER + BITMAPINFOHEADER + 图像实际数据, 相当于BMP文件的16进制内容
     //		BITMAPFILEHEADER fileHeader;
     // 		BITMAPINFOHEADER infoHeader;
 
-    DWORD dwImageSize = 0;
-    if (nOutLen > 0)
+    QByteArray strImage;
+    if (fromBase64Array.size() > 0)
     {
-        strImage = strImage.substr(sizeof(BITMAPFILEHEADER), strImage.size() - sizeof(BITMAPFILEHEADER));
+        strImage = fromBase64Array.right(fromBase64Array.size() - sizeof(BITMAPFILEHEADER));
         //转换位图,以下载到设备RAM中(BITMAPINFOHEADER + 图像实际数据)
-        DWORD dwLen = imagepro.LoadBmpImage((LPVOID)strImage.c_str());
+        DWORD dwLen = imagepro.LoadBmpImage((LPVOID)strImage.data());
 
         ULONG ulDataSize = 0;
         LPBYTE lpbyPrintImg = NULL;

+ 2 - 0
DevAdapter/keba/ThermalPrint.keba.1.1/stdafx.h

@@ -16,6 +16,7 @@
 #include <dlfcn.h>
 #include <fcntl.h>
 #include <stdint.h>
+#include <QByteArray>
 //#include <QFile>
 #include "wintypes.h"
 #include "winfunc.h"
@@ -25,5 +26,6 @@
 #include "TraceManager.h"
 #include "SerialComm.h"
 #include "CommDef.h"
+#include "DataConvert.h"
 #include "CkLog.h"
 

+ 1 - 1
DevAdapter/keba/Ups.keba.1.1/CMakeLists.txt

@@ -10,7 +10,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 1 - 2
DevAdapter/keba/Ups.keba.1.1/UpsClassImpl_East.cpp

@@ -1,4 +1,4 @@
-
+
 #include "UpsClassImpl_East.h"
 
 LOG_EXTERN()
@@ -245,7 +245,6 @@ ErrorCodeEnum UpsClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
     m_nPort = dwPort;
     m_nBaudRate = dwBaudRate;
 
-    m_nPort = 14;
     char* lpPort = GetCOMPortString(m_nPort);
     if(nullptr == lpPort)
     {

+ 1 - 1
DevAdapter/keba/WatchDog.keba.1.1/CMakeLists.txt

@@ -10,7 +10,7 @@ set(${MODULE_PREFIX}_BATCH "1")
 #设置编译的一些参数
 if(NOT RVC_INTEGRATE_BUILD)
     set(CMAKE_CXX_FLAGS "-std=c++11")
-    set(CMAKE_BUILD_TYPE "Debug")#Release
+    set(CMAKE_BUILD_TYPE "Release")#Release  Debug
 endif()
 #设置头文件查找路径的变量
 set( INCLUDE_KEBA       ${DEVADAPTER_CURRENT_INCLUDES_DIR}

+ 100 - 68
DevAdapter/keba/WatchDog.keba.1.1/WatchDogClassImpl.cpp

@@ -7,10 +7,20 @@ LOG_EXTERN()
 static DWORD dwWDTTime = 0;
 static DWORD dwDelayTime = 0;
 
-WatchDogClassImpl::WatchDogClassImpl()
+WatchDogClassImpl::WatchDogClassImpl():
+     m_bDevOpen(false)
+    ,m_bDelayTimer(false)
+    ,m_bWDTTimer(false)
+    ,m_dwTimeOut(0)
+    ,m_dwRealTimeOut(0)
+    ,m_dwWDTDelayTime(0)
+    ,m_dwDelay(0)
+    ,m_dwDelayTime(0)
+    ,m_dwDelayRemain(0)
 {
     LOG_FUNCTION();
     m_TimerCtrl=new CTimerCtrl;
+    m_wfd=NULL;
 }
 
 WatchDogClassImpl::~WatchDogClassImpl()
@@ -67,28 +77,18 @@ ErrorCodeEnum WatchDogClassImpl::Reset()
     if (!m_bDevOpen)
     {
         SaveErrorInfo("Reset m_bDevOpen is null!", Error_DevNotAvailable);
-        //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"WatchDogClassImpl::Reset()->Reset m_bDevOpen is null!");
-        LogE("WatchDogClassImpl::Reset()->Reset m_bDevOpen is null!");
+        LogE("WatchDogClassImpl::Reset()->Reset m_bDevOpen is nullline=%d",__LINE__);
         return Error_DevNotAvailable;
     }
 
     if(m_wfd == NULL)
     {
         SaveErrorInfo("Reset m_pMB330CRM is null!", Error_DevNotAvailable);
-        //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"WatchDogClassImpl::Reset()->Reset m_wfd is null!");
-        LogE("WatchDogClassImpl::Reset()->Reset m_wfd is null!");
+        LogE("WatchDogClassImpl::Reset()->Reset m_wfd is null! line=%d",__LINE__);
         return Error_DevNotAvailable;
     }
-//    if (ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD) == -1)
-//    {
-//        SaveErrorInfo("Reset IsAvailable fail!", Error_DevNotAvailable);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"WatchDogClassImpl::Reset()->Reset WDIOS_ENABLECARD fail!");
-//        return Error_DevNotAvailable;
-//    }
-    //m_pMB330CRM->ResetWDT();
     ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD);
-    //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"WatchDogClassImpl::Reset()->Reset is Execute success!");
-    LogM("WatchDogClassImpl::Reset()->Reset is Execute success!");
+    LogM("WatchDogClassImpl::Reset()->Reset is Execute success! line=%d",__LINE__);
     return Error_Succeed;
 }
 
@@ -99,17 +99,14 @@ ErrorCodeEnum WatchDogClassImpl::DevClose()
     if(m_wfd == NULL)
     {
         SaveErrorInfo("DevClose m_pMB330CRM is null!", Error_DevNotAvailable);     
-        //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::DevClose()-> DevClose m_wfd is null!");
-        LogE(" WatchDogClassImpl::DevClose()-> DevClose m_wfd is null!");
+        LogE(" WatchDogClassImpl::DevClose()-> DevClose m_wfd is null! line=%d",__LINE__);
         return Error_DevNotAvailable;
     }
-    //m_pMB330CRM->ResetWDT();  //disable WDT
     ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD) ;
     char stopmagic='v';
     write(m_wfd, &stopmagic, sizeof(stopmagic));
     close(m_wfd);
-    //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::DevClose()-> DevClose DevClose is Execute success!");
-    LogE("WatchDogClassImpl::DevClose()-> DevClose DevClose is Execute success!");
+    LogE("WatchDogClassImpl::DevClose()-> DevClose DevClose is Execute success! line=%d",__LINE__);
     return Error_Succeed;
 }
 
@@ -117,9 +114,7 @@ ErrorCodeEnum WatchDogClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 {
     LOG_FUNCTION();
     devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
-    //memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERR_MSG);
     memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
-    //memcpy(devErrInfo.szErrMsg, m_szErrMsg, min(devErrInfo.dwErrMsgLen, MAX_DEV_ERR_MSG));
     memcpy(devErrInfo.szErrMsg, m_szErrMsg, std::min((uint32_t)devErrInfo.dwErrMsgLen,(uint32_t) MAX_DEV_ERROR_MSG_LEN));
     return Error_Succeed;
 }
@@ -127,50 +122,93 @@ ErrorCodeEnum WatchDogClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
 ErrorCodeEnum WatchDogClassImpl::DevOpen()
 {
     LOG_FUNCTION();
+    int preset_timeout{0};
     if(m_bDevOpen)
     {
         SaveErrorInfo("DevOpen DevAlreadyConnected!");
-        LogE("DevOpen DevAlreadyConnected!");
+        LogW("DevOpen DevAlreadyConnected! line=%d",__LINE__);
         return  Error_DevAlreadyConnected;
     }
     ErrorCodeEnum eErr = Error_DevNotAvailable;
     if(m_wfd==NULL)
     {
-        m_wfd = open(WATCHDOG, O_RDWR);
+        m_wfd = open(WATCHDOG0, O_RDWR);
+        if (m_wfd == -1)
+        {
+            eErr = Error_Failed;
+            LogE("WatchDogClassImpl::DevOpen Error_DevCommFailed=%d line=%d",eErr,__LINE__);
+            return Error_Failed;
+        }
+       ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout);
+       LogW("ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout=%d) line=%d",preset_timeout,__LINE__);
+       int config_timeout=178;
+       ioctl(m_wfd, WDIOC_SETTIMEOUT, &config_timeout);
+       int flag=WDIOS_DISABLECARD;
+       if(-1== ioctl(m_wfd, WDIOC_SETOPTIONS, &flag))
+       {
+            LogW("-1==ioctl(m_wfd, WDIOC_SETOPTIONS, &flag=WDIOS_DISABLECARD); line=%d",__LINE__);
+       }
+       else
+       {
+           LogW("ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD) sucessfull line=%d",__LINE__);
+       }
     }
     if(m_wfd)
     {
         eErr = Error_Succeed;
         m_bDevOpen=true;
+        /*测试能否获取看门狗打开后,默认的时间*/
+        if(-1==ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout))
+        {
+            LogW("-1==ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout=%d) line=%d",preset_timeout,__LINE__);
+            char stopmagic = 'V';
+            if (write(m_wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic))
+            {
+                LogW("Watchdog magic stop write error  line=%d",__LINE__);
+            }
+            close(m_wfd);
+            LogW("Watchdog gettimeout ioctl error %s line=%d", strerror(errno),__LINE__);
+            return  Error_Failed;
+        }
+        else
+        {
+             LogW("Watchdog preset timeout is %d line=%d",preset_timeout,__LINE__);
+        }
     }
     else
     {
         eErr = Error_DevCommFailed;
-        LogE("WatchDogClassImpl::DevOpen Error_DevCommFailed=%d",eErr);
+        LogE("WatchDogClassImpl::DevOpen Error_DevCommFailed=%d line=%d",eErr,__LINE__);
     }
     return eErr;
-
 }
 
 ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
 {
     LOG_FUNCTION();
+    LogE("StartWatch dwDelay=%d,dwTimeout=%d",dwDelay,dwTimeout);
     if (!m_bDevOpen)
     {
         SaveErrorInfo("StartWatch m_bDevOpen is null!");
-        LogE("StartWatch m_bDevOpen is null!");
+        LogE("StartWatch m_bDevOpen is null! line=%d",__LINE__);
         return Error_DevNotAvailable;
     }
     if(m_wfd == NULL)
     {
         SaveErrorInfo("StartWatch m_pMB330CRM is null!");
-        LogE("StartWatch m_pMB330CRM is null! Error_DevNotAvailable=%d",Error_DevNotAvailable);
+        LogE("StartWatch m_pMB330CRM is null! Error_DevNotAvailable=%d line=%d",Error_DevNotAvailable,__LINE__);
         return Error_DevNotAvailable;
     }
-    if (dwTimeout == 0)
+    if (dwDelay == 0 && dwTimeout == 0)
     {
-        SaveErrorInfo("StartWatch Check Param fail!");
-        LogE("StartWatch Check Param fail!");
+        //SaveErrorInfo("StartWatch Check Param fail!");
+        LogE("StartWatch Check two Param are 0! line=%d",__LINE__);
+        int flag=WDIOS_ENABLECARD;
+        if(-1== ioctl(m_wfd, WDIOC_SETOPTIONS, &flag))
+        {
+            LogW("-1==ioctl(m_wfd, WDIOC_SETOPTIONS, &flag=WDIOS_ENABLECARD); line=%d",__LINE__);
+        }
+        ioctl(m_wfd,WDIOC_SETTIMEOUT,&dwTimeout);
         return Error_Param;
     }
     //Initiate variable
@@ -180,13 +218,14 @@ ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
     {
         m_dwTimeOut = dwTimeout % 178;
         m_dwWDTDelayTime = (dwTimeout - m_dwTimeOut) / 178;
+        LogW("m_dwTimeOut=%d,m_dwWDTDelayTime=%d line=%d,",m_dwTimeOut,m_dwWDTDelayTime,__LINE__);
     }
     else
     {
         m_dwTimeOut = dwTimeout;
     }
     m_dwRealTimeOut = dwTimeout;
-
+    LogE("m_dwRealTimeOut=%d line=%d" ,m_dwRealTimeOut , __LINE__);
 
     //Start DelayTimer
     if ( dwDelay != 0 )
@@ -194,26 +233,27 @@ ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
         if (m_bDelayTimer)
         {
             m_TimerCtrl->EndTimer_ptr(m_mmDelayTimerID);
-            LogW(" StartWatch(dwDelay=%d, dwTimeout=%d) StartWatch Delay timeKillEvent m_mmDelayTimerID = %d !",
-             dwDelay, dwTimeout,m_mmDelayTimerID);
+            LogW("line=%d StartWatch(dwDelay=%d, dwTimeout=%d) StartWatch Delay timeKillEvent m_mmDelayTimerID = %d !",
+             __LINE__,dwDelay, dwTimeout,m_mmDelayTimerID);
         }
 
         if (dwDelay > 178)
         {
             m_dwDelayRemain = dwDelay % 178;
+            LogW(" m_dwDelayRemain = %d !line=%d ",m_dwDelayRemain, __LINE__);
             m_dwDelayTime = (dwDelay - m_dwDelayRemain) / 178;
+            LogW("m_dwDelayTime = %d  line=%d !",m_dwDelayTime, __LINE__);
             m_TimerCtrl->SetTimerFunction(DelayTimer);
             m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this,_TIMER_DELAY,FALSE);
-            //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StartWatch->StartWatch Delay timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
-            LogW(" WatchDogClassImpl::StartWatch->StartWatch Delay timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
+            LogW("WatchDogClassImpl::StartWatch->StartWatch Delay timeSetEvent m_mmDelayTimerID = %d  line=%d !",m_mmDelayTimerID, __LINE__);
         }
         else
         {
             m_dwDelayTime = 0;
+            LogW("m_dwDelayTime = %d line=%d !", m_dwDelayTime,__LINE__);
             m_TimerCtrl->SetTimerFunction(DelayTimer);
             m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this,dwDelay*1000,TRUE);
-//            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StartWatch->StartWatch Delay timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
-            LogW("WatchDogClassImpl::StartWatch->StartWatch Delay timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
+            LogW("WatchDogClassImpl::StartWatch->StartWatch Delay timeSetEvent m_mmDelayTimerID = %d line=%d !", m_mmDelayTimerID,__LINE__);
         }
 
         m_bDelayTimer = true;
@@ -227,25 +267,28 @@ ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
             if (m_bWDTTimer)
             {
                 m_TimerCtrl->EndTimer_ptr(m_mmWDTTimerID);
-//                g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StartWatch->StartWatch no Delay Timeout timeKillEvent m_mmWDTTimerID = %d !", m_mmDelayTimerID);
-                LogW("WatchDogClassImpl::StartWatch->StartWatch no Delay Timeout timeKillEvent m_mmWDTTimerID = %d !", m_mmDelayTimerID);
+                LogW("WatchDogClassImpl::StartWatch->StartWatch no Delay Timeout timeKillEvent m_mmWDTTimerID = %d ! line=%d", m_mmDelayTimerID ,__LINE__);
             }
             //m_mmWDTTimerID = timeSetEvent( _TIMER_DELAY, 1, &WDTTimer, (DWORD)this, TIME_PERIODIC );
             m_TimerCtrl->SetTimerFunction(WDTTimer);
-            m_TimerCtrl->StartTimer_ptr(m_mmWDTTimerID,this,dwDelay*1000,TRUE);
+            m_TimerCtrl->StartTimer_ptr(m_mmWDTTimerID,this,_TIMER_DELAY,TRUE);//TRUE表示循环定时器
+            LogW(" m_TimerCtrl->StartTimer_ptr(m_mmWDTTimerID,this,dwDelay*1000=%d,TRUE) ! line=%d", dwDelay*1000,__LINE__);
             m_bWDTTimer = true;
         }
         else
         {
             //设置没有喂看门狗超时重启时间
+            int flag=WDIOS_ENABLECARD;
+            if(-1== ioctl(m_wfd, WDIOC_SETOPTIONS, &flag))
+            {
+                LogW("-1==ioctl(m_wfd, WDIOC_SETOPTIONS, &flag=WDIOS_ENABLECARD); line=%d",__LINE__);
+            }
             ioctl(m_wfd,WDIOC_SETTIMEOUT,&dwTimeout);
             //m_pMB330CRM->SetWDT(true, (BYTE)(dwTimeout));
-//            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StartWatch->StartWatch no Delay SetWDT dwTimeout = %d !", dwTimeout);
-            LogW(" WatchDogClassImpl::StartWatch->StartWatch no Delay SetWDT dwTimeout = %d !", dwTimeout);
+            LogW(" WatchDogClassImpl::StartWatch->StartWatch no Delay SetWDT dwTimeout = %d ! line=%d", dwTimeout,__LINE__);
         }
     }
-//    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StartWatch->StartWatch is Execute success!");
-    LogW(" WatchDogClassImpl::StartWatch->StartWatch is Execute success!");
+    LogW(" WatchDogClassImpl::StartWatch->StartWatch is Execute success!,line=%d",__LINE__);
 
     return Error_Succeed;
 }
@@ -256,7 +299,6 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
     if (!m_bDevOpen)
     {
         SaveErrorInfo("StopWatch m_bDevOpen is null!");
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StopWatch()->StopWatch m_bDevOpen is null !");
         LogE(" WatchDogClassImpl::StopWatch()->StopWatch m_bDevOpen is null !");
         return Error_DevNotAvailable;
     }
@@ -265,7 +307,6 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
         dwDelayTime = 0;
         //timeKillEvent(m_mmDelayTimerID);
         m_TimerCtrl->EndTimer_ptr(m_mmDelayTimerID);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StopWatch()->Delay timeKillEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID );
         LogW(" WatchDogClassImpl::StopWatch()->Delay timeKillEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID );
         m_bDelayTimer = false;
     }
@@ -275,7 +316,6 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
         dwWDTTime = 0;
         //timeKillEvent(m_mmWDTTimerID);
         m_TimerCtrl->EndTimer_ptr(m_mmWDTTimerID);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::StopWatch()->WDTTimer timeKillEvent m_mmWDTTimerID = %d !", m_mmWDTTimerID);
         LogW(" WatchDogClassImpl::StopWatch()->WDTTimer timeKillEvent m_mmWDTTimerID = %d !", m_mmWDTTimerID);
         m_bWDTTimer = false;
     }
@@ -288,7 +328,6 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
         char stopmagic = 'V';
         write(m_wfd, &stopmagic, sizeof(stopmagic));
     }
-//    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"WatchDogClassImpl::StopWatch()->StopWatch is Execute success! !");
     LogW("WatchDogClassImpl::StopWatch()->StopWatch is Execute success! !");
     return Error_Succeed;
 
@@ -300,15 +339,13 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
     if (!m_bDevOpen)
     {
         SaveErrorInfo("RefreshDog m_bDevOpen is null!");
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog m_bDevOpen is null!");
-        LogW("WatchDogClassImpl::RefreshDog()->RefreshDog m_bDevOpen is null!");
+        LogW("WatchDogClassImpl::RefreshDog()->RefreshDog m_bDevOpen is false!");
         return Error_DevNotAvailable;
     }
 
     if(m_wfd == NULL)
     {
         SaveErrorInfo("RefreshDog m_pMB330CRM is null!");
-        //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog m_wfd is null!");
         LogE(" WatchDogClassImpl::RefreshDog()->RefreshDog m_wfd is null!");
         return Error_DevNotAvailable;
     }
@@ -316,14 +353,12 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
     {
         //timeKillEvent(m_mmDelayTimerID);
         m_TimerCtrl->EndTimer_ptr(m_mmDelayTimerID);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog m_bDelayTimer timeKillEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
         LogW("WatchDogClassImpl::RefreshDog()->RefreshDog m_bDelayTimer timeKillEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
         if (m_dwDelay > 178)
         {
             //m_mmDelayTimerID = timeSetEvent( _TIMER_DELAY, 1, &DelayTimer, (DWORD)this, TIME_PERIODIC );
             m_TimerCtrl->SetTimerFunction(DelayTimer);
             m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this,_TIMER_DELAY,FALSE);
-//            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog Delay > 178 timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
             LogW("WatchDogClassImpl::RefreshDog()->RefreshDog Delay > 178 timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
         }
         else
@@ -331,7 +366,6 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
             //m_mmDelayTimerID = timeSetEvent( m_dwDelay*1000, 1, &DelayTimer, (DWORD)this, TIME_ONESHOT );
             m_TimerCtrl->SetTimerFunction(DelayTimer);
             m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this, m_dwDelay*1000,TRUE);
-//            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog Delay < 178 timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID );
             LogW("WatchDogClassImpl::RefreshDog()->RefreshDog Delay < 178 timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID );
         }
         m_bDelayTimer = true;
@@ -349,13 +383,10 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
         {
             //timeKillEvent(m_mmWDTTimerID);
             m_TimerCtrl->EndTimer_ptr(m_mmWDTTimerID);
-//            g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog  Kill m_mmWDTTimerID = %d !", m_mmWDTTimerID );
             LogW("WatchDogClassImpl::RefreshDog()->RefreshDog  Kill m_mmWDTTimerID = %d !", m_mmWDTTimerID );
         }
-        //m_mmWDTTimerID = timeSetEvent( _TIMER_DELAY, 1, &WDTTimer, (DWORD)this, TIME_PERIODIC );
         m_TimerCtrl->SetTimerFunction(WDTTimer);
         m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this, _TIMER_DELAY,TRUE);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog  timeSetEvent m_mmWDTTimerID = %d !", m_mmWDTTimerID );
         LogW("WatchDogClassImpl::RefreshDog()->RefreshDog  timeSetEvent m_mmWDTTimerID = %d !", m_mmWDTTimerID );
         m_bWDTTimer  = true;
         dwWDTTime = 0;
@@ -364,10 +395,8 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
     {
         //m_pMB330CRM->TimeOutFresh();
         ioctl(m_wfd, WDIOC_KEEPALIVE, 0);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog  TimeOutFresh ok!");
         LogW("WatchDogClassImpl::RefreshDog()->RefreshDog  TimeOutFresh ok!");
     }
-//    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::RefreshDog()->RefreshDog is Execute success!");
     LogW("WatchDogClassImpl::RefreshDog()->RefreshDog is Execute success!");
     return Error_Succeed;
 }
@@ -402,6 +431,7 @@ void WatchDogClassImpl::DelayTimer(sigval_t ptr)
             //pThis->m_mmDelayTimerID = timeSetEvent( pThis->m_dwDelayRemain*1000, 1, &DelayTimer, (DWORD)pThis, TIME_ONESHOT );
             pThis->m_TimerCtrl->SetTimerFunction(DelayTimer);
             pThis->m_TimerCtrl->StartTimer_ptr(pThis->m_mmDelayTimerID,pThis,pThis->m_dwDelayRemain*1000,FALSE);
+            LogW("WatchDogClassImpl::DelayTimer->DelayTimer TimeOut timeSetEvent  m_mmWDTTimerID = %d !  TIME_ONESHOT line=%d ", pThis->m_mmWDTTimerID ,__LINE__);
             pThis->m_bDelayTimer = true;
             bTimeSet = true;
             if (bTimeSet)
@@ -417,26 +447,25 @@ void WatchDogClassImpl::DelayTimer(sigval_t ptr)
         //pThis->m_mmWDTTimerID = timeSetEvent( _TIMER_DELAY, 1, &WDTTimer, (DWORD)pThis, TIME_PERIODIC );
         pThis->m_TimerCtrl->SetTimerFunction(WDTTimer);
         pThis->m_TimerCtrl->StartTimer_ptr(pThis->m_mmWDTTimerID,pThis,_TIMER_DELAY,TRUE);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::DelayTimer->DelayTimer TimeOut timeSetEvent  m_mmWDTTimerID = %d !", pThis->m_mmWDTTimerID );
-        LogW("WatchDogClassImpl::DelayTimer->DelayTimer TimeOut timeSetEvent  m_mmWDTTimerID = %d !", pThis->m_mmWDTTimerID );
+        LogW("WatchDogClassImpl::DelayTimer->DelayTimer TimeOut timeSetEvent  m_mmWDTTimerID = %d !  TIME_PERIODIC line=%d ", pThis->m_mmWDTTimerID ,__LINE__);
         pThis->m_bWDTTimer = true;
     }
     else
     {
         //pThis->m_pMB330CRM->SetWDT(true, (BYTE)(pThis->m_dwTimeOut));
+        int flag = WDIOS_ENABLECARD;
+        ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag);
+        LogW(" ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag=WDIOS_ENABLECARD) line=%d", __LINE__ );
         ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,&pThis->m_dwTimeOut);
-//        g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::DelayTimer->DelayTimer  SetWDT  m_dwTimeOut = %d !", pThis->m_dwTimeOut );
-        LogW(" WatchDogClassImpl::DelayTimer->DelayTimer  SetWDT  m_dwTimeOut = %d !", pThis->m_dwTimeOut );
+        LogW("ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,&pThis->m_dwTimeOut= %d line=%d!) ",pThis->m_dwTimeOut ,__LINE__);
     }
 
     //timeKillEvent(pThis->m_mmDelayTimerID);
     pThis->m_TimerCtrl->EndTimer_ptr(pThis->m_mmDelayTimerID);
-//    g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN," WatchDogClassImpl::DelayTimer->DelayTimer  Kill m_mmDelayTimerID = %d !", pThis->m_mmDelayTimerID );
-    LogW(" WatchDogClassImpl::DelayTimer->DelayTimer  Kill m_mmDelayTimerID = %d !", pThis->m_mmDelayTimerID );
+    LogW(" WatchDogClassImpl::DelayTimer->DelayTimer  Kill m_mmDelayTimerID = %d line=%d!", pThis->m_mmDelayTimerID ,__LINE__);
     pThis->m_bDelayTimer = false;
     bTimeSet = false;
     dwDelayTime = 0;
-
     return;
 }
 
@@ -452,8 +481,11 @@ void WatchDogClassImpl::WDTTimer(sigval_t ptr)
     }
     //Set WDT
     //pThis->m_pMB330CRM->SetWDT(true, (BYTE)(pThis->m_dwTimeOut));
-    ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,pThis->m_dwTimeOut);
-    ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,WDIOS_ENABLECARD);
+    int flag = WDIOS_ENABLECARD;
+    ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag);
+    LogW(" ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag=WDIOS_ENABLECARD) line=%d", __LINE__ );
+    ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,&(pThis->m_dwTimeOut));
+    LogW(" ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,pThis->m_dwTimeOut=%d) line=%d", pThis->m_mmDelayTimerID,__LINE__ );
     //timeKillEvent(pThis->m_mmWDTTimerID);
     pThis->m_TimerCtrl->EndTimer_ptr(pThis->m_mmWDTTimerID);
     pThis->m_bWDTTimer = false;

+ 2 - 3
DevAdapter/keba/WatchDog.keba.1.1/WatchDogClassImpl.h

@@ -1,7 +1,7 @@
 #ifndef WATCHDOG_H
 #define WATCHDOG_H
 
-#pragma pack(push,1)
+
 
 #include "wintypes.h"
 
@@ -39,8 +39,7 @@ typedef unsigned int   MMRESULT;
 //编译版本
 #define  FILE_VERSION  2
 
-//#define min(a,b)            (((a) < (b)) ? (a) : (b))
-
+#pragma pack(push,1)
 class WatchDogClassImpl:public WatchDogClass
 {
 

+ 1 - 13
DevAdapter/keba/WatchDog.keba.1.1/dllmain.cpp

@@ -4,29 +4,17 @@
 #include "CkLog.h"
 
 LOG_DECLARE()
-//CTraceManager g_Trace;
 ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&pBaseObj)
 {
     LOG_INIT("WatchDog", "/home/keba/", "/home/keba/keba-WatchDog.log");
-//    g_Trace.Register("/home/keba/opt/rvc/dbg/WatchDog/keba-WatchDog.log");
-//    std::string err_msg="";
-//    cmb::log4vendor::instance();
-//    cmb::log_init_config config_WatchDog;
-//    config_WatchDog.dev_name =("WatchDog");
-//    config_WatchDog.log_type = CMB_LOG_TYPE_FILE;
-//    config_WatchDog.log_dir = ("/home/keba/opt/rvc/dbg");
-//    cmb::log4vendor::init(config_WatchDog, err_msg);
-//    LOG4VTM(INFO,("config_WatchDog This message would  be record with illegal dev name!"));
     LOG_FUNCTION();
     pBaseObj = new WatchDogClassImpl();
     if (pBaseObj == NULL)
     {
-       //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CreateDevComponent WatchDogClassImpl failed!");
        LogE("CreateDevComponent WatchDogClassImpl failed!");
        return Error_Resource;
     }
-    //g_Trace.TraceInFormat(TRM_INT, TRM_LV_COMMN,"CreateDevComponent WatchDogClassImpl scessufull!");
-    LogM("CreateDevComponent WatchDogClassImpl failed!");
+    LogM("CreateDevComponent WatchDogClassImpl scessufull!");
     return Error_Succeed;
 }
 ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)