]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhflegic.c
Added support for Legic tags to `hf search` command (#815)
[proxmark3-svn] / client / cmdhflegic.c
index 691e1978b0b1dacfaac9797a31bb3c74c0025b72..66e8ebb145b4eb31b08eddf89883d76534b8db70 100644 (file)
@@ -18,6 +18,7 @@
 #include "cmdparser.h"
 #include "cmdmain.h"
 #include "util.h"
+#include "../include/legic.h"
 
 static int CmdHelp(const char *Cmd);
 
@@ -28,7 +29,7 @@ static command_t CommandTable[] =
   {"reader",      CmdLegicRFRead, 0, "[offset [length]] -- read bytes from a LEGIC card"},
   {"save",        CmdLegicSave,   0, "<filename> [<length>] -- Store samples"},
   {"load",        CmdLegicLoad,   0, "<filename> -- Restore samples"},
-  {"sim",         CmdLegicRfSim,  0, "[phase drift [frame drift [req/resp drift]]] Start tag simulator (use after load or read)"},
+  {"sim",         CmdLegicRfSim,  0, "[tagtype, 0:MIM22, 1:MIM256, 2:MIM1024] Start tag simulator (use after load or read)"},
   {"write",       CmdLegicRfWrite,0, "<offset> <length> -- Write sample buffer (user after load or read)"},
   {"fill",        CmdLegicRfFill, 0, "<offset> <length> <value> -- Fill/Write tag with constant value"},
   {NULL, NULL, 0, NULL}
@@ -214,7 +215,21 @@ int CmdLegicRFRead(const char *Cmd)
   if(byte_count + offset > 1024) byte_count = 1024 - offset;
   UsbCommand c={CMD_READER_LEGIC_RF, {offset, byte_count, 0}};
   SendCommand(&c);
-  return 0;
+  UsbCommand resp;
+  WaitForResponse(CMD_ACK,&resp);
+  switch (resp.arg[0]) {
+    case 0:
+      PrintAndLog("Card (MIM %i) read, use 'hf legic decode' or", ((legic_card_select_t*)resp.d.asBytes)->cardsize);
+      PrintAndLog("'data hexsamples %d' to view results", (resp.arg[1] + 7) & ~7);
+      break;
+    case 1:
+      PrintAndLog("No or unknown card found, aborting");
+      break;
+    case 2:
+      PrintAndLog("operation failed @ 0x%03.3x", resp.arg[1]);
+      break;
+  }
+  return resp.arg[0];
 }
 
 int CmdLegicLoad(const char *Cmd)
@@ -320,10 +335,8 @@ int CmdLegicSave(const char *Cmd)
 int CmdLegicRfSim(const char *Cmd)
 {
    UsbCommand c={CMD_SIMULATE_TAG_LEGIC_RF};
-   c.arg[0] = 6;
-   c.arg[1] = 3;
-   c.arg[2] = 0;
-   sscanf(Cmd, " %" SCNi64 " %" SCNi64 " %" SCNi64, &c.arg[0], &c.arg[1], &c.arg[2]);
+   c.arg[0] = 1;
+   sscanf(Cmd, " %" SCNi64, &c.arg[0]);
    SendCommand(&c);
    return 0;
 }
Impressum, Datenschutz