VirtualDeviceClass.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  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. extern "C" DEVICEBASE_API void GetMoreErrorDetail(char* szErrMsg, DWORD * pMsgLen)
  41. {
  42. if (szErrMsg != NULL && pMsgLen != NULL && *pMsgLen > 0) {
  43. DevErrorInfo inner;
  44. ErrorCodeEnum result = Bridge_GetLastErr(&inner);
  45. if (result == Error_Succeed) {
  46. strcpy_s(szErrMsg, *pMsgLen, inner.szErrMsg);
  47. *pMsgLen = inner.dwErrMsgLen;
  48. }
  49. }
  50. }
  51. VirtualDeviceClassImpl::VirtualDeviceClassImpl()
  52. {
  53. }
  54. VirtualDeviceClassImpl::~VirtualDeviceClassImpl()
  55. {
  56. }
  57. ErrorCodeEnum VirtualDeviceClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
  58. {
  59. ErrorCodeEnum result;
  60. DevCategoryInfo inner;
  61. result = Bridge_GetDevCategory(&inner);
  62. if (result == Error_Succeed) {
  63. strcpy_s(devCategory.szType, MAX_DEV_TYPE_LEN, inner.szType);
  64. strcpy_s(devCategory.szModel, MAX_DEV_MODEL_LEN, inner.szModel);
  65. strcpy_s(devCategory.szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor);
  66. devCategory.eState = inner.eState;
  67. devCategory.version.wMajor = inner.version.wMajor;
  68. devCategory.version.wMinor = inner.version.wMinor;
  69. devCategory.version.wRevision = inner.version.wRevision;
  70. devCategory.version.wBuild = inner.version.wBuild;
  71. }
  72. return result;
  73. }
  74. ErrorCodeEnum VirtualDeviceClassImpl::Reset()
  75. {
  76. return Bridge_Reset();
  77. }
  78. ErrorCodeEnum VirtualDeviceClassImpl::DevClose()
  79. {
  80. ErrorCodeEnum result = Error_Succeed;
  81. return (result = Bridge_DevClose());
  82. }
  83. ErrorCodeEnum VirtualDeviceClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
  84. {
  85. ErrorCodeEnum result = Error_Succeed;
  86. DevErrorInfo inner;
  87. result = Bridge_GetLastErr(&inner);
  88. if (result == Error_Succeed) {
  89. devErrInfo.dwErrMsgLen = inner.dwErrMsgLen;
  90. strcpy_s(devErrInfo.szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg);
  91. }
  92. return (result);
  93. }
  94. //////////////////////////
  95. ErrorCodeEnum VirtualDeviceClassImpl::DevOpen(DWORD dwPort)
  96. {
  97. ErrorCodeEnum result = Error_Succeed;
  98. return (result = Bridge_DevOpen(dwPort));
  99. }
  100. ErrorCodeEnum VirtualDeviceClassImpl::IDCerRFControl(bool bControl)
  101. {
  102. ErrorCodeEnum result = Error_Succeed;
  103. return (result = Bridge_IDCerRFControl(bControl ? 1: 0));
  104. }
  105. ErrorCodeEnum VirtualDeviceClassImpl::IDCerAuthenticate()
  106. {
  107. ErrorCodeEnum result = Error_Succeed;
  108. return (result = Bridge_IDCerAuthenticate());
  109. }
  110. ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetData(IDCerInfo& idCerInfo)
  111. {
  112. Bridge_IDCerInfo inner;
  113. memset(&inner, 0, sizeof(inner));
  114. ErrorCodeEnum result = Error_Unexpect;
  115. result = Bridge_IDCerGetData(&inner);
  116. if (result == Error_Succeed)
  117. {
  118. memcpy(idCerInfo.name.data, inner.name.data, MAX_IDCER_INFO_SIZE);
  119. idCerInfo.name.dwSize = inner.name.dwSize;
  120. memcpy(idCerInfo.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  121. idCerInfo.sex.dwSize = inner.sex.dwSize;
  122. memcpy(idCerInfo.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  123. idCerInfo.nation.dwSize = inner.nation.dwSize;
  124. memcpy(idCerInfo.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  125. idCerInfo.birthday.dwSize = inner.birthday.dwSize;
  126. memcpy(idCerInfo.address.data, inner.address.data, MAX_IDCER_INFO_SIZE);
  127. idCerInfo.address.dwSize = inner.address.dwSize;
  128. memcpy(idCerInfo.idno.data, inner.idno.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  129. idCerInfo.idno.dwSize = inner.idno.dwSize;
  130. memcpy(idCerInfo.department.data, inner.department.data, MAX_IDCER_INFO_SIZE);
  131. idCerInfo.department.dwSize = inner.department.dwSize;
  132. memcpy(idCerInfo.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  133. idCerInfo.startDate.dwSize = inner.startDate.dwSize;
  134. memcpy(idCerInfo.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  135. idCerInfo.endDate.dwSize = inner.endDate.dwSize;
  136. memcpy(idCerInfo.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE);
  137. idCerInfo.newAddress.dwSize = inner.newAddress.dwSize;
  138. memcpy(idCerInfo.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH);
  139. idCerInfo.photoPath.dwSize = inner.photoPath.dwSize;
  140. }
  141. return result;
  142. }
  143. ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetDataEx(IDCerInfoEx& idCerInfoEx)
  144. {
  145. Bridge_IDCerInfoEx inner;
  146. memset(&inner, 0, sizeof(inner));
  147. ErrorCodeEnum result = Error_Unexpect;
  148. result = Bridge_IDCerGetDataEx(&inner);
  149. if (result == Error_Succeed)
  150. {
  151. memcpy(idCerInfoEx.name.data, inner.name.data, MAX_IDCER_INFO_SIZE);
  152. idCerInfoEx.name.dwSize = inner.name.dwSize;
  153. memcpy(idCerInfoEx.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  154. idCerInfoEx.sex.dwSize = inner.sex.dwSize;
  155. memcpy(idCerInfoEx.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  156. idCerInfoEx.nation.dwSize = inner.nation.dwSize;
  157. memcpy(idCerInfoEx.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  158. idCerInfoEx.birthday.dwSize = inner.birthday.dwSize;
  159. memcpy(idCerInfoEx.address.data, inner.address.data, MAX_IDCER_INFO_SIZE);
  160. idCerInfoEx.address.dwSize = inner.address.dwSize;
  161. memcpy(idCerInfoEx.idno.data, inner.idno.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  162. idCerInfoEx.idno.dwSize = inner.idno.dwSize;
  163. memcpy(idCerInfoEx.department.data, inner.department.data, MAX_IDCER_INFO_SIZE);
  164. idCerInfoEx.department.dwSize = inner.department.dwSize;
  165. memcpy(idCerInfoEx.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  166. idCerInfoEx.startDate.dwSize = inner.startDate.dwSize;
  167. memcpy(idCerInfoEx.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  168. idCerInfoEx.endDate.dwSize = inner.endDate.dwSize;
  169. memcpy(idCerInfoEx.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE);
  170. idCerInfoEx.newAddress.dwSize = inner.newAddress.dwSize;
  171. memcpy(idCerInfoEx.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH);
  172. idCerInfoEx.photoPath.dwSize = inner.photoPath.dwSize;
  173. memcpy(idCerInfoEx.englishName.data, inner.englishName.data, MAX_IDCER_INFO_SIZE);
  174. idCerInfoEx.englishName.dwSize = inner.englishName.dwSize;
  175. memcpy(idCerInfoEx.nationality.data, inner.nationality.data, IDCER_EIGHT_BYTE_SIZE);
  176. idCerInfoEx.nationality.dwSize = inner.nationality.dwSize;
  177. memcpy(idCerInfoEx.idVersion.data, inner.idVersion.data, IDCER_EIGHT_BYTE_SIZE);
  178. idCerInfoEx.idVersion.dwSize = inner.idVersion.dwSize;
  179. memcpy(idCerInfoEx.idType.data, inner.idType.data, IDCER_EIGHT_BYTE_SIZE);
  180. idCerInfoEx.idType.dwSize = inner.idType.dwSize;
  181. memcpy(idCerInfoEx.reserved.data, inner.reserved.data, IDCER_EIGHT_BYTE_SIZE);
  182. idCerInfoEx.reserved.dwSize = inner.reserved.dwSize;
  183. memcpy(idCerInfoEx.txzCode.data, inner.txzCode.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  184. idCerInfoEx.txzCode.dwSize = inner.txzCode.dwSize;
  185. memcpy(idCerInfoEx.issuedSN.data, inner.issuedSN.data, IDCER_EIGHT_BYTE_SIZE);
  186. idCerInfoEx.issuedSN.dwSize = inner.issuedSN.dwSize;
  187. memcpy(idCerInfoEx.reserved2.data, inner.reserved2.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  188. idCerInfoEx.reserved2.dwSize = inner.reserved2.dwSize;
  189. memcpy(idCerInfoEx.reserved3.data, inner.reserved3.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  190. idCerInfoEx.reserved3.dwSize = inner.reserved3.dwSize;
  191. memcpy(idCerInfoEx.reserved4.data, inner.reserved4.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  192. idCerInfoEx.reserved4.dwSize = inner.reserved4.dwSize;
  193. memcpy(idCerInfoEx.reserved5.data, inner.reserved5.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  194. idCerInfoEx.reserved5.dwSize = inner.reserved5.dwSize;
  195. }
  196. return result;
  197. }
  198. ErrorCodeEnum VirtualDeviceClassImpl::ForceIDEject()
  199. {
  200. ErrorCodeEnum result = Error_Succeed;
  201. return (result = Bridge_ForceIDEject());
  202. }
  203. ErrorCodeEnum VirtualDeviceClassImpl::ScanIDAndSaveImage()
  204. {
  205. ErrorCodeEnum result = Error_Succeed;
  206. return (result = Bridge_ScanIDAndSaveImage());
  207. }
  208. ErrorCodeEnum VirtualDeviceClassImpl::QueryCardPos(int& pos)
  209. {
  210. ErrorCodeEnum result = Error_Unexpect;
  211. int inner;
  212. result = Bridge_QueryCardPos(&inner);
  213. if (result == Error_Succeed)
  214. {
  215. pos = inner;
  216. }
  217. return result;
  218. }
  219. ErrorCodeEnum VirtualDeviceClassImpl::IDCerGetDataEx2(IDCerInfoEx2& idCerInfoEx2)
  220. {
  221. ErrorCodeEnum result = Error_Unexpect;
  222. Bridge_IDCerInfoEx2 inner;
  223. memset(&inner, 0, sizeof(inner));
  224. result = Bridge_IDCerGetDataEx2(&inner);
  225. if (result == Error_Succeed)
  226. {
  227. memcpy(idCerInfoEx2.name.data, inner.name.data, MAX_IDCER_INFO_SIZE);
  228. idCerInfoEx2.name.dwSize = inner.name.dwSize;
  229. memcpy(idCerInfoEx2.sex.data, inner.sex.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  230. idCerInfoEx2.sex.dwSize = inner.sex.dwSize;
  231. memcpy(idCerInfoEx2.nation.data, inner.nation.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  232. idCerInfoEx2.nation.dwSize = inner.nation.dwSize;
  233. memcpy(idCerInfoEx2.birthday.data, inner.birthday.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  234. idCerInfoEx2.birthday.dwSize = inner.birthday.dwSize;
  235. memcpy(idCerInfoEx2.address.data, inner.address.data, MAX_IDCER_INFO_SIZE);
  236. idCerInfoEx2.address.dwSize = inner.address.dwSize;
  237. memcpy(idCerInfoEx2.idno.data, inner.idno.data, 2 * MAX_IDCER_SIMPLE_INFO_SIZE);
  238. idCerInfoEx2.idno.dwSize = inner.idno.dwSize;
  239. memcpy(idCerInfoEx2.department.data, inner.department.data, MAX_IDCER_INFO_SIZE);
  240. idCerInfoEx2.department.dwSize = inner.department.dwSize;
  241. memcpy(idCerInfoEx2.startDate.data, inner.startDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  242. idCerInfoEx2.startDate.dwSize = inner.startDate.dwSize;
  243. memcpy(idCerInfoEx2.endDate.data, inner.endDate.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  244. idCerInfoEx2.endDate.dwSize = inner.endDate.dwSize;
  245. memcpy(idCerInfoEx2.newAddress.data, inner.newAddress.data, MAX_IDCER_INFO_SIZE);
  246. idCerInfoEx2.newAddress.dwSize = inner.newAddress.dwSize;
  247. memcpy(idCerInfoEx2.photoPath.data, inner.photoPath.data, MAX_IDCER_PHOTO_PATH);
  248. idCerInfoEx2.photoPath.dwSize = inner.photoPath.dwSize;
  249. memcpy(idCerInfoEx2.englishName.data, inner.englishName.data, MAX_IDCER_INFO_SIZE);
  250. idCerInfoEx2.englishName.dwSize = inner.englishName.dwSize;
  251. memcpy(idCerInfoEx2.nationality.data, inner.nationality.data, IDCER_EIGHT_BYTE_SIZE);
  252. idCerInfoEx2.nationality.dwSize = inner.nationality.dwSize;
  253. memcpy(idCerInfoEx2.idVersion.data, inner.idVersion.data, IDCER_EIGHT_BYTE_SIZE);
  254. idCerInfoEx2.idVersion.dwSize = inner.idVersion.dwSize;
  255. memcpy(idCerInfoEx2.idType.data, inner.idType.data, IDCER_EIGHT_BYTE_SIZE);
  256. idCerInfoEx2.idType.dwSize = inner.idType.dwSize;
  257. memcpy(idCerInfoEx2.reserved.data, inner.reserved.data, IDCER_EIGHT_BYTE_SIZE);
  258. idCerInfoEx2.reserved.dwSize = inner.reserved.dwSize;
  259. memcpy(idCerInfoEx2.txzCode.data, inner.txzCode.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  260. idCerInfoEx2.txzCode.dwSize = inner.txzCode.dwSize;
  261. memcpy(idCerInfoEx2.issuedSN.data, inner.issuedSN.data, IDCER_EIGHT_BYTE_SIZE);
  262. idCerInfoEx2.issuedSN.dwSize = inner.issuedSN.dwSize;
  263. memcpy(idCerInfoEx2.reserved2.data, inner.reserved2.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  264. idCerInfoEx2.reserved2.dwSize = inner.reserved2.dwSize;
  265. memcpy(idCerInfoEx2.reserved3.data, inner.reserved3.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  266. idCerInfoEx2.reserved3.dwSize = inner.reserved3.dwSize;
  267. memcpy(idCerInfoEx2.reserved4.data, inner.reserved4.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  268. idCerInfoEx2.reserved4.dwSize = inner.reserved4.dwSize;
  269. memcpy(idCerInfoEx2.reserved5.data, inner.reserved5.data, MAX_IDCER_SIMPLE_INFO_SIZE);
  270. idCerInfoEx2.reserved5.dwSize = inner.reserved5.dwSize;
  271. }
  272. return result;
  273. }
  274. //SubClassStart