VirtualDeviceClass.cpp 18 KB

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