]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/proxmark3.c
Add option -h to dump complete set of supported commands
[proxmark3-svn] / client / proxmark3.c
index 59736ce73520ff3d6623e9f6c2713b32965a40de..e40b4defe38d7dee1d3b4d48a4c1b3ae6360b615 100644 (file)
@@ -41,6 +41,12 @@ void SendCommand(UsbCommand *c) {
     ERR("Sending command failed, previous command is still pending");
   }
 */
+  if(offline)
+    {
+      PrintAndLog("Sending bytes to proxmark failed - offline");
+      return;
+    }
+
   while(txcmd_pending);
   txcmd = *c;
   txcmd_pending = true;
@@ -168,6 +174,7 @@ static void *main_loop(void *targ) {
                        
                        if (cmd[0] != 0x00) {
                                if (strncmp(cmd, "quit", 4) == 0) {
+                                       exit(0);
                                        break;
                                }
                                
@@ -199,15 +206,59 @@ static void *main_loop(void *targ) {
   return NULL;
 }
 
+#define DUMPHELP(cmd) \
+  do { \
+    printf("%s\n", cmd); \
+    printf("---------------------------------------------\n"); \
+    CommandReceived(cmd); \
+    printf("\n"); \
+  } while (0)
+
+static void dumphelp()
+{
+  offline=2;
+  printf("\n------------PROXMARK3 HELP DUMP--------------\n");
+  printf("Some commands are available only if a Proxmark is actually connected,\n");
+  printf("Those commands are flagged with \"@\" in front of their description.\n");
+  printf("\n");
+  DUMPHELP("help");
+  DUMPHELP("data help");
+  DUMPHELP("hf help");
+  DUMPHELP("hf 14a help");
+  DUMPHELP("hf 14b help");
+  DUMPHELP("hf 15 help");
+  DUMPHELP("hf epa help");
+  DUMPHELP("hf legic help");
+  DUMPHELP("hf iclass help");
+  DUMPHELP("hf mf help");
+  DUMPHELP("hw help");
+  DUMPHELP("lf help");
+  DUMPHELP("lf em4x help");
+  DUMPHELP("lf hid help");
+  DUMPHELP("lf ti help");
+  DUMPHELP("lf hitag help");
+  DUMPHELP("lf pcf7931 help");
+  DUMPHELP("lf t55xx help");
+}
+
 int main(int argc, char* argv[]) {
        srand(time(0));
   
        if (argc < 2) {
                printf("syntax: %s <port>\n\n",argv[0]);
                printf("\tLinux example:'%s /dev/ttyACM0'\n\n", argv[0]);
+               printf("help:   %s -h\n\n", argv[0]);
+               printf("\tDump all interactive help at once\n");
                return 1;
        }
   
+       if (strcmp(argv[1], "-h") == 0) {
+               printf("syntax: %s <port>\n\n",argv[0]);
+               printf("\tLinux example:'%s /dev/ttyACM0'\n\n", argv[0]);
+               offline = 2;
+               dumphelp();
+               return 0;
+       }
        // Make sure to initialize
        struct main_loop_arg marg = {
                .usb_present = 0,
@@ -243,9 +294,19 @@ int main(int argc, char* argv[]) {
 
        // If the user passed the filename of the 'script' to execute, get it
        if (argc > 2 && argv[2]) {
+               if (argv[2][0] == 'f' &&  //buzzy, if a word 'flush' passed, flush the output after every log entry.
+                       argv[2][1] == 'l' &&
+                       argv[2][2] == 'u' &&
+                       argv[2][3] == 's' &&
+                       argv[2][4] == 'h')
+               {
+                       printf("Output will be flushed after every print.\n");
+                       flushAfterWrite = 1;
+               }
+               else
                marg.script_cmds_file = argv[2];
        }
-  
+
        // create a mutex to avoid interlacing print commands from our different threads
        pthread_mutex_init(&print_lock, NULL);
 
Impressum, Datenschutz