X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/9492e0b0986a557afe1c85f08fd02a7fb979f536..6f5dd6010ec48f56724029a414db1ee3594ab810:/client/proxmark3.c diff --git a/client/proxmark3.c b/client/proxmark3.c index 59736ce7..3b30b3cb 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -23,6 +23,8 @@ #include "uart.h" #include "ui.h" #include "sleep.h" +#include "cmdparser.h" +#include "cmdmain.h" // a global mutex to prevent interlaced printing from different threads pthread_mutex_t print_lock; @@ -31,7 +33,6 @@ static serial_port sp; static UsbCommand txcmd; volatile static bool txcmd_pending = false; - void SendCommand(UsbCommand *c) { #if 0 printf("Sending %d bytes\n", sizeof(UsbCommand)); @@ -41,6 +42,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 +175,7 @@ static void *main_loop(void *targ) { if (cmd[0] != 0x00) { if (strncmp(cmd, "quit", 4) == 0) { + exit(0); break; } @@ -199,15 +207,44 @@ static void *main_loop(void *targ) { return NULL; } +//static void dumpHelp(char *parent, ...) +//{ +// printf("## %s\n\n", parent); +// CommandReceived(parent); +// +// printf("\n"); +//} + +static void dumpAllHelp() +{ + offline=3; + printf("\n# Proxmark3 command dump\n\n"); + printf("Some commands are available only if a Proxmark is actually connected.\n"); + printf("Check column \"offline\" for their availability.\n"); + printf("\n"); + command_t *cmds = getTopLevelCommandTable(); + + dumpCommandsRecursive(cmds); + +} + int main(int argc, char* argv[]) { srand(time(0)); if (argc < 2) { printf("syntax: %s \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 \n\n",argv[0]); + printf("\tLinux example:'%s /dev/ttyACM0'\n\n", argv[0]); + dumpAllHelp(); + return 0; + } // Make sure to initialize struct main_loop_arg marg = { .usb_present = 0, @@ -243,9 +280,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);