X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/b828a4e16818697605d57f2600cbb815c5ce5e7e..bd09006a8c21bea8d185018aff73c0214d15dcc7:/client/cmdlf.c

diff --git a/client/cmdlf.c b/client/cmdlf.c
index eb2f7cde..f2a9bb38 100644
--- a/client/cmdlf.c
+++ b/client/cmdlf.c
@@ -497,24 +497,24 @@ int CmdLFSetConfig(const char *Cmd) {
 			cmdp++;
 			break;
 		case 'q':
-			errors |= param_getdec(Cmd,cmdp+1,&divisor);
+			errors |= param_getdec(Cmd, cmdp+1, &divisor);
 			cmdp+=2;
 			break;
 		case 't':
-			errors |= param_getdec(Cmd,cmdp+1,&unsigned_trigg);
+			errors |= param_getdec(Cmd, cmdp+1, &unsigned_trigg);
 			cmdp+=2;
 			if(!errors) trigger_threshold = unsigned_trigg;
 			break;
 		case 'b':
-			errors |= param_getdec(Cmd,cmdp+1,&bps);
+			errors |= param_getdec(Cmd, cmdp+1, &bps);
 			cmdp+=2;
 			break;
 		case 'd':
-			errors |= param_getdec(Cmd,cmdp+1,&decimation);
+			errors |= param_getdec(Cmd, cmdp+1, &decimation);
 			cmdp+=2;
 			break;
 		case 'a':
-			averaging = param_getchar(Cmd,cmdp+1) == '1';
+			averaging = param_getchar(Cmd, cmdp+1) == '1';
 			cmdp+=2;
 			break;
 		default:
@@ -531,14 +531,13 @@ int CmdLFSetConfig(const char *Cmd) {
 	//Validations
 	if (errors) return usage_lf_config();
 	
-	//Bps is limited to 8, so fits in lower half of arg1
+	//Bps is limited to 8
 	if (bps >> 4) bps = 8;
 
 	sample_config config = { decimation, bps, averaging, divisor, trigger_threshold };
 
-	//Averaging is a flag on high-bit of arg[1]
-	UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG};
-	memcpy(c.d.asBytes,&config,sizeof(sample_config));
+	UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG, {0,0,0} };
+	memcpy(c.d.asBytes, &config, sizeof(sample_config));
 	clearCommandBuffer();
 	SendCommand(&c);
 	return 0;
@@ -556,7 +555,7 @@ int CmdLFRead(const char *Cmd) {
 	UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}};
 	clearCommandBuffer();
 	SendCommand(&c);
-	if ( !WaitForResponseTimeout(CMD_ACK,NULL,2500) ) {
+	if ( !WaitForResponseTimeout(CMD_ACK, NULL ,2500) ) {
 		PrintAndLog("command execution time out");
 		return 1;
 	}
@@ -1005,28 +1004,46 @@ int CmdVchDemod(const char *Cmd) {
 //by marshmellow
 int CmdLFfind(const char *Cmd) {
 	int ans = 0;
+	size_t minLength = 1000;
 	char cmdp = param_getchar(Cmd, 0);
 	char testRaw = param_getchar(Cmd, 1);
 	if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find();
 
 	if (!offline && (cmdp != '1')){
 		CmdLFRead("s");
-		getSamples("30000", TRUE);
-	} else if (GraphTraceLen < 1000) {
+		getSamples("30000", false);
+	} else if (GraphTraceLen < minLength) {
 		PrintAndLog("Data in Graphbuffer was too small.");
 		return 0;
 	}
 	if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
 
-	// if ( justNoise(GraphBuffer, GraphTraceLen) ) {
-		// PrintAndLog("Signal looks just like noise. Quitting.");
-		// return 0;
-	// }
-	
 	PrintAndLog("NOTE: some demods output possible binary\n  if it finds something that looks like a tag");
 	PrintAndLog("False Positives ARE possible\n");  
 	PrintAndLog("\nChecking for known tags:\n");
 
+	size_t testLen = minLength;
+	
+	// only run these tests if device is online
+	if (!offline && (cmdp != '1')){
+
+		// only run if graphbuffer is just noise as it should be for hitag/cotag
+		if (graphJustNoise(GraphBuffer, testLen)) {
+			
+			ans=CmdLFHitagReader("26");
+			if (ans==0)
+				return 1;
+
+			ans=CmdCOTAGRead("");
+			if (ans>0){
+				PrintAndLog("\nValid COTAG ID Found!");
+				return 1;
+			}
+			PrintAndLog("Signal looks just like noise. Quitting.");
+		    return 0;
+		}
+	}
+
 	ans=CmdFSKdemodIO("");
 	if (ans>0) {
 		PrintAndLog("\nValid IO Prox ID Found!");
@@ -1117,15 +1134,8 @@ int CmdLFfind(const char *Cmd) {
 		PrintAndLog("\nValid Presco ID Found!");
 		return 1;
 	}
-	// TIdemod?
-	
-	if (!offline && (cmdp != '1')){
-		ans=CmdLFHitagReader("26");
-		if (ans==0) {
-			return 1;
-		}
-	}
 
+	// TIdemod?
 	PrintAndLog("\nNo Known Tags Found!\n");
 	if (testRaw=='u' || testRaw=='U'){
 		//test unknown tag formats (raw mode)