X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/b13fa4448f517b46e917c5145050f434d6df24d5..81012e670bf7d1d6a33d292d8a2777572710ad9d:/client/proxmark3.c?ds=sidebyside diff --git a/client/proxmark3.c b/client/proxmark3.c index 59736ce7..528cae34 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,46 @@ 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(int markdown) +{ + printf("\n%sProxmark3 command dump%s\n\n",markdown?"# ":"",markdown?"":"\n======================"); + printf("Some commands are available only if a Proxmark is actually connected.%s\n",markdown?" ":""); + printf("Check column \"offline\" for their availability.\n"); + printf("\n"); + command_t *cmds = getTopLevelCommandTable(); + dumpCommandsRecursive(cmds, markdown); +} + 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"); + printf("markdown: %s -m\n\n", argv[0]); + printf("\tDump all interactive help at once in markdown syntax\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(0); + return 0; + } + if (strcmp(argv[1], "-m") == 0) { + dumpAllHelp(1); + return 0; + } // Make sure to initialize struct main_loop_arg marg = { .usb_present = 0, @@ -243,9 +282,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);