X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/3a8464f0679d86904aa4ae2abb0cafe02e222ce8..d5be6f7cd4bedb62331f1ab61c63e74897b17d46:/client/usb.c diff --git a/client/usb.c b/client/usb.c index 8f5f38a7..4f4bd2ca 100644 --- a/client/usb.c +++ b/client/usb.c @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -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,22 @@ void SendCommand(UsbCommand *c, bool wantAck) { return; } - +/* if(wantAck) { UsbCommand ack; + printf("waiting for ack\n"); ReceiveCommand(&ack); if(ack.cmd != CMD_ACK) { printf("bad ACK\n"); exit(-1); } + } else { + printf("not waiting for ack\n"); } +*/ } -int ReceiveCommandP(UsbCommand *c) { +bool ReceiveCommandPoll(UsbCommand *c) { int ret; bzero(c, sizeof(UsbCommand)); @@ -60,7 +65,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,7 +78,7 @@ int ReceiveCommandP(UsbCommand *c) { printf(PROXPROMPT); fflush(NULL); - return 0; + return false; } } else { if (ret && (ret < sizeof(UsbCommand))) { @@ -96,11 +101,17 @@ int ReceiveCommandP(UsbCommand *c) { #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) {