This also removes the functional regression of the previous commit.
---
 softusb-input/main.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/softusb-input/main.c b/softusb-input/main.c
index 3d8ca17..ef4e49b 100644
--- a/softusb-input/main.c
+++ b/softusb-input/main.c
@@ -167,6 +167,7 @@ static char control_transfer(unsigned char addr, struct 
setup_packet *p, char ou
        unsigned char setup[11];
        unsigned char usb_buffer[11];
        unsigned char expected_data = USB_PID_DATA1;
+       unsigned char ack[] =  { USB_PID_ACK };
        char rxlen;
        char transferred;
        char chunklen;
@@ -249,15 +250,19 @@ wio8(SIE_SEL_TX, 2);
                                dump_hex(usb_buffer, rxlen);
                                return -1;
                        }
+
+                       /* send ACK token */
+                       usb_tx(ack, 1);
+
+                       if(usb_buffer[0] != expected_data)
+                               continue;
+
+                       expected_data = toggle(expected_data);
                        chunklen = rxlen - 3; /* strip token and CRC */
                        if(chunklen > (maxlen - transferred))
                                chunklen = maxlen - transferred;
                        memcpy(payload, &usb_buffer[1], chunklen);
 
-                       /* send ACK token */
-                       usb_buffer[0] = USB_PID_ACK;
-                       usb_tx(usb_buffer, 1);
-
                        transferred += chunklen;
                        payload += chunklen;
                        if(chunklen < 8)
-- 
1.7.1

_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkymist@Freenode

Reply via email to