X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/b13fa4448f517b46e917c5145050f434d6df24d5..ae7aa73dd529b84ad75c7a3c75461be1d7c18454:/client/proxmark3.c?ds=inline diff --git a/client/proxmark3.c b/client/proxmark3.c index 59736ce7..e40b4def 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -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 \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]); + 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);