|
|
@@ -0,0 +1,828 @@
|
|
|
+// libCardIssuerLoader.cpp : 定义 DLL 应用程序的导出函数。
|
|
|
+//
|
|
|
+
|
|
|
+#include "stdafx.h"
|
|
|
+#include <Windows.h>
|
|
|
+#include < stdio.h >
|
|
|
+#include "libCardIssuerLoader.h"
|
|
|
+
|
|
|
+
|
|
|
+typedef ErrorCodeEnum(*DevAdaptObjCreateFunc)(DeviceBaseClass*& baseObj);
|
|
|
+typedef ErrorCodeEnum(*DevAdaptObjReleaseFunc)(DeviceBaseClass*& pBaseObj);
|
|
|
+
|
|
|
+HINSTANCE hinstLib = NULL;
|
|
|
+
|
|
|
+DevAdaptObjCreateFunc pFuncCreateAdapt = NULL;
|
|
|
+DevAdaptObjReleaseFunc pFuncReleaseAdapt = NULL;
|
|
|
+CardIssuerClass* pDevAdapterInstance = NULL;
|
|
|
+
|
|
|
+struct DevErrorInfo errInfoInstance;
|
|
|
+
|
|
|
+void SetLastErrInfo(const char* formatStr, ...)
|
|
|
+{
|
|
|
+ va_list arg;
|
|
|
+ va_start(arg, formatStr);
|
|
|
+ sprintf_s(errInfoInstance.szErrMsg, MAX_DEV_ERROR_MSG_LEN, formatStr, arg);
|
|
|
+ errInfoInstance.dwErrMsgLen = strlen(errInfoInstance.szErrMsg);
|
|
|
+ va_end(arg);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_LoadDevObject(const char* libraryPath)
|
|
|
+{
|
|
|
+ ErrorCodeEnum erroCode;
|
|
|
+ hinstLib = LoadLibraryA(libraryPath);
|
|
|
+ if (hinstLib != NULL) {
|
|
|
+ pFuncCreateAdapt = (DevAdaptObjCreateFunc)GetProcAddress(hinstLib, "CreateDevComponent");
|
|
|
+ if (NULL == pFuncCreateAdapt) {
|
|
|
+ FreeLibrary(hinstLib);
|
|
|
+ pFuncCreateAdapt = NULL;
|
|
|
+ pFuncReleaseAdapt = NULL;
|
|
|
+ return Error_MisMatched;
|
|
|
+ }
|
|
|
+ pFuncReleaseAdapt = (DevAdaptObjReleaseFunc)GetProcAddress(hinstLib, "ReleaseDevComponent");
|
|
|
+ if (NULL == pFuncCreateAdapt) {
|
|
|
+ FreeLibrary(hinstLib);
|
|
|
+ pFuncCreateAdapt = NULL;
|
|
|
+ pFuncReleaseAdapt = NULL;
|
|
|
+ return Error_NotIntegrated;
|
|
|
+ }
|
|
|
+ erroCode = pFuncCreateAdapt((DeviceBaseClass*&)pDevAdapterInstance);
|
|
|
+ if (erroCode != Error_Succeed) {
|
|
|
+ pDevAdapterInstance = NULL;
|
|
|
+ FreeLibrary(hinstLib);
|
|
|
+ pFuncCreateAdapt = NULL;
|
|
|
+ pFuncReleaseAdapt = NULL;
|
|
|
+ return Error_NoTarget;
|
|
|
+ }
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ FreeLibrary(hinstLib);
|
|
|
+ pFuncCreateAdapt = NULL;
|
|
|
+ pFuncReleaseAdapt = NULL;
|
|
|
+ return Error_Null;
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ SetLastErrInfo("load library failed %d", GetLastError());
|
|
|
+ return Error_DevLoadFileFailed;
|
|
|
+ }
|
|
|
+ return Error_Succeed;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ReleaseDevObject()
|
|
|
+{
|
|
|
+ if (pFuncReleaseAdapt != NULL && pDevAdapterInstance != NULL) {
|
|
|
+ DeviceBaseClass* devBasePtr = static_cast<DeviceBaseClass*>(pDevAdapterInstance);
|
|
|
+ pFuncReleaseAdapt(devBasePtr);
|
|
|
+ pDevAdapterInstance = NULL;
|
|
|
+ }
|
|
|
+ if (hinstLib != NULL) {
|
|
|
+ FreeLibrary(hinstLib);
|
|
|
+ hinstLib = NULL;
|
|
|
+ }
|
|
|
+ return Error_Succeed;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDevCategory(DevCategoryInfo* pDevCategory)
|
|
|
+{
|
|
|
+ ErrorCodeEnum result;
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+
|
|
|
+ DevCategoryInfo inner;
|
|
|
+ memset(inner.szType, 0, sizeof(char) * MAX_DEV_TYPE_LEN);
|
|
|
+ memset(inner.szModel, 0, sizeof(char) * MAX_DEV_MODEL_LEN);
|
|
|
+ memset(inner.szVendor, 0, sizeof(char) * MAX_DEV_VENDOR_LEN);
|
|
|
+
|
|
|
+ result = pDevAdapterInstance->GetDevCategory(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+
|
|
|
+ memset(pDevCategory->szType, 0, sizeof(char) * MAX_DEV_TYPE_LEN);
|
|
|
+ memset(pDevCategory->szModel, 0, sizeof(char) * MAX_DEV_MODEL_LEN);
|
|
|
+ memset(pDevCategory->szVendor, 0, sizeof(char) * MAX_DEV_VENDOR_LEN);
|
|
|
+
|
|
|
+ strncpy_s(pDevCategory->szType, MAX_DEV_TYPE_LEN, inner.szType, strlen(inner.szType) > MAX_DEV_TYPE_LEN - 1 ? MAX_DEV_TYPE_LEN - 1 : strlen(inner.szType));
|
|
|
+ strncpy_s(pDevCategory->szModel, MAX_DEV_MODEL_LEN, inner.szModel, strlen(inner.szModel) > MAX_DEV_MODEL_LEN - 1 ? MAX_DEV_TYPE_LEN - 1 : strlen(inner.szModel));
|
|
|
+ strncpy_s(pDevCategory->szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor, strlen(inner.szVendor) > MAX_DEV_VENDOR_LEN - 1 ? MAX_DEV_TYPE_LEN - 1 : strlen(inner.szVendor));
|
|
|
+
|
|
|
+ pDevCategory->eState = inner.eState;
|
|
|
+ pDevCategory->version.wMajor = inner.version.wMajor;
|
|
|
+ pDevCategory->version.wMinor = inner.version.wMinor;
|
|
|
+ pDevCategory->version.wRevision = inner.version.wRevision;
|
|
|
+ pDevCategory->version.wBuild = inner.version.wBuild;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_Reset()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->Reset();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevClose()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->DevClose();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetLastErr(DevErrorInfo* pDevErrInfo)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ strcpy_s(pDevErrInfo->szErrMsg, MAX_DEV_ERROR_MSG_LEN, errInfoInstance.szErrMsg);
|
|
|
+ pDevErrInfo->dwErrMsgLen = errInfoInstance.dwErrMsgLen;
|
|
|
+ return Error_Succeed;
|
|
|
+ }
|
|
|
+ DevErrorInfo inner;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->GetLastErr(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ memset(pDevErrInfo->szErrMsg, 0, sizeof(char) * MAX_DEV_ERROR_MSG_LEN);
|
|
|
+ strncpy_s(pDevErrInfo->szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg, strlen(inner.szErrMsg) > MAX_DEV_ERROR_MSG_LEN - 1 ? MAX_DEV_ERROR_MSG_LEN - 1 : strlen(inner.szErrMsg));
|
|
|
+ pDevErrInfo->dwErrMsgLen = inner.dwErrMsgLen;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevOpen(DWORD dwPort, DWORD dwBaudRate)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->DevOpen(dwPort, dwBaudRate);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDevStatus(Bridge_CardIssuerStatus* pDevStatus)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ CardIssuerStatus inner;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->GetDevStatus(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pDevStatus->eMedia = inner.eMedia;
|
|
|
+ pDevStatus->eRetainBin = inner.eRetainBin;
|
|
|
+ pDevStatus->dwRetainCount = inner.dwRetainCount;
|
|
|
+ memcpy(pDevStatus->eIssuerBin, inner.eIssuerBin, 12*sizeof(int));
|
|
|
+ memcpy(pDevStatus->dwIssuerCount, inner.dwIssuerCount, 12 * sizeof(DWORD));
|
|
|
+ memcpy(pDevStatus->eKakuTape, inner.eKakuTape, 8 * sizeof(int));
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+//128
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetDeviceSN(char** pDevSN)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ char* inner = new char[128];
|
|
|
+ if (inner == NULL) return Error_Resource;
|
|
|
+ memset(inner, 0, sizeof(char) * 128);
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->GetDeviceSN(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ strcpy_s(*pDevSN, 128, inner);
|
|
|
+ }
|
|
|
+ delete[] inner;
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MoveCard(int eCardPos, int hopperNo)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->MoveCard((CardPosEnum)eCardPos, hopperNo);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetCardInType(int eCardIn)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SetCardInType((CardInEnum)eCardIn);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MagRead(Bridge_MagTracks* pMagTracks)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ if (pMagTracks == NULL) {
|
|
|
+ return Error_Param;
|
|
|
+ }
|
|
|
+
|
|
|
+ MagTracks inner;
|
|
|
+ inner.eRange = (TrackRange)pMagTracks->eRange;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->MagRead(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pMagTracks->eRange = inner.eRange;
|
|
|
+ for (int i = 0; i < MAX_MAG_TRACK_NUM; ++i) {
|
|
|
+ pMagTracks->track[i].eSource = inner.track[i].eSource;
|
|
|
+ pMagTracks->track[i].eStatus = inner.track[i].eStatus;
|
|
|
+ pMagTracks->track[i].dwSize = inner.track[i].dwSize;
|
|
|
+ memset(pMagTracks->track[i].data, 0, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
|
|
|
+ memcpy(pMagTracks->track[i].data, inner.track[i].data, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MagWrite(Bridge_MagTracks magTracks, int eWriteMode)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ MagTracks inner;
|
|
|
+ inner.eRange = (TrackRange)magTracks.eRange;
|
|
|
+ for (int i = 0; i < MAX_MAG_TRACK_NUM; ++i) {
|
|
|
+ inner.track[i].eSource = (TrackSrcEnum)magTracks.track[i].eSource;
|
|
|
+ inner.track[i].eStatus = (TrackDataStateEnum)magTracks.track[i].eStatus;
|
|
|
+ inner.track[i].dwSize = magTracks.track[i].dwSize;
|
|
|
+ memset(inner.track[i].data, 0, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
|
|
|
+ memcpy(inner.track[i].data, magTracks.track[i].data, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->MagWrite(inner, (MagWriteModeEnum)eWriteMode);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetRetractCounter(DWORD dwCount)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SetRetractCounter(dwCount);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetIssuerCounter(DWORD dwCount, int hopperNo)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SetIssuerCounter(dwCount, hopperNo);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ActiveICCard()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->ActiveICCard();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ContactIC()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->ContactIC();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ReleaseIC()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->ReleaseIC();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_WarmReset()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->WarmReset();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ICCommand(Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ if (pRecvBuf == NULL) {
|
|
|
+ return Error_Param;
|
|
|
+ }
|
|
|
+ CmdInfo inner_sendBuf;
|
|
|
+ CmdInfo inner_recvBuf;
|
|
|
+
|
|
|
+ inner_sendBuf.dwSize = sendBuf.dwSize;
|
|
|
+ memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->ICCommand(inner_sendBuf, inner_recvBuf);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pRecvBuf->dwSize = inner_recvBuf.dwSize;
|
|
|
+ memcpy(pRecvBuf->data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMActive(BYTE vcc)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SAMActive(vcc);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMDeactivate()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SAMDeactivate();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMWarmReset()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SAMWarmReset();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMQueryStatus(Bridge_SAMStatus* pSamStatus)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ SAMStatus inner;
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->SAMQueryStatus(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pSamStatus->isActive = inner.isActive;
|
|
|
+ pSamStatus->chosenOfSAM = inner.chosenOfSAM;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMSelect(const int sn)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SAMSelect(sn);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SAMCommand(Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ CmdInfo inner_sendBuf;
|
|
|
+ CmdInfo inner_recvBuf;
|
|
|
+
|
|
|
+ inner_sendBuf.dwSize = sendBuf.dwSize;
|
|
|
+ memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->SAMCommand(inner_sendBuf, inner_recvBuf);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pRecvBuf->dwSize = inner_recvBuf.dwSize;
|
|
|
+ memcpy(pRecvBuf->data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ActiveICCardATR(Bridge_CmdInfo* pAtrBuf)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ CmdInfo inner;
|
|
|
+
|
|
|
+ inner.dwSize = pAtrBuf->dwSize;
|
|
|
+ memcpy(inner.data, pAtrBuf->data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->ActiveICCardATR(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pAtrBuf->dwSize = inner.dwSize;
|
|
|
+ memcpy(pAtrBuf->data, inner.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_Print(BYTE** pData, const int dataSize, const int side)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ BYTE* inner = new BYTE[2048];
|
|
|
+ if (inner == NULL) {
|
|
|
+ return Error_Resource;
|
|
|
+ }
|
|
|
+ memset(inner, 0, sizeof(BYTE) * 2048);
|
|
|
+ memcpy(inner, *pData, 2048);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->Print(inner, dataSize, side);
|
|
|
+
|
|
|
+ delete[] inner;
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_QueryPrinterStatus()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->QueryPrinterStatus();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ActiveContactlessICCard(char fstType, char scdType, char thdType, char* pOutType)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+
|
|
|
+ char inner;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->ActiveContactlessICCard(fstType, scdType, thdType, inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ *pOutType = inner;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DeactivateICCard()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->DeactivateICCard();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DeactContactlessICCard()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->DeactContactlessICCard();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MifareCommand(int eFunType, Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ CmdInfo inner_sendBuf;
|
|
|
+ CmdInfo inner_recvBuf;
|
|
|
+
|
|
|
+ inner_sendBuf.dwSize = sendBuf.dwSize;
|
|
|
+ memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->MifareCommand((MifareFuctionEnum)eFunType, inner_sendBuf, inner_recvBuf);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pRecvBuf->dwSize = inner_recvBuf.dwSize;
|
|
|
+ memcpy(pRecvBuf->data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_RFTypeABCommand(Bridge_CmdInfo sendBuf, Bridge_CmdInfo* pRecvBuf)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ CmdInfo inner_sendBuf;
|
|
|
+ CmdInfo inner_recvBuf;
|
|
|
+
|
|
|
+ inner_sendBuf.dwSize = sendBuf.dwSize;
|
|
|
+ memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->RFTypeABCommand(inner_sendBuf, inner_recvBuf);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pRecvBuf->dwSize = inner_recvBuf.dwSize;
|
|
|
+ memcpy(pRecvBuf->data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE* pBtType)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+
|
|
|
+ BYTE inner;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->DevOpenEx(dwPort, dwBaudRate, btOpenType, pDevSN, inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ *pBtType = inner;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_TransferEnInit(int* iStatus, BYTE** Cr1, int* lenR1, BYTE** Cr3, int* lenR3, BYTE** dKey, int* lenKey)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ int inner_iStatus = 0;
|
|
|
+ int inner_lenR1 = 0;
|
|
|
+ int inner_lenR3 = 0;
|
|
|
+ int inner_lenKey = 0;
|
|
|
+
|
|
|
+ BYTE *inner_cr1 = new BYTE[256];
|
|
|
+ BYTE* inner_cr3 = new BYTE[256];
|
|
|
+ BYTE* inner_key = new BYTE[256];
|
|
|
+
|
|
|
+ if (inner_cr1 == NULL || inner_cr3 == NULL || inner_key == NULL) {
|
|
|
+
|
|
|
+ if (inner_cr1 != NULL) delete[] inner_cr1;
|
|
|
+ if (inner_cr3 != NULL) delete[] inner_cr3;
|
|
|
+ if (inner_key != NULL) delete[] inner_key;
|
|
|
+ return Error_Resource;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(inner_cr1, *Cr1, 256);
|
|
|
+ memcpy(inner_cr3, *Cr3, 256);
|
|
|
+ memcpy(inner_key, *dKey, 256);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->TransferEnInit(inner_iStatus, inner_cr1, inner_lenR1, inner_cr3, inner_lenR3, inner_key, inner_lenKey);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ *iStatus = inner_iStatus;
|
|
|
+ *lenR1 = inner_lenR1;
|
|
|
+ *lenR3 = inner_lenR3;
|
|
|
+ *lenKey = inner_lenKey;
|
|
|
+
|
|
|
+ memcpy(*Cr1, inner_cr1, 256);
|
|
|
+ memcpy(*Cr3, inner_cr3, 256);
|
|
|
+ memcpy(*dKey, inner_key, 256);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (inner_cr1 != NULL) delete[] inner_cr1;
|
|
|
+ if (inner_cr3 != NULL) delete[] inner_cr3;
|
|
|
+ if (inner_key != NULL) delete[] inner_key;
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SetR2(int* iStatus, BYTE* pCr2, int lenR2)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ int inner_iStatus = *iStatus;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->SetR2(inner_iStatus, pCr2, lenR2);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ *iStatus = inner_iStatus;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SendWorkingKey(const char* pWorkingKey)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SendWorkingKey(pWorkingKey);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLLoadKey(const Bridge_SCIKeyInfo key)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ SCIKeyInfo inner;
|
|
|
+ memcpy(inner.key, key.key, MAX_WORKING_KEY_SIZE);
|
|
|
+ inner.dwSize = key.dwSize;
|
|
|
+ return pDevAdapterInstance->SLLoadKey(inner);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLSetParam(int eType, int value)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SLSetParam((SCIParamType)eType, value);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLLock()
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->SLLock();
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLUnLock(const Bridge_SCICheckCode checkCode, int bTemp)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ SCICheckCode inner;
|
|
|
+ inner.dwSize = checkCode.dwSize;
|
|
|
+ memcpy(inner.code, checkCode.code, MAX_CHECK_CODE_SIZE);
|
|
|
+ return pDevAdapterInstance->SLUnLock(inner, !!bTemp);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLGetTempData(Bridge_SCITempData* pKsnData, Bridge_SCITempData* pRamData)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ SCITempData inner_ksn;
|
|
|
+ SCITempData inner_ram;
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->SLGetTempData(inner_ksn, inner_ram);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pKsnData->dwSize = inner_ksn.dwSize;
|
|
|
+ memcpy(pKsnData->data, inner_ksn.data, MAX_TEMP_DATA_SIZE);
|
|
|
+ pRamData->dwSize = inner_ram.dwSize;
|
|
|
+ memcpy(pRamData->data, inner_ram.data, MAX_TEMP_DATA_SIZE);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_SLOpenDoor(const Bridge_SCITempData data)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ SCITempData inner;
|
|
|
+ inner.dwSize = data.dwSize;
|
|
|
+ memcpy(inner.data, data.data, MAX_TEMP_DATA_SIZE);
|
|
|
+ return pDevAdapterInstance->SLOpenDoor(inner);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothControl(int eCmd)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->BluetoothControl((SCIBluetoothCMD)eCmd);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothModifyKey(unsigned char* key)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->BluetoothModifyKey(key);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothModifyName(unsigned char* name)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->BluetoothModifyName(name);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothGetVersion(char** pVersion)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ char* inner = new char[256];
|
|
|
+ if (inner == NULL) return Error_Resource;
|
|
|
+ memset(inner, 0, sizeof(char) * 256);
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->BluetoothGetVersion(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ strcpy_s(*pVersion, 256, inner);
|
|
|
+ }
|
|
|
+ delete[] inner;
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothGetConnectName(unsigned char** name)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ unsigned char* inner = new unsigned char[256];
|
|
|
+ if (inner == NULL) return Error_Resource;
|
|
|
+ memset(inner, 0, sizeof(unsigned char) * 256);
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->BluetoothGetConnectName(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ strcpy((char*)*name, (const char*)inner);
|
|
|
+ }
|
|
|
+ delete[] inner;
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_BluetoothGetSignalStrength(unsigned char** signal)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ unsigned char* inner = new unsigned char[256];
|
|
|
+ if (inner == NULL) return Error_Resource;
|
|
|
+ memset(inner, 0, sizeof(unsigned char) * 256);
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->BluetoothGetSignalStrength(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ strcpy((char*)*signal, (const char*)inner);
|
|
|
+ }
|
|
|
+ delete[] inner;
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_LightControl(int eLight, int bOnOff)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->LightControl((SCILightType)eLight, !!bOnOff);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_QueryBatteryPower(int* bat)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ int inner;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->QueryBatteryPower(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ *bat = inner;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MoveCardToSlot(int slot)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->MoveCardToSlot(slot);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_MoveCardFromSlot(int slot)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ return pDevAdapterInstance->MoveCardFromSlot(slot);
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_ReadAccount(Bridge_CardNo* pCardNo)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+
|
|
|
+ CardNo inner;
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->ReadAccount(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ pCardNo->dwSize = inner.dwSize;
|
|
|
+ pCardNo->dwTrack2Size = inner.dwTrack2Size;
|
|
|
+ pCardNo->dwTrack3Size = inner.dwTrack3Size;
|
|
|
+ memcpy(pCardNo->account, inner.account, MAX_MAG_TRACK_SIZE);
|
|
|
+ memcpy(pCardNo->track2, inner.track2, MAX_MAG_TRACK_SIZE);
|
|
|
+ memcpy(pCardNo->track3, inner.track3, MAX_MAG_TRACK_SIZE);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_GetSlotSum(int* sum)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+ int inner;
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->GetSlotSum(inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ *sum = inner;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_QuerySlotsStatus(Bridge_SlotStatus* slots, const int slot, int bFull)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+
|
|
|
+ SlotStatus inner;
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->QuerySlotsStatus(inner, slot, !!bFull);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ slots->dwSize = inner.dwSize;
|
|
|
+ memcpy(slots->status, inner.status, MAX_SLOT_BUFFER_SIZE);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+LIBSUBDEVICELOADER_API ErrorCodeEnum Bridge_PrintCardFaceRightNow(const Bridge_KakuPrintInfo printInfo)
|
|
|
+{
|
|
|
+ if (pDevAdapterInstance == NULL) {
|
|
|
+ return Error_NotInit;
|
|
|
+ }
|
|
|
+
|
|
|
+ KakuPrintInfo inner;
|
|
|
+
|
|
|
+ memset(inner.formPath, 0, sizeof(char) * MAX_KAKU_FILE_SIZE);
|
|
|
+ memset(inner.fields, 0, sizeof(char) * MAX_KAKU_FIELDS_SIZE);
|
|
|
+ strcpy_s(inner.formPath, printInfo.formPath);
|
|
|
+ strcpy_s(inner.fields, printInfo.fields);
|
|
|
+
|
|
|
+ ErrorCodeEnum result = pDevAdapterInstance->PrintCardFaceRightNow(inner);
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|