From: edouard@lafargue.name <edouard@lafargue.name@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Date: Mon, 23 Nov 2009 09:34:57 +0000 (+0000)
Subject: Added the new SRIX4K reading routine, thanks to jonor. Regression tested against... 
X-Git-Tag: v1.0.0~450
X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/c86cc30801a3ea718df1daa45e989cb40f8c5950?ds=inline

Added the new SRIX4K reading routine, thanks to jonor. Regression tested against SRI512 tags,
but I do not have SRIX4K tags to test this with.
---

diff --git a/armsrc/appmain.c b/armsrc/appmain.c
index 4077e4ef..81ef407a 100644
--- a/armsrc/appmain.c
+++ b/armsrc/appmain.c
@@ -582,6 +582,9 @@ void UsbPacketReceived(BYTE *packet, int len)
 		case CMD_READ_SRI512_TAG:
 			ReadSRI512Iso14443(c->ext1);
 			break;
+               case CMD_READ_SRIX4K_TAG:
+                       ReadSRIX4KIso14443(c->ext1);
+                       break;
 #endif
 
 #ifdef WITH_ISO14443a
diff --git a/armsrc/apps.h b/armsrc/apps.h
index 040737e7..43324a5b 100644
--- a/armsrc/apps.h
+++ b/armsrc/apps.h
@@ -81,6 +81,8 @@ void SimulateTagLowFrequencyBidir(int divisor, int max_bitlen);
 void SimulateIso14443Tag(void);
 void AcquireRawAdcSamplesIso14443(DWORD parameter);
 void ReadSRI512Iso14443(DWORD parameter);
+void ReadSRIX4KIso14443(DWORD parameter);
+void ReadSTMemoryIso14443(DWORD parameter,DWORD dwLast);
 void SnoopIso14443(void);
 
 /// iso14443a.h
diff --git a/armsrc/iso14443.c b/armsrc/iso14443.c
index fab7336b..fbc3a6d4 100644
--- a/armsrc/iso14443.c
+++ b/armsrc/iso14443.c
@@ -873,6 +873,15 @@ void AcquireRawAdcSamplesIso14443(DWORD parameter)
 //-----------------------------------------------------------------------------
 void ReadSRI512Iso14443(DWORD parameter)
 {
+     ReadSTMemoryIso14443(parameter,0x0F);
+}
+void ReadSRIX4KIso14443(DWORD parameter)
+{
+     ReadSTMemoryIso14443(parameter,0x7F);
+}
+
+void ReadSTMemoryIso14443(DWORD parameter,DWORD dwLast)
+{
     BYTE i = 0x00;
 
     // Make sure that we start from off, since the tags are stateful;
@@ -961,8 +970,9 @@ void ReadSRI512Iso14443(DWORD parameter)
     DbpString("Tag memory dump, block 0 to 15");
     cmd1[0] = 0x08;
     i = 0x00;
+    dwLast++;
     for (;;) {
-	    if (i == 0x10) {
+           if (i == dwLast) {
 		    DbpString("System area block (0xff):");
 		    i = 0xff;
 	    }
diff --git a/include/usb_cmd.h b/include/usb_cmd.h
index 6932e45d..76b543f6 100644
--- a/include/usb_cmd.h
+++ b/include/usb_cmd.h
@@ -60,7 +60,8 @@ typedef struct {
 #define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443					0x0301
 #define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM			0x0302
 #define CMD_READ_SRI512_TAG														0x0303
-#define CMD_READER_ISO_15693													0x0310
+#define CMD_READ_SRIX4K_TAG							0x0304
+#define CMD_READER_ISO_15693													0x0310
 #define CMD_SIMTAG_ISO_15693													0x0311
 #define CMD_SIMULATE_TAG_HF_LISTEN										0x0380
 #define CMD_SIMULATE_TAG_ISO_14443										0x0381
diff --git a/linux/proxguiqt.cpp b/linux/proxguiqt.cpp
index 2be3f682..70c64fbd 100644
--- a/linux/proxguiqt.cpp
+++ b/linux/proxguiqt.cpp
@@ -8,6 +8,7 @@
 #include <QKeyEvent>
 #include <math.h>
 #include <limits.h>
+#include <stdio.h>
 #include "proxguiqt.h"
 #include "proxgui.h"
 
diff --git a/winsrc/command.cpp b/winsrc/command.cpp
index 5892a8e5..45683074 100644
--- a/winsrc/command.cpp
+++ b/winsrc/command.cpp
@@ -107,6 +107,20 @@ static void CmdSri512read(char *str)
 	c.ext1 = atoi(str);
 	SendCommand(&c, FALSE);
 }
+
+/* New command to read the contents of a SRIX4K tag
+ * SRIX4K tags are ISO14443-B modulated memory tags,
+ * this command just dumps the contents of the memory/
+ */
+static void CmdSrix4kread(char *str)
+{
+        UsbCommand c;
+        c.cmd = CMD_READ_SRIX4K_TAG;
+        c.ext1 = atoi(str);
+        SendCommand(&c, FALSE);
+}
+
+
 
 // ## New command
 static void CmdHi14areader(char *str)
@@ -2935,6 +2949,7 @@ static struct {
 	{"setlfdivisor",	CmdSetDivisor,			0, "<19 - 255> -- Drive LF antenna at 12Mhz/(divisor+1)"},
 	{"setmux",		CmdSetMux,			0, "<loraw|hiraw|lopkd|hipkd> -- Set the ADC mux to a specific value"},
 	{"sri512read",		CmdSri512read,			0, "<int> -- Read contents of a SRI512 tag"},
+	{"srix4kread",		CmdSrix4kread,			0, "<int> -- Read contents of a SRIX4K tag"},
 	{"tidemod",				CmdTIDemod,					1, "Demodulate raw bits for TI-type LF tag"},
 	{"tiread",				CmdTIRead,					0, "Read and decode a TI 134 kHz tag"},
 	{"tiwrite",				CmdTIWrite,					0, "Write new data to a r/w TI 134 kHz tag"},