VirtualDeviceClass.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. #include "VirtualDeviceClass.h"
  2. #include "libIDCertificateLoader.h"
  3. static VirtualDeviceClassImpl* object = NULL;
  4. DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass*& pOutDevAptObj)
  5. {
  6. ErrorCodeEnum result(Error_Unexpect);
  7. if (object == NULL) {
  8. char* buf;
  9. DWORD size;
  10. const char* var = "INVOKE_VENDOR_ADAPTER_NAME";
  11. size = GetEnvironmentVariableA(var, NULL, 0);
  12. //ERROR_ENVVAR_NOT_FOUND
  13. if (size <= 0) {
  14. return Error_InvalidState;
  15. }
  16. buf = new char[size + 3];
  17. if (buf == NULL) {
  18. return Error_Resource;
  19. }
  20. memset(buf, 0, sizeof(char) * (size + 3));
  21. size = GetEnvironmentVariableA(var, buf, size);
  22. result = Bridge_LoadDevObject(buf);
  23. if (result == Error_Succeed) {
  24. object = new VirtualDeviceClassImpl();
  25. }
  26. delete[] buf;
  27. }
  28. pOutDevAptObj = object;
  29. return result;
  30. }
  31. DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
  32. {
  33. ErrorCodeEnum result = Bridge_ReleaseDevObject();
  34. if (result == Error_Succeed && pInDevAptObj != NULL) {
  35. delete pInDevAptObj;
  36. pInDevAptObj = NULL;
  37. }
  38. return result;
  39. }
  40. VirtualDeviceClassImpl::VirtualDeviceClassImpl()
  41. {
  42. }
  43. VirtualDeviceClassImpl::~VirtualDeviceClassImpl()
  44. {
  45. }
  46. ErrorCodeEnum VirtualDeviceClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
  47. {
  48. ErrorCodeEnum result;
  49. DevCategoryInfo inner;
  50. result = Bridge_GetDevCategory(&inner);
  51. if (result == Error_Succeed) {
  52. strcpy_s(devCategory.szType, MAX_DEV_TYPE_LEN, inner.szType);
  53. strcpy_s(devCategory.szModel, MAX_DEV_MODEL_LEN, inner.szModel);
  54. strcpy_s(devCategory.szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor);
  55. devCategory.eState = inner.eState;
  56. devCategory.version.wMajor = inner.version.wMajor;
  57. devCategory.version.wMinor = inner.version.wMinor;
  58. devCategory.version.wRevision = inner.version.wRevision;
  59. devCategory.version.wBuild = inner.version.wBuild;
  60. }
  61. return result;
  62. }
  63. ErrorCodeEnum VirtualDeviceClassImpl::Reset()
  64. {
  65. return Bridge_Reset();
  66. }
  67. ErrorCodeEnum VirtualDeviceClassImpl::DevClose()
  68. {
  69. ErrorCodeEnum result = Error_Succeed;
  70. return (result = Bridge_DevClose());
  71. }
  72. ErrorCodeEnum VirtualDeviceClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
  73. {
  74. ErrorCodeEnum result = Error_Succeed;
  75. DevErrorInfo inner;
  76. result = Bridge_GetLastErr(&inner);
  77. if (result == Error_Succeed) {
  78. devErrInfo.dwErrMsgLen = inner.dwErrMsgLen;
  79. strcpy_s(devErrInfo.szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg);
  80. }
  81. return (result);
  82. }
  83. //////////////////////////
  84. ErrorCodeEnum VirtualDeviceClassImpl::DevOpen(DWORD dwPort)
  85. {
  86. ErrorCodeEnum result = Error_Succeed;
  87. return (result = Bridge_DevOpen(dwPort));
  88. }
  89. ErrorCodeEnum VirtualDeviceClassImpl::IDCerRFControl(bool bControl)
  90. {
  91. ErrorCodeEnum result = Error_Succeed;
  92. return (result = Bridge_IDCerRFControl(bControl ? 1: 0));
  93. }
  94. ErrorCodeEnum VirtualDeviceClassImpl::IDCerAuthenticate()
  95. {
  96. ErrorCodeEnum result = Error_Succeed;
  97. return (result = Bridge_IDCerAuthenticate());
  98. }
  99. ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetData(IDCerInfo& idCerInfo)
  100. {
  101. Bridge_IDCerInfo inner;
  102. ErrorCodeEnum result = Error_Unexpect;
  103. result = Bridge_IDCerGetData(&inner);
  104. if (result == Error_Succeed)
  105. {
  106. memcpy(idCerInfo.name.data, inner.name.data, MAX_IDCER_INFO_SIZE);
  107. idCerInfo.name.dwSize = inner.name.dwSize;
  108. memcpy(idCerInfo.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  109. idCerInfo.sex.dwSize = inner.sex.dwSize;
  110. memcpy(idCerInfo.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  111. idCerInfo.nation.dwSize = inner.nation.dwSize;
  112. memcpy(idCerInfo.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  113. idCerInfo.birthday.dwSize = inner.birthday.dwSize;
  114. memcpy(idCerInfo.address.data, inner.address.data, MAX_IDCER_INFO_SIZE);
  115. idCerInfo.address.dwSize = inner.address.dwSize;
  116. memcpy(idCerInfo.idno.data, inner.idno.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  117. idCerInfo.idno.dwSize = inner.idno.dwSize;
  118. memcpy(idCerInfo.department.data, inner.department.data, MAX_IDCER_INFO_SIZE);
  119. idCerInfo.department.dwSize = inner.department.dwSize;
  120. memcpy(idCerInfo.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  121. idCerInfo.startDate.dwSize = inner.startDate.dwSize;
  122. memcpy(idCerInfo.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  123. idCerInfo.endDate.dwSize = inner.endDate.dwSize;
  124. memcpy(idCerInfo.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE);
  125. idCerInfo.newAddress.dwSize = inner.newAddress.dwSize;
  126. memcpy(idCerInfo.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH);
  127. idCerInfo.photoPath.dwSize = inner.photoPath.dwSize;
  128. }
  129. return result;
  130. }
  131. ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetDataEx(IDCerInfoEx& idCerInfoEx)
  132. {
  133. Bridge_IDCerInfoEx inner;
  134. ErrorCodeEnum result = Error_Unexpect;
  135. result = Bridge_IDCerGetDataEx(&inner);
  136. if (result == Error_Succeed)
  137. {
  138. memcpy(idCerInfoEx.name.data, inner.name.data, MAX_IDCER_INFO_SIZE);
  139. idCerInfoEx.name.dwSize = inner.name.dwSize;
  140. memcpy(idCerInfoEx.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  141. idCerInfoEx.sex.dwSize = inner.sex.dwSize;
  142. memcpy(idCerInfoEx.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  143. idCerInfoEx.nation.dwSize = inner.nation.dwSize;
  144. memcpy(idCerInfoEx.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  145. idCerInfoEx.birthday.dwSize = inner.birthday.dwSize;
  146. memcpy(idCerInfoEx.address.data, inner.address.data, MAX_IDCER_INFO_SIZE);
  147. idCerInfoEx.address.dwSize = inner.address.dwSize;
  148. memcpy(idCerInfoEx.idno.data, inner.idno.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  149. idCerInfoEx.idno.dwSize = inner.idno.dwSize;
  150. memcpy(idCerInfoEx.department.data, inner.department.data, MAX_IDCER_INFO_SIZE);
  151. idCerInfoEx.department.dwSize = inner.department.dwSize;
  152. memcpy(idCerInfoEx.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  153. idCerInfoEx.startDate.dwSize = inner.startDate.dwSize;
  154. memcpy(idCerInfoEx.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  155. idCerInfoEx.endDate.dwSize = inner.endDate.dwSize;
  156. memcpy(idCerInfoEx.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE);
  157. idCerInfoEx.newAddress.dwSize = inner.newAddress.dwSize;
  158. memcpy(idCerInfoEx.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH);
  159. idCerInfoEx.photoPath.dwSize = inner.photoPath.dwSize;
  160. memcpy(idCerInfoEx.englishName.data, inner.englishName.data, MAX_IDCER_INFO_SIZE);
  161. idCerInfoEx.englishName.dwSize = inner.englishName.dwSize;
  162. memcpy(idCerInfoEx.nationality.data, inner.nationality.data, IDCER_EIGHT_BYTE_SIZE);
  163. idCerInfoEx.nationality.dwSize = inner.nationality.dwSize;
  164. memcpy(idCerInfoEx.idVersion.data, inner.idVersion.data, IDCER_EIGHT_BYTE_SIZE);
  165. idCerInfoEx.idVersion.dwSize = inner.idVersion.dwSize;
  166. memcpy(idCerInfoEx.idType.data, inner.idType.data, IDCER_EIGHT_BYTE_SIZE);
  167. idCerInfoEx.idType.dwSize = inner.idType.dwSize;
  168. memcpy(idCerInfoEx.reserved.data, inner.reserved.data, IDCER_EIGHT_BYTE_SIZE);
  169. idCerInfoEx.reserved.dwSize = inner.reserved.dwSize;
  170. memcpy(idCerInfoEx.txzCode.data, inner.txzCode.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  171. idCerInfoEx.txzCode.dwSize = inner.txzCode.dwSize;
  172. memcpy(idCerInfoEx.issuedSN.data, inner.issuedSN.data, IDCER_EIGHT_BYTE_SIZE);
  173. idCerInfoEx.issuedSN.dwSize = inner.issuedSN.dwSize;
  174. memcpy(idCerInfoEx.reserved2.data, inner.reserved2.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  175. idCerInfoEx.reserved2.dwSize = inner.reserved2.dwSize;
  176. memcpy(idCerInfoEx.reserved3.data, inner.reserved3.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  177. idCerInfoEx.reserved3.dwSize = inner.reserved3.dwSize;
  178. memcpy(idCerInfoEx.reserved4.data, inner.reserved4.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  179. idCerInfoEx.reserved4.dwSize = inner.reserved4.dwSize;
  180. memcpy(idCerInfoEx.reserved5.data, inner.reserved5.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  181. idCerInfoEx.reserved5.dwSize = inner.reserved5.dwSize;
  182. }
  183. return result;
  184. }
  185. ErrorCodeEnum VirtualDeviceClassImpl::ForceIDEject()
  186. {
  187. ErrorCodeEnum result = Error_Succeed;
  188. return (result = Bridge_ForceIDEject());
  189. }
  190. ErrorCodeEnum VirtualDeviceClassImpl::ScanIDAndSaveImage()
  191. {
  192. ErrorCodeEnum result = Error_Succeed;
  193. return (result = Bridge_ScanIDAndSaveImage());
  194. }
  195. ErrorCodeEnum VirtualDeviceClassImpl::QueryCardPos(int& pos)
  196. {
  197. ErrorCodeEnum result = Error_Unexpect;
  198. int inner;
  199. result = Bridge_QueryCardPos(&inner);
  200. if (result == Error_Succeed)
  201. {
  202. pos = inner;
  203. }
  204. return result;
  205. }
  206. ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetDataEx2(IDCerInfoEx2& idCerInfoEx2)
  207. {
  208. ErrorCodeEnum result = Error_Unexpect;
  209. Bridge_IDCerInfoEx2 inner;
  210. result = Bridge_IDCerGetDataEx2(&inner);
  211. if (result == Error_Succeed)
  212. {
  213. memcpy(idCerInfoEx2.name.data, inner.name.data, MAX_IDCER_INFO_SIZE);
  214. idCerInfoEx2.name.dwSize = inner.name.dwSize;
  215. memcpy(idCerInfoEx2.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  216. idCerInfoEx2.sex.dwSize = inner.sex.dwSize;
  217. memcpy(idCerInfoEx2.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  218. idCerInfoEx2.nation.dwSize = inner.nation.dwSize;
  219. memcpy(idCerInfoEx2.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  220. idCerInfoEx2.birthday.dwSize = inner.birthday.dwSize;
  221. memcpy(idCerInfoEx2.address.data, inner.address.data, MAX_IDCER_INFO_SIZE);
  222. idCerInfoEx2.address.dwSize = inner.address.dwSize;
  223. memcpy(idCerInfoEx2.idno.data, inner.idno.data, 2 * MAX_IDCER_SIMPLE_INFO_SIZE);
  224. idCerInfoEx2.idno.dwSize = inner.idno.dwSize;
  225. memcpy(idCerInfoEx2.department.data, inner.department.data, MAX_IDCER_INFO_SIZE);
  226. idCerInfoEx2.department.dwSize = inner.department.dwSize;
  227. memcpy(idCerInfoEx2.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  228. idCerInfoEx2.startDate.dwSize = inner.startDate.dwSize;
  229. memcpy(idCerInfoEx2.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  230. idCerInfoEx2.endDate.dwSize = inner.endDate.dwSize;
  231. memcpy(idCerInfoEx2.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE);
  232. idCerInfoEx2.newAddress.dwSize = inner.newAddress.dwSize;
  233. memcpy(idCerInfoEx2.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH);
  234. idCerInfoEx2.photoPath.dwSize = inner.photoPath.dwSize;
  235. memcpy(idCerInfoEx2.englishName.data, inner.englishName.data, MAX_IDCER_INFO_SIZE);
  236. idCerInfoEx2.englishName.dwSize = inner.englishName.dwSize;
  237. memcpy(idCerInfoEx2.nationality.data, inner.nationality.data, IDCER_EIGHT_BYTE_SIZE);
  238. idCerInfoEx2.nationality.dwSize = inner.nationality.dwSize;
  239. memcpy(idCerInfoEx2.idVersion.data, inner.idVersion.data, IDCER_EIGHT_BYTE_SIZE);
  240. idCerInfoEx2.idVersion.dwSize = inner.idVersion.dwSize;
  241. memcpy(idCerInfoEx2.idType.data, inner.idType.data, IDCER_EIGHT_BYTE_SIZE);
  242. idCerInfoEx2.idType.dwSize = inner.idType.dwSize;
  243. memcpy(idCerInfoEx2.reserved.data, inner.reserved.data, IDCER_EIGHT_BYTE_SIZE);
  244. idCerInfoEx2.reserved.dwSize = inner.reserved.dwSize;
  245. memcpy(idCerInfoEx2.txzCode.data, inner.txzCode.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  246. idCerInfoEx2.txzCode.dwSize = inner.txzCode.dwSize;
  247. memcpy(idCerInfoEx2.issuedSN.data, inner.issuedSN.data, IDCER_EIGHT_BYTE_SIZE);
  248. idCerInfoEx2.issuedSN.dwSize = inner.issuedSN.dwSize;
  249. memcpy(idCerInfoEx2.reserved2.data, inner.reserved2.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  250. idCerInfoEx2.reserved2.dwSize = inner.reserved2.dwSize;
  251. memcpy(idCerInfoEx2.reserved3.data, inner.reserved3.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  252. idCerInfoEx2.reserved3.dwSize = inner.reserved3.dwSize;
  253. memcpy(idCerInfoEx2.reserved4.data, inner.reserved4.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  254. idCerInfoEx2.reserved4.dwSize = inner.reserved4.dwSize;
  255. memcpy(idCerInfoEx2.reserved5.data, inner.reserved5.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  256. idCerInfoEx2.reserved5.dwSize = inner.reserved5.dwSize;
  257. }
  258. return result;
  259. }
  260. //SubClassStart