cardissuer.nantian.1.1.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203
  1. #include "cardissuer.nantian.1.1.h"
  2. #include<cstring>
  3. #include <cstdio>
  4. CardIssuerClassImpl::CardIssuerClassImpl()
  5. :m_mode(0)
  6. {
  7. dplHandle = NULL;
  8. DRVCardDispenser = NULL;
  9. m_isDevOpened = false;
  10. m_isCanceled = false;
  11. m_busy_flag = false;
  12. m_signal_get_flag = false;
  13. m_SetCardInTypeFlag = 0;
  14. m_CardInTypeFlag = false;
  15. RetainBox = 0;
  16. m_trace = NULL;
  17. m_trace = new CILIXTrace(NULL,"CardIssuer","CardIssuer_ACT_F55570");
  18. if(!LoadNTDRVDLL()) return ;
  19. }
  20. CardIssuerClassImpl::~CardIssuerClassImpl()
  21. {
  22. if (DRVCardDispenser != NULL) Destroy_DRV_CardDispenser(DRVCardDispenser);
  23. if (dplHandle)
  24. dlclose(dplHandle);
  25. DRVCardDispenser = NULL;
  26. dplHandle = NULL;
  27. }
  28. bool CardIssuerClassImpl::LoadNTDRVDLL()
  29. {
  30. char szInIPath[1024],szNTDRVPath[1024];
  31. CILIX_AUX_X::CILIX_GetModuleCurPath(szInIPath);
  32. sprintf(szNTDRVPath,"%s%s",szInIPath,"libdrv_act_f55570.nantian.so");
  33. dplHandle = NULL;
  34. void *pszErr = NULL;
  35. dplHandle = dlopen(szNTDRVPath, RTLD_LAZY);
  36. if (!dplHandle || pszErr)
  37. {
  38. m_trace->WriteTrace(CILIXTRACE_L_ERROR,"LoadNTDRVDLL","加载底层库%s失败",szNTDRVPath);
  39. return FALSE;
  40. }
  41. Create_DRV_CardDispenser = NULL;
  42. Create_DRV_CardDispenser = (pCreate_DRV_CardDispenser)dlsym(dplHandle,"Create_DRV_CardDispenser");
  43. if(Create_DRV_CardDispenser == NULL)
  44. {
  45. m_trace->WriteTrace(CILIXTRACE_L_ERROR,"LoadNTDRVDLL","加载底层库方法 Create_DRV_CardDispenser 失败",szNTDRVPath);
  46. return false;
  47. }
  48. Destroy_DRV_CardDispenser = NULL;
  49. Destroy_DRV_CardDispenser = (pDestroy_DRV_CardDispenser)dlsym(dplHandle,"Destroy_DRV_CardDispenser");
  50. if(Destroy_DRV_CardDispenser == NULL)
  51. {
  52. m_trace->WriteTrace(CILIXTRACE_L_ERROR,"LoadNTDRVDLL","加载底层库方法 Destroy_DRV_CardDispenser 失败",szNTDRVPath);
  53. return false;
  54. }
  55. DRVCardDispenser = Create_DRV_CardDispenser();
  56. return true;
  57. }
  58. ErrorCodeEnum CardIssuerClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
  59. {
  60. m_busy_flag = true;
  61. WAITING_LOOP();
  62. ErrorCodeEnum err = Error_Succeed;
  63. std::strcpy(devCategory.szModel, "ACT_F55570");
  64. std::strcpy(devCategory.szType, "CardIssuer");
  65. std::strcpy(devCategory.szVendor, "nantian");
  66. m_busy_flag = false;
  67. return err;
  68. }
  69. ErrorCodeEnum CardIssuerClassImpl::Reset()
  70. {
  71. m_busy_flag = true;
  72. WAITING_LOOP();
  73. int iRet = 0;
  74. try
  75. {
  76. if(!m_isDevOpened)
  77. {
  78. strcpy(m_errorInfo.szErrMsg, "device not connect");
  79. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  80. iRet =Error_DevConnFailed;
  81. throw(iRet);
  82. }
  83. //复位设备
  84. char *sReset[10] = {NULL};
  85. char PowerOnFlag[10] ="1";
  86. char PowerOffFlag[10]="3";
  87. sReset[1] = PowerOnFlag;
  88. sReset[2] = PowerOffFlag;
  89. iRet = DRVCardDispenser->ResetDev(3,sReset);
  90. if(iRet != 0)
  91. {
  92. strcpy(m_errorInfo.szErrMsg, "hardware error");
  93. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  94. iRet = Error_Hardware;
  95. throw(iRet);
  96. }
  97. iRet = Error_Succeed;
  98. }
  99. catch(int eret){iRet = eret;}
  100. m_busy_flag = false;
  101. return (ErrorCodeEnum)iRet;
  102. }
  103. ErrorCodeEnum CardIssuerClassImpl::DevClose()
  104. {
  105. m_busy_flag = true;
  106. WAITING_LOOP();
  107. int iRet = 0;
  108. iRet = DRVCardDispenser->CloseDev();
  109. if(iRet != 0)
  110. {
  111. m_isDevOpened = false;
  112. iRet =Error_DevConnFailed;
  113. }
  114. m_busy_flag = false;
  115. return (ErrorCodeEnum)iRet;
  116. }
  117. ErrorCodeEnum CardIssuerClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
  118. {
  119. static int times = 0;
  120. char szMessage[128];
  121. sprintf(szMessage, "this is the %d times error message", ++times);
  122. strcpy(devErrInfo.szErrMsg, szMessage);
  123. devErrInfo.dwErrMsgLen = strlen(szMessage);
  124. return Error_Succeed;
  125. }
  126. DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
  127. {
  128. baseObj = new CardIssuerClassImpl();
  129. if(baseObj == NULL) {
  130. return Error_Resource;
  131. } else {
  132. return Error_Succeed;
  133. }
  134. }
  135. DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
  136. {
  137. if(pBaseObj == NULL) {
  138. return Error_Param;
  139. }
  140. if(CardIssuerClassImpl* pTmp = dynamic_cast<CardIssuerClassImpl*>(pBaseObj))
  141. {
  142. delete pTmp;
  143. pTmp = NULL;
  144. return Error_Succeed;
  145. }
  146. return Error_Param;
  147. }
  148. ErrorCodeEnum CardIssuerClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
  149. {
  150. m_busy_flag = true;
  151. WAITING_LOOP();
  152. int iRet = Error_Succeed;
  153. char *CapInfo[10];
  154. for (int i = 0; i < 10; i++)
  155. {
  156. CapInfo[i] = new char[20];
  157. memset(CapInfo[i], 0, 20);
  158. }
  159. try
  160. {
  161. char szComPort[100];
  162. memset(szComPort,0,sizeof(szComPort));
  163. sprintf(szComPort,"Com%d",(int)dwPort);
  164. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  165. iRet = DRVCardDispenser->OpenDev(szComPort,(int)dwBaudRate);
  166. if(iRet != 0)
  167. {
  168. strcpy(m_errorInfo.szErrMsg, "connect to device failed");
  169. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  170. m_isDevOpened = false;
  171. iRet =Error_DevConnFailed;
  172. throw(iRet);
  173. }
  174. m_isDevOpened = true ;
  175. char szErrorMsg[1024] = "";
  176. //复位设备
  177. char *sReset[10] = {NULL};
  178. char PowerOnFlag[10] ="1";
  179. char PowerOffFlag[10]="3";
  180. sReset[1] = PowerOnFlag;
  181. sReset[2] = PowerOffFlag;
  182. iRet = DRVCardDispenser->ResetDev(3,sReset);
  183. if(iRet != 0)
  184. {
  185. strcpy(m_errorInfo.szErrMsg, "hardware error");
  186. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  187. iRet = Error_Hardware;
  188. throw(iRet);
  189. }
  190. int mSupplyBin =2, mRetainBin =1, mHoldBin =0;
  191. DRVCardDispenser->GetDevCap(CapInfo);
  192. mSupplyBin = atoi(CapInfo[0]);
  193. mRetainBin = atoi(CapInfo[1]);
  194. mHoldBin = atoi(CapInfo[2]);
  195. iRet = Error_Succeed;
  196. }catch(int eret){iRet = eret;}
  197. m_busy_flag = false;
  198. for (int i = 0; i < 10; i++)
  199. {
  200. delete[]CapInfo[i];
  201. }
  202. return (ErrorCodeEnum)iRet;
  203. }
  204. ErrorCodeEnum CardIssuerClassImpl::GetDevStatus(CardIssuerStatus &devStatus)
  205. {
  206. {
  207. if (m_busy_flag == true || m_signal_get_flag == true)
  208. {
  209. if (m_StatusErrorCode == Error_Succeed)
  210. devStatus = tempStatus;
  211. return m_StatusErrorCode;
  212. }
  213. }
  214. m_signal_get_flag = true;
  215. int iRet = Error_Succeed;
  216. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  217. char *BoxStatus[200]={NULL};
  218. for (int i = 0; i < 200; i++)
  219. {
  220. BoxStatus[i] = new char[20];
  221. memset(BoxStatus[i], 0, 20);
  222. }
  223. try
  224. {
  225. if(!m_isDevOpened)
  226. {
  227. strcpy(m_errorInfo.szErrMsg, "device not connect");
  228. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  229. iRet =Error_DevConnFailed;
  230. throw(iRet);
  231. }
  232. //***设备状态查询
  233. char sDevice[10] = "";
  234. char sMedia[10] = "";
  235. char sChipPower[10] = "";
  236. char sRetainCount[10] = "";
  237. char sShutter[10] = "";
  238. char *sStatus[100] = {NULL};
  239. sStatus[1] = sDevice;
  240. sStatus[2] = sMedia;
  241. sStatus[4] = sChipPower;
  242. sStatus[8] = sRetainCount;
  243. sStatus[16] = sShutter;
  244. DRVCardDispenser->GetDevStatus(0,sStatus);
  245. //***判断设备状态
  246. if ((atoi(sDevice) != CARDDISPENSER_DEVONLINE) && ((atoi(sDevice) != CARDDISPENSER_DEVBUSY)))
  247. {
  248. strcpy(m_errorInfo.szErrMsg, "hardware error");
  249. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  250. iRet = Error_Hardware;
  251. throw(iRet);
  252. }
  253. switch((atoi(sMedia)))
  254. {
  255. case CARDDISPENSER_MEDIAPRESENT:
  256. {
  257. tempStatus.eMedia = CI_MEDIA_PRESENT;
  258. if ((atoi(sChipPower)) == CARDDISPENSER_CHIPONLINE || (atoi(sChipPower)) == CARDDISPENSER_CHIPBUSY)
  259. tempStatus.eMedia = CI_MEDIA_IC;
  260. }break;
  261. case CARDDISPENSER_MEDIANOTPRESENT:
  262. {
  263. tempStatus.eMedia = CI_MEDIA_NOTPRESENT;
  264. }break;
  265. case CARDDISPENSER_MEDIAJAMMED:tempStatus.eMedia = CI_MEDIA_JAMMED;break;
  266. case CARDDISPENSER_MEDIAENTERING:
  267. {
  268. tempStatus.eMedia = CI_MEDIA_ENTERING;
  269. }break;
  270. case CARDDISPENSER_MEDIALATCHED:
  271. {
  272. tempStatus.eMedia = CI_MEDIA_IC;
  273. }break;
  274. default:
  275. {
  276. tempStatus.eMedia = CI_MEDIA_NOTPRESENT;
  277. }break;
  278. }
  279. //吞卡数
  280. tempStatus.dwRetainCount = atoi(sChipPower) ;
  281. int ierr = DRVCardDispenser->GetCardBoxStatus(BoxStatus);
  282. //回收箱状态
  283. switch (atoi(BoxStatus[101]))
  284. {
  285. case CARDDISPENSER_BOXSTATUSOK:
  286. case CARDDISPENSER_BOXSTATUSLOW:
  287. case CARDDISPENSER_BOXSTATUSEMPTY:
  288. case CARDDISPENSER_BOXSTATUSHIGH:
  289. RetainBox = 0;
  290. tempStatus.eRetainBin = CI_RETAINBIN_OK;
  291. break;
  292. case CARDDISPENSER_BOXSTATUSFULL:
  293. tempStatus.eRetainBin = CI_RETAINBIN_FULL;
  294. RetainBox = 1;
  295. break;
  296. case CARDDISPENSER_BOXSTATUSMISSING:
  297. case CARDDISPENSER_BOXSTATUSINOP:
  298. case CARDDISPENSER_BOXSTATUSUNKNOWN:
  299. tempStatus.eRetainBin = CI_RETAIN_NOTSUPP;
  300. RetainBox = 2;
  301. break;
  302. default:
  303. tempStatus.eRetainBin = CI_RETAIN_NOTSUPP;
  304. RetainBox = 2;
  305. break;
  306. }
  307. //发卡箱状态
  308. for (int i = 1; i <= 2; i++)
  309. {
  310. switch (atoi(BoxStatus[i]))
  311. {
  312. case CARDDISPENSER_BOXSTATUSOK:
  313. case CARDDISPENSER_BOXSTATUSFULL:
  314. case CARDDISPENSER_BOXSTATUSHIGH:
  315. tempStatus.eIssuerBin[i-1] = CI_ISSUEHOPPER_OK;
  316. break;
  317. case CARDDISPENSER_BOXSTATUSLOW:
  318. tempStatus.eIssuerBin[i-1] = CI_ISSUEHOPPER_LOW;
  319. break;
  320. case CARDDISPENSER_BOXSTATUSEMPTY:
  321. tempStatus.eIssuerBin[i-1] = CI_ISSUEHOPPER_EMPTY;
  322. break;
  323. case CARDDISPENSER_BOXSTATUSMISSING:
  324. case CARDDISPENSER_BOXSTATUSINOP:
  325. case CARDDISPENSER_BOXSTATUSUNKNOWN:
  326. tempStatus.eIssuerBin[i-1] = CI_ISSUEHOPPER_NOTSUPP;
  327. break;
  328. default:
  329. tempStatus.eIssuerBin[i-1] = CI_ISSUEHOPPER_NOTSUPP;
  330. break;
  331. }
  332. }
  333. //发卡箱3状态
  334. tempStatus.eIssuerBin[2] = CI_ISSUEHOPPER_NOTSUPP;
  335. tempStatus.dwIssuerCount[0] = 0;
  336. tempStatus.dwIssuerCount[1] = 0;
  337. tempStatus.dwIssuerCount[2] = 0;
  338. }catch(int eret)
  339. {
  340. iRet = eret;
  341. }
  342. devStatus = tempStatus;
  343. m_signal_get_flag = false;
  344. m_StatusErrorCode = (ErrorCodeEnum)iRet;
  345. for (int i = 0; i < 200; i++)
  346. {
  347. delete[]BoxStatus[i];
  348. }
  349. return (ErrorCodeEnum)iRet;
  350. }
  351. ErrorCodeEnum CardIssuerClassImpl::GetDeviceSN(char *&pDevSN)
  352. {
  353. int iRet = Error_Succeed;
  354. strcpy(pDevSN, "");
  355. return (ErrorCodeEnum)iRet;
  356. }
  357. //发卡机通用接口
  358. ErrorCodeEnum CardIssuerClassImpl::MoveCard(CardPosEnum eCardPos, int hopperNo )
  359. {
  360. m_busy_flag = true;
  361. WAITING_LOOP();
  362. int iRet = Error_Succeed ;
  363. try
  364. {
  365. if(!m_isDevOpened)
  366. {
  367. strcpy(m_errorInfo.szErrMsg, "device not connect");
  368. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  369. iRet =Error_DevConnFailed;
  370. throw(iRet);
  371. }
  372. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  373. //***设备状态查询
  374. char sDevice[10] = "";
  375. char sMedia[10] = "";
  376. char sChipPower[10] = "";
  377. char sRetainCount[10] = "";
  378. char sShutter[10] = "";
  379. char *sStatus[100] = {NULL};
  380. sStatus[1] = sDevice;
  381. sStatus[2] = sMedia;
  382. sStatus[4] = sChipPower;
  383. sStatus[8] = sRetainCount;
  384. sStatus[16] = sShutter;
  385. DRVCardDispenser->GetDevStatus(0,sStatus);
  386. if(stoi(sDevice) != CARDDISPENSER_DEVONLINE)
  387. {
  388. strcpy(m_errorInfo.szErrMsg, "hardware error");
  389. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  390. iRet =Error_Hardware;
  391. throw(iRet);
  392. }
  393. m_trace->WriteTrace(CILIXTRACE_L_INFO,"MoveCard","eCardPos:%d",eCardPos);
  394. switch(eCardPos)
  395. {
  396. //退卡
  397. case CI_MOVECARD_FRONT_GATE:
  398. {
  399. if(atoi(sMedia) == CARDDISPENSER_MEDIANOTPRESENT)
  400. {
  401. strcpy(m_errorInfo.szErrMsg, "device not card to Gate");
  402. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  403. iRet =Error_Param;
  404. throw(iRet);
  405. }
  406. if((atoi(sMedia)==CARDDISPENSER_MEDIALATCHED)||
  407. (atoi(sChipPower) == CARDDISPENSER_CHIPONLINE)||
  408. (atoi(sChipPower) == CARDDISPENSER_CHIPBUSY))
  409. {
  410. iRet = DRVCardDispenser->ICCPower(12,NULL,NULL);
  411. if(iRet != 0)
  412. {
  413. strcpy(m_errorInfo.szErrMsg, "device ReleaseDactivates Fail!");
  414. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  415. iRet =Error_Hardware;
  416. throw(iRet);
  417. }
  418. }
  419. iRet = DRVCardDispenser->EjectCard();
  420. if(iRet != 0)
  421. {
  422. strcpy(m_errorInfo.szErrMsg, "device EjectCard Fail!");
  423. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  424. iRet =Error_Hardware;
  425. throw(iRet);
  426. }
  427. m_SetCardInTypeFlag = 0;
  428. m_CardInTypeFlag= false;
  429. }
  430. break;
  431. //吞卡
  432. case CI_MOVECARD_BACK_NOT_HOLD:
  433. {
  434. if(RetainBox != 0)
  435. {
  436. iRet =Error_Hardware;
  437. throw(iRet);
  438. }
  439. if(atoi(sMedia) == CARDDISPENSER_MEDIANOTPRESENT)
  440. {
  441. strcpy(m_errorInfo.szErrMsg, "device not card to BACK_NOT_HOLD");
  442. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  443. iRet =Error_Param;
  444. throw(iRet);
  445. }
  446. if((atoi(sMedia)==CARDDISPENSER_MEDIALATCHED)||
  447. (atoi(sChipPower) == CARDDISPENSER_CHIPONLINE)||
  448. (atoi(sChipPower) == CARDDISPENSER_CHIPBUSY))
  449. {
  450. iRet = DRVCardDispenser->ICCPower(12,NULL,NULL);
  451. if(iRet != 0)
  452. {
  453. strcpy(m_errorInfo.szErrMsg, "device ReleaseDactivates Fail!");
  454. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  455. iRet =Error_Hardware;
  456. throw(iRet);
  457. }
  458. }
  459. int tryTime = 0;
  460. STARTRETAIN:
  461. iRet = DRVCardDispenser->RetainCard(101);
  462. if(iRet != 0)
  463. {
  464. if((iRet == E_CARDDISPENSER_RETIANBINFULL) && (tryTime <= 1))
  465. {
  466. iRet = DRVCardDispenser->SetRetainCount(0);
  467. tryTime++;
  468. goto STARTRETAIN;
  469. }
  470. m_trace->WriteTrace(CILIXTRACE_L_INFO,"MoveCard","CI_MOVECARD_BACK_NOT_HOLD.tryTime:%d",tryTime);
  471. strcpy(m_errorInfo.szErrMsg, "device RetainCard Fail!");
  472. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  473. iRet =Error_Hardware;
  474. throw(iRet);
  475. }
  476. m_SetCardInTypeFlag = 0;
  477. m_CardInTypeFlag= false;
  478. }
  479. break;
  480. //发卡
  481. case CI_MOVECARD_FROM_HOPPER:
  482. {
  483. if(atoi(sMedia) != CARDDISPENSER_MEDIANOTPRESENT)
  484. {
  485. strcpy(m_errorInfo.szErrMsg, "device not card not FROM_HOPPER");
  486. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  487. iRet =Error_Param;
  488. throw(iRet);
  489. }
  490. iRet = DRVCardDispenser->Dispense(hopperNo);
  491. if(iRet != 0)
  492. {
  493. strcpy(m_errorInfo.szErrMsg, "device dispenser card error");
  494. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  495. iRet =Error_Hardware;
  496. throw(iRet);
  497. }
  498. }
  499. break;
  500. }
  501. }
  502. catch(int eret)
  503. {
  504. iRet = eret;
  505. }
  506. m_busy_flag = false;
  507. return (ErrorCodeEnum)iRet;
  508. }
  509. ErrorCodeEnum CardIssuerClassImpl::SetCardInType(CardInEnum eCardIn)
  510. {
  511. m_busy_flag = true;
  512. WAITING_LOOP();
  513. if(m_SetCardInTypeFlag != 0)
  514. {
  515. while(m_SetCardInTypeFlag != 2)
  516. {;}
  517. }
  518. m_SetCardInTypeFlag = 1;
  519. int iRet = Error_Succeed;
  520. try
  521. {
  522. int iInsertAction = 0;
  523. switch(eCardIn)
  524. {
  525. case CI_CARD_IN_TYPE_FORBIDDEN:{iInsertAction= 0; m_CardInTypeFlag = false;}break;
  526. case CI_CARD_IN_TYPE_MAG: {iInsertAction= 3;}break;
  527. case CI_CARD_IN_TYPE_ALL: {iInsertAction= 1;}break;
  528. }
  529. if(m_CardInTypeFlag)
  530. throw 0;
  531. iRet = DRVCardDispenser->InsertCard(iInsertAction);
  532. if(iRet != 0)
  533. {
  534. strcpy(m_errorInfo.szErrMsg, "hardware error");
  535. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  536. iRet = Error_Hardware;
  537. throw(iRet);
  538. }
  539. if(eCardIn!=CI_CARD_IN_TYPE_FORBIDDEN)
  540. m_CardInTypeFlag = true;
  541. iRet = Error_Succeed;
  542. }
  543. catch(int eret)
  544. {
  545. iRet = eret;
  546. }
  547. m_busy_flag = false;
  548. m_SetCardInTypeFlag = 2;
  549. return (ErrorCodeEnum)iRet;
  550. }
  551. ErrorCodeEnum CardIssuerClassImpl::MagRead(MagTracks &magTracks)
  552. {
  553. m_busy_flag = true;
  554. WAITING_LOOP();
  555. int iRet = Error_Succeed;
  556. try
  557. {
  558. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  559. char magTrack1[1024]="";
  560. char magTrack2[1024]="";
  561. char magTrack3[1024]="";
  562. char *magList[10]={NULL};
  563. magList[1] = magTrack1;
  564. magList[2] = magTrack2;
  565. magList[4] = magTrack3;
  566. int magTrackStatus[10]={0};
  567. m_trace->WriteTrace(CILIXTRACE_L_INFO,"MagRead","magTracks.eRange:%d",magTracks.eRange);
  568. iRet = DRVCardDispenser->ReadTrack(magTracks.eRange,magList,magTrackStatus);
  569. if ((magTracks.eRange&CI_TRACK_RANGE_1) == CI_TRACK_RANGE_1)
  570. {
  571. magTracks.track[CI_TRACK_SOURCE_1].eSource = CI_TRACK_SOURCE_1;
  572. if ((iRet==E_DRVBASE_SUCCESS)&&(magTrackStatus[1] == E_DRVBASE_SUCCESS))
  573. {
  574. magTracks.track[CI_TRACK_SOURCE_1].eStatus = CI_DATA_OK;
  575. magTracks.track[CI_TRACK_SOURCE_1].dwSize = strlen(magTrack1);
  576. memcpy(magTracks.track[CI_TRACK_SOURCE_1].data, magTrack1, magTracks.track[CI_TRACK_SOURCE_1].dwSize);
  577. magTracks.track[CI_TRACK_SOURCE_1].data[magTracks.track[CI_TRACK_SOURCE_1].dwSize] = '\0';
  578. }
  579. else
  580. {
  581. magTracks.track[CI_TRACK_SOURCE_1].eStatus = CI_DATA_INVALID;
  582. magTracks.track[CI_TRACK_SOURCE_1].dwSize = 0;
  583. magTracks.track[CI_TRACK_SOURCE_1].data[magTracks.track[CI_TRACK_SOURCE_1].dwSize] = '\0';
  584. }
  585. }
  586. //Track2
  587. if ((magTracks.eRange&CI_TRACK_RANGE_2) == CI_TRACK_RANGE_2)
  588. {
  589. magTracks.track[CI_TRACK_SOURCE_2].eSource = CI_TRACK_SOURCE_2;
  590. if ((iRet==E_DRVBASE_SUCCESS)&&(magTrackStatus[2] == E_DRVBASE_SUCCESS))
  591. {
  592. magTracks.track[CI_TRACK_SOURCE_2].eStatus = CI_DATA_OK;
  593. magTracks.track[CI_TRACK_SOURCE_2].dwSize = strlen(magTrack2);
  594. memcpy(magTracks.track[CI_TRACK_SOURCE_2].data, magTrack2, magTracks.track[CI_TRACK_SOURCE_2].dwSize);
  595. magTracks.track[CI_TRACK_SOURCE_2].data[magTracks.track[CI_TRACK_SOURCE_2].dwSize] = '\0';
  596. }
  597. else
  598. {
  599. magTracks.track[CI_TRACK_SOURCE_2].eStatus = CI_DATA_INVALID;
  600. magTracks.track[CI_TRACK_SOURCE_2].dwSize = 0;
  601. magTracks.track[CI_TRACK_SOURCE_2].data[magTracks.track[CI_TRACK_SOURCE_2].dwSize] = '\0';
  602. }
  603. }
  604. //Track3
  605. if ((magTracks.eRange&CI_TRACK_RANGE_3) == CI_TRACK_RANGE_3)
  606. {
  607. magTracks.track[CI_TRACK_SOURCE_3].eSource = CI_TRACK_SOURCE_3;
  608. if ((iRet==E_DRVBASE_SUCCESS)&&(magTrackStatus[4] == E_DRVBASE_SUCCESS))
  609. {
  610. magTracks.track[CI_TRACK_SOURCE_3].eStatus = CI_DATA_OK;
  611. magTracks.track[CI_TRACK_SOURCE_3].dwSize = strlen(magTrack3);
  612. memcpy(magTracks.track[CI_TRACK_SOURCE_3].data, magTrack3, magTracks.track[CI_TRACK_SOURCE_3].dwSize);
  613. magTracks.track[CI_TRACK_SOURCE_3].data[magTracks.track[CI_TRACK_SOURCE_3].dwSize] = '\0';
  614. }
  615. else
  616. {
  617. magTracks.track[CI_TRACK_SOURCE_3].eStatus = CI_DATA_INVALID;
  618. magTracks.track[CI_TRACK_SOURCE_3].dwSize = 0;
  619. magTracks.track[CI_TRACK_SOURCE_3].data[magTracks.track[CI_TRACK_SOURCE_3].dwSize] = '\0';
  620. }
  621. }
  622. }
  623. catch(int eret)
  624. {
  625. iRet = eret;
  626. }
  627. m_busy_flag = false;
  628. return (ErrorCodeEnum)iRet;
  629. }
  630. ErrorCodeEnum CardIssuerClassImpl::MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode)
  631. {
  632. m_busy_flag = true;
  633. WAITING_LOOP();
  634. int iRet = Error_Succeed;
  635. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  636. int ierr = 0;
  637. BOOL write_success_flag = FALSE;
  638. char magTrack1[1024]="";
  639. char magTrack2[1024]="";
  640. char magTrack3[1024]="";
  641. char *magList[10]={NULL};
  642. magList[1] = magTrack1;
  643. magList[2] = magTrack2;
  644. magList[4] = magTrack3;
  645. int magTrackStatus[10]={0};
  646. //磁道解析
  647. //Track1
  648. if ((magTracks.eRange&CI_TRACK_RANGE_1) == CI_TRACK_RANGE_1)
  649. {
  650. if (magTracks.track[CI_TRACK_SOURCE_1].dwSize != 0)
  651. {
  652. memset(magTrack1,0,sizeof(magTrack1));
  653. memcpy(magTrack1,magTracks.track[CI_TRACK_SOURCE_1].data,strlen((char *)magTracks.track[CI_TRACK_SOURCE_1].data));
  654. ierr = DRVCardDispenser->WriteTrack(CI_TRACK_RANGE_1,magList,magTrackStatus);
  655. if ((ierr == E_DRVBASE_SUCCESS)&&(magTrackStatus[1] == E_DRVBASE_SUCCESS))
  656. {
  657. write_success_flag = TRUE;
  658. }
  659. }
  660. }
  661. //Track2
  662. if ((magTracks.eRange&CI_TRACK_RANGE_2) == CI_TRACK_RANGE_2)
  663. {
  664. if (magTracks.track[CI_TRACK_SOURCE_2].dwSize != 0)
  665. {
  666. memset(magTrack2,0,sizeof(magTrack2));
  667. memcpy(magTrack2,magTracks.track[CI_TRACK_SOURCE_2].data,strlen((char *)magTracks.track[CI_TRACK_SOURCE_2].data));
  668. ierr = DRVCardDispenser->WriteTrack(CI_TRACK_RANGE_2,magList,magTrackStatus);
  669. if ((ierr == E_DRVBASE_SUCCESS)&&(magTrackStatus[2] == E_DRVBASE_SUCCESS))
  670. {
  671. write_success_flag = TRUE;
  672. }
  673. }
  674. }
  675. //Track3
  676. if ((magTracks.eRange&CI_TRACK_RANGE_3) == CI_TRACK_RANGE_3)
  677. {
  678. if (magTracks.track[CI_TRACK_SOURCE_3].dwSize != 0)
  679. {
  680. memset(magTrack3,0,sizeof(magTrack3));
  681. memcpy(magTrack3,magTracks.track[CI_TRACK_SOURCE_3].data,strlen((char *)magTracks.track[CI_TRACK_SOURCE_3].data));
  682. ierr = DRVCardDispenser->WriteTrack(CI_TRACK_RANGE_3,magList,magTrackStatus);
  683. if ((ierr == E_DRVBASE_SUCCESS)&&(magTrackStatus[4] == E_DRVBASE_SUCCESS))
  684. {
  685. write_success_flag = TRUE;
  686. }
  687. }
  688. }
  689. if (write_success_flag == FALSE)
  690. {
  691. strcpy(m_errorInfo.szErrMsg, "hardware error");
  692. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  693. iRet = Error_Hardware;
  694. }
  695. m_busy_flag = false;
  696. return (ErrorCodeEnum)iRet;
  697. }
  698. ErrorCodeEnum CardIssuerClassImpl::SetRetractCounter(DWORD dwCount)
  699. {
  700. m_busy_flag = true;
  701. WAITING_LOOP();
  702. int iRet = Error_Succeed;
  703. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  704. int ierr = 0;
  705. //清空回收箱计数
  706. if (dwCount == 0)
  707. {
  708. ierr = DRVCardDispenser->SetRetainCount(0);
  709. if (ierr < 0)
  710. {
  711. strcpy(m_errorInfo.szErrMsg, "hardware error");
  712. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  713. iRet = Error_Hardware;
  714. }
  715. }
  716. m_busy_flag = false;
  717. return (ErrorCodeEnum)iRet;
  718. }
  719. ErrorCodeEnum CardIssuerClassImpl::SetIssuerCounter(DWORD dwCount, int hopperNo )
  720. {
  721. int iRet = 0 ;
  722. return (ErrorCodeEnum)iRet;
  723. }
  724. ErrorCodeEnum CardIssuerClassImpl::ActiveICCard()
  725. {
  726. m_busy_flag = true;
  727. WAITING_LOOP();
  728. int iRet = Error_Succeed;
  729. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  730. unsigned char sATR[1024] = "";
  731. int iATR = 0;
  732. int ierr = 0;
  733. iRet = DRVCardDispenser->ICCPower(2, (char*)sATR, &iATR);
  734. if (iRet < 0)
  735. {
  736. strcpy(m_errorInfo.szErrMsg, "hardware error");
  737. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  738. iRet = Error_Hardware;
  739. }
  740. m_busy_flag = false;
  741. return (ErrorCodeEnum)iRet;
  742. }
  743. ErrorCodeEnum CardIssuerClassImpl::ContactIC()
  744. {
  745. m_busy_flag = true;
  746. WAITING_LOOP();
  747. int iRet = 0;
  748. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  749. unsigned char sATR[1024] = "";
  750. int iATR = 0;
  751. int ierr = 0;
  752. iRet = DRVCardDispenser->ICCPower(1, (char*)sATR, &iATR);
  753. if (iRet < 0)
  754. {
  755. strcpy(m_errorInfo.szErrMsg, "hardware error");
  756. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  757. iRet = Error_Hardware;
  758. }
  759. m_busy_flag = false;
  760. return (ErrorCodeEnum)iRet;
  761. }
  762. ErrorCodeEnum CardIssuerClassImpl::ReleaseIC()
  763. {
  764. m_busy_flag = true;
  765. WAITING_LOOP();
  766. int iRet = 0;
  767. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  768. iRet = DRVCardDispenser->ICCPower(4, NULL, NULL);
  769. if (iRet < 0)
  770. {
  771. strcpy(m_errorInfo.szErrMsg, "hardware error");
  772. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  773. iRet = Error_Hardware;
  774. }
  775. m_busy_flag = false;
  776. return (ErrorCodeEnum)iRet;
  777. }
  778. ErrorCodeEnum CardIssuerClassImpl::WarmReset()
  779. {
  780. m_busy_flag = true;
  781. WAITING_LOOP();
  782. int iRet = 0;
  783. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  784. unsigned char sATR[1024] = "";
  785. int iATR = 0;
  786. char sErrMsg[100] = "";
  787. iRet = DRVCardDispenser->ICCPower(12, NULL, NULL);
  788. iRet = DRVCardDispenser->ICCPower(3, (char*)sATR, &iATR);
  789. if (iRet < 0)
  790. {
  791. strcpy(m_errorInfo.szErrMsg, "hardware error");
  792. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  793. iRet = Error_Hardware;
  794. }
  795. m_busy_flag = false;
  796. return (ErrorCodeEnum)iRet;
  797. }
  798. ErrorCodeEnum CardIssuerClassImpl::ICCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
  799. {
  800. m_busy_flag = true;
  801. WAITING_LOOP();
  802. int iRet = 0;
  803. try
  804. {
  805. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  806. unsigned char szSendData[1024] = "";
  807. memset(szSendData,0,sizeof(szSendData));
  808. int iSendLength = 0;
  809. memcpy(szSendData,sendBuf.data,sendBuf.dwSize);
  810. iSendLength = sendBuf.dwSize;
  811. unsigned char szRecvData[1024] = "";
  812. int iRecvLength = 0;
  813. TRANSMIT:
  814. memset(szRecvData,0,sizeof(szRecvData));
  815. iRet = DRVCardDispenser->ICCTransmit(0, (char*)szSendData, iSendLength, (char*)szRecvData, &iRecvLength);
  816. if (iRet < 0)
  817. {
  818. strcpy(m_errorInfo.szErrMsg, "hardware error");
  819. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  820. iRet = Error_Hardware;
  821. throw(iRet);
  822. }
  823. if (szRecvData[iRecvLength-2] == 0x61)
  824. {
  825. memset(szSendData,0,sizeof(szSendData));
  826. szSendData[0]=0x00;
  827. szSendData[1]=0xC0;
  828. szSendData[2]=0x00;
  829. szSendData[3]=0x00;
  830. szSendData[4]=szRecvData[iRecvLength-1];
  831. iSendLength=5;
  832. goto TRANSMIT;
  833. }
  834. else if (szRecvData[iRecvLength-2] == 0x6C)
  835. {
  836. szSendData[iSendLength-1]=szRecvData[iRecvLength-1];
  837. goto TRANSMIT;
  838. }
  839. memcpy(recvBuf.data,szRecvData,iRecvLength);
  840. recvBuf.dwSize = iRecvLength;
  841. }catch(int eret){iRet = eret;}
  842. m_busy_flag = false;
  843. return (ErrorCodeEnum)iRet;
  844. }
  845. ErrorCodeEnum CardIssuerClassImpl::DeactivateICCard()
  846. {
  847. m_busy_flag = true;
  848. WAITING_LOOP();
  849. int iRet = Error_Succeed;
  850. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  851. char sErrMsg[100] = "";
  852. iRet = DRVCardDispenser->ICCPower(8, NULL, NULL);
  853. if (iRet < 0)
  854. {
  855. strcpy(m_errorInfo.szErrMsg, "hardware error");
  856. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  857. iRet = Error_Hardware;
  858. }
  859. m_busy_flag = false;
  860. return (ErrorCodeEnum)iRet;
  861. }
  862. //非接部分
  863. ErrorCodeEnum CardIssuerClassImpl::ActiveContactlessICCard(char fstType, char scdType, char thdType, char &outType)
  864. {
  865. int iRet = 0;
  866. return (ErrorCodeEnum)iRet;
  867. }
  868. ErrorCodeEnum CardIssuerClassImpl::DeactContactlessICCard()
  869. {
  870. int iRet = 0;
  871. return (ErrorCodeEnum)iRet;
  872. }
  873. ErrorCodeEnum CardIssuerClassImpl::MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo &recvBuf)
  874. {
  875. int iRet = 0;
  876. return (ErrorCodeEnum)iRet;
  877. }
  878. ErrorCodeEnum CardIssuerClassImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo &recvBuf)
  879. {
  880. int iRet = 0;
  881. return (ErrorCodeEnum)iRet;
  882. }
  883. ///以下是便携式卡机特有API,接口实现中其他机型直接返回Error_NotImpl即可//
  884. /////////////////////////////////////////////////////////////////////////
  885. ErrorCodeEnum CardIssuerClassImpl::DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char *pDevSN, BYTE &btType)
  886. {
  887. m_busy_flag = true;
  888. WAITING_LOOP();
  889. int iRet = Error_Succeed;
  890. char *CapInfo[10];
  891. for (int i = 0; i < 10; i++)
  892. {
  893. CapInfo[i] = new char[20];
  894. memset(CapInfo[i], 0, 20);
  895. }
  896. try
  897. {
  898. int iBaud = 38400;
  899. char szComPort[100];
  900. memset(szComPort,0,sizeof(szComPort));
  901. if(dwPort<0)strcpy(szComPort,"/dev/ttyXRUSB1");
  902. else sprintf(szComPort,"/dev/ttyXRUSB%d",dwPort - 1);
  903. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  904. iRet = DRVCardDispenser->OpenDev(szComPort,(int)dwBaudRate);
  905. if(iRet != 0)
  906. {
  907. strcpy(m_errorInfo.szErrMsg, "connect to device failed");
  908. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  909. m_isDevOpened = false;
  910. iRet =Error_DevConnFailed;
  911. throw(iRet);
  912. }
  913. m_isDevOpened = true ;
  914. char szErrorMsg[1024] = "";
  915. //复位设备
  916. char *sReset[10] = {NULL};
  917. char PowerOnFlag[10] ="1";
  918. char PowerOffFlag[10]="3";
  919. sReset[1] = PowerOnFlag;
  920. sReset[2] = PowerOffFlag;
  921. iRet = DRVCardDispenser->ResetDev(3,sReset);
  922. if(iRet != 0)
  923. {
  924. strcpy(m_errorInfo.szErrMsg, "hardware error");
  925. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  926. iRet = Error_Hardware;
  927. throw(iRet);
  928. }
  929. int mSupplyBin =2, mRetainBin =1, mHoldBin =0;
  930. DRVCardDispenser->GetDevCap(CapInfo);
  931. mSupplyBin = atoi(CapInfo[0]);
  932. mRetainBin = atoi(CapInfo[1]);
  933. mHoldBin = atoi(CapInfo[2]);
  934. iRet = Error_Succeed;
  935. }catch(int eret){iRet = eret;}
  936. btType = DEV_OPEN_TYPE_COM;
  937. m_busy_flag = false;
  938. for (int i = 0; i < 10; i++)
  939. {
  940. delete[]CapInfo[i];
  941. }
  942. return (ErrorCodeEnum)iRet;
  943. }
  944. ErrorCodeEnum CardIssuerClassImpl::TransferEnInit(int &iStatus, BYTE *&Cr1, int &lenR1, BYTE *&Cr3, int &lenR3, BYTE *&dKey, int &lenKey)
  945. {
  946. int iRet = 0;
  947. return (ErrorCodeEnum)iRet;
  948. }
  949. ErrorCodeEnum CardIssuerClassImpl::SetR2(int &iStatus, BYTE *pCr2, int lenR2)
  950. {
  951. int iRet = 0;
  952. return (ErrorCodeEnum)iRet;
  953. }
  954. ErrorCodeEnum CardIssuerClassImpl::SendWorkingKey(const char *pWorkingKey)
  955. {
  956. int iRet = 0;
  957. return (ErrorCodeEnum)iRet;
  958. }
  959. ErrorCodeEnum CardIssuerClassImpl::SAMActive(BYTE vcc)
  960. {
  961. int iRet = 0;
  962. return (ErrorCodeEnum)iRet;
  963. }
  964. ErrorCodeEnum CardIssuerClassImpl::SAMDeactivate()
  965. {
  966. int iRet = 0;
  967. return (ErrorCodeEnum)iRet;
  968. }
  969. ErrorCodeEnum CardIssuerClassImpl::SAMWarmReset()
  970. {
  971. int iRet = 0;
  972. return (ErrorCodeEnum)iRet;
  973. }
  974. ErrorCodeEnum CardIssuerClassImpl::SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  975. {
  976. int iRet = 0;
  977. return (ErrorCodeEnum)iRet;
  978. }
  979. ErrorCodeEnum CardIssuerClassImpl::SAMQueryStatus(SAMStatus& samStatus)
  980. {
  981. int iRet = 0;
  982. return (ErrorCodeEnum)iRet;
  983. }
  984. ErrorCodeEnum CardIssuerClassImpl::SAMSelect(const int sn)
  985. {
  986. int iRet = 0;
  987. return (ErrorCodeEnum)iRet;
  988. }
  989. ErrorCodeEnum CardIssuerClassImpl::ActiveICCardATR(CmdInfo& atrBuf)
  990. {
  991. int iRet = 0;
  992. return (ErrorCodeEnum)iRet;
  993. }
  994. ////////////////卡面打印部分,部分机型有此功能//////////////////
  995. ErrorCodeEnum CardIssuerClassImpl::Print(BYTE*& data, const int dataSize, const int side)
  996. {
  997. int iRet = 0;
  998. return (ErrorCodeEnum)iRet;
  999. }
  1000. ErrorCodeEnum CardIssuerClassImpl::QueryPrinterStatus()
  1001. {
  1002. int iRet = 0;
  1003. return (ErrorCodeEnum)iRet;
  1004. }
  1005. //安全锁接口部分
  1006. ErrorCodeEnum CardIssuerClassImpl::SLLoadKey(const SCIKeyInfo key)
  1007. {
  1008. int iRet = 0;
  1009. return (ErrorCodeEnum)iRet;
  1010. }
  1011. ErrorCodeEnum CardIssuerClassImpl::SLSetParam(SCIParamType eType, int value)
  1012. {
  1013. int iRet = 0;
  1014. return (ErrorCodeEnum)iRet;
  1015. }
  1016. ErrorCodeEnum CardIssuerClassImpl::SLLock()
  1017. {
  1018. int iRet = 0;
  1019. return (ErrorCodeEnum)iRet;
  1020. }
  1021. ErrorCodeEnum CardIssuerClassImpl::SLUnLock(const SCICheckCode checkCode, bool bTemp )
  1022. {
  1023. int iRet = 0;
  1024. return (ErrorCodeEnum)iRet;
  1025. }
  1026. ErrorCodeEnum CardIssuerClassImpl::SLGetTempData(SCITempData &ksnData, SCITempData &ramData)
  1027. {
  1028. int iRet = 0;
  1029. return (ErrorCodeEnum)iRet;
  1030. }
  1031. ErrorCodeEnum CardIssuerClassImpl::SLOpenDoor(const SCITempData data)
  1032. {
  1033. int iRet = 0;
  1034. return (ErrorCodeEnum)iRet;
  1035. }
  1036. //蓝牙控制部分
  1037. ErrorCodeEnum CardIssuerClassImpl::BluetoothControl(SCIBluetoothCMD eCmd)
  1038. {
  1039. int iRet = 0;
  1040. return (ErrorCodeEnum)iRet;
  1041. }
  1042. ErrorCodeEnum CardIssuerClassImpl::BluetoothModifyKey(unsigned char *key)
  1043. {
  1044. int iRet = 0;
  1045. return (ErrorCodeEnum)iRet;
  1046. }
  1047. ErrorCodeEnum CardIssuerClassImpl::BluetoothModifyName(unsigned char *name)
  1048. {
  1049. int iRet = 0;
  1050. return (ErrorCodeEnum)iRet;
  1051. }
  1052. ErrorCodeEnum CardIssuerClassImpl::BluetoothGetVersion(char *&version)
  1053. {
  1054. int iRet = 0;
  1055. return (ErrorCodeEnum)iRet;
  1056. }
  1057. ErrorCodeEnum CardIssuerClassImpl::BluetoothGetConnectName(unsigned char *&name)
  1058. {
  1059. int iRet = 0;
  1060. return (ErrorCodeEnum)iRet;
  1061. }
  1062. ErrorCodeEnum CardIssuerClassImpl::BluetoothGetSignalStrength(unsigned char *&signal)
  1063. {
  1064. int iRet = 0;
  1065. return (ErrorCodeEnum)iRet;
  1066. }
  1067. //控制灯光
  1068. ErrorCodeEnum CardIssuerClassImpl::LightControl(SCILightType eLight, bool bOnOff)
  1069. {
  1070. int iRet = 0;
  1071. return (ErrorCodeEnum)iRet;
  1072. }
  1073. ErrorCodeEnum CardIssuerClassImpl::QueryBatteryPower(int &bat)
  1074. {
  1075. int iRet = 0;
  1076. return (ErrorCodeEnum)iRet;
  1077. }
  1078. void CardIssuerClassImpl::WAITING_LOOP()
  1079. {
  1080. while (1)
  1081. {
  1082. if (m_signal_get_flag == false)
  1083. break;
  1084. }
  1085. }