Bladeren bron

#IQRV #comment 卡机头文件导入

80374374 1 jaar geleden
bovenliggende
commit
1c960262b5

+ 158 - 0
DevAdapter/self/include/libCardIssuerLoader.h

@@ -0,0 +1,158 @@
+#pragma once
+
+#ifdef LIBCARDISSUERLOADER_EXPORTS
+#define LIBSUBDEVICELOADER_API __declspec(dllexport)
+#else
+#define LIBSUBDEVICELOADER_API __declspec(dllimport)
+#pragma comment(lib, "libCardIssuerLoader.lib")
+#endif
+
+#include "CardIssuerClass.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+	struct Bridge_CardIssuerStatus
+	{
+		int eMedia;
+		int eRetainBin;
+		DWORD dwRetainCount;
+		int eIssuerBin[12];
+		DWORD dwIssuerCount[12];
+		int eKakuTape[8];
+	};
+	struct Bridge_SAMStatus
+	{
+		int isActive;
+		int chosenOfSAM;
+	};
+
+	struct Bridge_SCIKeyInfo
+	{
+		BYTE key[MAX_WORKING_KEY_SIZE];
+		DWORD dwSize;
+	};
+	struct Bridge_SCICheckCode
+	{
+		BYTE code[MAX_CHECK_CODE_SIZE];
+		DWORD dwSize;
+	};
+	struct Bridge_SCITempData
+	{
+		BYTE data[MAX_TEMP_DATA_SIZE];
+		DWORD dwSize;
+	};
+
+	struct Bridge_KakuPrintInfo
+	{
+		char formPath[MAX_KAKU_FILE_SIZE];
+		char fields[MAX_KAKU_FIELDS_SIZE];
+	};
+
+	//////////////////////////////////////////////////////////////////////////
+
+	struct Bridge_TrackInfo
+	{
+		int eSource;
+		int eStatus;
+		DWORD dwSize;
+		BYTE data[MAX_MAG_TRACK_SIZE];
+	};
+
+	struct Bridge_MagTracks
+	{
+		int eRange;
+		Bridge_TrackInfo track[MAX_MAG_TRACK_NUM];
+	};
+
+	struct Bridge_CmdInfo
+	{
+		DWORD dwSize;
+		BYTE data[MAX_IC_BUFFER_SIZE];
+	};
+
+	struct Bridge_CardNo
+	{
+		DWORD dwSize;
+		DWORD dwTrack2Size;
+		DWORD dwTrack3Size;
+		char account[MAX_MAG_TRACK_SIZE];
+		char track2[MAX_MAG_TRACK_SIZE];
+		char track3[MAX_MAG_TRACK_SIZE];
+	};
+
+	struct Bridge_SlotStatus
+	{
+		DWORD dwSize;//sum of slots
+		BYTE status[MAX_SLOT_BUFFER_SIZE];
+	};
+
+	//////////////////////////////////////////////////////////////////////////
+
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_LoadDevObject(const char* libraryPath);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ReleaseDevObject();
+	//////////////////////////////////////////////////////////////////////////
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDevCategory(DevCategoryInfo* pDevCategory);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_Reset();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevClose();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetLastErr(DevErrorInfo* pDevErrInfo);
+	//////////////////////////////////////////////////////////////////////////
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevOpen(DWORD dwPort, DWORD dwBaudRate);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDevStatus(Bridge_CardIssuerStatus* pDevStatus);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDeviceSN(char** pDevSN);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MoveCard(int eCardPos, int hopperNo);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetCardInType(int eCardIn);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MagRead(Bridge_MagTracks* pMagTracks);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MagWrite(Bridge_MagTracks magTracks, int eWriteMode);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetRetractCounter(DWORD dwCount);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetIssuerCounter(DWORD dwCount, int hopperNo);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ActiveICCard();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ContactIC();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ReleaseIC();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_WarmReset();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ICCommand(Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMActive(BYTE vcc);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMDeactivate();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMWarmReset();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMQueryStatus(Bridge_SAMStatus* pSamStatus);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMSelect(const int sn);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMCommand(Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ActiveICCardATR(Bridge_CmdInfo* pAtrBuf);
+
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_Print(BYTE** pData, const int dataSize, const int side);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_QueryPrinterStatus();
+
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ActiveContactlessICCard(char fstType, char scdType, char thdType, char* pOutType);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DeactivateICCard();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DeactContactlessICCard();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MifareCommand(int eFunType, Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_RFTypeABCommand(Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE* pBtType);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_TransferEnInit(int* iStatus, BYTE** Cr1, int* lenR1, BYTE** Cr3, int* lenR3, BYTE** dKey, int* lenKey);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetR2(int* iStatus, BYTE* pCr2, int lenR2);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SendWorkingKey(const char* pWorkingKey);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLLoadKey(const Bridge_SCIKeyInfo key);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLSetParam(int eType, int value);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLLock();
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLUnLock(const Bridge_SCICheckCode checkCode, int bTemp);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLGetTempData(Bridge_SCITempData* pKsnData, Bridge_SCITempData* pRamData);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLOpenDoor(const Bridge_SCITempData data);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothControl(int eCmd);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothModifyKey(unsigned char* key);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothModifyName(unsigned char* name);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothGetVersion(char** pVersion);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothGetConnectName(unsigned char** name);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothGetSignalStrength(unsigned char** signal);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_LightControl(int eLight, int bOnOff);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_QueryBatteryPower(int* bat);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MoveCardToSlot(int slot);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MoveCardFromSlot(int slot);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ReadAccount(Bridge_CardNo* pCardNo);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetSlotSum(int* sum);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_QuerySlotsStatus(Bridge_SlotStatus* slots, const int slot, int bFull);
+	LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_PrintCardFaceRightNow(const Bridge_KakuPrintInfo printInfo);
+
+#ifdef __cplusplus
+} // extern "C" {
+#endif

+ 6 - 1
DevAdapter/self/pinpad/VirtualPinPadClass.cpp

@@ -224,5 +224,10 @@ DEVICEBASE_API ErrorCodeEnum  CreateDevComponent(DeviceBaseClass*& pOutDevAptObj
 
 DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
 {
-	return Error_Param;
+	ErrorCodeEnum result = Bridge_ReleaseDevObject();
+	if (result == Error_Succeed && pInDevAptObj != NULL) {
+		delete pInDevAptObj;
+		pInDevAptObj = NULL;
+	}
+	return result;
 }

+ 22 - 4
Module/include/DevFSMCommBase.hpp

@@ -166,6 +166,23 @@ struct DevAdptLibHelper
 {
 private:
 
+	bool CheckAndGetMapAdatperName(const CSimpleStringA& strPath, CSimpleStringA& replaceAdapterName)
+	{
+		bool result = false;
+		CSimpleStringA strTest = strPath.GetData();
+		for (int i = 0; i < strTest.GetLength(); ++i) {
+			if (strTest[i] >= 'A' && strTest[i] <= 'Z') strTest[i] = strTest[i] + ('a' - 'A');
+		}
+		if (strTest.IndexOf("pinpad") != -1) {
+			replaceAdapterName = "PinPad.self.1.1.dll";
+			result = true;
+		} else if (strTest.IndexOf("cardissuer") != -1) {
+			replaceAdapterName = "CardIssuer.self.1.1.dll";
+			result = true;
+		}
+		return result;
+	}
+
 	bool PreLoadLib(CSimpleStringA& strFullLibPath)
 	{
 		bool result(false);
@@ -178,7 +195,8 @@ private:
 		GetDllVersionInfo(strFullLibPath, d1, d2, d3, d4);
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("dll version: %d.%d.%d.%d", d1, d2, d3, d4);
 		CSimpleStringA strTest = strFullLibPath.GetData();
-		if (strTest.IndexOf("PinPad") != -1) {
+		CSimpleStringA strSelf(true);
+		if (CheckAndGetMapAdatperName(strTest, strSelf)) {
 			int index = -1;
 			for (int i = 0; i < strTest.GetLength(); ++i)
 				if (strTest[i] == '\\' || strTest[i] == '/') index = i;
@@ -189,7 +207,7 @@ private:
 				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("adapter name:%s", strAdapterName.GetData());
 				strTest[index + 1] = '\0'; //!!!!
 				strFullLibPath = strTest.SubString(0, index + 1);
-				strFullLibPath += "PinPad.self.1.1.dll";
+				strFullLibPath += strSelf;
 				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("new adapter path:%s", strFullLibPath.GetData());
 				result = true;
 			}
@@ -203,9 +221,9 @@ public:
 	{
 		ErrorCodeEnum erroCode = Error_Succeed;
 		CSimpleStringA strTemp = strFullLibPath.GetData();
-
+#if defined(_MSC_VER)
 		m_VS2010BridgeMode = PreLoadLib(strTemp);
-
+#endif //_MSC_VER
 		do {
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to load lib: %s", strTemp.GetData());
 			if (!ExistsFileA(strTemp)) {