]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlf.c
I just merged @marshmellow's branch "iclass" and that was a lot of new functionality...
[proxmark3-svn] / client / cmdlf.c
index 7c5d273ff175da047df06b0a06af48c67df4f679..c67f34a8491a905397d23c6d70b17853d0b010fa 100644 (file)
@@ -22,6 +22,7 @@
 #include "util.h"
 #include "cmdlf.h"
 #include "cmdlfhid.h"
+#include "cmdlfawid.h"
 #include "cmdlfti.h"
 #include "cmdlfem4x.h"
 #include "cmdlfhitag.h"
 #include "cmdlfpcf7931.h"
 #include "cmdlfio.h"
 #include "lfdemod.h"
-
+#include "cmdlfviking.h"
 static int CmdHelp(const char *Cmd);
 
+
+int usage_lf_cmdread()
+{
+       PrintAndLog("Usage: lf cmdread  <delay off>  <zero> <one> <cmdbytes> [H] ");
+       PrintAndLog("Options:        ");
+       PrintAndLog("       h             This help");
+       PrintAndLog("       L             Low frequency (125 KHz)");
+       PrintAndLog("       H             High frequency (134 KHz)");
+       PrintAndLog("       H             delay OFF");
+       PrintAndLog("       H             time period ZERO");
+       PrintAndLog("       H             time period ONE");
+       PrintAndLog("Examples:");
+       PrintAndLog("      lf cmdread 80 100 200 11000");
+       PrintAndLog("      lf cmdread 80 100 100 11000 H");
+       return 0;
+}
+
 /* send a command before reading */
 int CmdLFCommandRead(const char *Cmd)
 {
-  static char dummy[3];
+       static char dummy[3] = {0x20,0x00,0x00};
+       bool errors = FALSE;
+       uint8_t divisor = 0; //125khz
+       uint8_t cmdp =0;
+       while(param_getchar(Cmd, cmdp) != 0x00)
+       {
+               switch(param_getchar(Cmd, cmdp))
+               {
+               case 'h':
+                       return usage_lf_cmdread();
+               case 'H':
+                       divisor = 88;
+                       cmdp++;
+                       break;
+               case 'a':
+                       //param_getchar(Cmd, cmdp+1) == '1';
+                       cmdp+=2;
+                       break;
+               default:
+                       PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
+                       errors = 1;
+                       break;
+               }
+               if(errors) break;
+       }
+       // No args
+       if(cmdp == 0) errors = 1;
 
-  dummy[0]= ' ';
+       //Validations
+       if(errors) return usage_lf_cmdread();
+       
+       UsbCommand c = {CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K};
+       
+       sscanf(Cmd, "%"lli" %"lli" %"lli" %s %s", &c.arg[0], &c.arg[1], &c.arg[2],(char*)(&c.d.asBytes),(char*)(&dummy+1));
+       
+       // in case they specified 'h'
+       strcpy((char *)&c.d.asBytes + strlen((char *)c.d.asBytes), dummy);
 
-  UsbCommand c = {CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K};
-  sscanf(Cmd, "%"lli" %"lli" %"lli" %s %s", &c.arg[0], &c.arg[1], &c.arg[2],(char*)(&c.d.asBytes),(char*)(&dummy+1));
-  // in case they specified 'h'
-  strcpy((char *)&c.d.asBytes + strlen((char *)c.d.asBytes), dummy);
-  SendCommand(&c);
-  return 0;
+       PrintAndLog("ICE: %d %s -- %s", strlen((char *)c.d.asBytes) ,dummy, c.d.asBytes);
+       clearCommandBuffer();
+       SendCommand(&c);
+       return 0;
 }
 
 int CmdFlexdemod(const char *Cmd)
@@ -388,7 +438,7 @@ int usage_lf_config()
        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");
+       PrintAndLog("       t <threshold> Sets trigger threshold. 0 means no threshold (range: 0-128)");
        PrintAndLog("Examples:");
        PrintAndLog("      lf config b 8 L");
        PrintAndLog("                    Samples at 125KHz, 8bps.");
@@ -1011,6 +1061,7 @@ int CmdLFfind(const char *Cmd)
     PrintAndLog("          : 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");
     PrintAndLog("          : lf search 1 u = use data from GraphBuffer & search for known and unknown tags");
+
     return 0;
   }
 
@@ -1028,7 +1079,6 @@ int CmdLFfind(const char *Cmd)
   PrintAndLog("\nChecking for known tags:\n");
 
   ans=CmdFSKdemodIO("");
-  
   if (ans>0) {
     PrintAndLog("\nValid IO Prox ID Found!");
     return 1;
@@ -1073,10 +1123,16 @@ int CmdLFfind(const char *Cmd)
 
   ans=CmdG_Prox_II_Demod("");
   if (ans>0) {
-    PrintAndLog("\nValid G Prox II ID Found!");
+    PrintAndLog("\nValid Guardall G-Prox II ID Found!");
     return 1;
   }
 
+       ans=CmdFDXBdemodBI("");
+       if (ans>0) {
+               PrintAndLog("\nValid FDX-B ID Found!");
+               return 1;
+       }
+
        ans=EM4x50Read("", false);
        if (ans>0) {
                PrintAndLog("\nValid EM4x50 ID Found!");
@@ -1151,13 +1207,14 @@ static command_t CommandTable[] =
 {
   {"help",        CmdHelp,            1, "This help"},
   {"em4x",        CmdLFEM4X,          1, "{ EM4X RFIDs... }"},
+  {"awid",             CmdLFAWID,                  1, "{ AWID RFIDs... }"},
   {"hid",         CmdLFHID,           1, "{ HID RFIDs... }"},
   {"hitag",       CmdLFHitag,         1, "{ HITAG RFIDs... }"},
   {"io",                 CmdLFIO,                1, "{ IOPROX RFIDs... }"},
   {"pcf7931",     CmdLFPCF7931,       1, "{ PCF7931 RFIDs... }"},
   {"ti",          CmdLFTI,            1, "{ TI RFIDs... }"},
   {"t55xx",       CmdLFT55XX,         1, "{ T55X7 RFIDs... }"},
-
+  {"viking",      CmdLFViking,        1, "{ Viking RFIDs... }"},
   {"config",      CmdLFSetConfig,     0, "Set config for LF sampling, bit/sample, decimation, frequency"},
  
   {"cmdread",     CmdLFCommandRead,   0, "<off period> <'0' period> <'1' period> <command> ['h' 134] \n\t\t-- Modulate LF reader field to send command before read (all periods in microseconds)"},
@@ -1165,9 +1222,9 @@ static command_t CommandTable[] =
   {"indalademod", CmdIndalaDemod,     1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"},
   {"indalaclone", CmdIndalaClone,     0, "<UID> ['l']-- Clone Indala to T55x7 (tag must be in antenna)(UID in HEX)(option 'l' for 224 UID"},
   {"read",        CmdLFRead,          0, "['s' silent] Read 125/134 kHz LF ID-only tag. Do 'lf read h' for help"},
-  {"search",      CmdLFfind,          1, "[offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) \n\t\t- 'u' to search for unknown tags"},
+  {"search",      CmdLFfind,          1, "[offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) \n\t\t-- 'u' to search for unknown tags"},
   {"sim",         CmdLFSim,           0, "[GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds)"},
-  {"simask",      CmdLFaskSim,        0, "[clock] [invert <1|0>] [manchester/raw <'m'|'r'>] [msg separator 's'] [d <hexdata>] \n\t\t-- Simulate LF ASK tag from demodbuffer or input"},
+  {"simask",      CmdLFaskSim,        0, "[clock] [invert <1|0>] [biphase/manchester/raw <'b'|'m'|'r'>] [msg separator 's'] [d <hexdata>] \n\t\t-- Simulate LF ASK tag from demodbuffer or input"},
   {"simfsk",      CmdLFfskSim,        0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"},
   {"simpsk",      CmdLFpskSim,        0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \n\t\t-- Simulate LF PSK tag from demodbuffer or input"},
   {"simbidir",    CmdLFSimBidir,      0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"},
Impressum, Datenschutz