use PrintAndLogEx() instead of PrintAndLog()

This commit is contained in:
Brian Pow 2018-02-21 15:31:24 +08:00
parent b8f106d7a7
commit 02694401e8

View file

@ -14,128 +14,128 @@ bool g_lf_threshold_set = false;
static int CmdHelp(const char *Cmd); static int CmdHelp(const char *Cmd);
int usage_lf_cmdread(void) { int usage_lf_cmdread(void) {
PrintAndLog("Usage: lf cmdread d <delay period> z <zero period> o <one period> c <cmdbytes>"); PrintAndLogEx(NORMAL, "Usage: lf cmdread d <delay period> z <zero period> o <one period> c <cmdbytes>");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog(" d <delay> delay OFF period, (0 for bitbang mode) (decimal)"); PrintAndLogEx(NORMAL, " d <delay> delay OFF period, (0 for bitbang mode) (decimal)");
PrintAndLog(" z <zero> time period ZERO, (decimal)"); PrintAndLogEx(NORMAL, " z <zero> time period ZERO, (decimal)");
PrintAndLog(" o <one> time period ONE, (decimal)"); PrintAndLogEx(NORMAL, " o <one> time period ONE, (decimal)");
PrintAndLog(" c <cmd> Command bytes (in ones and zeros)"); PrintAndLogEx(NORMAL, " c <cmd> Command bytes (in ones and zeros)");
PrintAndLog(""); PrintAndLogEx(NORMAL, "");
PrintAndLog(" ************* All periods in microseconds (ms)"); PrintAndLogEx(NORMAL, " ************* All periods in microseconds (ms)");
PrintAndLog(" ************* Use lf config to configure options."); PrintAndLogEx(NORMAL, " ************* Use lf config to configure options.");
PrintAndLog("Examples:"); PrintAndLogEx(NORMAL, "Examples:");
PrintAndLog(" lf cmdread d 80 z 100 o 200 c 11000"); PrintAndLogEx(NORMAL, " lf cmdread d 80 z 100 o 200 c 11000");
return 0; return 0;
} }
int usage_lf_read(void){ int usage_lf_read(void){
PrintAndLog("Usage: lf read [h] [s] [d numofsamples]"); PrintAndLogEx(NORMAL, "Usage: lf read [h] [s] [d numofsamples]");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog(" s silent run no printout"); PrintAndLogEx(NORMAL, " s silent run no printout");
PrintAndLog(" d #samples # samples to collect (optional)"); PrintAndLogEx(NORMAL, " d #samples # samples to collect (optional)");
PrintAndLog("Use 'lf config' to set parameters."); PrintAndLogEx(NORMAL, "Use 'lf config' to set parameters.");
PrintAndLog(""); PrintAndLogEx(NORMAL, "");
PrintAndLog("Examples:"); PrintAndLogEx(NORMAL, "Examples:");
PrintAndLog(" lf read s d 12000 - collects 12000samples silent"); PrintAndLogEx(NORMAL, " lf read s d 12000 - collects 12000samples silent");
PrintAndLog(" lf read s"); PrintAndLogEx(NORMAL, " lf read s");
return 0; return 0;
} }
int usage_lf_snoop(void) { int usage_lf_snoop(void) {
PrintAndLog("Snoop low frequence signal. Use 'lf config' to set parameters."); PrintAndLogEx(NORMAL, "Snoop low frequence signal. Use 'lf config' to set parameters.");
PrintAndLog("Usage: lf snoop [h]"); PrintAndLogEx(NORMAL, "Usage: lf snoop [h]");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog("This function takes no arguments. "); PrintAndLogEx(NORMAL, "This function takes no arguments. ");
PrintAndLog("Use 'lf config' to set parameters."); PrintAndLogEx(NORMAL, "Use 'lf config' to set parameters.");
return 0; return 0;
} }
int usage_lf_config(void) { int usage_lf_config(void) {
PrintAndLog("Usage: lf config [h] [H|<divisor>] [b <bps>] [d <decim>] [a 0|1]"); PrintAndLogEx(NORMAL, "Usage: lf config [h] [H|<divisor>] [b <bps>] [d <decim>] [a 0|1]");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog(" L Low frequency (125 KHz)"); PrintAndLogEx(NORMAL, " L Low frequency (125 KHz)");
PrintAndLog(" H High frequency (134 KHz)"); PrintAndLogEx(NORMAL, " H High frequency (134 KHz)");
PrintAndLog(" q <divisor> Manually set divisor. 88-> 134KHz, 95-> 125 Hz"); PrintAndLogEx(NORMAL, " q <divisor> Manually set divisor. 88-> 134KHz, 95-> 125 Hz");
PrintAndLog(" b <bps> Sets resolution of bits per sample. Default (max): 8"); PrintAndLogEx(NORMAL, " b <bps> Sets resolution of bits per sample. Default (max): 8");
PrintAndLog(" d <decim> Sets decimation. A value of N saves only 1 in N samples. Default: 1"); PrintAndLogEx(NORMAL, " d <decim> Sets decimation. A value of N saves only 1 in N samples. Default: 1");
PrintAndLog(" a [0|1] Averaging - if set, will average the stored sample value when decimating. Default: 1"); PrintAndLogEx(NORMAL, " a [0|1] Averaging - if set, will average the stored sample value when decimating. Default: 1");
PrintAndLog(" t <threshold> Sets trigger threshold. 0 means no threshold (range: 0-128)"); PrintAndLogEx(NORMAL, " t <threshold> Sets trigger threshold. 0 means no threshold (range: 0-128)");
PrintAndLog("Examples:"); PrintAndLogEx(NORMAL, "Examples:");
PrintAndLog(" lf config b 8 L"); PrintAndLogEx(NORMAL, " lf config b 8 L");
PrintAndLog(" Samples at 125KHz, 8bps."); PrintAndLogEx(NORMAL, " Samples at 125KHz, 8bps.");
PrintAndLog(" lf config H b 4 d 3"); PrintAndLogEx(NORMAL, " lf config H b 4 d 3");
PrintAndLog(" Samples at 134KHz, averages three samples into one, stored with "); PrintAndLogEx(NORMAL, " Samples at 134KHz, averages three samples into one, stored with ");
PrintAndLog(" a resolution of 4 bits per sample."); PrintAndLogEx(NORMAL, " a resolution of 4 bits per sample.");
PrintAndLog(" lf read"); PrintAndLogEx(NORMAL, " lf read");
PrintAndLog(" Performs a read (active field)"); PrintAndLogEx(NORMAL, " Performs a read (active field)");
PrintAndLog(" lf snoop"); PrintAndLogEx(NORMAL, " lf snoop");
PrintAndLog(" Performs a snoop (no active field)"); PrintAndLogEx(NORMAL, " Performs a snoop (no active field)");
return 0; return 0;
} }
int usage_lf_simfsk(void) { int usage_lf_simfsk(void) {
PrintAndLog("Usage: lf simfsk [h] [c <clock>] [H <fcHigh>] [L <fcLow>] [d <hexdata>]"); PrintAndLogEx(NORMAL, "Usage: lf simfsk [h] [c <clock>] [H <fcHigh>] [L <fcLow>] [d <hexdata>]");
PrintAndLog("there are about four FSK modulations to know of."); PrintAndLogEx(NORMAL, "there are about four FSK modulations to know of.");
PrintAndLog("FSK1 - where fc/8 = high and fc/5 = low"); PrintAndLogEx(NORMAL, "FSK1 - where fc/8 = high and fc/5 = low");
PrintAndLog("FSK1a - is inverted FSK1, ie: fc/5 = high and fc/8 = low"); PrintAndLogEx(NORMAL, "FSK1a - is inverted FSK1, ie: fc/5 = high and fc/8 = low");
PrintAndLog("FSK2 - where fc/10 = high and fc/8 = low"); PrintAndLogEx(NORMAL, "FSK2 - where fc/10 = high and fc/8 = low");
PrintAndLog("FSK2a - is inverted FSK2, ie: fc/10 = high and fc/8 = low"); PrintAndLogEx(NORMAL, "FSK2a - is inverted FSK2, ie: fc/10 = high and fc/8 = low");
PrintAndLog(""); PrintAndLogEx(NORMAL, "");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer"); PrintAndLogEx(NORMAL, " c <clock> Manually set clock - can autodetect if using DemodBuffer");
PrintAndLog(" H <fcHigh> Manually set the larger Field Clock"); PrintAndLogEx(NORMAL, " H <fcHigh> Manually set the larger Field Clock");
PrintAndLog(" L <fcLow> Manually set the smaller Field Clock"); PrintAndLogEx(NORMAL, " L <fcLow> Manually set the smaller Field Clock");
//PrintAndLog(" s TBD- -STT to enable a gap between playback repetitions - default: no gap"); //PrintAndLogEx(NORMAL, " s TBD- -STT to enable a gap between playback repetitions - default: no gap");
PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer"); PrintAndLogEx(NORMAL, " d <hexdata> Data to sim as hex - omit to sim from DemodBuffer");
PrintAndLog("\n NOTE: if you set one clock manually set them all manually"); PrintAndLogEx(NORMAL, "\n NOTE: if you set one clock manually set them all manually");
PrintAndLog(""); PrintAndLogEx(NORMAL, "");
PrintAndLog("Examples:"); PrintAndLogEx(NORMAL, "Examples:");
PrintAndLog(" lf simfsk c 40 H 8 L 5 d 010203 - FSK1 rf/40 data 010203"); PrintAndLogEx(NORMAL, " lf simfsk c 40 H 8 L 5 d 010203 - FSK1 rf/40 data 010203");
PrintAndLog(" lf simfsk c 40 H 5 L 8 d 010203 - FSK1a rf/40 data 010203"); PrintAndLogEx(NORMAL, " lf simfsk c 40 H 5 L 8 d 010203 - FSK1a rf/40 data 010203");
PrintAndLog(" lf simfsk c 64 H 10 L 8 d 010203 - FSK2 rf/64 data 010203"); PrintAndLogEx(NORMAL, " lf simfsk c 64 H 10 L 8 d 010203 - FSK2 rf/64 data 010203");
PrintAndLog(" lf simfsk c 64 H 8 L 10 d 010203 - FSK2a rf/64 data 010203"); PrintAndLogEx(NORMAL, " lf simfsk c 64 H 8 L 10 d 010203 - FSK2a rf/64 data 010203");
PrintAndLog(""); PrintAndLogEx(NORMAL, "");
return 0; return 0;
} }
int usage_lf_simask(void) { int usage_lf_simask(void) {
PrintAndLog("Usage: lf simask [c <clock>] [i] [b|m|r] [s] [d <raw hex to sim>]"); PrintAndLogEx(NORMAL, "Usage: lf simask [c <clock>] [i] [b|m|r] [s] [d <raw hex to sim>]");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer"); PrintAndLogEx(NORMAL, " c <clock> Manually set clock - can autodetect if using DemodBuffer");
PrintAndLog(" i invert data"); PrintAndLogEx(NORMAL, " i invert data");
PrintAndLog(" b sim ask/biphase"); PrintAndLogEx(NORMAL, " b sim ask/biphase");
PrintAndLog(" m sim ask/manchester - Default"); PrintAndLogEx(NORMAL, " m sim ask/manchester - Default");
PrintAndLog(" r sim ask/raw"); PrintAndLogEx(NORMAL, " r sim ask/raw");
PrintAndLog(" s add t55xx Sequence Terminator gap - default: no gaps (only manchester)"); PrintAndLogEx(NORMAL, " s add t55xx Sequence Terminator gap - default: no gaps (only manchester)");
PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer"); PrintAndLogEx(NORMAL, " d <hexdata> Data to sim as hex - omit to sim from DemodBuffer");
return 0; return 0;
} }
int usage_lf_simpsk(void) { int usage_lf_simpsk(void) {
PrintAndLog("Usage: lf simpsk [1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>]"); PrintAndLogEx(NORMAL, "Usage: lf simpsk [1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>]");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog(" c <clock> Manually set clock - can autodetect if using DemodBuffer"); PrintAndLogEx(NORMAL, " c <clock> Manually set clock - can autodetect if using DemodBuffer");
PrintAndLog(" i invert data"); PrintAndLogEx(NORMAL, " i invert data");
PrintAndLog(" 1 set PSK1 (default)"); PrintAndLogEx(NORMAL, " 1 set PSK1 (default)");
PrintAndLog(" 2 set PSK2"); PrintAndLogEx(NORMAL, " 2 set PSK2");
PrintAndLog(" 3 set PSK3"); PrintAndLogEx(NORMAL, " 3 set PSK3");
PrintAndLog(" r <carrier> 2|4|8 are valid carriers: default = 2"); PrintAndLogEx(NORMAL, " r <carrier> 2|4|8 are valid carriers: default = 2");
PrintAndLog(" d <hexdata> Data to sim as hex - omit to sim from DemodBuffer"); PrintAndLogEx(NORMAL, " d <hexdata> Data to sim as hex - omit to sim from DemodBuffer");
return 0; return 0;
} }
int usage_lf_find(void){ int usage_lf_find(void){
PrintAndLog("Usage: lf search [h] <0|1> [u]"); PrintAndLogEx(NORMAL, "Usage: lf search [h] <0|1> [u]");
PrintAndLog(""); PrintAndLogEx(NORMAL, "");
PrintAndLog("Options:"); PrintAndLogEx(NORMAL, "Options:");
PrintAndLog(" h This help"); PrintAndLogEx(NORMAL, " h This help");
PrintAndLog(" <0|1> Use data from Graphbuffer, if not set, try reading data from tag."); PrintAndLogEx(NORMAL, " <0|1> Use data from Graphbuffer, if not set, try reading data from tag.");
PrintAndLog(" u Search for Unknown tags, if not set, reads only known tags."); PrintAndLogEx(NORMAL, " u Search for Unknown tags, if not set, reads only known tags.");
PrintAndLog("Examples:"); PrintAndLogEx(NORMAL, "Examples:");
PrintAndLog(" lf search = try reading data from tag & search for known tags"); PrintAndLogEx(NORMAL, " lf search = try reading data from tag & search for known tags");
PrintAndLog(" lf search 1 = use data from GraphBuffer & search for known tags"); PrintAndLogEx(NORMAL, " lf search 1 = use data from GraphBuffer & search for known tags");
PrintAndLog(" lf search u = try reading data from tag & search for known and unknown tags"); PrintAndLogEx(NORMAL, " lf search u = try reading data from tag & search for known and unknown tags");
PrintAndLog(" lf search 1 u = use data from GraphBuffer & search for known and unknown tags"); PrintAndLogEx(NORMAL, " lf search 1 u = use data from GraphBuffer & search for known and unknown tags");
return 0; return 0;
} }
@ -169,7 +169,7 @@ int CmdLFCommandRead(const char *Cmd) {
cmdp += 2; cmdp += 2;
break; break;
default: default:
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = true; errors = true;
break; break;
} }
@ -206,7 +206,7 @@ int CmdFlexdemod(const char *Cmd) {
} }
if (start == GraphTraceLen - LONG_WAIT) { if (start == GraphTraceLen - LONG_WAIT) {
PrintAndLog("nothing to wait for"); PrintAndLogEx(NORMAL, "nothing to wait for");
return 0; return 0;
} }
@ -221,7 +221,7 @@ int CmdFlexdemod(const char *Cmd) {
sum += GraphBuffer[i++]; sum += GraphBuffer[i++];
} }
bits[bit] = (sum > 0) ? 1 : 0; bits[bit] = (sum > 0) ? 1 : 0;
PrintAndLog("bit %d sum %d", bit, sum); PrintAndLogEx(NORMAL, "bit %d sum %d", bit, sum);
} }
for (bit = 0; bit < 64; bit++) { for (bit = 0; bit < 64; bit++) {
@ -229,9 +229,9 @@ int CmdFlexdemod(const char *Cmd) {
for (j = 0; j < 16; j++) for (j = 0; j < 16; j++)
sum += GraphBuffer[i++]; sum += GraphBuffer[i++];
if (sum > 0 && bits[bit] != 1) PrintAndLog("oops1 at %d", bit); if (sum > 0 && bits[bit] != 1) PrintAndLogEx(NORMAL, "oops1 at %d", bit);
if (sum < 0 && bits[bit] != 0) PrintAndLog("oops2 at %d", bit); if (sum < 0 && bits[bit] != 0) PrintAndLogEx(NORMAL, "oops2 at %d", bit);
} }
@ -298,7 +298,7 @@ int CmdLFSetConfig(const char *Cmd) {
cmdp+=2; cmdp+=2;
break; break;
default: default:
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = 1; errors = 1;
break; break;
} }
@ -330,7 +330,7 @@ bool lf_read(bool silent, uint32_t samples) {
WaitForResponse(CMD_ACK, &resp); WaitForResponse(CMD_ACK, &resp);
} else { } else {
if ( !WaitForResponseTimeout(CMD_ACK, &resp, 2500) ) { if ( !WaitForResponseTimeout(CMD_ACK, &resp, 2500) ) {
PrintAndLog("command execution time out"); PrintAndLogEx(WARNING, "command execution time out");
return false; return false;
} }
} }
@ -364,7 +364,7 @@ int CmdLFRead(const char *Cmd) {
cmdp +=2; cmdp +=2;
break; break;
default: default:
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = true; errors = true;
break; break;
} }
@ -410,7 +410,7 @@ int CmdLFSim(const char *Cmd) {
ChkBitstream(Cmd); ChkBitstream(Cmd);
if (g_debugMode) if (g_debugMode)
printf("DEBUG: Sending [%d bytes]\n", GraphTraceLen); PrintAndLogEx(DEBUG, "DEBUG: Sending [%d bytes]\n", GraphTraceLen);
//can send only 512 bits at a time (1 byte sent per bit...) //can send only 512 bits at a time (1 byte sent per bit...)
@ -423,10 +423,10 @@ int CmdLFSim(const char *Cmd) {
clearCommandBuffer(); clearCommandBuffer();
SendCommand(&c); SendCommand(&c);
WaitForResponse(CMD_ACK, NULL); WaitForResponse(CMD_ACK, NULL);
printf("."); PrintAndLogEx(NORMAL, ".");
} }
PrintAndLog("Simulating"); PrintAndLogEx(NORMAL, "Simulating");
UsbCommand c = {CMD_SIMULATE_TAG_125K, {GraphTraceLen, gap, 0}}; UsbCommand c = {CMD_SIMULATE_TAG_125K, {GraphTraceLen, gap, 0}};
clearCommandBuffer(); clearCommandBuffer();
@ -478,7 +478,7 @@ int CmdLFfskSim(const char *Cmd) {
cmdp+=2; cmdp+=2;
break; break;
default: default:
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = true; errors = true;
break; break;
} }
@ -514,7 +514,7 @@ int CmdLFfskSim(const char *Cmd) {
arg2 = separator << 8 | clk; arg2 = separator << 8 | clk;
size_t size = DemodBufferLen; size_t size = DemodBufferLen;
if (size > USB_CMD_DATA_SIZE) { if (size > USB_CMD_DATA_SIZE) {
PrintAndLog("DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE); PrintAndLogEx(NORMAL, "DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE);
size = USB_CMD_DATA_SIZE; size = USB_CMD_DATA_SIZE;
} }
UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}}; UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}};
@ -579,7 +579,7 @@ int CmdLFaskSim(const char *Cmd) {
cmdp += 2; cmdp += 2;
break; break;
default: default:
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = true; errors = true;
break; break;
} }
@ -603,11 +603,11 @@ int CmdLFaskSim(const char *Cmd) {
size_t size = DemodBufferLen; size_t size = DemodBufferLen;
if (size > USB_CMD_DATA_SIZE) { if (size > USB_CMD_DATA_SIZE) {
PrintAndLog("DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE); PrintAndLogEx(NORMAL, "DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE);
size = USB_CMD_DATA_SIZE; size = USB_CMD_DATA_SIZE;
} }
PrintAndLog("preparing to sim ask data: %d bits", size); PrintAndLogEx(NORMAL, "preparing to sim ask data: %d bits", size);
uint16_t arg1, arg2; uint16_t arg1, arg2;
arg1 = clk << 8 | encoding; arg1 = clk << 8 | encoding;
@ -674,7 +674,7 @@ int CmdLFpskSim(const char *Cmd) {
cmdp+=2; cmdp+=2;
break; break;
default: default:
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp));
errors = true; errors = true;
break; break;
} }
@ -687,13 +687,13 @@ int CmdLFpskSim(const char *Cmd) {
if (errors) return usage_lf_simpsk(); if (errors) return usage_lf_simpsk();
if (dataLen == 0){ //using DemodBuffer if (dataLen == 0){ //using DemodBuffer
PrintAndLog("Getting Clocks"); PrintAndLogEx(NORMAL, "Getting Clocks");
if (clk==0) clk = GetPskClock("", false); if (clk==0) clk = GetPskClock("", false);
PrintAndLog("clk: %d",clk); PrintAndLogEx(NORMAL, "clk: %d",clk);
if (!carrier) carrier = GetPskCarrier("", false); if (!carrier) carrier = GetPskCarrier("", false);
PrintAndLog("carrier: %d", carrier); PrintAndLogEx(NORMAL, "carrier: %d", carrier);
} else { } else {
setDemodBuf(data, dataLen, 0); setDemodBuf(data, dataLen, 0);
@ -709,7 +709,7 @@ int CmdLFpskSim(const char *Cmd) {
//need to convert psk2 to psk1 data before sim //need to convert psk2 to psk1 data before sim
psk2TOpsk1(DemodBuffer, DemodBufferLen); psk2TOpsk1(DemodBuffer, DemodBufferLen);
} else { } else {
PrintAndLog("Sorry, PSK3 not yet available"); PrintAndLogEx(NORMAL, "Sorry, PSK3 not yet available");
} }
} }
uint16_t arg1, arg2; uint16_t arg1, arg2;
@ -717,11 +717,11 @@ int CmdLFpskSim(const char *Cmd) {
arg2 = invert; arg2 = invert;
size_t size = DemodBufferLen; size_t size = DemodBufferLen;
if (size > USB_CMD_DATA_SIZE) { if (size > USB_CMD_DATA_SIZE) {
PrintAndLog("DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE); PrintAndLogEx(NORMAL, "DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE);
size = USB_CMD_DATA_SIZE; size = USB_CMD_DATA_SIZE;
} }
UsbCommand c = {CMD_PSK_SIM_TAG, {arg1, arg2, size}}; UsbCommand c = {CMD_PSK_SIM_TAG, {arg1, arg2, size}};
PrintAndLog("DEBUG: Sending DemodBuffer Length: %d", size); PrintAndLogEx(DEBUG, "DEBUG: Sending DemodBuffer Length: %d", size);
memcpy(c.d.asBytes, DemodBuffer, size); memcpy(c.d.asBytes, DemodBuffer, size);
clearCommandBuffer(); clearCommandBuffer();
SendCommand(&c); SendCommand(&c);
@ -731,7 +731,7 @@ int CmdLFpskSim(const char *Cmd) {
int CmdLFSimBidir(const char *Cmd) { int CmdLFSimBidir(const char *Cmd) {
// Set ADC to twice the carrier for a slight supersampling // Set ADC to twice the carrier for a slight supersampling
// HACK: not implemented in ARMSRC. // HACK: not implemented in ARMSRC.
PrintAndLog("Not implemented yet."); PrintAndLogEx(INFO, "Not implemented yet.");
UsbCommand c = {CMD_LF_SIMULATE_BIDIR, {47, 384, 0}}; UsbCommand c = {CMD_LF_SIMULATE_BIDIR, {47, 384, 0}};
SendCommand(&c); SendCommand(&c);
return 0; return 0;
@ -769,7 +769,7 @@ int CmdVchDemod(const char *Cmd) {
bestPos = i; bestPos = i;
} }
} }
PrintAndLog("best sync at %d [metric %d]", bestPos, bestCorrel); PrintAndLogEx(NORMAL, "best sync at %d [metric %d]", bestPos, bestCorrel);
char bits[257]; char bits[257];
bits[256] = '\0'; bits[256] = '\0';
@ -791,9 +791,9 @@ int CmdVchDemod(const char *Cmd) {
worstPos = i; worstPos = i;
} }
} }
PrintAndLog("bits:"); PrintAndLogEx(NORMAL, "bits:");
PrintAndLog("%s", bits); PrintAndLogEx(NORMAL, "%s", bits);
PrintAndLog("worst metric: %d at pos %d", worst, worstPos); PrintAndLogEx(NORMAL, "worst metric: %d at pos %d", worst, worstPos);
// clone // clone
if (strcmp(Cmd, "clone")==0) { if (strcmp(Cmd, "clone")==0) {
@ -819,14 +819,14 @@ int CheckChipType(bool getDeviceData) {
//check for em4x05/em4x69 chips first //check for em4x05/em4x69 chips first
uint32_t word = 0; uint32_t word = 0;
if (EM4x05IsBlock0(&word)) { if (EM4x05IsBlock0(&word)) {
PrintAndLog("\nValid EM4x05/EM4x69 Chip Found\nTry lf em 4x05... commands\n"); PrintAndLogEx(NORMAL, "\nValid EM4x05/EM4x69 Chip Found\nTry lf em 4x05... commands\n");
save_restoreGB(GRAPH_RESTORE); save_restoreGB(GRAPH_RESTORE);
return 1; return 1;
} }
//check for t55xx chip... //check for t55xx chip...
if (tryDetectP1(true)) { if (tryDetectP1(true)) {
PrintAndLog("\nValid T55xx Chip Found\nTry `lf t55xx` commands\n"); PrintAndLogEx(NORMAL, "\nValid T55xx Chip Found\nTry `lf t55xx` commands\n");
save_restoreGB(GRAPH_RESTORE); save_restoreGB(GRAPH_RESTORE);
return 1; return 1;
} }
@ -852,13 +852,13 @@ int CmdLFfind(const char *Cmd) {
lf_read(true, 30000); lf_read(true, 30000);
if (GraphTraceLen < minLength) { if (GraphTraceLen < minLength) {
PrintAndLog("Data in Graphbuffer was too small."); PrintAndLogEx(NORMAL, "Data in Graphbuffer was too small.");
return 0; return 0;
} }
PrintAndLog("NOTE: some demods output possible binary\n if it finds something that looks like a tag"); PrintAndLogEx(NORMAL, "NOTE: some demods output possible binary\n if it finds something that looks like a tag");
PrintAndLog("False Positives ARE possible\n"); PrintAndLogEx(NORMAL, "False Positives ARE possible\n");
PrintAndLog("\nChecking for known tags:\n"); PrintAndLogEx(NORMAL, "\nChecking for known tags:\n");
// only run these tests if device is online // only run these tests if device is online
if (isOnline) { if (isOnline) {
@ -867,66 +867,66 @@ int CmdLFfind(const char *Cmd) {
signal_t *sp = getSignalProperties(); signal_t *sp = getSignalProperties();
if (sp->isnoise) { if (sp->isnoise) {
PrintAndLog("Signal looks just like noise. Looking for Hitag signal now."); PrintAndLogEx(NORMAL, "Signal looks just like noise. Looking for Hitag signal now.");
if (CmdLFHitagReader("26") == 0) { PrintAndLog("\nValid Hitag Found!"); return 1;} if (CmdLFHitagReader("26") == 0) { PrintAndLogEx(NORMAL, "\nValid Hitag Found!"); return 1;}
if (CmdCOTAGRead("") > 0) { PrintAndLog("\nValid COTAG ID Found!"); return 1;} if (CmdCOTAGRead("") > 0) { PrintAndLogEx(NORMAL, "\nValid COTAG ID Found!"); return 1;}
return 0; return 0;
} }
} }
if (EM4x50Read("", false)) { PrintAndLog("\nValid EM4x50 ID Found!"); return 1;} if (EM4x50Read("", false)) { PrintAndLogEx(NORMAL, "\nValid EM4x50 ID Found!"); return 1;}
if (CmdAWIDDemod("")) { PrintAndLog("\nValid AWID ID Found!"); goto out;} if (CmdAWIDDemod("")) { PrintAndLogEx(NORMAL, "\nValid AWID ID Found!"); goto out;}
if (CmdEM410xDemod("")) { PrintAndLog("\nValid EM410x ID Found!"); goto out;} if (CmdEM410xDemod("")) { PrintAndLogEx(NORMAL, "\nValid EM410x ID Found!"); goto out;}
if (CmdFdxDemod("")) { PrintAndLog("\nValid FDX-B ID Found!"); goto out;} if (CmdFdxDemod("")) { PrintAndLogEx(NORMAL, "\nValid FDX-B ID Found!"); goto out;}
if (CmdGuardDemod("")) { PrintAndLog("\nValid Guardall G-Prox II ID Found!"); goto out; } if (CmdGuardDemod("")) { PrintAndLogEx(NORMAL, "\nValid Guardall G-Prox II ID Found!"); goto out; }
if (CmdHIDDemod("")) { PrintAndLog("\nValid HID Prox ID Found!"); goto out;} if (CmdHIDDemod("")) { PrintAndLogEx(NORMAL, "\nValid HID Prox ID Found!"); goto out;}
if (CmdPSKIdteck("")) { PrintAndLog("\nValid Idteck ID Found!"); goto out;} if (CmdPSKIdteck("")) { PrintAndLogEx(NORMAL, "\nValid Idteck ID Found!"); goto out;}
if (CmdIndalaDemod("")) { PrintAndLog("\nValid Indala ID Found!"); goto out;} if (CmdIndalaDemod("")) { PrintAndLogEx(NORMAL, "\nValid Indala ID Found!"); goto out;}
if (CmdIOProxDemod("")) { PrintAndLog("\nValid IO Prox ID Found!"); goto out;} if (CmdIOProxDemod("")) { PrintAndLogEx(NORMAL, "\nValid IO Prox ID Found!"); goto out;}
if (CmdJablotronDemod("")) { PrintAndLog("\nValid Jablotron ID Found!"); goto out;} if (CmdJablotronDemod("")) { PrintAndLogEx(NORMAL, "\nValid Jablotron ID Found!"); goto out;}
if (CmdLFNedapDemod("")) { PrintAndLog("\nValid NEDAP ID Found!"); goto out;} if (CmdLFNedapDemod("")) { PrintAndLogEx(NORMAL, "\nValid NEDAP ID Found!"); goto out;}
if (CmdNexWatchDemod("")) { PrintAndLog("\nValid NexWatch ID Found!"); goto out;} if (CmdNexWatchDemod("")) { PrintAndLogEx(NORMAL, "\nValid NexWatch ID Found!"); goto out;}
if (CmdNoralsyDemod("")) { PrintAndLog("\nValid Noralsy ID Found!"); goto out;} if (CmdNoralsyDemod("")) { PrintAndLogEx(NORMAL, "\nValid Noralsy ID Found!"); goto out;}
if (CmdPacDemod("")) { PrintAndLog("\nValid PAC/Stanley ID Found!"); goto out;} if (CmdPacDemod("")) { PrintAndLogEx(NORMAL, "\nValid PAC/Stanley ID Found!"); goto out;}
if (CmdParadoxDemod("")) { PrintAndLog("\nValid Paradox ID Found!"); goto out;} if (CmdParadoxDemod("")) { PrintAndLogEx(NORMAL, "\nValid Paradox ID Found!"); goto out;}
if (CmdPrescoDemod("")) { PrintAndLog("\nValid Presco ID Found!"); goto out;} if (CmdPrescoDemod("")) { PrintAndLogEx(NORMAL, "\nValid Presco ID Found!"); goto out;}
if (CmdPyramidDemod("")) { PrintAndLog("\nValid Pyramid ID Found!"); goto out;} if (CmdPyramidDemod("")) { PrintAndLogEx(NORMAL, "\nValid Pyramid ID Found!"); goto out;}
if (CmdSecurakeyDemod("")) { PrintAndLog("\nValid Securakey ID Found!"); goto out;} if (CmdSecurakeyDemod("")) { PrintAndLogEx(NORMAL, "\nValid Securakey ID Found!"); goto out;}
if (CmdVikingDemod("")) { PrintAndLog("\nValid Viking ID Found!"); goto out;} if (CmdVikingDemod("")) { PrintAndLogEx(NORMAL, "\nValid Viking ID Found!"); goto out;}
if (CmdVisa2kDemod("")) { PrintAndLog("\nValid Visa2000 ID Found!"); goto out;} if (CmdVisa2kDemod("")) { PrintAndLogEx(NORMAL, "\nValid Visa2000 ID Found!"); goto out;}
//if (CmdFermaxDemod("")) { PrintAndLog("\nValid Fermax ID Found!"); goto out;} //if (CmdFermaxDemod("")) { PrintAndLogEx(NORMAL, "\nValid Fermax ID Found!"); goto out;}
// TIdemod? flexdemod? // TIdemod? flexdemod?
PrintAndLog("\nNo Known Tags Found!\n"); PrintAndLogEx(NORMAL, "\nNo Known Tags Found!\n");
if (testRaw=='u' || testRaw=='U'){ if (testRaw=='u' || testRaw=='U'){
//test unknown tag formats (raw mode) //test unknown tag formats (raw mode)
PrintAndLog("\nChecking for Unknown tags:\n"); PrintAndLogEx(NORMAL, "\nChecking for Unknown tags:\n");
ans = AutoCorrelate(GraphBuffer, GraphBuffer, GraphTraceLen, 4000, false, false); ans = AutoCorrelate(GraphBuffer, GraphBuffer, GraphTraceLen, 4000, false, false);
if (ans > 0) { if (ans > 0) {
PrintAndLog("Possible Auto Correlation of %d repeating samples",ans); PrintAndLogEx(NORMAL, "Possible Auto Correlation of %d repeating samples",ans);
if ( ans % 8 == 0) { if ( ans % 8 == 0) {
int bytes = (ans / 8); int bytes = (ans / 8);
PrintAndLog("Possible %d bytes", bytes); PrintAndLogEx(NORMAL, "Possible %d bytes", bytes);
int blocks = 0; int blocks = 0;
if ( bytes % 2 == 0) { if ( bytes % 2 == 0) {
blocks = (bytes / 2); blocks = (bytes / 2);
PrintAndLog("Possible 2 blocks, width %d", blocks); PrintAndLogEx(NORMAL, "Possible 2 blocks, width %d", blocks);
} }
if ( bytes % 4 == 0) { if ( bytes % 4 == 0) {
blocks = (bytes / 4); blocks = (bytes / 4);
PrintAndLog("Possible 4 blocks, width %d", blocks); PrintAndLogEx(NORMAL, "Possible 4 blocks, width %d", blocks);
} }
if ( bytes % 8 == 0) { if ( bytes % 8 == 0) {
blocks = (bytes / 8); blocks = (bytes / 8);
PrintAndLog("Possible 8 blocks, width %d", blocks); PrintAndLogEx(NORMAL, "Possible 8 blocks, width %d", blocks);
} }
if ( bytes % 16 == 0) { if ( bytes % 16 == 0) {
blocks = (bytes / 16); blocks = (bytes / 16);
PrintAndLog("Possible 16 blocks, width %d", blocks); PrintAndLogEx(NORMAL, "Possible 16 blocks, width %d", blocks);
} }
} }
} }
@ -934,25 +934,25 @@ int CmdLFfind(const char *Cmd) {
//fsk //fsk
if ( GetFskClock("", false) ) { if ( GetFskClock("", false) ) {
if ( FSKrawDemod("", true) ) { if ( FSKrawDemod("", true) ) {
PrintAndLog("\nUnknown FSK Modulated Tag Found!"); goto out; PrintAndLogEx(NORMAL, "\nUnknown FSK Modulated Tag Found!"); goto out;
} }
} }
bool st = true; bool st = true;
if ( ASKDemod_ext("0 0 0",true,false,1,&st) ) { if ( ASKDemod_ext("0 0 0",true,false,1,&st) ) {
PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!"); PrintAndLogEx(NORMAL, "\nUnknown ASK Modulated and Manchester encoded Tag Found!");
PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'"); PrintAndLogEx(NORMAL, "\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'");
goto out; goto out;
} }
if ( CmdPSK1rawDemod("") ) { if ( CmdPSK1rawDemod("") ) {
PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'"); PrintAndLogEx(NORMAL, "Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'");
PrintAndLog("\nCould also be PSK3 - [currently not supported]"); PrintAndLogEx(NORMAL, "\nCould also be PSK3 - [currently not supported]");
PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod"); PrintAndLogEx(NORMAL, "\nCould also be NRZ - try 'data nrzrawdemod");
goto out; goto out;
} }
PrintAndLog("\nNo Data Found!\n"); PrintAndLogEx(NORMAL, "\nNo Data Found!\n");
} }
out: out:
// identify chipset // identify chipset