small fixes in ReaderIso14443a() (#446)
authorOleg Moiseenko <olegmsn@gmail.com>
Sun, 29 Oct 2017 15:34:51 +0000 (17:34 +0200)
committerpwpiwi <pwpiwi@users.noreply.github.com>
Sun, 29 Oct 2017 15:34:51 +0000 (16:34 +0100)
armsrc/iso14443a.c
client/cmdhf14a.c

index 026b177a8696224e9acfe73eaf7554976e515d45..06a83feb72693d4b252556059f708f3416083065 100644 (file)
@@ -1698,6 +1698,13 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
        int cascade_level = 0;
        int len;
 
+       // init card struct
+       if(p_hi14a_card) {
+               p_hi14a_card->uidlen = 0;
+               memset(p_hi14a_card->uid, 0, 10);
+               p_hi14a_card->ats_len = 0;
+       }
+
        // Broadcast for a card, WUPA (0x52) will force response from all cards in the field
     ReaderTransmitBitsPar(wupa, 7, NULL, NULL);
        
@@ -1706,8 +1713,6 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
 
        if(p_hi14a_card) {
                memcpy(p_hi14a_card->atqa, resp, 2);
-               p_hi14a_card->uidlen = 0;
-               memset(p_hi14a_card->uid,0,10);
        }
 
        if (anticollision) {
@@ -1813,7 +1818,6 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
 
        if(p_hi14a_card) {
                p_hi14a_card->sak = sak;
-               p_hi14a_card->ats_len = 0;
        }
 
        // non iso14443a compliant tag
@@ -1908,7 +1912,7 @@ void ReaderIso14443a(UsbCommand *c)
        size_t lenbits = c->arg[1] >> 16;
        uint32_t timeout = c->arg[2];
        uint32_t arg0 = 0;
-       byte_t buf[USB_CMD_DATA_SIZE];
+       byte_t buf[USB_CMD_DATA_SIZE] = {0};
        uint8_t par[MAX_PARITY_SIZE];
   
        if(param & ISO14A_CONNECT) {
index e3f1a5f17cf7d4cf7a2546149f62507a289899b0..09dcd34e8cef09a1debdd6a79a2865d2b6907161 100644 (file)
@@ -732,8 +732,17 @@ static void waitCmd(uint8_t iSelect)
 
     if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {
         recv = resp.d.asBytes;
-        uint8_t iLen = iSelect ? resp.arg[1] : resp.arg[0];
-        PrintAndLog("received %i octets", iLen);
+        uint8_t iLen = resp.arg[0];
+               if (iSelect){
+                       iLen = resp.arg[1];
+                       if (iLen){
+                               PrintAndLog("Card selected. UID[%i]:", iLen);
+                       } else {
+                               PrintAndLog("Can't select card.");
+                       }
+               } else {
+                       PrintAndLog("received %i bytes:", iLen);
+               }
         if(!iLen)
             return;
         hexout = (char *)malloc(iLen * 3 + 1);
Impressum, Datenschutz