]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/proxmark3.c
receiving/sending moved to one thread
[proxmark3-svn] / client / proxmark3.c
index a649576d66021eeb2fb1ac062482d9822a039d43..38a977169396263377774030d910fe077c65b58d 100644 (file)
 #include "ui.h"
 
 static serial_port sp;
+static UsbCommand txcmd;
+static bool txcmd_pending = false;
 
 void SendCommand(UsbCommand *c) {
 #if 0
   printf("Sending %d bytes\n", sizeof(UsbCommand));
 #endif
-  if (!uart_send(sp,(byte_t*)c,sizeof(UsbCommand))) {
-    ERR("Sending bytes to proxmark failed");
+/*
+  if (txcmd_pending) {
+    ERR("Sending command failed, previous command is still pending");
   }
+*/
+  while(txcmd_pending);
+  txcmd = *c;
+  txcmd_pending = true;
 }
 
 struct receiver_arg {
@@ -70,7 +77,7 @@ static void *uart_receiver(void *targ) {
     rxlen = sizeof(UsbCommand);
     if (uart_receive(sp,rx,&rxlen)) {
       if ((rxlen % sizeof(UsbCommand)) != 0) {
-        PrintAndLog("ERROR: received %zd bytes, which does not seem to be one or more command(s)\n",rxlen);
+        PrintAndLog("ERROR: received %03zd bytes, which does not seem to be one or more command(s)\n",rxlen    );
         continue;
       }
       cmd_count = rxlen / sizeof(UsbCommand);
@@ -79,6 +86,13 @@ static void *uart_receiver(void *targ) {
         UsbCommandReceived((UsbCommand*)(rx+(i*sizeof(UsbCommand))));
       }
     }
+
+    if(txcmd_pending) {
+      if (!uart_send(sp,(byte_t*)&txcmd,sizeof(UsbCommand))) {
+        PrintAndLog("Sending bytes to proxmark failed");
+      }
+      txcmd_pending = false;
+    }
   }
   
   pthread_exit(NULL);
Impressum, Datenschutz