X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/3a8464f0679d86904aa4ae2abb0cafe02e222ce8..1d99b0df4a0c1a2f42fe23ae32cc8f3d090bc985:/client/usb.c?ds=inline

diff --git a/client/usb.c b/client/usb.c
index 8f5f38a7..e0836b82 100644
--- a/client/usb.c
+++ b/client/usb.c
@@ -1,6 +1,5 @@
 #include <stdio.h>
 #include <stdlib.h>
-#include <stdint.h>
 #include <stdbool.h>
 #include <unistd.h>
 #include <usb.h>
@@ -9,18 +8,20 @@
 
 #include "prox.h"
 #include "proxmark3.h"
-
+#include "../include/usb_cmd.h"
 usb_dev_handle *devh = NULL;
 static unsigned int claimed_iface = 0;
 unsigned char return_on_error = 0;
 unsigned char error_occured = 0;
+extern unsigned int current_command;
 
-void SendCommand(UsbCommand *c, bool wantAck) {
+void SendCommand(UsbCommand *c) {
 	int ret;
 
 #if 0
 	printf("Sending %d bytes\n", sizeof(UsbCommand));
 #endif
+	current_command = c->cmd;
 	ret = usb_bulk_write(devh, 0x01, (char*)c, sizeof(UsbCommand), 1000);
 	if (ret<0) {
 		error_occured = 1;
@@ -40,18 +41,9 @@ void SendCommand(UsbCommand *c, bool wantAck) {
 		
 		return;
 	}
-
-	if(wantAck) {
-		UsbCommand ack;
-		ReceiveCommand(&ack);
-		if(ack.cmd != CMD_ACK) {
-			printf("bad ACK\n");
-			exit(-1);
-		}
-	}
 }
 
-int ReceiveCommandP(UsbCommand *c) {
+bool ReceiveCommandPoll(UsbCommand *c) {
 	int ret;
 
 	bzero(c, sizeof(UsbCommand));
@@ -60,7 +52,7 @@ int ReceiveCommandP(UsbCommand *c) {
 		if (ret != -ETIMEDOUT) {
 			error_occured = 1;
 			if (return_on_error)
-				return 0;
+				return false;
 
 			fprintf(stderr, "read failed: %s(%d)!\nTrying to reopen device...\n",
 				usb_strerror(), ret);
@@ -73,34 +65,26 @@ int ReceiveCommandP(UsbCommand *c) {
 			printf(PROXPROMPT);
 			fflush(NULL);
 
-			return 0;
+			return false;
 		}
 	} else {
 		if (ret && (ret < sizeof(UsbCommand))) {
 			fprintf(stderr, "Read only %d instead of requested %d bytes!\n",
 				ret, (int)sizeof(UsbCommand));
 		}
-
-#if 0
-		{
-			int i;
-
-			printf("Read %d bytes\n", ret);
-			for (i = 0; i < ret; i++) {
-				printf("0x%02X ", ((unsigned char*)c)[i]);
-				if (!((i+1)%8))
-					printf("\n");
-			}
-			printf("\n");
-		}
-#endif
 	}
 
-	return ret;
+	return ret > 0;
 }
 
 void ReceiveCommand(UsbCommand *c) {
-	while(ReceiveCommandP(c)<0) {}
+//	printf("%s()\n", __FUNCTION__);
+	int retval = 0;
+	do {
+		retval = ReceiveCommandPoll(c);
+		if (retval != 1) printf("ReceiveCommandPoll returned %d\n", retval);
+	} while(retval<0);
+//	printf("recv %x\n", c->cmd);
 }
 
 usb_dev_handle* findProxmark(int verbose, unsigned int *iface) {