#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 {
size_t cmd_count;
while (arg->run) {
+ 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);
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);