From 740a1daaa4ebe937f8366384b379fdff40155504 Mon Sep 17 00:00:00 2001
From: Brian Pow <brianpow@gmail.com>
Date: Wed, 21 Feb 2018 16:07:09 +0800
Subject: [PATCH] use PrintAndLogEx() instead of PrintAndLog()

---
 client/cmdlfem4x.c | 520 ++++++++++++++++++++++-----------------------
 1 file changed, 260 insertions(+), 260 deletions(-)

diff --git a/client/cmdlfem4x.c b/client/cmdlfem4x.c
index 7d47fdff1..b4af9be7b 100644
--- a/client/cmdlfem4x.c
+++ b/client/cmdlfem4x.c
@@ -16,178 +16,178 @@ static int CmdHelp(const char *Cmd);
 
 //////////////// 410x commands
 int usage_lf_em410x_demod(void){
-	PrintAndLog("Usage:  lf em 410x_demod [h] [clock] <0|1> [maxError]");
-	PrintAndLog("Options:");
-	PrintAndLog("     h                   - this help");
-	PrintAndLog("     clock               -  set clock as integer, optional, if not set, autodetect.");
-	PrintAndLog("     <0|1>               - 0 normal output, 1 for invert output");
-	PrintAndLog("     maxerror            - set maximum allowed errors, default = 100.");
-	PrintAndLog("");
-	PrintAndLog("Examples:");
-	PrintAndLog("           lf em 410x_demod        = demod an EM410x Tag ID from GraphBuffer");
-	PrintAndLog("           lf em 410x_demod 32     = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32");
-	PrintAndLog("           lf em 410x_demod 32 1   = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32 and inverting data");
-	PrintAndLog("           lf em 410x_demod 1      = demod an EM410x Tag ID from GraphBuffer while inverting data");
-	PrintAndLog("           lf em 410x_demod 64 1 0 = demod an EM410x Tag ID from GraphBuffer using a clock of RF/64 and inverting data and allowing 0 demod errors");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 410x_demod [h] [clock] <0|1> [maxError]");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "     h                   - this help");
+	PrintAndLogEx(NORMAL, "     clock               -  set clock as integer, optional, if not set, autodetect.");
+	PrintAndLogEx(NORMAL, "     <0|1>               - 0 normal output, 1 for invert output");
+	PrintAndLogEx(NORMAL, "     maxerror            - set maximum allowed errors, default = 100.");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "           lf em 410x_demod        = demod an EM410x Tag ID from GraphBuffer");
+	PrintAndLogEx(NORMAL, "           lf em 410x_demod 32     = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32");
+	PrintAndLogEx(NORMAL, "           lf em 410x_demod 32 1   = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32 and inverting data");
+	PrintAndLogEx(NORMAL, "           lf em 410x_demod 1      = demod an EM410x Tag ID from GraphBuffer while inverting data");
+	PrintAndLogEx(NORMAL, "           lf em 410x_demod 64 1 0 = demod an EM410x Tag ID from GraphBuffer using a clock of RF/64 and inverting data and allowing 0 demod errors");
 	return 0;
 }
 int usage_lf_em410x_write(void) {
-	PrintAndLog("Writes EM410x ID to a T55x7 / T5555 (Q5) tag");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 410x_write [h] <id> <card> [clock]");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       <id>      - ID number");
-	PrintAndLog("       <card>    - 0|1 T5555 (Q5) / T55x7");
-	PrintAndLog("       <clock>   - 16|32|40|64, optional, set R/F clock rate, defaults to 64");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 410x_write 0F0368568B");
+	PrintAndLogEx(NORMAL, "Writes EM410x ID to a T55x7 / T5555 (Q5) tag");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 410x_write [h] <id> <card> [clock]");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       <id>      - ID number");
+	PrintAndLogEx(NORMAL, "       <card>    - 0|1 T5555 (Q5) / T55x7");
+	PrintAndLogEx(NORMAL, "       <clock>   - 16|32|40|64, optional, set R/F clock rate, defaults to 64");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 410x_write 0F0368568B");
 	return 0;
 }
 int usage_lf_em410x_ws(void) {
-	PrintAndLog("Watch 'nd Spoof, activates reader, waits until a EM410x tag gets presented then it starts simulating the found UID");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 410x_spoof [h]");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 410x_spoof");
+	PrintAndLogEx(NORMAL, "Watch 'nd Spoof, activates reader, waits until a EM410x tag gets presented then it starts simulating the found UID");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 410x_spoof [h]");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 410x_spoof");
 	return 0;
 }
 int usage_lf_em410x_clone(void) {
-	PrintAndLog("Simulating EM410x tag");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 410x_clone [h] <uid> <clock>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       uid       - uid (10 HEX symbols)");
-	PrintAndLog("       clock     - clock (32|64) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 410x_clone 0F0368568B");
-	PrintAndLog("      lf em 410x_clone 0F0368568B 32");
+	PrintAndLogEx(NORMAL, "Simulating EM410x tag");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 410x_clone [h] <uid> <clock>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       uid       - uid (10 HEX symbols)");
+	PrintAndLogEx(NORMAL, "       clock     - clock (32|64) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 410x_clone 0F0368568B");
+	PrintAndLogEx(NORMAL, "      lf em 410x_clone 0F0368568B 32");
 	return 0;
 }
 int usage_lf_em410x_sim(void) {
-	PrintAndLog("Simulating EM410x tag");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 410x_sim [h] <uid> <clock>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       uid       - uid (10 HEX symbols)");
-	PrintAndLog("       clock     - clock (32|64) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 410x_sim 0F0368568B");
-	PrintAndLog("      lf em 410x_sim 0F0368568B 32");
+	PrintAndLogEx(NORMAL, "Simulating EM410x tag");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 410x_sim [h] <uid> <clock>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       uid       - uid (10 HEX symbols)");
+	PrintAndLogEx(NORMAL, "       clock     - clock (32|64) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 410x_sim 0F0368568B");
+	PrintAndLogEx(NORMAL, "      lf em 410x_sim 0F0368568B 32");
 	return 0;
 }
 int usage_lf_em410x_brute(void) {
-	PrintAndLog("Bruteforcing by emulating EM410x tag");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 410x_brute [h] ids.txt [d 2000] [c clock]");
-	PrintAndLog("Options:");
-	PrintAndLog("       h             - this help");
-	PrintAndLog("       ids.txt       - file with UIDs in HEX format, one per line");
-	PrintAndLog("       d (2000)      - pause delay in milliseconds between UIDs simulation, default 1000 ms (optional)");
-	PrintAndLog("       c (32)        - clock (32|64), default 64 (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 410x_brute ids.txt");
-	PrintAndLog("      lf em 410x_brute ids.txt c 32");
-	PrintAndLog("      lf em 410x_brute ids.txt d 3000");
-	PrintAndLog("      lf em 410x_brute ids.txt d 3000 c 32");
+	PrintAndLogEx(NORMAL, "Bruteforcing by emulating EM410x tag");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 410x_brute [h] ids.txt [d 2000] [c clock]");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h             - this help");
+	PrintAndLogEx(NORMAL, "       ids.txt       - file with UIDs in HEX format, one per line");
+	PrintAndLogEx(NORMAL, "       d (2000)      - pause delay in milliseconds between UIDs simulation, default 1000 ms (optional)");
+	PrintAndLogEx(NORMAL, "       c (32)        - clock (32|64), default 64 (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 410x_brute ids.txt");
+	PrintAndLogEx(NORMAL, "      lf em 410x_brute ids.txt c 32");
+	PrintAndLogEx(NORMAL, "      lf em 410x_brute ids.txt d 3000");
+	PrintAndLogEx(NORMAL, "      lf em 410x_brute ids.txt d 3000 c 32");
 	return 0;
 }
 
 //////////////// 4050 / 4450 commands
 int usage_lf_em4x50_dump(void) {
-	PrintAndLog("Dump EM4x50/EM4x69.  Tag must be on antenna. ");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 4x50_dump [h] <pwd>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       pwd       - password (hex) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 4x50_dump");
-	PrintAndLog("      lf em 4x50_dump 11223344");
+	PrintAndLogEx(NORMAL, "Dump EM4x50/EM4x69.  Tag must be on antenna. ");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 4x50_dump [h] <pwd>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       pwd       - password (hex) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 4x50_dump");
+	PrintAndLogEx(NORMAL, "      lf em 4x50_dump 11223344");
 	return 0;
 }
 int usage_lf_em4x50_read(void) {
-	PrintAndLog("Read EM 4x50/EM4x69.  Tag must be on antenna. ");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 4x50_read [h] <address> <pwd>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       address   - memory address to read. (0-15)");
-	PrintAndLog("       pwd       - password (hex) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 4x50_read 1");
-	PrintAndLog("      lf em 4x50_read 1 11223344");
+	PrintAndLogEx(NORMAL, "Read EM 4x50/EM4x69.  Tag must be on antenna. ");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 4x50_read [h] <address> <pwd>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       address   - memory address to read. (0-15)");
+	PrintAndLogEx(NORMAL, "       pwd       - password (hex) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 4x50_read 1");
+	PrintAndLogEx(NORMAL, "      lf em 4x50_read 1 11223344");
 	return 0;
 }
 int usage_lf_em4x50_write(void) {
-	PrintAndLog("Write EM 4x50/4x69.  Tag must be on antenna. ");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 4x50_write [h] <address> <data> <pwd>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       address   - memory address to write to. (0-15)");
-	PrintAndLog("       data      - data to write (hex)");	
-	PrintAndLog("       pwd       - password (hex) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 4x50_write 1 deadc0de");
-	PrintAndLog("      lf em 4x50_write 1 deadc0de 11223344");
+	PrintAndLogEx(NORMAL, "Write EM 4x50/4x69.  Tag must be on antenna. ");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 4x50_write [h] <address> <data> <pwd>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       address   - memory address to write to. (0-15)");
+	PrintAndLogEx(NORMAL, "       data      - data to write (hex)");	
+	PrintAndLogEx(NORMAL, "       pwd       - password (hex) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 4x50_write 1 deadc0de");
+	PrintAndLogEx(NORMAL, "      lf em 4x50_write 1 deadc0de 11223344");
 	return 0;
 }
 
 //////////////// 4205 / 4305 commands
 int usage_lf_em4x05_dump(void) {
-	PrintAndLog("Dump EM4x05/EM4x69.  Tag must be on antenna. ");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 4x05_dump [h] <pwd>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       pwd       - password (hex) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 4x05_dump");
-	PrintAndLog("      lf em 4x05_dump 11223344");
+	PrintAndLogEx(NORMAL, "Dump EM4x05/EM4x69.  Tag must be on antenna. ");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 4x05_dump [h] <pwd>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       pwd       - password (hex) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_dump");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_dump 11223344");
 	return 0;
 }
 int usage_lf_em4x05_read(void) {
-	PrintAndLog("Read EM4x05/EM4x69.  Tag must be on antenna. ");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 4x05_read [h] <address> <pwd>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       address   - memory address to read. (0-15)");
-	PrintAndLog("       pwd       - password (hex) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 4x05_read 1");
-	PrintAndLog("      lf em 4x05_read 1 11223344");
+	PrintAndLogEx(NORMAL, "Read EM4x05/EM4x69.  Tag must be on antenna. ");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 4x05_read [h] <address> <pwd>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       address   - memory address to read. (0-15)");
+	PrintAndLogEx(NORMAL, "       pwd       - password (hex) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_read 1");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_read 1 11223344");
 	return 0;
 }
 int usage_lf_em4x05_write(void) {
-	PrintAndLog("Write EM4x05/4x69.  Tag must be on antenna. ");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 4x05_write [h] <address> <data> <pwd>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       address   - memory address to write to. (0-15)");
-	PrintAndLog("       data      - data to write (hex)");	
-	PrintAndLog("       pwd       - password (hex) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 4x05_write 1 deadc0de");
-	PrintAndLog("      lf em 4x05_write 1 deadc0de 11223344");
+	PrintAndLogEx(NORMAL, "Write EM4x05/4x69.  Tag must be on antenna. ");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 4x05_write [h] <address> <data> <pwd>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       address   - memory address to write to. (0-15)");
+	PrintAndLogEx(NORMAL, "       data      - data to write (hex)");	
+	PrintAndLogEx(NORMAL, "       pwd       - password (hex) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_write 1 deadc0de");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_write 1 deadc0de 11223344");
 	return 0;
 }
 int usage_lf_em4x05_info(void) {
-	PrintAndLog("Tag information EM4205/4305/4469//4569 tags.  Tag must be on antenna.");
-	PrintAndLog("");
-	PrintAndLog("Usage:  lf em 4x05_info [h] <pwd>");
-	PrintAndLog("Options:");
-	PrintAndLog("       h         - this help");
-	PrintAndLog("       pwd       - password (hex) (optional)");
-	PrintAndLog("Examples:");
-	PrintAndLog("      lf em 4x05_info");
-	PrintAndLog("      lf em 4x05_info deadc0de");
+	PrintAndLogEx(NORMAL, "Tag information EM4205/4305/4469//4569 tags.  Tag must be on antenna.");
+	PrintAndLogEx(NORMAL, "");
+	PrintAndLogEx(NORMAL, "Usage:  lf em 4x05_info [h] <pwd>");
+	PrintAndLogEx(NORMAL, "Options:");
+	PrintAndLogEx(NORMAL, "       h         - this help");
+	PrintAndLogEx(NORMAL, "       pwd       - password (hex) (optional)");
+	PrintAndLogEx(NORMAL, "Examples:");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_info");
+	PrintAndLogEx(NORMAL, "      lf em 4x05_info deadc0de");
 	return 0;
 }
 
@@ -252,7 +252,7 @@ void printEM410x(uint32_t hi, uint64_t id) {
 
 	if (!id && !hi) return;
 	
-	PrintAndLog("EM410x %s pattern found", (hi) ? "XL" : "" );
+	PrintAndLogEx(NORMAL, "EM410x %s pattern found", (hi) ? "XL" : "" );
 
 	uint64_t iii=1;
 	uint64_t id2lo=0;
@@ -266,22 +266,22 @@ void printEM410x(uint32_t hi, uint64_t id) {
 	
 	if (hi){
 		//output 88 bit em id
-		PrintAndLog("\nEM TAG ID      : %06X%016" PRIX64, hi, id);
+		PrintAndLogEx(NORMAL, "\nEM TAG ID      : %06X%016" PRIX64, hi, id);
 	} else {
 		//output 40 bit em id
-		PrintAndLog("\nEM TAG ID      : %010" PRIX64, id);
-		PrintAndLog("\nPossible de-scramble patterns");
-		PrintAndLog("Unique TAG ID  : %010" PRIX64, id2lo);
-		PrintAndLog("HoneyWell IdentKey {");
-		PrintAndLog("DEZ 8          : %08" PRIu64, id & 0xFFFFFF);
-		PrintAndLog("DEZ 10         : %010" PRIu64, id & 0xFFFFFFFF);
-		PrintAndLog("DEZ 5.5        : %05" PRIu64 ".%05" PRIu64, (id>>16LL) & 0xFFFF, (id & 0xFFFF));
-		PrintAndLog("DEZ 3.5A       : %03" PRIu64 ".%05" PRIu64, (id>>32ll), (id & 0xFFFF));
-		PrintAndLog("DEZ 3.5B       : %03" PRIu64 ".%05" PRIu64, (id & 0xFF000000) >> 24, (id & 0xFFFF));
-		PrintAndLog("DEZ 3.5C       : %03" PRIu64 ".%05" PRIu64, (id & 0xFF0000) >> 16, (id & 0xFFFF));
-		PrintAndLog("DEZ 14/IK2     : %014" PRIu64, id);
-		PrintAndLog("DEZ 15/IK3     : %015" PRIu64, id2lo);
-		PrintAndLog("DEZ 20/ZK      : %02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64,
+		PrintAndLogEx(NORMAL, "\nEM TAG ID      : %010" PRIX64, id);
+		PrintAndLogEx(NORMAL, "\nPossible de-scramble patterns");
+		PrintAndLogEx(NORMAL, "Unique TAG ID  : %010" PRIX64, id2lo);
+		PrintAndLogEx(NORMAL, "HoneyWell IdentKey {");
+		PrintAndLogEx(NORMAL, "DEZ 8          : %08" PRIu64, id & 0xFFFFFF);
+		PrintAndLogEx(NORMAL, "DEZ 10         : %010" PRIu64, id & 0xFFFFFFFF);
+		PrintAndLogEx(NORMAL, "DEZ 5.5        : %05" PRIu64 ".%05" PRIu64, (id>>16LL) & 0xFFFF, (id & 0xFFFF));
+		PrintAndLogEx(NORMAL, "DEZ 3.5A       : %03" PRIu64 ".%05" PRIu64, (id>>32ll), (id & 0xFFFF));
+		PrintAndLogEx(NORMAL, "DEZ 3.5B       : %03" PRIu64 ".%05" PRIu64, (id & 0xFF000000) >> 24, (id & 0xFFFF));
+		PrintAndLogEx(NORMAL, "DEZ 3.5C       : %03" PRIu64 ".%05" PRIu64, (id & 0xFF0000) >> 16, (id & 0xFFFF));
+		PrintAndLogEx(NORMAL, "DEZ 14/IK2     : %014" PRIu64, id);
+		PrintAndLogEx(NORMAL, "DEZ 15/IK3     : %015" PRIu64, id2lo);
+		PrintAndLogEx(NORMAL, "DEZ 20/ZK      : %02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64 "%02" PRIu64,
 			(id2lo & 0xf000000000) >> 36,
 			(id2lo & 0x0f00000000) >> 32,
 			(id2lo & 0x00f0000000) >> 28,
@@ -294,8 +294,8 @@ void printEM410x(uint32_t hi, uint64_t id) {
 			(id2lo & 0x000000000f)
 		);
 		uint64_t paxton = (((id>>32) << 24) | (id & 0xffffff))  + 0x143e00;
-		PrintAndLog("}\nOther          : %05" PRIu64 "_%03" PRIu64 "_%08" PRIu64, (id&0xFFFF), ((id>>16LL) & 0xFF), (id & 0xFFFFFF));  
-		PrintAndLog("Pattern Paxton : %" PRIu64 " [0x%" PRIX64 "]", paxton, paxton);
+		PrintAndLogEx(NORMAL, "}\nOther          : %05" PRIu64 "_%03" PRIu64 "_%08" PRIu64, (id&0xFFFF), ((id>>16LL) & 0xFF), (id & 0xFFFFFF));  
+		PrintAndLogEx(NORMAL, "Pattern Paxton : %" PRIu64 " [0x%" PRIX64 "]", paxton, paxton);
 
 		uint32_t p1id = (id & 0xFFFFFF);
 		uint8_t arr[32] = {0x00};
@@ -336,12 +336,12 @@ void printEM410x(uint32_t hi, uint64_t id) {
 		p1 |= arr[2]  << 4;
 		p1 |= arr[1]  << 5;
 		p1 |= arr[0]  << 9;
-		PrintAndLog("Pattern 1      : %d [0x%X]", p1, p1);
+		PrintAndLogEx(NORMAL, "Pattern 1      : %d [0x%X]", p1, p1);
 
 		uint16_t sebury1 = id & 0xFFFF;
 		uint8_t  sebury2 = (id >> 16) & 0x7F;
 		uint32_t sebury3 = id & 0x7FFFFF;
-		PrintAndLog("Pattern Sebury : %d %d %d  [0x%X 0x%X 0x%X]", sebury1, sebury2, sebury3, sebury1, sebury2, sebury3);
+		PrintAndLogEx(NORMAL, "Pattern Sebury : %d %d %d  [0x%X 0x%X 0x%X]", sebury1, sebury2, sebury3, sebury1, sebury2, sebury3);
 	}
 }
 /* Read the ID of an EM410x tag.
@@ -357,7 +357,7 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo ) {
 	uint8_t bits[512] = {0};
 	size_t size = sizeof(bits);	
 	if ( !getDemodBuf(bits, &size) ) {
-		PrintAndLog("DEBUG: Error - Em410x problem during copy from ASK demod");
+		PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x problem during copy from ASK demod");
 		return 0;
 	}
 	
@@ -365,20 +365,20 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo ) {
 	if ( ans < 0){
 		if (g_debugMode){
 			if (ans == -1)
-				PrintAndLog("DEBUG: Error - Em410x not only 0|1 in decoded bitstream");
+				PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x not only 0|1 in decoded bitstream");
 			else if (ans == -2)
-				PrintAndLog("DEBUG: Error - Em410x not enough samples after demod");
+				PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x not enough samples after demod");
 			else if (ans == -4)
-				PrintAndLog("DEBUG: Error - Em410x preamble not found");
+				PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x preamble not found");
 			else if (ans == -5)
-				PrintAndLog("DEBUG: Error - Em410x Size not correct: %d", size);
+				PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x Size not correct: %d", size);
 			else if (ans == -6)
-				PrintAndLog("DEBUG: Error - Em410x parity failed");
+				PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x parity failed");
 		}
 		return 0;
 	}
 	if (!lo && !hi) {
-		PrintAndLog("DEBUG: Error - Em410x decoded to all zeros");
+		PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x decoded to all zeros");
 		return 0;
 	}
 		
@@ -386,7 +386,7 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo ) {
 	setDemodBuf(DemodBuffer, (size==40) ? 64 : 128, idx+1);
 	setClockGrid(g_DemodClock, g_DemodStartIdx + ((idx+1)*g_DemodClock));
 	if (g_debugMode){
-		PrintAndLog("DEBUG: Em410x idx: %d, Len: %d, Printing Demod Buffer:", idx, size);
+		PrintAndLogEx(DEBUG, "DEBUG: Em410x idx: %d, Len: %d, Printing Demod Buffer:", idx, size);
 		printDemodBuff();
 	}
 
@@ -446,14 +446,14 @@ int CmdEM410xSim(const char *Cmd) {
 	uint8_t clock = 64;
 
 	if (param_gethex(Cmd, 0, uid, 10)) {
-		PrintAndLog("UID must include 10 HEX symbols");
+		PrintAndLogEx(NORMAL, "UID must include 10 HEX symbols");
 		return 0;
 	}
 	
 	param_getdec(Cmd, 1, &clock);
 	
-	PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X  clock: %d", uid[0],uid[1],uid[2],uid[3],uid[4],clock);
-	PrintAndLog("Press pm3-button to abort simulation");
+	PrintAndLogEx(NORMAL, "Starting simulating UID %02X%02X%02X%02X%02X  clock: %d", uid[0],uid[1],uid[2],uid[3],uid[4],clock);
+	PrintAndLogEx(NORMAL, "Press pm3-button to abort simulation");
 
 	ConstructEM410xEmulGraph(Cmd, clock);
  
@@ -488,12 +488,12 @@ int CmdEM410xBrute(const char *Cmd) {
 
 	int filelen = param_getstr(Cmd, 0, filename, FILE_PATH_SIZE);	
 	if (filelen == 0) {
-		PrintAndLog("Error: Please specify a filename");
+		PrintAndLogEx(WARNING, "Error: Please specify a filename");
 		return 1;		
 	}
 	
 	if ((f = fopen(filename, "r")) == NULL) {
-		PrintAndLog("Error: Could not open UIDs file [%s]", filename);
+		PrintAndLogEx(WARNING, "Error: Could not open UIDs file [%s]", filename);
 		return 1;
 	}
 
@@ -508,7 +508,7 @@ int CmdEM410xBrute(const char *Cmd) {
 		if( buf[0]=='#' ) continue;
 		
 		if (param_gethex(buf, 0, uid, 10)) {
-			PrintAndLog("UIDs must include 10 HEX symbols");
+			PrintAndLogEx(NORMAL, "UIDs must include 10 HEX symbols");
 			free(uidBlock);
 			fclose(f);
 			return 1;
@@ -519,7 +519,7 @@ int CmdEM410xBrute(const char *Cmd) {
 		if ( stUidBlock - uidcnt < 2) {
 				p = realloc(uidBlock, 5 * (stUidBlock += 10) );
 				if (!p) {
-					PrintAndLog("Cannot allocate memory for UIDs");
+					PrintAndLogEx(WARNING, "Cannot allocate memory for UIDs");
 					free(uidBlock);
 					fclose(f);
 					return 1;
@@ -535,11 +535,11 @@ int CmdEM410xBrute(const char *Cmd) {
 	fclose(f);
 	
 	if (uidcnt == 0) {
-		PrintAndLog("No UIDs found in file");
+		PrintAndLogEx(NORMAL, "No UIDs found in file");
 		free(uidBlock);
 		return 1;
 	}
-	PrintAndLog("Loaded %d UIDs from %s, pause delay: %d ms", uidcnt, filename, delay);
+	PrintAndLogEx(NORMAL, "Loaded %d UIDs from %s, pause delay: %d ms", uidcnt, filename, delay);
 	
 	// loop
 	for(uint32_t c = 0; c < uidcnt; ++c ) {
@@ -548,13 +548,13 @@ int CmdEM410xBrute(const char *Cmd) {
 		
 		if (ukbhit()) {
 			int gc = getchar(); (void)gc;
-			printf("\nAborted via keyboard!\n");
+			PrintAndLogEx(NORMAL, "\nAborted via keyboard!\n");
 			free(uidBlock);
 			return 0;
 		}
 				
 		sprintf(testuid, "%010" PRIX64, bytes_to_num(uidBlock + 5*c, 5));
-		PrintAndLog("Bruteforce %d / %d: simulating UID  %s, clock %d", c + 1, uidcnt, testuid, clock);
+		PrintAndLogEx(NORMAL, "Bruteforce %d / %d: simulating UID  %s, clock %d", c + 1, uidcnt, testuid, clock);
 		
 		ConstructEM410xEmulGraph(testuid, clock);
 		
@@ -582,7 +582,7 @@ int CmdEM410xWatch(const char *Cmd) {
 	do {
 		if (ukbhit()) {
 			int gc = getchar(); (void)gc;
-			printf("\naborted via keyboard!\n");
+			PrintAndLogEx(NORMAL, "\naborted via keyboard!\n");
 			break;
 		}		
 		lf_read(true, 8201);
@@ -599,7 +599,7 @@ int CmdEM410xWatchnSpoof(const char *Cmd) {
 	
 	// loops if the captured ID was in XL-format.
 	CmdEM410xWatch(Cmd);
-	PrintAndLog("# Replaying captured ID: %010" PRIx64 , g_em410xid);
+	PrintAndLogEx(NORMAL, "# Replaying captured ID: %010" PRIx64 , g_em410xid);
 	CmdLFaskSim("");
 	return 0;
 }
@@ -616,21 +616,21 @@ int CmdEM410xWrite(const char *Cmd) {
 
 	// Check ID
 	if (id == 0xFFFFFFFFFFFFFFFF) {
-		PrintAndLog("Error! ID is required.\n");
+		PrintAndLogEx(WARNING, "Error! ID is required.\n");
 		return 0;
 	}
 	if (id >= 0x10000000000) {
-		PrintAndLog("Error! Given EM410x ID is longer than 40 bits.\n");
+		PrintAndLogEx(WARNING, "Error! Given EM410x ID is longer than 40 bits.\n");
 		return 0;
 	}
 
 	// Check Card
 	if (card == 0xFF) {
-		PrintAndLog("Error! Card type required.\n");
+		PrintAndLogEx(WARNING, "Error! Card type required.\n");
 		return 0;
 	}
 	if (card < 0) {
-		PrintAndLog("Error! Bad card type selected.\n");
+		PrintAndLogEx(WARNING, "Error! Bad card type selected.\n");
 		return 0;
 	}
 
@@ -640,22 +640,22 @@ int CmdEM410xWrite(const char *Cmd) {
 
 	// Allowed clock rates: 16, 32, 40 and 64
 	if ((clock != 16) && (clock != 32) && (clock != 64) && (clock != 40)) {
-		PrintAndLog("Error! Clock rate %d not valid. Supported clock rates are 16, 32, 40 and 64.\n", clock);
+		PrintAndLogEx(WARNING, "Error! Clock rate %d not valid. Supported clock rates are 16, 32, 40 and 64.\n", clock);
 		return 0;
 	}
 
 	if (card == 1) {
-		PrintAndLog("Writing %s tag with UID 0x%010" PRIx64 " (clock rate: %d)", "T55x7", id, clock);
+		PrintAndLogEx(NORMAL, "Writing %s tag with UID 0x%010" PRIx64 " (clock rate: %d)", "T55x7", id, clock);
 		// NOTE: We really should pass the clock in as a separate argument, but to
 		//   provide for backwards-compatibility for older firmware, and to avoid
 		//   having to add another argument to CMD_EM410X_WRITE_TAG, we just store
 		//   the clock rate in bits 8-15 of the card value
 		card = (card & 0xFF) | ((clock << 8) & 0xFF00);
 	}	else if (card == 0) {
-		PrintAndLog("Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock);
+		PrintAndLogEx(NORMAL, "Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock);
 		card = (card & 0xFF) | ((clock << 8) & 0xFF00);
 	} else {
-		PrintAndLog("Error! Bad card type selected.\n");
+		PrintAndLogEx(WARNING, "Error! Bad card type selected.\n");
 		return 0;
 	}
 
@@ -740,8 +740,8 @@ uint32_t OutputEM4x50_Block(uint8_t *BitStream, size_t size, bool verbose, bool
 	
 	if (verbose || g_debugMode){
 		for (uint8_t i = 0; i<5; i++){
-			if (i == 4) PrintAndLog(""); //parity byte spacer
-			PrintAndLog("%d%d%d%d%d%d%d%d %d -> 0x%02x",
+			if (i == 4) PrintAndLogEx(NORMAL, ""); //parity byte spacer
+			PrintAndLogEx(NORMAL, "%d%d%d%d%d%d%d%d %d -> 0x%02x",
 			    BitStream[i*9],
 			    BitStream[i*9+1],
 			    BitStream[i*9+2],
@@ -755,9 +755,9 @@ uint32_t OutputEM4x50_Block(uint8_t *BitStream, size_t size, bool verbose, bool
 			);
 		}
 		if (pTest)
-			PrintAndLog("Parity Passed");
+			PrintAndLogEx(NORMAL, "Parity Passed");
 		else
-			PrintAndLog("Parity Failed");
+			PrintAndLogEx(NORMAL, "Parity Failed");
 	}
 	return code;
 }
@@ -846,7 +846,7 @@ int EM4x50Read(const char *Cmd, bool verbose) {
 			}
 		}
 		if (!clk) {
-			if (verbose || g_debugMode) PrintAndLog("ERROR: EM4x50 - didn't find a clock");
+			if (verbose || g_debugMode) PrintAndLogEx(WARNING, "Error: EM4x50 - didn't find a clock");
 			return 0;
 		}
 	} else tol = clk/8;
@@ -889,11 +889,11 @@ int EM4x50Read(const char *Cmd, bool verbose) {
 	// report back
 	if (verbose || g_debugMode) {
 		if (start >= 0) {
-			PrintAndLog("\nNote: one block = 50 bits (32 data, 12 parity, 6 marker)");
+			PrintAndLogEx(NORMAL, "\nNote: one block = 50 bits (32 data, 12 parity, 6 marker)");
 		}	else {
-			PrintAndLog("No data found!, clock tried:%d",clk);
-			PrintAndLog("Try again with more samples.");
-			PrintAndLog("  or after a 'data askedge' command to clean up the read");
+			PrintAndLogEx(NORMAL, "No data found!, clock tried:%d",clk);
+			PrintAndLogEx(NORMAL, "Try again with more samples.");
+			PrintAndLogEx(NORMAL, "  or after a 'data askedge' command to clean up the read");
 			return 0;
 		}
 	} else if (start < 0) return 0;
@@ -910,7 +910,7 @@ int EM4x50Read(const char *Cmd, bool verbose) {
 	block = 0;
 	i = startblock;
 	while (block < 6) {
-		if (verbose || g_debugMode) PrintAndLog("\nBlock %i:", block);
+		if (verbose || g_debugMode) PrintAndLogEx(NORMAL, "\nBlock %i:", block);
 		skip = phaseoff;
 		
 		// look for LW before start of next block
@@ -939,7 +939,7 @@ int EM4x50Read(const char *Cmd, bool verbose) {
 		AllPTest &= pTest;
 		//get output
 		Code[block] = OutputEM4x50_Block(DemodBuffer,DemodBufferLen,verbose, pTest);
-		if (g_debugMode) PrintAndLog("\nskipping %d samples, bits:%d", skip, skip/clk);
+		if (g_debugMode) PrintAndLogEx(NORMAL, "\nskipping %d samples, bits:%d", skip, skip/clk);
 		//skip to start of next block
 		snprintf(tmp,sizeof(tmp),"%i",skip);
 		CmdLtrim(tmp);
@@ -949,20 +949,20 @@ int EM4x50Read(const char *Cmd, bool verbose) {
 	//print full code:
 	if (verbose || g_debugMode || AllPTest){
 		if (!complete) {
-			PrintAndLog("*** Warning!");
-			PrintAndLog("Partial data - no end found!");
-			PrintAndLog("Try again with more samples.");
+			PrintAndLogEx(NORMAL, "*** Warning!");
+			PrintAndLogEx(NORMAL, "Partial data - no end found!");
+			PrintAndLogEx(NORMAL, "Try again with more samples.");
 		}
-		PrintAndLog("Found data at sample: %i - using clock: %i", start, clk);    
+		PrintAndLogEx(NORMAL, "Found data at sample: %i - using clock: %i", start, clk);    
 		end = block;
 		for (block=0; block < end; block++){
-			PrintAndLog("Block %d: %08x",block,Code[block]);
+			PrintAndLogEx(NORMAL, "Block %d: %08x",block,Code[block]);
 		}
 		if (AllPTest) {
-			PrintAndLog("Parities Passed");
+			PrintAndLogEx(NORMAL, "Parities Passed");
 		} else {
-			PrintAndLog("Parities Failed");
-			PrintAndLog("Try cleaning the read samples with 'data askedge'");
+			PrintAndLogEx(NORMAL, "Parities Failed");
+			PrintAndLogEx(NORMAL, "Try cleaning the read samples with 'data askedge'");
 		}
 	}
 
@@ -979,13 +979,13 @@ int CmdEM4x50Read(const char *Cmd) {
 int CmdEM4x50Write(const char *Cmd){
 	uint8_t ctmp = param_getchar(Cmd, 0);
 	if ( ctmp == 'H' || ctmp == 'h' ) return usage_lf_em4x50_write();
-	PrintAndLog("no implemented yet");
+	PrintAndLogEx(NORMAL, "no implemented yet");
 	return 0;
 }
 int CmdEM4x50Dump(const char *Cmd){
 	uint8_t ctmp = param_getchar(Cmd, 0);
 	if ( ctmp == 'H' || ctmp == 'h' ) return usage_lf_em4x50_dump();
-	PrintAndLog("no implemented yet");
+	PrintAndLogEx(NORMAL, "no implemented yet");
 	return 0;
 }
 
@@ -997,7 +997,7 @@ bool downloadSamplesEM(){
 	uint8_t got[6000];
 	GetFromBigBuf(got, sizeof(got), 0);
 	if ( !WaitForResponseTimeout(CMD_ACK, NULL, 2500) ) {
-		PrintAndLog("command execution time out");
+		PrintAndLogEx(WARNING, "command execution time out");
 		return false;
 	}
 	setGraphBuf(got, sizeof(got));
@@ -1009,7 +1009,7 @@ bool doPreambleSearch(size_t *startIdx){
 	
 	// sanity check
 	if ( DemodBufferLen < EM_PREAMBLE_LEN) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM4305 demodbuffer too small");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM4305 demodbuffer too small");
 		return false;
 	}
 
@@ -1020,7 +1020,7 @@ bool doPreambleSearch(size_t *startIdx){
 	uint8_t preamble[EM_PREAMBLE_LEN] = {0,0,1,0,1,0};
 	
 	if ( !preambleSearchEx(DemodBuffer, preamble, EM_PREAMBLE_LEN, &size, startIdx, true)) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM4305 preamble not found :: %d", *startIdx);
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM4305 preamble not found :: %d", *startIdx);
 		return false;
 	} 
 	return true;
@@ -1029,13 +1029,13 @@ bool doPreambleSearch(size_t *startIdx){
 bool detectFSK(){
 	// detect fsk clock
 	if (!GetFskClock("", false)) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM: FSK clock failed");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: FSK clock failed");
 		return false;
 	}
 	// demod
 	int ans = FSKrawDemod("0 0", false);
 	if (!ans) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM: FSK Demod failed");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: FSK Demod failed");
 		return false;
 	}
 	return true;
@@ -1044,19 +1044,19 @@ bool detectFSK(){
 bool detectPSK(){	
 	int	ans = GetPskClock("", false);
 	if (ans <= 0) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM: PSK clock failed");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: PSK clock failed");
 		return false;
 	}
 	//demod
 	//try psk1 -- 0 0 6 (six errors?!?)
 	ans = PSKDemod("0 0 6", false);
 	if (!ans) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM: PSK1 Demod failed");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: PSK1 Demod failed");
 
 		//try psk1 inverted
 		ans = PSKDemod("0 1 6", false);
 		if (!ans) {
-			if (g_debugMode) PrintAndLog("DEBUG: Error - EM: PSK1 inverted Demod failed");
+			if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: PSK1 inverted Demod failed");
 			return false;
 		}
 	}
@@ -1068,7 +1068,7 @@ bool detectPSK(){
 bool detectASK_MAN(){
 	bool stcheck = false;
 	if ( !ASKDemod_ext("0 0 0", false, false, 1, &stcheck) ) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM: ASK/Manchester Demod failed");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: ASK/Manchester Demod failed");
 		return false;
 	} 
 	return true;
@@ -1076,11 +1076,11 @@ bool detectASK_MAN(){
 bool detectASK_BI(){
 	int ans = ASKbiphaseDemod("0 0 1", false);
 	if (!ans) { 
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM: ASK/biphase normal demod failed");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: ASK/biphase normal demod failed");
 		
 		ans = ASKbiphaseDemod("0 1 1", false);
 		if (!ans) {
-			if (g_debugMode) PrintAndLog("DEBUG: Error - EM: ASK/biphase inverted demod failed");
+			if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM: ASK/biphase inverted demod failed");
 			return false;
 		}
 	}
@@ -1094,13 +1094,13 @@ bool setDemodBufferEM(uint32_t *word, size_t idx){
 	uint8_t parity[45] = {0};
 	memcpy( parity, DemodBuffer, 45);
 	if (!EMwordparitytest(parity) ){
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM Parity tests failed");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM Parity tests failed");
 		return false;
 	}
 		   
     // test for even parity bits and remove them. (leave out the end row of parities so 36 bits)	
 	if (!removeParity(DemodBuffer, idx + EM_PREAMBLE_LEN, 9, 0, 36)) {
-		if (g_debugMode) PrintAndLog("DEBUG: Error - EM, failed removing parity");
+		if (g_debugMode) PrintAndLogEx(DEBUG, "DEBUG: Error - EM, failed removing parity");
 		return false;
 	}
 	setDemodBuf(DemodBuffer, 32, 0);
@@ -1141,7 +1141,7 @@ int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t *word)
 	SendCommand(&c);
 	UsbCommand resp;	
 	if (!WaitForResponseTimeout(CMD_ACK, &resp, 2500)){
-		PrintAndLog("Command timed out");
+		PrintAndLogEx(WARNING, "Command timed out");
 		return -1;
 	}
 	if ( !downloadSamplesEM() ) {
@@ -1150,7 +1150,7 @@ int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t *word)
 	int testLen = (GraphTraceLen < 1000) ? GraphTraceLen : 1000;
 	
 	if (justNoise_int(GraphBuffer, testLen)) {
-		PrintAndLog("no tag found");
+		PrintAndLogEx(WARNING, "No tag found");
 		return -1;
 	}
 	return demodEM4x05resp(word);
@@ -1171,15 +1171,15 @@ int CmdEM4x05Dump(const char *Cmd) {
 
 	int success = 1;
 	uint32_t word = 0;
-	PrintAndLog("Addr | data   | ascii");
-	PrintAndLog("-----+--------+------");
+	PrintAndLogEx(NORMAL, "Addr | data   | ascii");
+	PrintAndLogEx(NORMAL, "-----+--------+------");
 	for (; addr < 16; addr++) {
 		
 		if (addr == 2) {
 			if (usePwd) {
-				PrintAndLog(" %02u | %08X", addr, pwd, word );
+				PrintAndLogEx(NORMAL, " %02u | %08X", addr, pwd, word );
 			} else {
-				PrintAndLog(" 02 | cannot read");
+				PrintAndLogEx(NORMAL, " 02 | cannot read");
 			}
 		} else {
 			success &= EM4x05ReadWord_ext(addr, pwd, usePwd, &word);
@@ -1200,22 +1200,22 @@ int CmdEM4x05Read(const char *Cmd) {
 	pwd =  param_get32ex(Cmd, 1, 1, 16);
 	
 	if (addr > 15) {
-		PrintAndLog("Address must be between 0 and 15");
+		PrintAndLogEx(NORMAL, "Address must be between 0 and 15");
 		return 1;
 	}
 	if ( pwd == 1 ) {
-		PrintAndLog("Reading address %02u", addr);
+		PrintAndLogEx(NORMAL, "Reading address %02u", addr);
 	}	else {
 		usePwd = true;
-		PrintAndLog("Reading address %02u | password %08X", addr, pwd);
+		PrintAndLogEx(NORMAL, "Reading address %02u | password %08X", addr, pwd);
 	}
 	
 	uint32_t word = 0;
 	int isOk = EM4x05ReadWord_ext(addr, pwd, usePwd, &word);
 	if (isOk)
-		PrintAndLog("Address %02d | %08X - %s", addr, word, (addr > 13) ? "Lock" : "");
+		PrintAndLogEx(NORMAL, "Address %02d | %08X - %s", addr, word, (addr > 13) ? "Lock" : "");
 	else
-		PrintAndLog("Read Address %02d | failed",addr);
+		PrintAndLogEx(NORMAL, "Read Address %02d | failed",addr);
 	return isOk;
 }
 
@@ -1233,14 +1233,14 @@ int CmdEM4x05Write(const char *Cmd) {
 	pwd =  param_get32ex(Cmd, 2, 1, 16);
 	
 	if ( addr > 15 ) {
-		PrintAndLog("Address must be between 0 and 15");
+		PrintAndLogEx(NORMAL, "Address must be between 0 and 15");
 		return 1;
 	}
 	if ( pwd == 1 )
-		PrintAndLog("Writing address %d data %08X", addr, data);	
+		PrintAndLogEx(NORMAL, "Writing address %d data %08X", addr, data);	
 	else {
 		usePwd = true;
-		PrintAndLog("Writing address %d data %08X using password %08X", addr, data, pwd);		
+		PrintAndLogEx(NORMAL, "Writing address %d data %08X using password %08X", addr, data, pwd);		
 	}
 	
 	uint16_t flag = (addr << 8 ) | usePwd;
@@ -1250,7 +1250,7 @@ int CmdEM4x05Write(const char *Cmd) {
 	SendCommand(&c);
 	UsbCommand resp;	
 	if (!WaitForResponseTimeout(CMD_ACK, &resp, 2000)){
-		PrintAndLog("Error occurred, device did not respond during write operation.");
+		PrintAndLogEx(WARNING, "Error occurred, device did not respond during write operation.");
 		return -1;
 	}
 	
@@ -1261,9 +1261,9 @@ int CmdEM4x05Write(const char *Cmd) {
 	uint32_t dummy = 0;
 	int isOk = demodEM4x05resp(&dummy);
 	if (isOk)
-		PrintAndLog("Write Verified");
+		PrintAndLogEx(NORMAL, "Write Verified");
 	else
-		PrintAndLog("Write could not be verified");	
+		PrintAndLogEx(NORMAL, "Write could not be verified");	
 	return isOk;
 }
 
@@ -1316,21 +1316,21 @@ void printEM4x05config(uint32_t wordData) {
 	uint8_t disable = (wordData & EM4x05_DISABLE_ALLOWED)>>23;
 	uint8_t rtf = (wordData & EM4x05_READER_TALK_FIRST)>>24;
 	uint8_t pigeon = (wordData & (1<<26))>>26;
-	PrintAndLog("ConfigWord: %08X (Word 4)\n", wordData);
-	PrintAndLog("Config Breakdown:");
-	PrintAndLog(" Data Rate:  %02u | RF/%u", wordData & 0x3F, datarate);
-	PrintAndLog("   Encoder:   %u | %s", encoder, enc);
-	PrintAndLog("    PSK CF:   %u | %s", PSKcf, cf);
-	PrintAndLog("     Delay:   %u | %s", delay, cdelay);
-	PrintAndLog(" LastWordR:  %02u | Address of last word for default read - meaning %u blocks are output", LWR, numblks);
-	PrintAndLog(" ReadLogin:   %u | Read Login is %s", readLogin, readLogin ? "Required" : "Not Required");	
-	PrintAndLog("   ReadHKL:   %u | Read Housekeeping Words Login is %s", readHKL, readHKL ? "Required" : "Not Required");	
-	PrintAndLog("WriteLogin:   %u | Write Login is %s", writeLogin, writeLogin ? "Required" : "Not Required");	
-	PrintAndLog("  WriteHKL:   %u | Write Housekeeping Words Login is %s", writeHKL, writeHKL ? "Required" : "Not Required");	
-	PrintAndLog("    R.A.W.:   %u | Read After Write is %s", raw, raw ? "On" : "Off");
-	PrintAndLog("   Disable:   %u | Disable Command is %s", disable, disable ? "Accepted" : "Not Accepted");
-	PrintAndLog("    R.T.F.:   %u | Reader Talk First is %s", rtf, rtf ? "Enabled" : "Disabled");
-	PrintAndLog("    Pigeon:   %u | Pigeon Mode is %s\n", pigeon, pigeon ? "Enabled" : "Disabled");
+	PrintAndLogEx(NORMAL, "ConfigWord: %08X (Word 4)\n", wordData);
+	PrintAndLogEx(NORMAL, "Config Breakdown:");
+	PrintAndLogEx(NORMAL, " Data Rate:  %02u | RF/%u", wordData & 0x3F, datarate);
+	PrintAndLogEx(NORMAL, "   Encoder:   %u | %s", encoder, enc);
+	PrintAndLogEx(NORMAL, "    PSK CF:   %u | %s", PSKcf, cf);
+	PrintAndLogEx(NORMAL, "     Delay:   %u | %s", delay, cdelay);
+	PrintAndLogEx(NORMAL, " LastWordR:  %02u | Address of last word for default read - meaning %u blocks are output", LWR, numblks);
+	PrintAndLogEx(NORMAL, " ReadLogin:   %u | Read Login is %s", readLogin, readLogin ? "Required" : "Not Required");	
+	PrintAndLogEx(NORMAL, "   ReadHKL:   %u | Read Housekeeping Words Login is %s", readHKL, readHKL ? "Required" : "Not Required");	
+	PrintAndLogEx(NORMAL, "WriteLogin:   %u | Write Login is %s", writeLogin, writeLogin ? "Required" : "Not Required");	
+	PrintAndLogEx(NORMAL, "  WriteHKL:   %u | Write Housekeeping Words Login is %s", writeHKL, writeHKL ? "Required" : "Not Required");	
+	PrintAndLogEx(NORMAL, "    R.A.W.:   %u | Read After Write is %s", raw, raw ? "On" : "Off");
+	PrintAndLogEx(NORMAL, "   Disable:   %u | Disable Command is %s", disable, disable ? "Accepted" : "Not Accepted");
+	PrintAndLogEx(NORMAL, "    R.T.F.:   %u | Reader Talk First is %s", rtf, rtf ? "Enabled" : "Disabled");
+	PrintAndLogEx(NORMAL, "    Pigeon:   %u | Pigeon Mode is %s\n", pigeon, pigeon ? "Enabled" : "Disabled");
 }
 
 void printEM4x05info(uint32_t block0, uint32_t serial) {
@@ -1340,32 +1340,32 @@ void printEM4x05info(uint32_t block0, uint32_t serial) {
 	uint16_t custCode = (block0 >> 9) & 0x3FF;
 	
 	switch (chipType) {
-		case 9:  PrintAndLog("\n Chip Type:   %u | EM4305", chipType); break;
-		case 8:  PrintAndLog("\n Chip Type:   %u | EM4205", chipType); break;
-		case 4:  PrintAndLog(" Chip Type:   %u | Unknown", chipType); break;
-		case 2:  PrintAndLog(" Chip Type:   %u | EM4469", chipType); break;
+		case 9:  PrintAndLogEx(NORMAL, "\n Chip Type:   %u | EM4305", chipType); break;
+		case 8:  PrintAndLogEx(NORMAL, "\n Chip Type:   %u | EM4205", chipType); break;
+		case 4:  PrintAndLogEx(NORMAL, " Chip Type:   %u | Unknown", chipType); break;
+		case 2:  PrintAndLogEx(NORMAL, " Chip Type:   %u | EM4469", chipType); break;
 		//add more here when known
-		default: PrintAndLog(" Chip Type:   %u Unknown", chipType); break;
+		default: PrintAndLogEx(NORMAL, " Chip Type:   %u Unknown", chipType); break;
 	}
 
 	switch (cap) {
-		case 3:  PrintAndLog("  Cap Type:   %u | 330pF",cap); break;
-		case 2:  PrintAndLog("  Cap Type:   %u | %spF",cap, (chipType==2)? "75":"210"); break;
-		case 1:  PrintAndLog("  Cap Type:   %u | 250pF",cap); break;
-		case 0:  PrintAndLog("  Cap Type:   %u | no resonant capacitor",cap); break;
-		default: PrintAndLog("  Cap Type:   %u | unknown",cap); break;
+		case 3:  PrintAndLogEx(NORMAL, "  Cap Type:   %u | 330pF",cap); break;
+		case 2:  PrintAndLogEx(NORMAL, "  Cap Type:   %u | %spF",cap, (chipType==2)? "75":"210"); break;
+		case 1:  PrintAndLogEx(NORMAL, "  Cap Type:   %u | 250pF",cap); break;
+		case 0:  PrintAndLogEx(NORMAL, "  Cap Type:   %u | no resonant capacitor",cap); break;
+		default: PrintAndLogEx(NORMAL, "  Cap Type:   %u | unknown",cap); break;
 	}
 
-	PrintAndLog(" Cust Code: %03u | %s", custCode, (custCode == 0x200) ? "Default": "Unknown");
+	PrintAndLogEx(NORMAL, " Cust Code: %03u | %s", custCode, (custCode == 0x200) ? "Default": "Unknown");
 	if (serial != 0)
-		PrintAndLog("\n  Serial #: %08X\n", serial);
+		PrintAndLogEx(NORMAL, "\n  Serial #: %08X\n", serial);
 }
 
 void printEM4x05ProtectionBits(uint32_t word) {
 	for (uint8_t i = 0; i < 15; i++) {
-		PrintAndLog("      Word:  %02u | %s", i, (((1 << i) & word ) || i < 2) ? "Is Write Locked" : "Is Not Write Locked");
+		PrintAndLogEx(NORMAL, "      Word:  %02u | %s", i, (((1 << i) & word ) || i < 2) ? "Is Write Locked" : "Is Not Write Locked");
 		if (i==14) 
-			PrintAndLog("      Word:  %02u | %s", i+1, (((1 << i) & word ) || i < 2) ? "Is Write Locked" : "Is Not Write Locked");
+			PrintAndLogEx(NORMAL, "      Word:  %02u | %s", i+1, (((1 << i) & word ) || i < 2) ? "Is Write Locked" : "Is Not Write Locked");
 	}
 }