+ } else {
+ PrintAndLog("proprietary non iso14443a-4 card found, RATS not supported");
+ }
+
+ return resp.arg[0];
+}
+
+// Collect ISO14443 Type A UIDs
+int CmdHF14ACUIDs(const char *Cmd)
+{
+ // requested number of UIDs
+ int n = atoi(Cmd);
+ // collect at least 1 (e.g. if no parameter was given)
+ n = n > 0 ? n : 1;
+
+ PrintAndLog("Collecting %d UIDs", n);
+ PrintAndLog("Start: %u", time(NULL));
+ // repeat n times
+ for (int i = 0; i < n; i++) {
+ // execute anticollision procedure
+ UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_CONNECT, 0, 0}};
+ SendCommand(&c);
+
+ UsbCommand resp;
+ WaitForResponse(CMD_ACK,&resp);
+
+ uint8_t *uid = resp.d.asBytes;
+ iso14a_card_select_t *card = (iso14a_card_select_t *)(uid + 12);
+
+ // check if command failed
+ if (resp.arg[0] == 0) {
+ PrintAndLog("Card select failed.");
+ } else {
+ // check if UID is 4 bytes
+ if ((card->atqa[1] & 0xC0) == 0) {
+ PrintAndLog("%02X%02X%02X%02X",
+ *uid, *(uid + 1), *(uid + 2), *(uid + 3));
+ } else {
+ PrintAndLog("UID longer than 4 bytes");
+ }
+ }