- // if (!iso14443a_select_card(uid, &card_info, NULL)) {
- // Dbprintf("Epa: Can't select card");
- // return -1;
- // }
-
- uint8_t wupa[] = { 0x26 }; // 0x26 - REQA 0x52 - WAKE-UP
- uint8_t sel_all[] = { 0x93,0x20 };
- uint8_t sel_uid[] = { 0x93,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- uint8_t rats[] = { 0xE0,0x81,0x00,0x00 }; // FSD=256, FSDI=8, CID=1
-
- uint8_t *resp = ((uint8_t *)BigBuf) + RECV_RESP_OFFSET;
- uint8_t *resp_par = ((uint8_t *)BigBuf) + RECV_RESP_PAR_OFFSET;
-
- byte_t uid_resp[4];
- size_t uid_resp_len = 4;
-
- uint8_t sak = 0x04; // cascade uid
- int len;
-
- // Broadcast for a card, WUPA (0x52) will force response from all cards in the field
- ReaderTransmitBitsPar(wupa,7,0, NULL);
-
- // Receive the ATQA
- if(!ReaderReceive(resp, resp_par)) return -1;
-
- // SELECT_ALL
- ReaderTransmit(sel_all,sizeof(sel_all), NULL);
- if (!ReaderReceive(resp, resp_par)) return -1;
-
- // uid response from tag
- memcpy(uid_resp,resp,uid_resp_len);
-
- // Construct SELECT UID command
- // transmitting a full UID (1 Byte cmd, 1 Byte NVB, 4 Byte UID, 1 Byte BCC, 2 Bytes CRC)
- memcpy(sel_uid+2,uid_resp,4); // the UID
- sel_uid[6] = sel_uid[2] ^ sel_uid[3] ^ sel_uid[4] ^ sel_uid[5]; // calculate and add BCC
- AppendCrc14443a(sel_uid,7); // calculate and add CRC
- ReaderTransmit(sel_uid,sizeof(sel_uid), NULL);
-
- // Receive the SAK
- if (!ReaderReceive(resp, resp_par)) return -1;
- sak = resp[0];
-
- // Request for answer to select
- AppendCrc14443a(rats, 2);
- ReaderTransmit(rats, sizeof(rats), NULL);
-
- if ( !(len = ReaderReceive(resp, resp_par) )) return -1;
-
- // populate the collected data.
- memcpy( card->uid, uid_resp, uid_resp_len);
- card->uidlen += uid_resp_len;
- card->sak = sak;
- card->ats_len = len;
- memcpy(card->ats, resp, sizeof(card->ats));
-
-