]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlf.c
ADD: @pivipw 's changes "making lua paths".
[proxmark3-svn] / client / cmdlf.c
index 8931fc757ad0b17ad81545d1b4a7eed4f45b6150..7b908e9f474b7f45a37ff471ec7bc1e95753b04e 100644 (file)
@@ -27,11 +27,11 @@ int usage_lf_cmdread(void) {
        return 0;
 }
 int usage_lf_read(void){
        return 0;
 }
 int usage_lf_read(void){
-       PrintAndLog("Usage: lf read [h] [s]");
+       PrintAndLog("Usage: lf read [h] [s] [t]");
        PrintAndLog("Options:");
        PrintAndLog("       h            This help");
        PrintAndLog("       s            silent run no printout");
        PrintAndLog("Options:");
        PrintAndLog("       h            This help");
        PrintAndLog("       s            silent run no printout");
-       PrintAndLog("This function takes no arguments. ");
+       PrintAndLog("       t            waits for device to respond with no timeout");
        PrintAndLog("Use 'lf config' to set parameters.");
        return 0;
 }
        PrintAndLog("Use 'lf config' to set parameters.");
        return 0;
 }
@@ -544,20 +544,49 @@ int CmdLFSetConfig(const char *Cmd) {
 }
 
 int CmdLFRead(const char *Cmd) {
 }
 
 int CmdLFRead(const char *Cmd) {
-       bool arg1 = false;
-       uint8_t cmdp =  param_getchar(Cmd, 0);
-       
-       if ( cmdp == 'h' || cmdp == 'H') return usage_lf_read();
+       bool errors = FALSE;
+       bool arg1 = FALSE;
+       bool thresholdRead = FALSE;     
+       uint8_t cmdp = 0;
+       while(param_getchar(Cmd, cmdp) != 0x00) {
+               switch(param_getchar(Cmd, cmdp)) {
+               case 'h':
+               case 'H':
+                       return usage_lf_read();
+               case 's':
+               case 'S':
+                       arg1 = TRUE;
+                       cmdp++;
+                       break;
+               case 't':
+               case 'T':
+                       thresholdRead = TRUE;
+                       cmdp++;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+                       errors = 1;
+                       break;
+               }
+               if(errors) break;
+       }
        
        
-        //suppress print
-       if ( cmdp == 's' || cmdp == 'S') arg1 = true;
+       // No args
+       if (cmdp == 0) errors = 1;
+
+       //Validations
+       if (errors) return usage_lf_read();
 
        UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}};
        clearCommandBuffer();
        SendCommand(&c);
 
        UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}};
        clearCommandBuffer();
        SendCommand(&c);
-       if ( !WaitForResponseTimeout(CMD_ACK, NULL ,2500) ) {
-               PrintAndLog("command execution time out");
-               return 1;
+       if ( thresholdRead ) {
+               WaitForResponse(CMD_ACK,NULL);  
+       } else {
+               if ( !WaitForResponseTimeout(CMD_ACK, NULL ,2500) ) {
+                       PrintAndLog("command execution time out");
+                       return 1;
+               }
        }
        return 0;
 }
        }
        return 0;
 }
@@ -1004,6 +1033,7 @@ int CmdVchDemod(const char *Cmd) {
 //by marshmellow
 int CmdLFfind(const char *Cmd) {
        int ans = 0;
 //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();
        char cmdp = param_getchar(Cmd, 0);
        char testRaw = param_getchar(Cmd, 1);
        if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find();
@@ -1011,21 +1041,38 @@ int CmdLFfind(const char *Cmd) {
        if (!offline && (cmdp != '1')){
                CmdLFRead("s");
                getSamples("30000", false);
        if (!offline && (cmdp != '1')){
                CmdLFRead("s");
                getSamples("30000", false);
-       } else if (GraphTraceLen < 1000) {
+       } else if (GraphTraceLen < minLength) {
                PrintAndLog("Data in Graphbuffer was too small.");
                return 0;
        }
        if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
 
                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");
 
        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!");
        ans=CmdFSKdemodIO("");
        if (ans>0) {
                PrintAndLog("\nValid IO Prox ID Found!");
@@ -1116,24 +1163,8 @@ int CmdLFfind(const char *Cmd) {
                PrintAndLog("\nValid Presco ID Found!");
                return 1;
        }
                PrintAndLog("\nValid Presco ID Found!");
                return 1;
        }
-       // ICEMAN;  always call save_restorGB for COTAG. Will break graphbuffer
-       save_restoreGB(1)
-       ans=CmdCOTAGRead("");
-       if (ans>0){
-               PrintAndLog("\nValid COTAG ID Found!");
-               return 1;
-       }
-       save_restoreGB(0)
-       // 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)
        PrintAndLog("\nNo Known Tags Found!\n");
        if (testRaw=='u' || testRaw=='U'){
                //test unknown tag formats (raw mode)
Impressum, Datenschutz