RFID.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568
  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. ShmDcCommonData = (DcCommonInfo*)GetShmDcCommonData();
  94. // 當前非驗證的狀態
  95. if (IsAuthorizingMode()) {
  96. isAutorCompleteHandle(&_authorizeIndex);
  97. }
  98. //當前沒有選槍
  99. if (getConfirmSelectedGun(pSysInfo->CurGunSelected) == FAIL) {
  100. strcpy((char *)pSysConfig->UserId, "");
  101. return;
  102. }
  103. /*
  104. if (pSysConfig->EVCCID_Authorize) {
  105. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  106. if (strcmp( (char *)pSysConfig->UserId, (char *) pDcChargingInfo->EVCCID) != EQUAL )
  107. return;
  108. }*/
  109. // 先判斷現在是否可以提供刷卡
  110. // 1. 如果當前沒有槍是閒置狀態,則無提供刷卡功能
  111. // 2. 停止充電
  112. if (pSysInfo->PageIndex == _LCM_FIX) {
  113. strcpy((char *)pSysConfig->UserId, "");
  114. return;
  115. }
  116. for (i = 0; i < pSysConfig->TotalConnectorCount; i++) {
  117. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(i);
  118. if (pDcChargingInfo->SystemStatus == S_CHARGING) {
  119. stopReq = i;
  120. }
  121. if (((pDcChargingInfo->SystemStatus == S_IDLE ||
  122. pDcChargingInfo->SystemStatus == S_RESERVATION) &&
  123. pDcChargingInfo->IsAvailable == YES) ||
  124. (pGunIndexInfo->AcGunIndex > 0 &&
  125. pAcChargingInfo->SystemStatus == S_IDLE &&
  126. pAcChargingInfo->IsAvailable)
  127. ) {
  128. idleReq = true;
  129. }
  130. }
  131. if (pGunIndexInfo->AcGunIndex > 0 &&
  132. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX &&
  133. pAcChargingInfo->SystemStatus == S_CHARGING) {
  134. stopReq = DEFAULT_AC_INDEX;
  135. }
  136. if (strlen((char *)pSysConfig->UserId) <= 0) {
  137. return;
  138. }
  139. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  140. if (pGunIndexInfo->AcGunIndex > 0 &&
  141. stopReq == DEFAULT_AC_INDEX &&
  142. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX) {
  143. log_info("ac stop charging ");
  144. log_info("index = %d, card number = %s, UserId = %s ",
  145. pSysInfo->CurGunSelectedByAc,
  146. pAcChargingInfo->StartUserId,
  147. pSysConfig->UserId);
  148. memset(value, 0, sizeof(value));
  149. memcpy(value,
  150. (uint8_t *)pAcChargingInfo->StartUserId,
  151. ARRAY_SIZE(pAcChargingInfo->StartUserId));
  152. if (strcmp((char *)pSysConfig->UserId, value) == EQUAL) {
  153. AcChargingTerminalProcess();
  154. }
  155. strcpy((char *)pSysConfig->UserId, "");
  156. } else if (stopReq < pSysConfig->TotalConnectorCount &&
  157. pDcChargingInfo->SystemStatus == S_CHARGING &&
  158. (pGunIndexInfo->AcGunIndex <= 0 ||
  159. (pGunIndexInfo->AcGunIndex > 0 &&
  160. pSysInfo->CurGunSelectedByAc == NO_DEFINE))
  161. ) {
  162. log_info("stop charging ");
  163. log_info("index = %d, card number = %s, UserId = %s ",
  164. pSysInfo->CurGunSelected,
  165. pDcChargingInfo->StartUserId,
  166. pSysConfig->UserId);
  167. memset(value, 0, sizeof(value));
  168. memcpy(value,
  169. (uint8_t *)pDcChargingInfo->StartUserId,
  170. ARRAY_SIZE(pDcChargingInfo->StartUserId));
  171. // 同一張卡直接停掉
  172. if (strcmp((char *)pSysConfig->UserId, value) == EQUAL) {
  173. ChargingTerminalProcess(pSysInfo->CurGunSelected);
  174. strcpy((char *)pSysConfig->UserId, "");
  175. return;
  176. }
  177. // 進驗證
  178. if (pGunIndexInfo->AcGunIndex > 0 &&
  179. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX) {
  180. _authorizeIndex = pSysInfo->CurGunSelectedByAc;
  181. } else {
  182. _authorizeIndex = pSysInfo->CurGunSelected;
  183. }
  184. #if defined DD360 || defined DD360Audi || defined DD360ComBox
  185. strcpy((char *)pSysConfig->UserId, "");
  186. return;
  187. #endif //defined DD360 || defined DD360Audi || defined DD360ComBox
  188. StartSystemTimeoutDet(Timeout_AuthorizingForStop);
  189. AuthorizingStart();
  190. } else if (idleReq) {
  191. if (pSysConfig->TotalConnectorCount > 1 &&
  192. stopReq != 255 &&
  193. pSysInfo->IsAlternatvieConf == YES) {
  194. idleReq = false;
  195. strcpy((char *)pSysConfig->UserId, "");
  196. } else if ((pGunIndexInfo->AcGunIndex > 0 &&
  197. pSysInfo->CurGunSelectedByAc == DEFAULT_AC_INDEX) ||
  198. pDcChargingInfo->SystemStatus == S_IDLE || pDcChargingInfo->SystemStatus == S_RESERVATION) {
  199. log_info("// LCM => Authorizing ID:%s",(char *)pSysConfig->UserId);
  200. ShmDcCommonData->pGunInfo[pSysInfo->CurGunSelected].WaitForPlugit = FALSE;
  201. setSelGunWaitToAuthor(pSysInfo->CurGunSelected);
  202. // LCM => Authorizing
  203. pSysInfo->SystemPage = _LCM_AUTHORIZING;
  204. // 進入確認卡號狀態
  205. AuthorizingStart();
  206. } else {
  207. strcpy((char *)pSysConfig->UserId, "");
  208. }
  209. } else {
  210. strcpy((char *)pSysConfig->UserId, "");
  211. }
  212. return;
  213. }
  214. bool GetIsCardScan(void)
  215. {
  216. return isCardScan;
  217. }
  218. void SetIsCardScan(bool value)
  219. {
  220. isCardScan = value;
  221. }
  222. void ScannerCardProcess(void)
  223. {
  224. int i = 0;
  225. struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  226. struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  227. struct WARNING_CODE_INFO *pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo();
  228. SelectGunInfo *ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
  229. ShmDcCommonData = (DcCommonInfo*)GetShmDcCommonData();
  230. #if (defined DD360Audi) || (SelectGunAction == 1)
  231. if (!isDetectPlugin(pSysInfo->CurGunSelected) &&
  232. (ShmDcCommonData->LcmPage == _PAGE_SELECT_PAY ||
  233. ShmDcCommonData->LcmPage == _PAGE_RFID_STOP ) &&
  234. #else
  235. if ((!isDetectPlugin(LEFT_GUN_NUM) || !isDetectPlugin(RIGHT_GUN_NUM)) &&
  236. !isCardScan &&
  237. #endif
  238. pSysWarning->Level != WARN_LV_ER /*&&
  239. pSysConfig->AuthorisationMode == AUTH_MODE_ENABLE*/) {
  240. isCardScan = true;
  241. // 處理刷卡及驗證卡號的動作
  242. UserScanFunction();
  243. }
  244. if (pSysInfo->SystemPage == _LCM_AUTHORIZING) {
  245. if(!isAuthorizedComplete())
  246. StartSystemTimeoutDet(Timeout_Authorizing);
  247. //printf("isAuthorizedComplete = %d, %f", isAuthorizedComplete(), ShmSelectGunInfo->PricesInfo[pSysInfo->CurGunSelected].Balance);
  248. // 確認驗證卡號完成沒
  249. if (isAuthorizedComplete()
  250. /*
  251. #if !defined DD360 && !defined DD360Audi && !defined DD360ComBox
  252. || pSysConfig->OfflinePolicy == _OFFLINE_POLICY_FREE_CHARGING
  253. #endif //!defined DD360 && !defined DD360Audi && !defined DD360ComBox
  254. */
  255. ) {
  256. //StopSystemTimeoutDet();
  257. #ifdef DD360Audi
  258. StartSystemTimeoutDet(Timeout_WaitBalance);
  259. if (ShmSelectGunInfo->PricesInfo[pSysInfo->CurGunSelected].Balance != FAIL_BALANCE_PRICES) {
  260. #endif
  261. StopSystemTimeoutDet();
  262. // 判斷後台回覆狀態
  263. if (canStartCharging()) {
  264. // LCM => Authorize complete
  265. pSysInfo->SystemPage = _LCM_AUTHORIZ_COMP;
  266. } else {
  267. // LCM => Authorize fail
  268. pSysInfo->SystemPage = _LCM_AUTHORIZ_FAIL;
  269. strcpy((char *)pSysConfig->UserId, "");
  270. ShmDcCommonData->AuthroizeType = IdTokenType_Central;
  271. #ifdef DD360Audi
  272. }
  273. #endif
  274. } ClearAuthorizedFlag();
  275. } /*else if (pSysConfig->OfflinePolicy == _OFFLINE_POLICY_LOCAL_LIST) {
  276. // 白名單驗證
  277. for (i = 0; i < 10; i++) {
  278. if (strcmp((char *)pSysConfig->LocalWhiteCard[i], "") == EQUAL) {
  279. continue;
  280. }
  281. if (strcmp((char *)pSysConfig->LocalWhiteCard[i], (char *)pSysConfig->UserId) == EQUAL) {
  282. log_info("Local White Card [%d]:%s", i, pSysConfig->LocalWhiteCard[i]);
  283. pSysInfo->SystemPage = _LCM_AUTHORIZ_COMP;
  284. ClearAuthorizedFlag();
  285. break;
  286. }
  287. }
  288. }*/
  289. } else if (pSysInfo->SystemPage == _LCM_AUTHORIZ_FAIL) {
  290. StartSystemTimeoutDet(Timeout_VerifyFail);
  291. isCardScan = false;
  292. } else if (pSysInfo->SystemPage == _LCM_AUTHORIZ_COMP) {
  293. StartSystemTimeoutDet(Timeout_VerifyComp);
  294. } else if (pSysInfo->SystemPage == _LCM_WAIT_FOR_PLUG) {
  295. //StartGunInfoTimeoutDet(pSysInfo->CurGunSelected, Timeout_WaitPlug);
  296. } else {
  297. isCardScan = false;
  298. }
  299. }
  300. static int InitialRfidPort(void)
  301. {
  302. int fd = open(rfidPortName, O_RDWR);
  303. struct termios tios;
  304. struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData();
  305. if (fd != FAIL) {
  306. ioctl (fd, TCGETS, &tios);
  307. tios.c_cflag = B19200 | CS8 | CLOCAL | CREAD;
  308. tios.c_lflag = 0;
  309. tios.c_iflag = 0;
  310. tios.c_oflag = 0;
  311. tios.c_cc[VMIN] = 0;
  312. tios.c_cc[VTIME] = (uint8_t) 1;
  313. tios.c_lflag = 0;
  314. tcflush(fd, TCIFLUSH);
  315. ioctl(fd, TCSETS, &tios);
  316. }
  317. if (fd < 0) {
  318. pAlarmCode->AlarmEvents.bits.RfidModuleCommFail = 1;
  319. }
  320. return fd;
  321. }
  322. void CreateRfidFork(void)
  323. {
  324. pid_t rfidRecPid;
  325. rfidRecPid = fork();
  326. if (rfidRecPid == 0) {
  327. int fd = -1;
  328. int isContinue = 1;
  329. RFID rfid = {0};
  330. int module_type = MODULE_EWT;
  331. fd = InitialRfidPort();
  332. struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  333. ShmDcCommonData = (DcCommonInfo*)GetShmDcCommonData();
  334. //log_info("RFID fork Child's PID is %d", getpid());
  335. while (isContinue) {
  336. usleep(500000);
  337. // 刷卡判斷
  338. if (pSysConfig->OfflinePolicy == _OFFLINE_POLICY_NO_CHARGING ||
  339. !pSysConfig->isRFID) {
  340. continue;
  341. }
  342. if (getRequestCardSN(fd, module_type, &rfid) == false) {
  343. continue;
  344. }
  345. //log_info("Get Card..-%s- ", pSysConfig->UserId);
  346. if (strlen((char *)pSysConfig->UserId) != 0) {
  347. continue;
  348. }
  349. if (pSysConfig->RfidCardNumEndian == RFID_ENDIAN_LITTLE) {
  350. switch (rfid.snType) {
  351. #ifdef DD360Audi
  352. case RFID_SN_TYPE_6BYTE:
  353. sprintf((char *) pSysConfig->UserId,
  354. "%02X%02X%02X%02X%02X%02X",
  355. rfid.currentCard[0], rfid.currentCard[1],
  356. rfid.currentCard[2], rfid.currentCard[3],
  357. rfid.currentCard[4], rfid.currentCard[5]);
  358. break;
  359. case RFID_SN_TYPE_7BYTE:
  360. sprintf((char *) pSysConfig->UserId,
  361. "%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]);
  366. break;
  367. case RFID_SN_TYPE_10BYTE:
  368. sprintf((char *) pSysConfig->UserId,
  369. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  370. rfid.currentCard[0], rfid.currentCard[1],
  371. rfid.currentCard[2], rfid.currentCard[3],
  372. rfid.currentCard[4], rfid.currentCard[5],
  373. rfid.currentCard[6], rfid.currentCard[7],
  374. rfid.currentCard[8], rfid.currentCard[9]);
  375. break;
  376. case RFID_SN_TYPE_4BYTE:
  377. sprintf((char *) pSysConfig->UserId,
  378. "%02X%02X%02X%02X",
  379. rfid.currentCard[0], rfid.currentCard[1],
  380. rfid.currentCard[2], rfid.currentCard[3]);
  381. break;
  382. #else
  383. case RFID_SN_TYPE_6BYTE:
  384. sprintf((char*)pSysConfig->UserId,
  385. "%02X%02X%02X%02X%02X%02X",
  386. rfid.currentCard[5], rfid.currentCard[4],
  387. rfid.currentCard[3], rfid.currentCard[2],
  388. rfid.currentCard[1], rfid.currentCard[0]);
  389. break;
  390. case RFID_SN_TYPE_7BYTE:
  391. sprintf((char*)pSysConfig->UserId,
  392. "%02X%02X%02X%02X%02X%02X%02X",
  393. rfid.currentCard[6], rfid.currentCard[5],
  394. rfid.currentCard[4], rfid.currentCard[3],
  395. rfid.currentCard[2], rfid.currentCard[1],
  396. rfid.currentCard[0]);
  397. break;
  398. case RFID_SN_TYPE_8BYTE:
  399. sprintf((char*)pSysConfig->UserId,
  400. "%02X%02X%02X%02X%02X%02X%02X%02X",
  401. rfid.currentCard[7], rfid.currentCard[6],
  402. rfid.currentCard[5], rfid.currentCard[4],
  403. rfid.currentCard[3], rfid.currentCard[2],
  404. rfid.currentCard[1], rfid.currentCard[0]);
  405. break;
  406. case RFID_SN_TYPE_10BYTE:
  407. sprintf((char*)pSysConfig->UserId,
  408. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  409. rfid.currentCard[9], rfid.currentCard[8],
  410. rfid.currentCard[7], rfid.currentCard[6],
  411. rfid.currentCard[5], rfid.currentCard[4],
  412. rfid.currentCard[3], rfid.currentCard[2],
  413. rfid.currentCard[1], rfid.currentCard[0]);
  414. break;
  415. case RFID_SN_TYPE_4BYTE:
  416. sprintf((char*)pSysConfig->UserId,
  417. "%02X%02X%02X%02X",
  418. rfid.currentCard[3], rfid.currentCard[2],
  419. rfid.currentCard[1], rfid.currentCard[0]);
  420. break;
  421. #endif
  422. }
  423. } else if (pSysConfig->RfidCardNumEndian == RFID_ENDIAN_BIG) {
  424. switch (rfid.snType) {
  425. #ifdef DD360Audi
  426. case RFID_SN_TYPE_6BYTE:
  427. sprintf((char *) pSysConfig->UserId,
  428. "%02X%02X%02X%02X%02X%02X",
  429. rfid.currentCard[5], rfid.currentCard[4],
  430. rfid.currentCard[3], rfid.currentCard[2],
  431. rfid.currentCard[1], rfid.currentCard[0]);
  432. break;
  433. case RFID_SN_TYPE_7BYTE:
  434. sprintf((char *) pSysConfig->UserId,
  435. "%02X%02X%02X%02X%02X%02X%02X",
  436. rfid.currentCard[6], rfid.currentCard[5],
  437. rfid.currentCard[4], rfid.currentCard[3],
  438. rfid.currentCard[2], rfid.currentCard[1],
  439. rfid.currentCard[0]);
  440. break;
  441. case RFID_SN_TYPE_10BYTE:
  442. sprintf((char *) pSysConfig->UserId,
  443. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  444. rfid.currentCard[9], rfid.currentCard[8],
  445. rfid.currentCard[7], rfid.currentCard[6],
  446. rfid.currentCard[5], rfid.currentCard[4],
  447. rfid.currentCard[3], rfid.currentCard[2],
  448. rfid.currentCard[1], rfid.currentCard[0]);
  449. break;
  450. case RFID_SN_TYPE_4BYTE:
  451. sprintf((char *) pSysConfig->UserId,
  452. "%02X%02X%02X%02X",
  453. rfid.currentCard[3], rfid.currentCard[2],
  454. rfid.currentCard[1], rfid.currentCard[0]);
  455. break;
  456. #else
  457. case RFID_SN_TYPE_6BYTE:
  458. sprintf((char*)pSysConfig->UserId,
  459. "%02X%02X%02X%02X%02X%02X",
  460. rfid.currentCard[0], rfid.currentCard[1],
  461. rfid.currentCard[2], rfid.currentCard[3],
  462. rfid.currentCard[4], rfid.currentCard[5]);
  463. break;
  464. case RFID_SN_TYPE_7BYTE:
  465. sprintf((char*)pSysConfig->UserId,
  466. "%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]);
  471. break;
  472. case RFID_SN_TYPE_8BYTE:
  473. sprintf((char*)pSysConfig->UserId,
  474. "%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. break;
  480. case RFID_SN_TYPE_10BYTE:
  481. sprintf((char*)pSysConfig->UserId,
  482. "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  483. rfid.currentCard[0], rfid.currentCard[1],
  484. rfid.currentCard[2], rfid.currentCard[3],
  485. rfid.currentCard[4], rfid.currentCard[5],
  486. rfid.currentCard[6], rfid.currentCard[7],
  487. rfid.currentCard[8], rfid.currentCard[9]);
  488. break;
  489. case RFID_SN_TYPE_4BYTE:
  490. sprintf((char*)pSysConfig->UserId,
  491. "%02X%02X%02X%02X",
  492. rfid.currentCard[0], rfid.currentCard[1],
  493. rfid.currentCard[2], rfid.currentCard[3]);
  494. break;
  495. #endif
  496. }
  497. }
  498. log_info("card number = %s", pSysConfig->UserId);
  499. if (strlen((char*)pSysConfig->UserId) != 0) {
  500. ShmDcCommonData->AuthroizeType = IdTokenType_ISO14443;
  501. }
  502. if (rfid.cardType == ISO14443A) {
  503. sethaltCard(fd, module_type);
  504. } else if (rfid.cardType == IS014443B) {
  505. } else if (rfid.cardType == FELICA) {
  506. }
  507. }
  508. }
  509. }