+#include <usb.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <string.h>
+#include <errno.h>
+
+#include "translate.h"
+#include "../winsrc/prox.h"
+#include "proxmark3.h"
+
+#define HANDLE_ERROR if (error_occured) { \
+ error_occured = 0;\
+ break;\
+}
+
+int main(int argc, char **argv)
+{
+ if(argc != 3 && argc != 4)
+ {
+ printf("\n\tusage: cli <command 1> <command 2> [logfile (default cli.log)]\n");
+ printf("\n");
+ printf("\texample: cli hi14asnoop hi14alist h14a.log\n");
+ printf("\n");
+ return -1;
+ }
+
+ usb_init();
+ if (argc == 4)
+ setlogfilename(argv[3]);
+ else
+ setlogfilename("cli.log");
+
+ return_on_error = 1;
+
+ while(1) {
+ while(!(devh=OpenProxmark(0))) { sleep(1); }
+
+ while(1) {
+ UsbCommand cmdbuf;
+ int i;
+
+ CommandReceived(argv[1]);
+ HANDLE_ERROR
+
+ ReceiveCommand(&cmdbuf);
+ HANDLE_ERROR
+ for (i=0; i<5; i++) {
+ ReceiveCommandP(&cmdbuf);
+ }
+ HANDLE_ERROR
+
+ CommandReceived(argv[2]);
+ HANDLE_ERROR
+ }
+ }
+
+ CloseProxmark();
+ return 0;
+}