]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlf.c
fix 'hf iclass chk' (#894)
[proxmark3-svn] / client / cmdlf.c
index 42f73fa1f6592bd1f3989936ae4f08abf4209b4b..61040f0439025883109ad4825af9c42f950a236c 100644 (file)
@@ -8,21 +8,21 @@
 // Low frequency commands
 //-----------------------------------------------------------------------------
 
+#include "cmdlf.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
 #include <stdbool.h>
 #include <stdint.h>
-#include "proxmark3.h"
-#include "cmdlf.h"
+#include "comms.h"
 #include "lfdemod.h"     // for psk2TOpsk1
 #include "util.h"        // for parsing cli command utils
 #include "ui.h"          // for show graph controls
 #include "graph.h"       // for graph data
 #include "cmdparser.h"   // for getting cli commands included in cmdmain.h
 #include "cmdmain.h"     // for sending cmds to device
-#include "data.h"        // for GetFromBigBuf
 #include "cmddata.h"     // for `lf search`
 #include "cmdlfawid.h"   // for awid menu
 #include "cmdlfem4x.h"   // for em4x menu
@@ -224,24 +224,25 @@ int usage_lf_config(void)
 {
        PrintAndLog("Usage: lf config [H|<divisor>] [b <bps>] [d <decim>] [a 0|1]");
        PrintAndLog("Options:        ");
-       PrintAndLog("       h             This help");
-       PrintAndLog("       L             Low frequency (125 KHz)");
-       PrintAndLog("       H             High frequency (134 KHz)");
-       PrintAndLog("       q <divisor>   Manually set divisor. 88-> 134KHz, 95-> 125 Hz");
-       PrintAndLog("       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");
-       PrintAndLog("       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)");
+       PrintAndLog("       h               This help");
+       PrintAndLog("       L               Low frequency (125 KHz)");
+       PrintAndLog("       H               High frequency (134 KHz)");
+       PrintAndLog("       q <divisor>     Manually set divisor. 88-> 134 KHz, 95-> 125 KHz");
+       PrintAndLog("       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");
+       PrintAndLog("       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)");
+       PrintAndLog("       s <smplstoskip> Sets a number of samples to skip before capture. Default: 0");
        PrintAndLog("Examples:");
        PrintAndLog("      lf config b 8 L");
-       PrintAndLog("                    Samples at 125KHz, 8bps.");
+       PrintAndLog("                       Samples at 125KHz, 8bps.");
        PrintAndLog("      lf config H b 4 d 3");
-       PrintAndLog("                    Samples at 134KHz, averages three samples into one, stored with ");
-       PrintAndLog("                    a resolution of 4 bits per sample.");
+       PrintAndLog("                       Samples at 134KHz, averages three samples into one, stored with ");
+       PrintAndLog("                       a resolution of 4 bits per sample.");
        PrintAndLog("      lf read");
-       PrintAndLog("                    Performs a read (active field)");
+       PrintAndLog("                       Performs a read (active field)");
        PrintAndLog("      lf snoop");
-       PrintAndLog("                    Performs a snoop (no active field)");
+       PrintAndLog("                       Performs a snoop (no active field)");
        return 0;
 }
 
@@ -255,6 +256,7 @@ int CmdLFSetConfig(const char *Cmd)
        bool errors = false;
        int trigger_threshold =-1;//Means no change
        uint8_t unsigned_trigg = 0;
+       int samples_to_skip = -1;
 
        uint8_t cmdp =0;
        while(param_getchar(Cmd, cmdp) != 0x00)
@@ -295,6 +297,10 @@ int CmdLFSetConfig(const char *Cmd)
                        averaging = param_getchar(Cmd,cmdp+1) == '1';
                        cmdp+=2;
                        break;
+               case 's':
+                       samples_to_skip = param_get32ex(Cmd,cmdp+1,0,10);
+                       cmdp+=2;
+                       break;
                default:
                        PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
                        errors = 1;
@@ -316,7 +322,7 @@ int CmdLFSetConfig(const char *Cmd)
        if(bps >> 4) bps = 8;
 
        sample_config config = {
-               decimation,bps,averaging,divisor,trigger_threshold
+               decimation,bps,averaging,divisor,trigger_threshold,samples_to_skip
        };
        //Averaging is a flag on high-bit of arg[1]
        UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG};
@@ -327,7 +333,7 @@ int CmdLFSetConfig(const char *Cmd)
 }
 
 bool lf_read(bool silent, uint32_t samples) {
-       if (offline) return false;
+       if (IsOffline()) return false;
        UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {silent,samples,0}};
        clearCommandBuffer();
        //And ship it to device
@@ -870,7 +876,7 @@ int CmdVchDemod(const char *Cmd)
 int CheckChipType(char cmdp) {
        uint32_t wordData = 0;
 
-       if (offline || cmdp == '1') return 0;
+       if (IsOffline() || cmdp == '1') return 0;
 
        save_restoreGB(GRAPH_SAVE);
        save_restoreDB(GRAPH_SAVE);
@@ -915,7 +921,7 @@ int CmdLFfind(const char *Cmd)
                return 0;
        }
 
-       if (!offline && (cmdp != '1')) {
+       if (!IsOffline() && (cmdp != '1')) {
                lf_read(true, 30000);
        } else if (GraphTraceLen < minLength) {
                PrintAndLog("Data in Graphbuffer was too small.");
@@ -931,22 +937,23 @@ int CmdLFfind(const char *Cmd)
        // only run if graphbuffer is just noise as it should be for hitag/cotag
        if (graphJustNoise(GraphBuffer, testLen)) {
                // only run these tests if we are in online mode 
-               if (!offline && (cmdp != '1')) {
+               if (!IsOffline() && (cmdp != '1')) {
                        // test for em4x05 in reader talk first mode.
                        if (EM4x05Block0Test(&wordData)) {
                                PrintAndLog("\nValid EM4x05/EM4x69 Chip Found\nUse lf em 4x05readword/dump commands to read\n");
                                return 1;
                        }
-                       ans=CmdLFHitagReader("26"); // 26 = RHT2F_UID_ONLY
-                       if (ans==0) {
+            if (getHitagUid(NULL, true)) {
+                               PrintAndLog("\nValid Hitag2 tag Found!");
                                return 1;
-                       }
-                       ans=CmdCOTAGRead("");
-                       if (ans>0) {
+            }
+                       ans = CmdCOTAGRead("");
+                       if (ans > 0) {
                                PrintAndLog("\nValid COTAG ID Found!");
                                return 1;
                        }
                }
+               PrintAndLog("\nNo Data Found! - maybe not an LF tag?\n");
                return 0;
        }
 
Impressum, Datenschutz