VirtualDeviceClass.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #include "VirtualDeviceClass.h"
  2. #include "libContactlessCardLoader.h"
  3. static VirtualDeviceClassImpl* object = NULL;
  4. VirtualDeviceClassImpl::VirtualDeviceClassImpl()
  5. {
  6. }
  7. VirtualDeviceClassImpl::~VirtualDeviceClassImpl()
  8. {
  9. }
  10. ErrorCodeEnum VirtualDeviceClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
  11. {
  12. ErrorCodeEnum result;
  13. DevCategoryInfo inner;
  14. result = Bridge_GetDevCategory(&inner);
  15. if (result == Error_Succeed) {
  16. strcpy_s(devCategory.szType, MAX_DEV_TYPE_LEN, inner.szType);
  17. strcpy_s(devCategory.szModel, MAX_DEV_MODEL_LEN, inner.szModel);
  18. strcpy_s(devCategory.szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor);
  19. devCategory.eState = inner.eState;
  20. devCategory.version.wMajor = inner.version.wMajor;
  21. devCategory.version.wMinor = inner.version.wMinor;
  22. devCategory.version.wRevision = inner.version.wRevision;
  23. devCategory.version.wBuild = inner.version.wBuild;
  24. }
  25. return result;
  26. }
  27. ErrorCodeEnum VirtualDeviceClassImpl::Reset()
  28. {
  29. return Bridge_Reset();
  30. }
  31. ErrorCodeEnum VirtualDeviceClassImpl::DevClose()
  32. {
  33. ErrorCodeEnum result = Error_Succeed;
  34. return (result = Bridge_DevClose());
  35. }
  36. ErrorCodeEnum VirtualDeviceClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
  37. {
  38. ErrorCodeEnum result = Error_Succeed;
  39. DevErrorInfo inner;
  40. result = Bridge_GetLastErr(&inner);
  41. if (result == Error_Succeed) {
  42. devErrInfo.dwErrMsgLen = inner.dwErrMsgLen;
  43. strcpy_s(devErrInfo.szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg);
  44. }
  45. return (result);
  46. }
  47. ErrorCodeEnum VirtualDeviceClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
  48. {
  49. ErrorCodeEnum result = Error_Succeed;
  50. return (result = Bridge_DevOpen(dwPort, dwBaudRate));
  51. }
  52. ErrorCodeEnum VirtualDeviceClassImpl::GetDevStatus(RFICReaderStatus& devStatus)
  53. {
  54. ErrorCodeEnum result = Error_Unexpect;
  55. Bridge_RFICReaderStatus inner;
  56. result = Bridge_GetDevStatus(&inner);
  57. if (result == Error_Succeed) {
  58. devStatus.eMediaPos = (CardStatusEnum)inner.eMediaPos;
  59. }
  60. return result;
  61. }
  62. ErrorCodeEnum VirtualDeviceClassImpl::AbortRead()
  63. {
  64. ErrorCodeEnum result = Error_Succeed;
  65. return (result = Bridge_AbortRead());
  66. }
  67. ErrorCodeEnum VirtualDeviceClassImpl::ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType)
  68. {
  69. ErrorCodeEnum result = Error_Unexpect;
  70. char inner = outType;
  71. result = Bridge_ActiveContactlessICCard(fstType, scdType, thdType, &inner);
  72. if (result == Error_Succeed) {
  73. outType = inner;
  74. }
  75. return result;
  76. }
  77. ErrorCodeEnum VirtualDeviceClassImpl::DeactContactlessICCard()
  78. {
  79. ErrorCodeEnum result = Error_Succeed;
  80. return (result = Bridge_DeactContactlessICCard());
  81. }
  82. ErrorCodeEnum VirtualDeviceClassImpl::WarmReset()
  83. {
  84. ErrorCodeEnum result = Error_Succeed;
  85. return (result = Bridge_WarmReset());
  86. }
  87. //δÕÒµ½ÒýÓÃ
  88. ErrorCodeEnum VirtualDeviceClassImpl::MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf)
  89. {
  90. ErrorCodeEnum result = Error_Unexpect;
  91. Bridge_CmdInfo inner_sendBuf;
  92. Bridge_CmdInfo inner_recvBuf;
  93. inner_sendBuf.dwSize = sendBuf.dwSize;
  94. memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  95. result = Bridge_MifareCommand((MifareFuctionEnum)eFunType, inner_sendBuf, &inner_recvBuf);
  96. if (result == Error_Succeed) {
  97. recvBuf.dwSize = inner_recvBuf.dwSize;
  98. memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  99. }
  100. return result;
  101. }
  102. ErrorCodeEnum VirtualDeviceClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  103. {
  104. ErrorCodeEnum result = Error_Unexpect;
  105. Bridge_CmdInfo inner_sendBuf;
  106. Bridge_CmdInfo inner_recvBuf;
  107. inner_sendBuf.dwSize = sendBuf.dwSize;
  108. memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  109. result = Bridge_RFTypeABCommand(inner_sendBuf, &inner_recvBuf);
  110. if (result == Error_Succeed) {
  111. recvBuf.dwSize = inner_recvBuf.dwSize;
  112. memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  113. }
  114. return result;
  115. }
  116. ErrorCodeEnum VirtualDeviceClassImpl::HaltCard()
  117. {
  118. ErrorCodeEnum result = Error_Succeed;
  119. return (result = Bridge_HaltCard());
  120. }
  121. DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass*& pOutDevAptObj)
  122. {
  123. ErrorCodeEnum result(Error_Unexpect);
  124. if (object == NULL) {
  125. char* buf;
  126. DWORD size;
  127. const char* var = "INVOKE_VENDOR_ADAPTER_NAME";
  128. size = GetEnvironmentVariableA(var, NULL, 0);
  129. //ERROR_ENVVAR_NOT_FOUND
  130. if (size <= 0) {
  131. return Error_InvalidState;
  132. }
  133. buf = new char[size + 3];
  134. if (buf == NULL) {
  135. return Error_Resource;
  136. }
  137. memset(buf, 0, sizeof(char) * (size + 3));
  138. size = GetEnvironmentVariableA(var, buf, size);
  139. result = Bridge_LoadDevObject(buf);
  140. if (result == Error_Succeed) {
  141. object = new VirtualDeviceClassImpl();
  142. }
  143. delete[] buf;
  144. }
  145. pOutDevAptObj = object;
  146. return result;
  147. }
  148. DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
  149. {
  150. ErrorCodeEnum result = Bridge_ReleaseDevObject();
  151. if (result == Error_Succeed && pInDevAptObj != NULL) {
  152. delete pInDevAptObj;
  153. pInDevAptObj = NULL;
  154. }
  155. return result;
  156. }
  157. extern "C" DEVICEBASE_API void GetMoreErrorDetail(char* szErrMsg, DWORD * pMsgLen)
  158. {
  159. if (szErrMsg != NULL && pMsgLen != NULL && *pMsgLen > 0) {
  160. DevErrorInfo inner;
  161. ErrorCodeEnum result = Bridge_GetLastErr(&inner);
  162. if (result == Error_Succeed) {
  163. strcpy_s(szErrMsg, *pMsgLen, inner.szErrMsg);
  164. *pMsgLen = inner.dwErrMsgLen;
  165. }
  166. }
  167. }