#include "VirtualDeviceClass.h" #include "libContactlessCardLoader.h" static VirtualDeviceClassImpl* object = NULL; VirtualDeviceClassImpl::VirtualDeviceClassImpl() { } VirtualDeviceClassImpl::~VirtualDeviceClassImpl() { } ErrorCodeEnum VirtualDeviceClassImpl::GetDevCategory(DevCategoryInfo& devCategory) { ErrorCodeEnum result; DevCategoryInfo inner; result = Bridge_GetDevCategory(&inner); if (result == Error_Succeed) { strcpy_s(devCategory.szType, MAX_DEV_TYPE_LEN, inner.szType); strcpy_s(devCategory.szModel, MAX_DEV_MODEL_LEN, inner.szModel); strcpy_s(devCategory.szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor); devCategory.eState = inner.eState; devCategory.version.wMajor = inner.version.wMajor; devCategory.version.wMinor = inner.version.wMinor; devCategory.version.wRevision = inner.version.wRevision; devCategory.version.wBuild = inner.version.wBuild; } return result; } ErrorCodeEnum VirtualDeviceClassImpl::Reset() { return Bridge_Reset(); } ErrorCodeEnum VirtualDeviceClassImpl::DevClose() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_DevClose()); } ErrorCodeEnum VirtualDeviceClassImpl::GetLastErr(DevErrorInfo& devErrInfo) { ErrorCodeEnum result = Error_Succeed; DevErrorInfo inner; result = Bridge_GetLastErr(&inner); if (result == Error_Succeed) { devErrInfo.dwErrMsgLen = inner.dwErrMsgLen; strcpy_s(devErrInfo.szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg); } return (result); } ErrorCodeEnum VirtualDeviceClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate) { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_DevOpen(dwPort, dwBaudRate)); } ErrorCodeEnum VirtualDeviceClassImpl::GetDevStatus(RFICReaderStatus& devStatus) { ErrorCodeEnum result = Error_Unexpect; Bridge_RFICReaderStatus inner; result = Bridge_GetDevStatus(&inner); if (result == Error_Succeed) { devStatus.eMediaPos = (CardStatusEnum)inner.eMediaPos; } return result; } ErrorCodeEnum VirtualDeviceClassImpl::AbortRead() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_AbortRead()); } ErrorCodeEnum VirtualDeviceClassImpl::ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType) { ErrorCodeEnum result = Error_Unexpect; char inner = outType; result = Bridge_ActiveContactlessICCard(fstType, scdType, thdType, &inner); if (result == Error_Succeed) { outType = inner; } return result; } ErrorCodeEnum VirtualDeviceClassImpl::DeactContactlessICCard() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_DeactContactlessICCard()); } ErrorCodeEnum VirtualDeviceClassImpl::WarmReset() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_WarmReset()); } //δÕÒµ½ÒýÓà ErrorCodeEnum VirtualDeviceClassImpl::MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf) { ErrorCodeEnum result = Error_Unexpect; Bridge_CmdInfo inner_sendBuf; Bridge_CmdInfo inner_recvBuf; inner_sendBuf.dwSize = sendBuf.dwSize; memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE); result = Bridge_MifareCommand((MifareFuctionEnum)eFunType, inner_sendBuf, &inner_recvBuf); if (result == Error_Succeed) { recvBuf.dwSize = inner_recvBuf.dwSize; memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE); } return result; } ErrorCodeEnum VirtualDeviceClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf) { ErrorCodeEnum result = Error_Unexpect; Bridge_CmdInfo inner_sendBuf; Bridge_CmdInfo inner_recvBuf; inner_sendBuf.dwSize = sendBuf.dwSize; memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE); result = Bridge_RFTypeABCommand(inner_sendBuf, &inner_recvBuf); if (result == Error_Succeed) { recvBuf.dwSize = inner_recvBuf.dwSize; memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE); } return result; } ErrorCodeEnum VirtualDeviceClassImpl::HaltCard() { ErrorCodeEnum result = Error_Succeed; return (result = Bridge_HaltCard()); } DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass*& pOutDevAptObj) { ErrorCodeEnum result(Error_Unexpect); if (object == NULL) { char* buf; DWORD size; const char* var = "INVOKE_VENDOR_ADAPTER_NAME"; size = GetEnvironmentVariableA(var, NULL, 0); //ERROR_ENVVAR_NOT_FOUND if (size <= 0) { return Error_InvalidState; } buf = new char[size + 3]; if (buf == NULL) { return Error_Resource; } memset(buf, 0, sizeof(char) * (size + 3)); size = GetEnvironmentVariableA(var, buf, size); result = Bridge_LoadDevObject(buf); if (result == Error_Succeed) { object = new VirtualDeviceClassImpl(); } delete[] buf; } pOutDevAptObj = object; return result; } DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj) { ErrorCodeEnum result = Bridge_ReleaseDevObject(); if (result == Error_Succeed && pInDevAptObj != NULL) { delete pInDevAptObj; pInDevAptObj = NULL; } return result; } extern "C" DEVICEBASE_API void GetMoreErrorDetail(char* szErrMsg, DWORD * pMsgLen) { if (szErrMsg != NULL && pMsgLen != NULL && *pMsgLen > 0) { DevErrorInfo inner; ErrorCodeEnum result = Bridge_GetLastErr(&inner); if (result == Error_Succeed) { strcpy_s(szErrMsg, *pMsgLen, inner.szErrMsg); *pMsgLen = inner.dwErrMsgLen; } } }