RFID.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. #include <stdio.h> /*標準輸入輸出定義*/
  2. #include <stdlib.h> /*標準函數庫定義*/
  3. #include <string.h>
  4. #include <stdint.h>
  5. #include "../Config.h"
  6. #include "../Log/log.h"
  7. #include "../Define/define.h"
  8. #include "../ShareMemory/shmMem.h"
  9. #include "../SelectGun/SelectGun.h"
  10. #include "main.h"
  11. #include "../timeout.h"
  12. //------------------------------------------------------------------------------
  13. static char *rfidPortName = "/dev/ttyS2";
  14. static bool isCardScan = false;
  15. static DcCommonInfo* ShmDcCommonData = NULL;
  16. //------------------------------------------------------------------------------
  17. static bool canStartCharging(void)
  18. {
  19. uint8_t index = 0;
  20. char buf2[16] = "";
  21. memset(buf2, 0, ARRAY_SIZE(buf2));
  22. struct OCPP16Data *ShmOCPP16Data = (struct OCPP16Data *)GetShmOCPP16Data();
  23. for (index = 0; index < strlen((char *)ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status); index++) {
  24. sprintf(buf2 + (index - 1) * 2, "%02X", ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status[index]);
  25. }
  26. sprintf(buf2, "%s", ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status);
  27. // 因為無法得知實際的長度,所以只能用搜尋的方式
  28. if (strcmp(buf2, "Accepted") == EQUAL) {
  29. return true;
  30. }
  31. return false;
  32. }
  33. static void isAutorCompleteHandle(uint8_t *authorizeIndex)
  34. {
  35. uint8_t i = 0;
  36. struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  37. struct ChargingInfoData *pDcChargingInfo = NULL;
  38. // 透過後臺停止充電的判斷
  39. if (isAuthorizedComplete()
  40. #if !defined DD360 && !defined DD360Audi && !defined DD360ComBox
  41. || (pSysInfo->OcppConnStatus == NO &&
  42. pSysConfig->OfflinePolicy == _OFFLINE_POLICY_FREE_CHARGING)
  43. #endif //!defined DD360 && !defined DD360Audi
  44. ) {
  45. // 判斷後台回覆狀態
  46. if (canStartCharging() == false) {
  47. strcpy((char *)pSysConfig->UserId, "");
  48. ClearAuthorizedFlag();
  49. return;
  50. }
  51. if (*(authorizeIndex) != NO_DEFINE) {
  52. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(*(authorizeIndex));
  53. if (pSysConfig->OfflinePolicy == _OFFLINE_POLICY_LOCAL_LIST &&
  54. strcmp((char *)pDcChargingInfo->StartUserId, "") != EQUAL) {
  55. // 先找 AC
  56. if (*(authorizeIndex) == DEFAULT_AC_INDEX) {
  57. AcChargingTerminalProcess();
  58. } else {
  59. ChargingTerminalProcess(*(authorizeIndex));
  60. }
  61. }
  62. strcpy((char *)pSysConfig->UserId, "");
  63. *(authorizeIndex) = NO_DEFINE;
  64. }
  65. ClearAuthorizedFlag();
  66. } else if (pSysConfig->OfflinePolicy == _OFFLINE_POLICY_LOCAL_LIST) {
  67. // 白名單驗證
  68. for (i = 0; i < 10; i++) {
  69. if (strcmp((char *)pSysConfig->LocalWhiteCard[i], "") == EQUAL) {
  70. continue;
  71. }
  72. if (strcmp((char *)pSysConfig->LocalWhiteCard[i], (char *)pSysConfig->UserId) == EQUAL) {
  73. ChargingTerminalProcess(*(authorizeIndex));
  74. strcpy((char *)pSysConfig->UserId, "");
  75. ClearAuthorizedFlag();
  76. break;
  77. }
  78. }
  79. }
  80. }
  81. static void UserScanFunction(void)
  82. {
  83. bool idleReq = false;
  84. uint8_t i = 0;
  85. uint8_t stopReq = NO_DEFINE;
  86. char value[32] = {0};
  87. static uint8_t _authorizeIndex = NO_DEFINE;
  88. struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  89. struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  90. struct ChargingInfoData *pAcChargingInfo = (struct ChargingInfoData *)GetAcChargingInfoData(0);
  91. struct ChargingInfoData *pDcChargingInfo = NULL;
  92. GunIndexInfo *pGunIndexInfo = (GunIndexInfo *)GetGunIndexInfo();
  93. // 當前非驗證的狀態
  94. if (IsAuthorizingMode()) {
  95. isAutorCompleteHandle(&_authorizeIndex);
  96. }
  97. //當前沒有選槍
  98. if (getConfirmSelectedGun(pSysInfo->CurGunSelected) == FAIL) {
  99. strcpy((char *)pSysConfig->UserId, "");
  100. return;
  101. }
  102. /*
  103. if (pSysConfig->EVCCID_Authorize) {
  104. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  105. if (strcmp( (char *)pSysConfig->UserId, (char *) pDcChargingInfo->EVCCID) != EQUAL )
  106. return;
  107. }*/
  108. // 先判斷現在是否可以提供刷卡
  109. // 1. 如果當前沒有槍是閒置狀態,則無提供刷卡功能
  110. // 2. 停止充電
  111. if (pSysInfo->PageIndex == _LCM_FIX) {
  112. strcpy((char *)pSysConfig->UserId, "");
  113. return;
  114. }
  115. for (i = 0; i < pSysConfig->TotalConnectorCount; i++) {
  116. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(i);
  117. if (pDcChargingInfo->SystemStatus == S_CHARGING) {
  118. stopReq = i;
  119. }
  120. if (((pDcChargingInfo->SystemStatus == S_IDLE ||
  121. pDcChargingInfo->SystemStatus == S_RESERVATION) &&
  122. pDcChargingInfo->IsAvailable == YES) ||
  123. (pGunIndexInfo->AcGunIndex > 0 &&
  124. pAcChargingInfo->SystemStatus == S_IDLE &&
  125. pAcChargingInfo->IsAvailable)
  126. ) {
  127. idleReq = true;
  128. }
  129. }
  130. if (pGunIndexInfo->AcGunIndex > 0 &&
  131. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX &&
  132. pAcChargingInfo->SystemStatus == S_CHARGING) {
  133. stopReq = DEFAULT_AC_INDEX;
  134. }
  135. if (strlen((char *)pSysConfig->UserId) <= 0) {
  136. return;
  137. }
  138. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  139. if (pGunIndexInfo->AcGunIndex > 0 &&
  140. stopReq == DEFAULT_AC_INDEX &&
  141. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX) {
  142. log_info("ac stop charging ");
  143. log_info("index = %d, card number = %s, UserId = %s ",
  144. pSysInfo->CurGunSelectedByAc,
  145. pAcChargingInfo->StartUserId,
  146. pSysConfig->UserId);
  147. memset(value, 0, sizeof(value));
  148. memcpy(value,
  149. (uint8_t *)pAcChargingInfo->StartUserId,
  150. ARRAY_SIZE(pAcChargingInfo->StartUserId));
  151. if (strcmp((char *)pSysConfig->UserId, value) == EQUAL) {
  152. AcChargingTerminalProcess();
  153. }
  154. strcpy((char *)pSysConfig->UserId, "");
  155. } else if (stopReq < pSysConfig->TotalConnectorCount &&
  156. pDcChargingInfo->SystemStatus == S_CHARGING &&
  157. (pGunIndexInfo->AcGunIndex <= 0 ||
  158. (pGunIndexInfo->AcGunIndex > 0 &&
  159. pSysInfo->CurGunSelectedByAc == NO_DEFINE))
  160. ) {
  161. log_info("stop charging ");
  162. log_info("index = %d, card number = %s, UserId = %s ",
  163. pSysInfo->CurGunSelected,
  164. pDcChargingInfo->StartUserId,
  165. pSysConfig->UserId);
  166. memset(value, 0, sizeof(value));
  167. memcpy(value,
  168. (uint8_t *)pDcChargingInfo->StartUserId,
  169. ARRAY_SIZE(pDcChargingInfo->StartUserId));
  170. // 同一張卡直接停掉
  171. if (strcmp((char *)pSysConfig->UserId, value) == EQUAL) {
  172. ChargingTerminalProcess(pSysInfo->CurGunSelected);
  173. strcpy((char *)pSysConfig->UserId, "");
  174. return;
  175. }
  176. // 進驗證
  177. if (pGunIndexInfo->AcGunIndex > 0 &&
  178. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX) {
  179. _authorizeIndex = pSysInfo->CurGunSelectedByAc;
  180. } else {
  181. _authorizeIndex = pSysInfo->CurGunSelected;
  182. }
  183. #if defined DD360 || defined DD360Audi || defined DD360ComBox
  184. strcpy((char *)pSysConfig->UserId, "");
  185. return;
  186. #endif //defined DD360 || defined DD360Audi || defined DD360ComBox
  187. StartSystemTimeoutDet(Timeout_AuthorizingForStop);
  188. AuthorizingStart();
  189. } else if (idleReq) {
  190. if (pSysConfig->TotalConnectorCount > 1 &&
  191. stopReq != 255 &&
  192. pSysInfo->IsAlternatvieConf == YES) {
  193. idleReq = false;
  194. strcpy((char *)pSysConfig->UserId, "");
  195. } else if ((pGunIndexInfo->AcGunIndex > 0 &&
  196. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX) ||
  197. pDcChargingInfo->SystemStatus == S_IDLE || pDcChargingInfo->SystemStatus == S_RESERVATION) {
  198. log_info("// LCM => Authorizing ID:%s",(char *)pSysConfig->UserId);
  199. setSelGunWaitToAuthor(pSysInfo->CurGunSelected);
  200. // LCM => Authorizing
  201. pSysInfo->SystemPage = _LCM_AUTHORIZING;
  202. // 進入確認卡號狀態
  203. AuthorizingStart();
  204. } else {
  205. strcpy((char *)pSysConfig->UserId, "");
  206. }
  207. } else {
  208. strcpy((char *)pSysConfig->UserId, "");
  209. }
  210. return;
  211. }
  212. bool GetIsCardScan(void)
  213. {
  214. return isCardScan;
  215. }
  216. void SetIsCardScan(bool value)
  217. {
  218. isCardScan = value;
  219. }
  220. void ScannerCardProcess(void)
  221. {
  222. int i = 0;
  223. struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  224. struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  225. struct WARNING_CODE_INFO *pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo();
  226. SelectGunInfo *ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
  227. ShmDcCommonData = (DcCommonInfo*)GetShmDcCommonData();
  228. #if defined DD360Audi
  229. if (!isDetectPlugin(pSysInfo->CurGunSelected) &&
  230. #else
  231. if ((!isDetectPlugin(LEFT_GUN_NUM) || !isDetectPlugin(RIGHT_GUN_NUM)) &&
  232. #endif
  233. !isCardScan &&
  234. pSysWarning->Level != WARN_LV_ER /*&&
  235. pSysConfig->AuthorisationMode == AUTH_MODE_ENABLE*/) {
  236. isCardScan = true;
  237. // 處理刷卡及驗證卡號的動作
  238. UserScanFunction();
  239. }
  240. if (pSysInfo->SystemPage == _LCM_AUTHORIZING) {
  241. if(!isAuthorizedComplete())
  242. StartSystemTimeoutDet(Timeout_Authorizing);
  243. //printf("isAuthorizedComplete = %d, %f", isAuthorizedComplete(), ShmSelectGunInfo->PricesInfo[pSysInfo->CurGunSelected].Balance);
  244. // 確認驗證卡號完成沒
  245. if (isAuthorizedComplete()
  246. /*
  247. #if !defined DD360 && !defined DD360Audi && !defined DD360ComBox
  248. || pSysConfig->OfflinePolicy == _OFFLINE_POLICY_FREE_CHARGING
  249. #endif //!defined DD360 && !defined DD360Audi && !defined DD360ComBox
  250. */
  251. ) {
  252. //StopSystemTimeoutDet();
  253. StartSystemTimeoutDet(Timeout_WaitBalance);
  254. if (ShmSelectGunInfo->PricesInfo[pSysInfo->CurGunSelected].Balance != FAIL_BALANCE_PRICES) {
  255. StopSystemTimeoutDet();
  256. // 判斷後台回覆狀態
  257. if (canStartCharging()) {
  258. // LCM => Authorize complete
  259. pSysInfo->SystemPage = _LCM_AUTHORIZ_COMP;
  260. } else {
  261. // LCM => Authorize fail
  262. pSysInfo->SystemPage = _LCM_AUTHORIZ_FAIL;
  263. strcpy((char *)pSysConfig->UserId, "");
  264. ShmDcCommonData->AuthroizeType = IdTokenType_Central;
  265. }
  266. } ClearAuthorizedFlag();
  267. } /*else if (pSysConfig->OfflinePolicy == _OFFLINE_POLICY_LOCAL_LIST) {
  268. // 白名單驗證
  269. for (i = 0; i < 10; i++) {
  270. if (strcmp((char *)pSysConfig->LocalWhiteCard[i], "") == EQUAL) {
  271. continue;
  272. }
  273. if (strcmp((char *)pSysConfig->LocalWhiteCard[i], (char *)pSysConfig->UserId) == EQUAL) {
  274. log_info("Local White Card [%d]:%s", i, pSysConfig->LocalWhiteCard[i]);
  275. pSysInfo->SystemPage = _LCM_AUTHORIZ_COMP;
  276. ClearAuthorizedFlag();
  277. break;
  278. }
  279. }
  280. }*/
  281. } else if (pSysInfo->SystemPage == _LCM_AUTHORIZ_FAIL) {
  282. StartSystemTimeoutDet(Timeout_VerifyFail);
  283. isCardScan = false;
  284. } else if (pSysInfo->SystemPage == _LCM_AUTHORIZ_COMP) {
  285. StartSystemTimeoutDet(Timeout_VerifyComp);
  286. } else if (pSysInfo->SystemPage == _LCM_WAIT_FOR_PLUG) {
  287. //StartGunInfoTimeoutDet(pSysInfo->CurGunSelected, Timeout_WaitPlug);
  288. } else {
  289. isCardScan = false;
  290. }
  291. }
  292. static int InitialRfidPort(void)
  293. {
  294. int fd = open(rfidPortName, O_RDWR);
  295. struct termios tios;
  296. struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData();
  297. if (fd != FAIL) {
  298. ioctl (fd, TCGETS, &tios);
  299. tios.c_cflag = B19200 | CS8 | CLOCAL | CREAD;
  300. tios.c_lflag = 0;
  301. tios.c_iflag = 0;
  302. tios.c_oflag = 0;
  303. tios.c_cc[VMIN] = 0;
  304. tios.c_cc[VTIME] = (uint8_t) 1;
  305. tios.c_lflag = 0;
  306. tcflush(fd, TCIFLUSH);
  307. ioctl(fd, TCSETS, &tios);
  308. }
  309. if (fd < 0) {
  310. pAlarmCode->AlarmEvents.bits.RfidModuleCommFail = 1;
  311. }
  312. return fd;
  313. }
  314. void CreateRfidFork(void)
  315. {
  316. pid_t rfidRecPid;
  317. rfidRecPid = fork();
  318. if (rfidRecPid == 0) {
  319. int fd = -1;
  320. int isContinue = 1;
  321. RFID rfid = {0};
  322. int module_type = MODULE_EWT;
  323. fd = InitialRfidPort();
  324. struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  325. ShmDcCommonData = (DcCommonInfo*)GetShmDcCommonData();
  326. //log_info("RFID fork Child's PID is %d", getpid());
  327. while (isContinue) {
  328. usleep(500000);
  329. // 刷卡判斷
  330. if (pSysConfig->OfflinePolicy == _OFFLINE_POLICY_NO_CHARGING ||
  331. !pSysConfig->isRFID) {
  332. continue;
  333. }
  334. if (getRequestCardSN(fd, module_type, &rfid) == false) {
  335. continue;
  336. }
  337. //log_info("Get Card..-%s- ", pSysConfig->UserId);
  338. if (strlen((char *)pSysConfig->UserId) != 0) {
  339. continue;
  340. }
  341. if (pSysConfig->RfidCardNumEndian == RFID_ENDIAN_LITTLE) {
  342. switch (rfid.snType) {
  343. #if defined DD360Audi
  344. case RFID_SN_TYPE_6BYTE:
  345. sprintf((char *) pSysConfig->UserId,
  346. "%02X%02X%02X%02X%02X%02X",
  347. rfid.currentCard[0], rfid.currentCard[1],
  348. rfid.currentCard[2], rfid.currentCard[3],
  349. rfid.currentCard[4], rfid.currentCard[5]);
  350. break;
  351. case RFID_SN_TYPE_7BYTE:
  352. sprintf((char *) pSysConfig->UserId,
  353. "%02X%02X%02X%02X%02X%02X%02X",
  354. rfid.currentCard[0], rfid.currentCard[1],
  355. rfid.currentCard[2], rfid.currentCard[3],
  356. rfid.currentCard[4], rfid.currentCard[5],
  357. rfid.currentCard[6]);
  358. break;
  359. case RFID_SN_TYPE_10BYTE:
  360. sprintf((char *) pSysConfig->UserId,
  361. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  362. rfid.currentCard[0], rfid.currentCard[1],
  363. rfid.currentCard[2], rfid.currentCard[3],
  364. rfid.currentCard[4], rfid.currentCard[5],
  365. rfid.currentCard[6], rfid.currentCard[7],
  366. rfid.currentCard[8], rfid.currentCard[9]);
  367. break;
  368. case RFID_SN_TYPE_4BYTE:
  369. sprintf((char *) pSysConfig->UserId,
  370. "%02X%02X%02X%02X",
  371. rfid.currentCard[0], rfid.currentCard[1],
  372. rfid.currentCard[2], rfid.currentCard[3]);
  373. break;
  374. #else
  375. case RFID_SN_TYPE_6BYTE:
  376. sprintf((char*)pSysConfig->UserId,
  377. "%02X%02X%02X%02X%02X%02X",
  378. rfid.currentCard[5], rfid.currentCard[4],
  379. rfid.currentCard[3], rfid.currentCard[2],
  380. rfid.currentCard[1], rfid.currentCard[0]);
  381. break;
  382. case RFID_SN_TYPE_7BYTE:
  383. sprintf((char*)pSysConfig->UserId,
  384. "%02X%02X%02X%02X%02X%02X%02X",
  385. rfid.currentCard[6], rfid.currentCard[5],
  386. rfid.currentCard[4], rfid.currentCard[3],
  387. rfid.currentCard[2], rfid.currentCard[1],
  388. rfid.currentCard[0]);
  389. break;
  390. case RFID_SN_TYPE_8BYTE:
  391. sprintf((char*)pSysConfig->UserId,
  392. "%02X%02X%02X%02X%02X%02X%02X%02X",
  393. rfid.currentCard[7], rfid.currentCard[6],
  394. rfid.currentCard[5], rfid.currentCard[4],
  395. rfid.currentCard[3], rfid.currentCard[2],
  396. rfid.currentCard[1], rfid.currentCard[0]);
  397. break;
  398. case RFID_SN_TYPE_10BYTE:
  399. sprintf((char*)pSysConfig->UserId,
  400. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  401. rfid.currentCard[9], rfid.currentCard[8],
  402. rfid.currentCard[7], rfid.currentCard[6],
  403. rfid.currentCard[5], rfid.currentCard[4],
  404. rfid.currentCard[3], rfid.currentCard[2],
  405. rfid.currentCard[1], rfid.currentCard[0]);
  406. break;
  407. case RFID_SN_TYPE_4BYTE:
  408. sprintf((char*)pSysConfig->UserId,
  409. "%02X%02X%02X%02X",
  410. rfid.currentCard[3], rfid.currentCard[2],
  411. rfid.currentCard[1], rfid.currentCard[0]);
  412. break;
  413. #endif
  414. }
  415. } else if (pSysConfig->RfidCardNumEndian == RFID_ENDIAN_BIG) {
  416. switch (rfid.snType) {
  417. #if defined DD360Audi
  418. case RFID_SN_TYPE_6BYTE:
  419. sprintf((char *) pSysConfig->UserId,
  420. "%02X%02X%02X%02X%02X%02X",
  421. rfid.currentCard[5], rfid.currentCard[4],
  422. rfid.currentCard[3], rfid.currentCard[2],
  423. rfid.currentCard[1], rfid.currentCard[0]);
  424. break;
  425. case RFID_SN_TYPE_7BYTE:
  426. sprintf((char *) pSysConfig->UserId,
  427. "%02X%02X%02X%02X%02X%02X%02X",
  428. rfid.currentCard[6], rfid.currentCard[5],
  429. rfid.currentCard[4], rfid.currentCard[3],
  430. rfid.currentCard[2], rfid.currentCard[1],
  431. rfid.currentCard[0]);
  432. break;
  433. case RFID_SN_TYPE_10BYTE:
  434. sprintf((char *) pSysConfig->UserId,
  435. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  436. rfid.currentCard[9], rfid.currentCard[8],
  437. rfid.currentCard[7], rfid.currentCard[6],
  438. rfid.currentCard[5], rfid.currentCard[4],
  439. rfid.currentCard[3], rfid.currentCard[2],
  440. rfid.currentCard[1], rfid.currentCard[0]);
  441. break;
  442. case RFID_SN_TYPE_4BYTE:
  443. sprintf((char *) pSysConfig->UserId,
  444. "%02X%02X%02X%02X",
  445. rfid.currentCard[3], rfid.currentCard[2],
  446. rfid.currentCard[1], rfid.currentCard[0]);
  447. break;
  448. #else
  449. case RFID_SN_TYPE_6BYTE:
  450. sprintf((char*)pSysConfig->UserId,
  451. "%02X%02X%02X%02X%02X%02X",
  452. rfid.currentCard[0], rfid.currentCard[1],
  453. rfid.currentCard[2], rfid.currentCard[3],
  454. rfid.currentCard[4], rfid.currentCard[5]);
  455. break;
  456. case RFID_SN_TYPE_7BYTE:
  457. sprintf((char*)pSysConfig->UserId,
  458. "%02X%02X%02X%02X%02X%02X%02X",
  459. rfid.currentCard[0], rfid.currentCard[1],
  460. rfid.currentCard[2], rfid.currentCard[3],
  461. rfid.currentCard[4], rfid.currentCard[5],
  462. rfid.currentCard[6]);
  463. break;
  464. case RFID_SN_TYPE_8BYTE:
  465. sprintf((char*)pSysConfig->UserId,
  466. "%02X%02X%02X%02X%02X%02X%02X%02X",
  467. rfid.currentCard[0], rfid.currentCard[1],
  468. rfid.currentCard[2], rfid.currentCard[3],
  469. rfid.currentCard[4], rfid.currentCard[5],
  470. rfid.currentCard[6], rfid.currentCard[7]);
  471. break;
  472. case RFID_SN_TYPE_10BYTE:
  473. sprintf((char*)pSysConfig->UserId,
  474. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  475. rfid.currentCard[0], rfid.currentCard[1],
  476. rfid.currentCard[2], rfid.currentCard[3],
  477. rfid.currentCard[4], rfid.currentCard[5],
  478. rfid.currentCard[6], rfid.currentCard[7],
  479. rfid.currentCard[8], rfid.currentCard[9]);
  480. break;
  481. case RFID_SN_TYPE_4BYTE:
  482. sprintf((char*)pSysConfig->UserId,
  483. "%02X%02X%02X%02X",
  484. rfid.currentCard[0], rfid.currentCard[1],
  485. rfid.currentCard[2], rfid.currentCard[3]);
  486. break;
  487. #endif
  488. }
  489. }
  490. log_info("card number = %s", pSysConfig->UserId);
  491. if (strlen((char*)pSysConfig->UserId) != 0) {
  492. ShmDcCommonData->AuthroizeType = IdTokenType_ISO14443;
  493. }
  494. if (rfid.cardType == ISO14443A) {
  495. sethaltCard(fd, module_type);
  496. } else if (rfid.cardType == IS014443B) {
  497. } else if (rfid.cardType == FELICA) {
  498. }
  499. }
  500. }
  501. }