From: marshmellow42 <marshmellowrf@gmail.com>
Date: Mon, 19 Dec 2016 14:45:23 +0000 (-0500)
Subject: fixed lf antenna left on bug && some iclass ...
X-Git-Tag: v3.0.0~75^2
X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/89696b8b24c0913fa7597f93a27da9bd2a57f3b5?ds=sidebyside;hp=--cc

fixed lf antenna left on bug && some iclass ...

output cleanup by @iceman1001
---

89696b8b24c0913fa7597f93a27da9bd2a57f3b5
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4b09e461..bb2952b9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
 ## [unreleased][unreleased]
 
 ### Added
+- Added hitag2 read UID only and added that to lf search (marshmellow)
 - Added lf pyramid commands (iceman)
 - Added lf presco commands - some bits not fully understood... (iceman)
 - Added experimental HitagS support (Oguzhan Cicek, Hendrik Schwartke, Ralf Spenneberg)
@@ -34,9 +35,10 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
 - Added 'hf snoop'. This command take digitalized signal from FPGA and put in BigBuffer. (pwpiwi + enio)
 - Added Topaz (NFC type 1) protocol support ('hf topaz reader', 'hf list topaz', 'hf 14a raw -T', 'hf topaz snoop'). (piwi)
 - Added option c to 'hf list' (mark CRC bytes) (piwi)
-- Added option `l` or `h` to `hw tune` to save time and unnecessary fpga writes if you are only interested in lf or hf.
 
 ### Changed
+- Fixed bug in lf sim and continuous demods not turning off antenna when finished
+- Fixed bug(s) in hf iclass write
 - Fixed bug in lf biphase sim - `lf simask b` (and any tagtype that relies on it - gproxii...) (marshmellow)
 - Fixed bug in lf viking clone/sim (iceman)
 - Fixed broken `data askedgedetect` (marshmellow)
diff --git a/armsrc/lfops.c b/armsrc/lfops.c
index 2079f263..d607b0fd 100644
--- a/armsrc/lfops.c
+++ b/armsrc/lfops.c
@@ -403,6 +403,7 @@ void SimulateTagLowFrequency(int period, int gap, int ledcontrol)
 		//wait until SSC_CLK goes HIGH
 		while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)) {
 			if(BUTTON_PRESS() || (usb_poll_validate_length() )) {
+				FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 				DbpString("Stopped");
 				return;
 			}
@@ -420,8 +421,9 @@ void SimulateTagLowFrequency(int period, int gap, int ledcontrol)
 			LED_D_OFF();
 		//wait until SSC_CLK goes LOW
 		while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK) {
-			if(BUTTON_PRESS()) {
+			if(BUTTON_PRESS() || (usb_poll_validate_length() )) {
 				DbpString("Stopped");
+				FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 				return;
 			}
 			WDT_HIT();
@@ -436,6 +438,7 @@ void SimulateTagLowFrequency(int period, int gap, int ledcontrol)
 				SpinDelayUs(gap);
 			}
 		}
+
 	}
 }
 
@@ -840,13 +843,15 @@ void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol)
 				if (ledcontrol)	LED_A_OFF();
 				*high = hi;
 				*low = lo;
-				return;
+				break;
 			}
 			// reset
 		}
 		hi2 = hi = lo = idx = 0;
 		WDT_HIT();
 	}
+
+	FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 	DbpString("Stopped");
 	if (ledcontrol) LED_A_OFF();
 }
@@ -931,12 +936,13 @@ void CmdAWIDdemodFSK(int findone, int *high, int *low, int ledcontrol)
 		}
 		if (findone){
 			if (ledcontrol)	LED_A_OFF();
-			return;
+			break;
 		}
 		// reset
 		idx = 0;
 		WDT_HIT();
 	}
+	FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 	DbpString("Stopped");
 	if (ledcontrol) LED_A_OFF();
 }
@@ -991,13 +997,14 @@ void CmdEM410xdemod(int findone, int *high, int *low, int ledcontrol)
 				if (ledcontrol) LED_A_OFF();
 				*high=lo>>32;
 				*low=lo & 0xFFFFFFFF;
-				return;
+				break;
 			}
 		}
 		WDT_HIT();
 		hi = lo = size = idx = 0;
 		clk = invert = errCnt = 0;
 	}
+	FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 	DbpString("Stopped");
 	if (ledcontrol) LED_A_OFF();
 }
@@ -1056,7 +1063,7 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
 			//LED_A_OFF();
 			*high=code;
 			*low=code2;
-			return;
+			break;
 		}
 		code=code2=0;
 		version=facilitycode=0;
@@ -1065,6 +1072,7 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
 
 		WDT_HIT();
 	}
+	FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 	DbpString("Stopped");
 	if (ledcontrol) LED_A_OFF();
 }
diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c
index 309880d2..cd4b4440 100644
--- a/client/cmdhficlass.c
+++ b/client/cmdhficlass.c
@@ -777,10 +777,10 @@ int CmdHFiClassReader_Dump(const char *Cmd) {
 	if (have_debit_key) memcpy(tag_data+(3*8),div_key,8);
 	if (have_credit_key) memcpy(tag_data+(4*8),c_div_key,8);
 	// print the dump
-	printf("CSN   |00| %02X %02X %02X %02X %02X %02X %02X %02X |\n",tag_data[0],tag_data[1],tag_data[2]
-		  ,tag_data[3],tag_data[4],tag_data[5],tag_data[6],tag_data[7]);
-	printIclassDumpContents(tag_data, 1, (gotBytes/8)-1, gotBytes-8);
-
+	printf("------+--+-------------------------+\n");
+	printf("CSN   |00| %s|\n",sprint_hex(tag_data, 8));
+	printIclassDumpContents(tag_data, 1, (gotBytes/8), gotBytes);
+	
 	if (filename[0] == 0){
 		snprintf(filename, FILE_PATH_SIZE,"iclass_tagdump-%02x%02x%02x%02x%02x%02x%02x%02x",
 		    tag_data[0],tag_data[1],tag_data[2],tag_data[3],
@@ -1255,7 +1255,6 @@ int CmdHFiClass_loclass(const char *Cmd) {
 }
 
 void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t endblock, size_t filesize) {
-	uint8_t blockdata[8];
 	uint8_t mem_config;
 	memcpy(&mem_config, iclass_dump + 13,1);
 	uint8_t maxmemcount;
@@ -1270,18 +1269,19 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
 		startblock = 6;
 	if ((endblock > maxmemcount) || (endblock == 0))
 		endblock = maxmemcount;
-	if (endblock > filemaxblock)
+
+	// remember endblock need to relate to zero-index arrays.
+	if (endblock > filemaxblock-1)
 		endblock = filemaxblock;
+	
 	int i = startblock;
-	int j;
-	while (i <= endblock){
-		printf("Block |%02X| ",i);
-		memcpy(blockdata,iclass_dump + (i * 8),8);
-		for (j = 0;j < 8;j++)
-			printf("%02X ",blockdata[j]);
-		printf("|\n");
+	printf("------+--+-------------------------+\n");
+	while (i <= endblock) {
+		uint8_t *blk = iclass_dump + (i * 8);
+		printf("Block |%02X| %s|\n", i, sprint_hex(blk, 8) );	
 		i++;
 	}
+	printf("------+--+-------------------------+\n");
 }
 
 int usage_hf_iclass_readtagfile() {
@@ -1327,7 +1327,8 @@ int CmdHFiClassReadTagFile(const char *Cmd) {
 	size_t bytes_read = fread(dump, 1, fsize, f);
 	fclose(f);
 	uint8_t *csn = dump;
-	printf("CSN   [00] | %02X %02X %02X %02X %02X %02X %02X %02X |\n",csn[0],csn[1],csn[2],csn[3],csn[4],csn[5],csn[6],csn[7]);
+	printf("------+--+-------------------------+\n");
+	printf("CSN   |00| %s|\n", sprint_hex(csn, 8) );
 	//    printIclassDumpInfo(dump);
 	printIclassDumpContents(dump,startblock,endblock,bytes_read);
 	free(dump);