From ab5ffe3befe484f0a1d2098af4c0299ba9eb7527 Mon Sep 17 00:00:00 2001
From: marshmellow42 <marshmellowrf@gmail.com>
Date: Thu, 26 Nov 2015 20:30:58 -0500
Subject: [PATCH 1/1] iceman's finished t55xx detect parameter adjustments

---
 client/cmdlft55xx.c | 55 ++++++++++++++++++++++++++++-----------------
 1 file changed, 35 insertions(+), 20 deletions(-)

diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c
index 0e8043a9..490850f8 100644
--- a/client/cmdlft55xx.c
+++ b/client/cmdlft55xx.c
@@ -125,13 +125,15 @@ int usage_t55xx_dump(){
 	return 0;
 }
 int usage_t55xx_detect(){
-	PrintAndLog("Usage:  lf t55xx detect [1]");
+	PrintAndLog("Usage:  lf t55xx detect [1] [p <password>]");
 	PrintAndLog("Options:");
-	PrintAndLog("     [graph buffer data]  - if set, use Graphbuffer otherwise read data from tag.");
+	PrintAndLog("     1             - if set, use Graphbuffer otherwise read data from tag.");
+	PrintAndLog("     p <password>  - OPTIONAL password (8 hex characters)");
 	PrintAndLog("");
 	PrintAndLog("Examples:");
 	PrintAndLog("      lf t55xx detect");
 	PrintAndLog("      lf t55xx detect 1");
+	PrintAndLog("      lf t55xx detect p 11223344");
 	PrintAndLog("");
 	return 0;
 }
@@ -393,28 +395,41 @@ bool DecodeT55xxBlock(){
 }
 
 int CmdT55xxDetect(const char *Cmd){
+	bool errors = FALSE;
+	bool useGB = FALSE;
+	bool usepwd = FALSE;
+	uint32_t password = 0;
+	uint8_t cmdp = 0;
 
-	uint32_t password = 0; //default to blank Block 7
-
-	char cmdp = param_getchar(Cmd, 0);
-	if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') return usage_t55xx_detect();
-
-	bool usepwd = ( strlen(Cmd) > 0);	
-	if ( usepwd ){
-		password = param_get32ex(Cmd, 0, 0, 16);
-		// if (param_getchar(Cmd, 1) =='o' )
-			// override = true;
+	while(param_getchar(Cmd, cmdp) != 0x00 && !errors) {
+		switch(param_getchar(Cmd, cmdp)) {
+		case 'h':
+		case 'H':
+			return usage_t55xx_detect();
+		case 'p':
+		case 'P':
+			password = param_get32ex(Cmd, cmdp+1, 0, 16);
+			usepwd = TRUE;
+			cmdp += 2;
+			break;
+		case '1':
+			// use Graphbuffer data
+			useGB = TRUE;
+			cmdp++;
+			break;
+		default:
+			PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+			errors = true;
+			break;
+		}
 	}
-
+	if (errors) return usage_t55xx_detect();
 	
-	if (strlen(Cmd)==1) {
-		password = param_get32ex(Cmd, 0, 0, 16);
-		//if (param_getchar(Cmd, 1) =='o' ) override = true;
+	if ( !useGB) {
+		if ( !AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password) )
+			return 0;
 	}
-
-	if ( !AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password) )
-		return 0;
-		
+	
 	if ( !tryDetectModulation() )
 		PrintAndLog("Could not detect modulation automatically. Try setting it manually with \'lf t55xx config\'");
 
-- 
2.39.5