X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/d32691f1da1dd27190f0ece96b17080ae46f835d..e1778858ddc53a6a82e8ee24f02e6b673687f69a:/client/cmdlf.c diff --git a/client/cmdlf.c b/client/cmdlf.c index b3debf1c..414e4a2b 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -8,6 +8,9 @@ // Low frequency commands //----------------------------------------------------------------------------- #include "cmdlf.h" + +bool g_lf_threshold_set = FALSE; + static int CmdHelp(const char *Cmd); int usage_lf_cmdread(void) { @@ -27,11 +30,10 @@ int usage_lf_cmdread(void) { return 0; } int usage_lf_read(void){ - PrintAndLog("Usage: lf read [h] [s] [t]"); + PrintAndLog("Usage: lf read [h] [s]"); PrintAndLog("Options:"); PrintAndLog(" h This help"); PrintAndLog(" s silent run no printout"); - PrintAndLog(" t waits for device to respond with no timeout"); PrintAndLog("Use 'lf config' to set parameters."); return 0; } @@ -503,7 +505,10 @@ int CmdLFSetConfig(const char *Cmd) { case 't': errors |= param_getdec(Cmd, cmdp+1, &unsigned_trigg); cmdp+=2; - if(!errors) trigger_threshold = unsigned_trigg; + if(!errors) { + trigger_threshold = unsigned_trigg; + g_lf_threshold_set = (trigger_threshold > 0); + } break; case 'b': errors |= param_getdec(Cmd, cmdp+1, &bps); @@ -544,9 +549,11 @@ int CmdLFSetConfig(const char *Cmd) { } int CmdLFRead(const char *Cmd) { + + if (offline) return 0; + bool errors = FALSE; bool arg1 = FALSE; - bool thresholdRead = FALSE; uint8_t cmdp = 0; while(param_getchar(Cmd, cmdp) != 0x00) { switch(param_getchar(Cmd, cmdp)) { @@ -558,21 +565,13 @@ int CmdLFRead(const char *Cmd) { arg1 = TRUE; cmdp++; break; - case 't': - case 'T': - thresholdRead = TRUE; - cmdp++; - break; default: PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = 1; + errors = TRUE; break; } if(errors) break; } - - // No args - if (cmdp == 0) errors = 1; //Validations if (errors) return usage_lf_read(); @@ -580,7 +579,7 @@ int CmdLFRead(const char *Cmd) { UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}}; clearCommandBuffer(); SendCommand(&c); - if ( thresholdRead ) { + if ( g_lf_threshold_set ) { WaitForResponse(CMD_ACK,NULL); } else { if ( !WaitForResponseTimeout(CMD_ACK, NULL ,2500) ) { @@ -1030,6 +1029,33 @@ int CmdVchDemod(const char *Cmd) { return 0; } + +//by marshmellow +int CheckChipset(bool getDeviceData) { + + if (!getDeviceData) return 0; + + uint32_t word = 0; + save_restoreGB(1); + + //check for em4x05/em4x69 chips first + if (EM4x05IsBlock0(&word)) { + save_restoreGB(0); + PrintAndLog("\nValid EM4x05/EM4x69 Chipset found\nTry `lf em 4x05` commands\n"); + return 1; + } + + //TODO check for t55xx chip... + // if ( t55xxIsBlock0(() { + // save_restoreGB(0); + // PrintAndLog("\nValid T55xx Chipset found\nTry `lf t55xx` commands\n"); + // return 1; + // } + + save_restoreGB(0); + return 0; +} + //by marshmellow int CmdLFfind(const char *Cmd) { int ans = 0; @@ -1038,7 +1064,9 @@ int CmdLFfind(const char *Cmd) { char testRaw = param_getchar(Cmd, 1); if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find(); - if (!offline && (cmdp != '1')){ + bool getDeviceData = (!offline && (cmdp != '1') ); + + if (getDeviceData) { CmdLFRead("s"); getSamples("30000", false); } else if (GraphTraceLen < minLength) { @@ -1054,11 +1082,14 @@ int CmdLFfind(const char *Cmd) { size_t testLen = minLength; // only run these tests if device is online - if (!offline && (cmdp != '1')){ + if (getDeviceData) { // only run if graphbuffer is just noise as it should be for hitag/cotag if (graphJustNoise(GraphBuffer, testLen)) { + if (CheckChipset(getDeviceData) ) + return 1; + ans=CmdLFHitagReader("26"); if (ans==0) return 1; @@ -1073,6 +1104,9 @@ int CmdLFfind(const char *Cmd) { } } + // identify chipset + CheckChipset(getDeviceData); + ans=CmdFSKdemodIO(""); if (ans>0) { PrintAndLog("\nValid IO Prox ID Found!");