From 04bc1c660b1c74672ed7535b0a79fece45e5e571 Mon Sep 17 00:00:00 2001
From: pwpiwi <pwpiwi@users.noreply.github.com>
Date: Wed, 11 Mar 2015 20:17:24 +0100
Subject: [PATCH 1/1] fix: hf 14a raw was broken (see
 http://www.proxmark.org/forum/viewtopic.php?id=2351)

---
 armsrc/iso14443a.c | 7 ++++---
 client/cmdhf14a.c  | 5 +++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c
index f2fa1ff2..ac839cfd 100644
--- a/armsrc/iso14443a.c
+++ b/armsrc/iso14443a.c
@@ -1890,8 +1890,9 @@ void ReaderIso14443a(UsbCommand *c)
 {
 	iso14a_command_t param = c->arg[0];
 	uint8_t *cmd = c->d.asBytes;
-	size_t len = c->arg[1];
-	size_t lenbits = c->arg[2];
+	size_t len = c->arg[1] & 0xffff;
+	size_t lenbits = c->arg[1] >> 16;
+	uint32_t timeout = c->arg[2];
 	uint32_t arg0 = 0;
 	byte_t buf[USB_CMD_DATA_SIZE];
 	uint8_t par[MAX_PARITY_SIZE];
@@ -1916,7 +1917,7 @@ void ReaderIso14443a(UsbCommand *c)
 	}
 
 	if(param & ISO14A_SET_TIMEOUT) {
-		iso14a_set_timeout(c->arg[2]);
+		iso14a_set_timeout(timeout);
 	}
 
 	if(param & ISO14A_APDU) {
diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c
index 744b3875..d36ebb8b 100644
--- a/client/cmdhf14a.c
+++ b/client/cmdhf14a.c
@@ -560,7 +560,7 @@ int CmdHF14ACmdRaw(const char *cmd) {
 					timeout = temp;
 					i+=3;
 					while(cmd[i]!=' ' && cmd[i]!='\0') { i++; }
-					i+=2;
+					i-=2;
 					break;
                 default:
                     PrintAndLog("Invalid option");
@@ -605,6 +605,7 @@ int CmdHF14ACmdRaw(const char *cmd) {
         if(active)
             c.arg[0] |= ISO14A_NO_SELECT;
     }
+
 	if(bTimeout){
 	    #define MAX_TIMEOUT 40542464 	// (2^32-1) * (8*16) / 13560000Hz * 1000ms/s = 
         c.arg[0] |= ISO14A_SET_TIMEOUT;
@@ -612,7 +613,7 @@ int CmdHF14ACmdRaw(const char *cmd) {
             timeout = MAX_TIMEOUT;
             PrintAndLog("Set timeout to 40542 seconds (11.26 hours). The max we can wait for response");
         }
-        c.arg[2] = 13560000 / 1000 / (8*16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us)
+		c.arg[2] = 13560000 / 1000 / (8*16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us)
 	}
     if(power)
         c.arg[0] |= ISO14A_NO_DISCONNECT;
-- 
2.39.5