X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/3e77c7a7b4859c18345dac5652c70c280eb1ca10..refs/pull/884/head:/armsrc/mifaresniff.c?ds=sidebyside

diff --git a/armsrc/mifaresniff.c b/armsrc/mifaresniff.c
index 20b54e82..4dbcd904 100644
--- a/armsrc/mifaresniff.c
+++ b/armsrc/mifaresniff.c
@@ -9,7 +9,7 @@
 //-----------------------------------------------------------------------------
 
 #include "mifaresniff.h"
-#include "apps.h"
+
 #include "proxmark3.h"
 #include "util.h"
 #include "string.h"
@@ -18,6 +18,9 @@
 #include "crapto1/crapto1.h"
 #include "mifareutil.h"
 #include "common.h"
+#include "cmd.h"
+#include "BigBuf.h"
+#include "fpgaloader.h"
 
 
 static int sniffState = SNF_INIT;
@@ -35,7 +38,7 @@ bool MfSniffInit(void){
 	sniffSAK = 0;
 	sniffUIDType = SNF_UID_4;
 
-	return FALSE;
+	return false;
 }
 
 bool MfSniffEnd(void){
@@ -43,7 +46,7 @@ bool MfSniffEnd(void){
 	cmd_send(CMD_ACK,0,0,0,0,0);
 	LED_B_OFF();
 
-	return FALSE;
+	return false;
 }
 
 bool RAMFUNC MfSniffLogic(const uint8_t *data, uint16_t len, uint8_t *parity, uint16_t bitCnt, bool reader) {
@@ -60,9 +63,16 @@ bool RAMFUNC MfSniffLogic(const uint8_t *data, uint16_t len, uint8_t *parity, ui
 				memset(sniffATQA, 0x00, 2);
 				sniffSAK = 0;
 				sniffState = SNF_ATQA;
+				if (data[0] == 0x40) 
+					sniffState = SNF_MAGIC_WUPC2;
 			}
 			break;
 		}
+		case SNF_MAGIC_WUPC2:
+			if ((len == 1) && (reader) && (data[0] == 0x43) ) {  
+				sniffState = SNF_CARD_IDLE;
+			}
+			break;
 		case SNF_ATQA:{
 			if ((!reader) && (len == 2)) { 		// ATQA from tag
 				memcpy(sniffATQA, data, 2);
@@ -105,11 +115,11 @@ bool RAMFUNC MfSniffLogic(const uint8_t *data, uint16_t len, uint8_t *parity, ui
 			sniffBuf[11] = sniffSAK;
 			sniffBuf[12] = 0xFF;
 			sniffBuf[13] = 0xFF;
-			LogTrace(sniffBuf, 14, 0, 0, NULL, TRUE);
+			LogTrace(sniffBuf, 14, 0, 0, NULL, true);
 			sniffState = SNF_CARD_CMD;
 		}	// intentionally no break;
 		case SNF_CARD_CMD:{	
-			LogTrace(data, len, 0, 0, NULL, reader);
+			LogTrace(data, len, 0, 0, parity, reader);
 			timerData = GetTickCount();
 			break;
 		}
@@ -120,14 +130,14 @@ bool RAMFUNC MfSniffLogic(const uint8_t *data, uint16_t len, uint8_t *parity, ui
 	}
 
 
-	return FALSE;
+	return false;
 }
 
 bool RAMFUNC MfSniffSend(uint16_t maxTimeoutMs) {
 	if (BigBuf_get_traceLen() && (GetTickCount() > timerData + maxTimeoutMs)) {
 		return intMfSniffSend();
 	}
-	return FALSE;
+	return false;
 }
 
 // internal sending function. not a RAMFUNC.
@@ -155,5 +165,5 @@ bool intMfSniffSend() {
 
 	clear_trace();
 	
-	return TRUE;
+	return true;
 }