VirtualDeviceClass.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. #include "VirtualDeviceClass.h"
  2. #include "libCardIssuerLoader.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(CardIssuerStatus& devStatus)
  53. {
  54. ErrorCodeEnum result = Error_Unexpect;
  55. Bridge_CardIssuerStatus inner;
  56. result = Bridge_GetDevStatus(&inner);
  57. if (result == Error_Succeed) {
  58. devStatus.eMedia = (CardStatusEnum)inner.eMedia;
  59. devStatus.eRetainBin = (RtBinStatusEnum)inner.eRetainBin;
  60. devStatus.dwRetainCount = inner.dwRetainCount;
  61. memcpy(devStatus.eIssuerBin, inner.eIssuerBin, 12 * sizeof(int));
  62. memcpy(devStatus.dwIssuerCount, inner.dwIssuerCount, 12 * sizeof(DWORD));
  63. memcpy(devStatus.eKakuTape, inner.eKakuTape, 8 * sizeof(int));
  64. }
  65. return result;
  66. }
  67. //未找到引用
  68. ErrorCodeEnum VirtualDeviceClassImpl::GetDeviceSN(char*& pDevSN)
  69. {
  70. ErrorCodeEnum result = Error_Unexpect;
  71. char* inner = new char[128];
  72. if (inner == NULL) return Error_Resource;
  73. memset(inner, 0, sizeof(char) * 128);
  74. result = Bridge_GetDeviceSN(&inner);
  75. if (result == Error_Succeed) {
  76. strcpy_s(pDevSN, 128, inner);
  77. }
  78. delete[] inner;
  79. return result;
  80. }
  81. ErrorCodeEnum VirtualDeviceClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo /*= 1*/)
  82. {
  83. ErrorCodeEnum result = Error_Unexpect;
  84. result = Bridge_MoveCard(eCardPos, hopperNo);
  85. return result;
  86. }
  87. ErrorCodeEnum VirtualDeviceClassImpl::SetCardInType(CardInEnum eCardIn)
  88. {
  89. ErrorCodeEnum result = Error_Unexpect;
  90. result = Bridge_SetCardInType(eCardIn);
  91. return result;
  92. }
  93. ErrorCodeEnum VirtualDeviceClassImpl::MagRead(MagTracks& magTracks)
  94. {
  95. ErrorCodeEnum result = Error_Unexpect;
  96. Bridge_MagTracks inner;
  97. inner.eRange = magTracks.eRange;
  98. result = Bridge_MagRead(&inner);
  99. if (result == Error_Succeed) {
  100. magTracks.eRange = (TrackRange)inner.eRange;
  101. for (int i = 0; i < MAX_MAG_TRACK_NUM; ++i) {
  102. magTracks.track[i].eSource = (TrackSrcEnum)inner.track[i].eSource;
  103. magTracks.track[i].eStatus = (TrackDataStateEnum)inner.track[i].eStatus;
  104. magTracks.track[i].dwSize = inner.track[i].dwSize;
  105. memset(magTracks.track[i].data, 0, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
  106. memcpy(magTracks.track[i].data, inner.track[i].data, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
  107. }
  108. }
  109. return result;
  110. }
  111. ErrorCodeEnum VirtualDeviceClassImpl::MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode)
  112. {
  113. ErrorCodeEnum result = Error_Unexpect;
  114. Bridge_MagTracks inner;
  115. inner.eRange = magTracks.eRange;
  116. for (int i = 0; i < MAX_MAG_TRACK_NUM; ++i) {
  117. inner.track[i].eSource = (TrackSrcEnum)magTracks.track[i].eSource;
  118. inner.track[i].eStatus = (TrackDataStateEnum)magTracks.track[i].eStatus;
  119. inner.track[i].dwSize = magTracks.track[i].dwSize;
  120. memset(inner.track[i].data, 0, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
  121. memcpy(inner.track[i].data, magTracks.track[i].data, sizeof(BYTE) * MAX_MAG_TRACK_SIZE);
  122. }
  123. result = Bridge_MagWrite(inner, eWriteMode);
  124. return result;
  125. }
  126. ErrorCodeEnum VirtualDeviceClassImpl::SetRetractCounter(DWORD dwCount)
  127. {
  128. ErrorCodeEnum result = Error_Unexpect;
  129. result = Bridge_SetRetractCounter(dwCount);
  130. return result;
  131. }
  132. ErrorCodeEnum VirtualDeviceClassImpl::SetIssuerCounter(DWORD dwCount, int hopperNo /*= 1*/)
  133. {
  134. ErrorCodeEnum result = Error_Unexpect;
  135. result = Bridge_SetIssuerCounter(dwCount, hopperNo);
  136. return result;
  137. }
  138. ErrorCodeEnum VirtualDeviceClassImpl::ActiveICCard()
  139. {
  140. ErrorCodeEnum result = Error_Unexpect;
  141. result = Bridge_ActiveICCard();
  142. return result;
  143. }
  144. ErrorCodeEnum VirtualDeviceClassImpl::ContactIC()
  145. {
  146. ErrorCodeEnum result = Error_Unexpect;
  147. result = Bridge_ContactIC();
  148. return result;
  149. }
  150. ErrorCodeEnum VirtualDeviceClassImpl::ReleaseIC()
  151. {
  152. ErrorCodeEnum result = Error_Unexpect;
  153. result = Bridge_ReleaseIC();
  154. return result;
  155. }
  156. ErrorCodeEnum VirtualDeviceClassImpl::WarmReset()
  157. {
  158. ErrorCodeEnum result = Error_Unexpect;
  159. result = Bridge_ReleaseIC();
  160. return result;
  161. }
  162. ErrorCodeEnum VirtualDeviceClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  163. {
  164. ErrorCodeEnum result = Error_Unexpect;
  165. Bridge_CmdInfo inner_sendBuf;
  166. Bridge_CmdInfo inner_recvBuf;
  167. inner_sendBuf.dwSize = sendBuf.dwSize;
  168. memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  169. result = Bridge_ICCommand(inner_sendBuf, &inner_recvBuf);
  170. if (result == Error_Succeed) {
  171. recvBuf.dwSize = inner_recvBuf.dwSize;
  172. memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  173. }
  174. return result;
  175. }
  176. ErrorCodeEnum VirtualDeviceClassImpl::SAMActive(BYTE vcc /*= 0x30*/)
  177. {
  178. ErrorCodeEnum result = Error_Unexpect;
  179. result = Bridge_SAMActive(vcc);
  180. return result;
  181. }
  182. ErrorCodeEnum VirtualDeviceClassImpl::SAMDeactivate()
  183. {
  184. ErrorCodeEnum result = Error_Unexpect;
  185. result = Bridge_SAMDeactivate();
  186. return result;
  187. }
  188. ErrorCodeEnum VirtualDeviceClassImpl::SAMWarmReset()
  189. {
  190. ErrorCodeEnum result = Error_Unexpect;
  191. result = Bridge_SAMWarmReset();
  192. return result;
  193. }
  194. ErrorCodeEnum VirtualDeviceClassImpl::SAMQueryStatus(SAMStatus& samStatus)
  195. {
  196. ErrorCodeEnum result = Error_Unexpect;
  197. Bridge_SAMStatus inner;
  198. result = Bridge_SAMQueryStatus(&inner);
  199. if (result == Error_Succeed) {
  200. samStatus.isActive = inner.isActive;
  201. samStatus.chosenOfSAM = inner.chosenOfSAM;
  202. }
  203. return result;
  204. }
  205. ErrorCodeEnum VirtualDeviceClassImpl::SAMSelect(const int sn)
  206. {
  207. ErrorCodeEnum result = Error_Unexpect;
  208. result = Bridge_SAMSelect(sn);
  209. return result;
  210. }
  211. ErrorCodeEnum VirtualDeviceClassImpl::SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  212. {
  213. ErrorCodeEnum result = Error_Unexpect;
  214. Bridge_CmdInfo inner_sendBuf;
  215. Bridge_CmdInfo inner_recvBuf;
  216. inner_sendBuf.dwSize = sendBuf.dwSize;
  217. memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  218. result = Bridge_SAMCommand(inner_sendBuf, &inner_recvBuf);
  219. if (result == Error_Succeed) {
  220. recvBuf.dwSize = inner_recvBuf.dwSize;
  221. memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  222. }
  223. return result;
  224. }
  225. ErrorCodeEnum VirtualDeviceClassImpl::ActiveICCardATR(CmdInfo& atrBuf)
  226. {
  227. ErrorCodeEnum result = Error_Unexpect;
  228. Bridge_CmdInfo inner;
  229. inner.dwSize = atrBuf.dwSize;
  230. memcpy(inner.data, atrBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  231. result = Bridge_ActiveICCardATR(&inner);
  232. if (result == Error_Succeed) {
  233. atrBuf.dwSize = inner.dwSize;
  234. memcpy(atrBuf.data, inner.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  235. }
  236. return result;
  237. }
  238. //未找到引用
  239. ErrorCodeEnum VirtualDeviceClassImpl::Print(BYTE*& data, const int dataSize, const int side)
  240. {
  241. ErrorCodeEnum result = Error_Unexpect;
  242. BYTE* inner = new BYTE[2048];
  243. if (inner == NULL) {
  244. return Error_Resource;
  245. }
  246. memset(inner, 0, sizeof(BYTE) * 2048);
  247. memcpy(inner, data, 2048);
  248. result = Bridge_Print(&inner, dataSize, side);
  249. delete[] inner;
  250. return result;
  251. }
  252. //未找到引用
  253. ErrorCodeEnum VirtualDeviceClassImpl::QueryPrinterStatus()
  254. {
  255. ErrorCodeEnum result = Error_Unexpect;
  256. result = Bridge_QueryPrinterStatus();
  257. return result;
  258. }
  259. ErrorCodeEnum VirtualDeviceClassImpl::ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType)
  260. {
  261. ErrorCodeEnum result = Error_Unexpect;
  262. char inner = outType;
  263. result = Bridge_ActiveContactlessICCard(fstType, scdType, thdType, &inner);
  264. if (result == Error_Succeed) {
  265. outType = inner;
  266. }
  267. return result;
  268. }
  269. ErrorCodeEnum VirtualDeviceClassImpl::DeactivateICCard()
  270. {
  271. ErrorCodeEnum result = Error_Unexpect;
  272. result = Bridge_DeactivateICCard();
  273. return result;
  274. }
  275. ErrorCodeEnum VirtualDeviceClassImpl::DeactContactlessICCard()
  276. {
  277. ErrorCodeEnum result = Error_Unexpect;
  278. result = Bridge_DeactContactlessICCard();
  279. return result;
  280. }
  281. //未找到引用
  282. ErrorCodeEnum VirtualDeviceClassImpl::MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf)
  283. {
  284. ErrorCodeEnum result = Error_Unexpect;
  285. Bridge_CmdInfo inner_sendBuf;
  286. Bridge_CmdInfo inner_recvBuf;
  287. inner_sendBuf.dwSize = sendBuf.dwSize;
  288. memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  289. result = Bridge_MifareCommand((MifareFuctionEnum)eFunType, inner_sendBuf, &inner_recvBuf);
  290. if (result == Error_Succeed) {
  291. recvBuf.dwSize = inner_recvBuf.dwSize;
  292. memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  293. }
  294. return result;
  295. }
  296. ErrorCodeEnum VirtualDeviceClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  297. {
  298. ErrorCodeEnum result = Error_Unexpect;
  299. Bridge_CmdInfo inner_sendBuf;
  300. Bridge_CmdInfo inner_recvBuf;
  301. inner_sendBuf.dwSize = sendBuf.dwSize;
  302. memcpy(inner_sendBuf.data, sendBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  303. result = Bridge_RFTypeABCommand(inner_sendBuf, &inner_recvBuf);
  304. if (result == Error_Succeed) {
  305. recvBuf.dwSize = inner_recvBuf.dwSize;
  306. memcpy(recvBuf.data, inner_recvBuf.data, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
  307. }
  308. return result;
  309. }
  310. ErrorCodeEnum VirtualDeviceClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType)
  311. {
  312. ErrorCodeEnum result = Error_Unexpect;
  313. BYTE inner = btType;
  314. result = Bridge_DevOpenEx(dwPort, dwBaudRate, btOpenType, pDevSN, &inner);
  315. if (result == Error_Succeed) {
  316. btType = inner;
  317. }
  318. return result;
  319. }
  320. //未找到引用
  321. ErrorCodeEnum VirtualDeviceClassImpl::TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey)
  322. {
  323. ErrorCodeEnum result = Error_Unexpect;
  324. int inner_iStatus = 0;
  325. int inner_lenR1 = 0;
  326. int inner_lenR3 = 0;
  327. int inner_lenKey = 0;
  328. BYTE* inner_cr1 = new BYTE[256];
  329. BYTE* inner_cr3 = new BYTE[256];
  330. BYTE* inner_key = new BYTE[256];
  331. if (inner_cr1 == NULL || inner_cr3 == NULL || inner_key == NULL) {
  332. if (inner_cr1 != NULL) delete[] inner_cr1;
  333. if (inner_cr3 != NULL) delete[] inner_cr3;
  334. if (inner_key != NULL) delete[] inner_key;
  335. return Error_Resource;
  336. }
  337. memcpy(inner_cr1, Cr1, 256);
  338. memcpy(inner_cr3, Cr3, 256);
  339. memcpy(inner_key, dKey, 256);
  340. result = Bridge_TransferEnInit(&inner_iStatus, &inner_cr1, &inner_lenR1, &inner_cr3, &inner_lenR3, &inner_key, &inner_lenKey);
  341. if (result == Error_Succeed) {
  342. iStatus = inner_iStatus;
  343. lenR1 = inner_lenR1;
  344. lenR3 = inner_lenR3;
  345. lenKey = inner_lenKey;
  346. memcpy(Cr1, inner_cr1, 256);
  347. memcpy(Cr3, inner_cr3, 256);
  348. memcpy(dKey, inner_key, 256);
  349. }
  350. if (inner_cr1 != NULL) delete[] inner_cr1;
  351. if (inner_cr3 != NULL) delete[] inner_cr3;
  352. if (inner_key != NULL) delete[] inner_key;
  353. return result;
  354. }
  355. //未找到引用
  356. ErrorCodeEnum VirtualDeviceClassImpl::SetR2(int& iStatus, BYTE* pCr2, int lenR2)
  357. {
  358. ErrorCodeEnum result = Error_Unexpect;
  359. int inner_iStatus = iStatus;
  360. result = Bridge_SetR2(&inner_iStatus, pCr2, lenR2);
  361. if (result == Error_Succeed) {
  362. iStatus = inner_iStatus;
  363. }
  364. return result;
  365. }
  366. //未找到引用
  367. ErrorCodeEnum VirtualDeviceClassImpl::SendWorkingKey(const char* pWorkingKey)
  368. {
  369. ErrorCodeEnum result = Error_Unexpect;
  370. result = Bridge_SendWorkingKey(pWorkingKey);
  371. return result;
  372. }
  373. //未找到引用
  374. ErrorCodeEnum VirtualDeviceClassImpl::SLLoadKey(const SCIKeyInfo key)
  375. {
  376. ErrorCodeEnum result = Error_Unexpect;
  377. Bridge_SCIKeyInfo inner;
  378. memcpy(inner.key, key.key, MAX_WORKING_KEY_SIZE);
  379. inner.dwSize = key.dwSize;
  380. result = Bridge_SLLoadKey(inner);
  381. return result;
  382. }
  383. //未找到引用
  384. ErrorCodeEnum VirtualDeviceClassImpl::SLSetParam(SCIParamType eType, int value)
  385. {
  386. ErrorCodeEnum result = Error_Unexpect;
  387. result = Bridge_SLSetParam(eType, value);
  388. return result;
  389. }
  390. //未找到引用
  391. ErrorCodeEnum VirtualDeviceClassImpl::SLLock()
  392. {
  393. ErrorCodeEnum result = Error_Unexpect;
  394. result = Bridge_SLLock();
  395. return result;
  396. }
  397. //未找到引用
  398. ErrorCodeEnum VirtualDeviceClassImpl::SLUnLock(const SCICheckCode checkCode, bool bTemp /*= true*/)
  399. {
  400. ErrorCodeEnum result = Error_Unexpect;
  401. Bridge_SCICheckCode inner;
  402. inner.dwSize = checkCode.dwSize;
  403. memcpy(inner.code, checkCode.code, MAX_CHECK_CODE_SIZE);
  404. result = Bridge_SLUnLock(inner, bTemp ? 1 : 0);
  405. return result;
  406. }
  407. //未找到引用
  408. ErrorCodeEnum VirtualDeviceClassImpl::SLGetTempData(SCITempData& ksnData, SCITempData& ramData)
  409. {
  410. ErrorCodeEnum result = Error_Unexpect;
  411. Bridge_SCITempData inner_ksn;
  412. Bridge_SCITempData inner_ram;
  413. result = Bridge_SLGetTempData(&inner_ksn, &inner_ram);
  414. if (result == Error_Succeed) {
  415. ksnData.dwSize = inner_ksn.dwSize;
  416. memcpy(ksnData.data, inner_ksn.data, MAX_TEMP_DATA_SIZE);
  417. ramData.dwSize = inner_ram.dwSize;
  418. memcpy(ramData.data, inner_ram.data, MAX_TEMP_DATA_SIZE);
  419. }
  420. return result;
  421. }
  422. //未找到引用
  423. ErrorCodeEnum VirtualDeviceClassImpl::SLOpenDoor(const SCITempData data)
  424. {
  425. ErrorCodeEnum result = Error_Unexpect;
  426. Bridge_SCITempData inner;
  427. inner.dwSize = data.dwSize;
  428. memcpy(inner.data, data.data, MAX_TEMP_DATA_SIZE);
  429. result = Bridge_SLOpenDoor(inner);
  430. return result;
  431. }
  432. //未找到引用
  433. ErrorCodeEnum VirtualDeviceClassImpl::BluetoothControl(SCIBluetoothCMD eCmd)
  434. {
  435. ErrorCodeEnum result = Error_Unexpect;
  436. result = Bridge_BluetoothControl(eCmd);
  437. return result;
  438. }
  439. //未找到引用
  440. ErrorCodeEnum VirtualDeviceClassImpl::BluetoothModifyKey(unsigned char* key)
  441. {
  442. ErrorCodeEnum result = Error_Unexpect;
  443. result = Bridge_BluetoothModifyKey(key);
  444. return result;
  445. }
  446. //未找到引用
  447. ErrorCodeEnum VirtualDeviceClassImpl::BluetoothModifyName(unsigned char* name)
  448. {
  449. ErrorCodeEnum result = Error_Unexpect;
  450. result = Bridge_BluetoothModifyName(name);
  451. return result;
  452. }
  453. //未找到引用
  454. ErrorCodeEnum VirtualDeviceClassImpl::BluetoothGetVersion(char*& version)
  455. {
  456. ErrorCodeEnum result = Error_Unexpect;
  457. char* inner = new char[256];
  458. if (inner == NULL) return Error_Resource;
  459. memset(inner, 0, sizeof(char) * 256);
  460. result = Bridge_BluetoothGetVersion(&inner);
  461. if (result == Error_Succeed) {
  462. strcpy_s(version, 256, inner);
  463. }
  464. delete[] inner;
  465. return result;
  466. }
  467. //未找到引用
  468. ErrorCodeEnum VirtualDeviceClassImpl::BluetoothGetConnectName(unsigned char*& name)
  469. {
  470. ErrorCodeEnum result = Error_Unexpect;
  471. unsigned char* inner = new unsigned char[256];
  472. if (inner == NULL) return Error_Resource;
  473. memset(inner, 0, sizeof(unsigned char) * 256);
  474. result = Bridge_BluetoothGetConnectName(&inner);
  475. if (result == Error_Succeed) {
  476. strcpy((char*)name, (const char*)inner);
  477. }
  478. delete[] inner;
  479. return result;
  480. }
  481. //未找到引用
  482. ErrorCodeEnum VirtualDeviceClassImpl::BluetoothGetSignalStrength(unsigned char*& signal)
  483. {
  484. ErrorCodeEnum result = Error_Unexpect;
  485. unsigned char* inner = new unsigned char[256];
  486. if (inner == NULL) return Error_Resource;
  487. memset(inner, 0, sizeof(unsigned char) * 256);
  488. result = Bridge_BluetoothGetSignalStrength(&inner);
  489. if (result == Error_Succeed) {
  490. strcpy((char*)signal, (const char*)inner);
  491. }
  492. delete[] inner;
  493. return result;
  494. }
  495. //未找到引用
  496. ErrorCodeEnum VirtualDeviceClassImpl::LightControl(SCILightType eLight, bool bOnOff)
  497. {
  498. ErrorCodeEnum result = Error_Unexpect;
  499. result = Bridge_LightControl(eLight, bOnOff ? 1 : 0);
  500. return result;
  501. }
  502. //未找到引用
  503. ErrorCodeEnum VirtualDeviceClassImpl::QueryBatteryPower(int& bat)
  504. {
  505. ErrorCodeEnum result = Error_Unexpect;
  506. int inner;
  507. result = Bridge_QueryBatteryPower(&inner);
  508. if (result == Error_Succeed) {
  509. bat = inner;
  510. }
  511. return result;
  512. }
  513. ErrorCodeEnum VirtualDeviceClassImpl::MoveCardToSlot(int slot)
  514. {
  515. ErrorCodeEnum result = Error_Unexpect;
  516. result = Bridge_MoveCardToSlot(slot);
  517. return result;
  518. }
  519. ErrorCodeEnum VirtualDeviceClassImpl::MoveCardFromSlot(int slot)
  520. {
  521. ErrorCodeEnum result = Error_Unexpect;
  522. result = Bridge_MoveCardFromSlot(slot);
  523. return result;
  524. }
  525. ErrorCodeEnum VirtualDeviceClassImpl::ReadAccount(CardNo& cardNo)
  526. {
  527. ErrorCodeEnum result = Error_Unexpect;
  528. Bridge_CardNo inner;
  529. result = Bridge_ReadAccount(&inner);
  530. if (result == Error_Succeed) {
  531. cardNo.dwSize = inner.dwSize;
  532. cardNo.dwTrack2Size = inner.dwTrack2Size;
  533. cardNo.dwTrack3Size = inner.dwTrack3Size;
  534. memcpy(cardNo.account, inner.account, MAX_MAG_TRACK_SIZE);
  535. memcpy(cardNo.track2, inner.track2, MAX_MAG_TRACK_SIZE);
  536. memcpy(cardNo.track3, inner.track3, MAX_MAG_TRACK_SIZE);
  537. }
  538. return result;
  539. }
  540. ErrorCodeEnum VirtualDeviceClassImpl::GetSlotSum(int& sum)
  541. {
  542. ErrorCodeEnum result = Error_Unexpect;
  543. int inner;
  544. result = Bridge_GetSlotSum(&inner);
  545. if (result == Error_Succeed) {
  546. sum = inner;
  547. }
  548. return result;
  549. }
  550. ErrorCodeEnum VirtualDeviceClassImpl::QuerySlotsStatus(SlotStatus& slots, const int slot, bool bFull /*= false*/)
  551. {
  552. ErrorCodeEnum result = Error_Unexpect;
  553. Bridge_SlotStatus inner;
  554. result = Bridge_QuerySlotsStatus(&inner, slot, bFull ? 1 : 0);
  555. if (result == Error_Succeed) {
  556. slots.dwSize = inner.dwSize;
  557. memcpy(slots.status, inner.status, MAX_SLOT_BUFFER_SIZE);
  558. }
  559. return result;
  560. }
  561. ErrorCodeEnum VirtualDeviceClassImpl::PrintCardFaceRightNow(const KakuPrintInfo printInfo)
  562. {
  563. ErrorCodeEnum result = Error_Unexpect;
  564. Bridge_KakuPrintInfo inner;
  565. memset(inner.formPath, 0, sizeof(char) * MAX_KAKU_FILE_SIZE);
  566. memset(inner.fields, 0, sizeof(char) * MAX_KAKU_FIELDS_SIZE);
  567. strcpy_s(inner.formPath, printInfo.formPath);
  568. strcpy_s(inner.fields, printInfo.fields);
  569. result = Bridge_PrintCardFaceRightNow(inner);
  570. return result;
  571. }
  572. DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass*& pOutDevAptObj)
  573. {
  574. ErrorCodeEnum result(Error_Unexpect);
  575. if (object == NULL) {
  576. char* buf;
  577. DWORD size;
  578. const char* var = "INVOKE_VENDOR_ADAPTER_NAME";
  579. size = GetEnvironmentVariableA(var, NULL, 0);
  580. //ERROR_ENVVAR_NOT_FOUND
  581. if (size <= 0) {
  582. return Error_InvalidState;
  583. }
  584. buf = new char[size + 3];
  585. if (buf == NULL) {
  586. return Error_Resource;
  587. }
  588. memset(buf, 0, sizeof(char) * (size + 3));
  589. size = GetEnvironmentVariableA(var, buf, size);
  590. result = Bridge_LoadDevObject(buf);
  591. if (result == Error_Succeed) {
  592. object = new VirtualDeviceClassImpl();
  593. }
  594. delete[] buf;
  595. }
  596. pOutDevAptObj = object;
  597. return result;
  598. }
  599. DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
  600. {
  601. ErrorCodeEnum result = Bridge_ReleaseDevObject();
  602. if (result == Error_Succeed && pInDevAptObj != NULL) {
  603. delete pInDevAptObj;
  604. pInDevAptObj = NULL;
  605. }
  606. return result;
  607. }
  608. extern "C" DEVICEBASE_API void GetMoreErrorDetail(char* szErrMsg, DWORD * pMsgLen)
  609. {
  610. if (szErrMsg != NULL && pMsgLen != NULL && *pMsgLen > 0) {
  611. DevErrorInfo inner;
  612. ErrorCodeEnum result = Bridge_GetLastErr(&inner);
  613. if (result == Error_Succeed) {
  614. strcpy_s(szErrMsg, *pMsgLen, inner.szErrMsg);
  615. *pMsgLen = inner.dwErrMsgLen;
  616. }
  617. }
  618. }