From 38039765346c7441208dbcb3fd3cf8f13b7ced58 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 10 Mar 2009 05:56:17 +0000 Subject: Fixed incorrect/missing control status stage transfers on demos, bootloaders and applications (thanks to Nate Lawson). --- Projects/AVRISP_Programmer/AVRISP_Programmer.c | 9 +++++---- Projects/Magstripe/Magstripe.c | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'Projects') diff --git a/Projects/AVRISP_Programmer/AVRISP_Programmer.c b/Projects/AVRISP_Programmer/AVRISP_Programmer.c index 4bc4f9cc3..58593670e 100644 --- a/Projects/AVRISP_Programmer/AVRISP_Programmer.c +++ b/Projects/AVRISP_Programmer/AVRISP_Programmer.c @@ -267,7 +267,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) case REQ_GetLineEncoding: if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { - /* Acknowedge the SETUP packet, ready for data transfer */ + /* Acknowledge the SETUP packet, ready for data transfer */ Endpoint_ClearSetupReceived(); /* Write the line coding data to the control endpoint */ @@ -281,7 +281,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket) case REQ_SetLineEncoding: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { - /* Acknowedge the SETUP packet, ready for data transfer */ + /* Acknowledge the SETUP packet, ready for data transfer */ Endpoint_ClearSetupReceived(); /* Read the line coding data in from the host into the global struct */ @@ -298,10 +298,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket) case REQ_SetControlLineState: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { - /* Acknowedge the SETUP packet, ready for data transfer */ + /* Acknowledge the SETUP packet, ready for data transfer */ Endpoint_ClearSetupReceived(); - /* Send an empty packet to acknowedge the command */ + /* Acknowledge status stage */ + while (!(Endpoint_IsSetupINReady())); Endpoint_ClearSetupIN(); } diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c index 2826c140e..0e10053da 100644 --- a/Projects/Magstripe/Magstripe.c +++ b/Projects/Magstripe/Magstripe.c @@ -204,6 +204,10 @@ EVENT_HANDLER(USB_UnhandledControlPacket) /* Send the flag to the host */ Endpoint_ClearSetupIN(); + + /* Acknowledge status stage */ + while (!(Endpoint_IsSetupOUTReceived())); + Endpoint_ClearSetupOUT(); } break; @@ -218,7 +222,8 @@ EVENT_HANDLER(USB_UnhandledControlPacket) /* Set or clear the flag depending on what the host indicates that the current Protocol should be */ UsingReportProtocol = (wValue != 0x0000); - /* Send an empty packet to acknowedge the command */ + /* Acknowledge status stage */ + while (!(Endpoint_IsSetupINReady())); Endpoint_ClearSetupIN(); } @@ -234,7 +239,8 @@ EVENT_HANDLER(USB_UnhandledControlPacket) /* Get idle period in MSB */ IdleCount = (wValue >> 8); - /* Send an empty packet to acknowedge the command */ + /* Acknowledge status stage */ + while (!(Endpoint_IsSetupINReady())); Endpoint_ClearSetupIN(); } @@ -249,6 +255,10 @@ EVENT_HANDLER(USB_UnhandledControlPacket) /* Send the flag to the host */ Endpoint_ClearSetupIN(); + + /* Acknowledge status stage */ + while (!(Endpoint_IsSetupOUTReceived())); + Endpoint_ClearSetupOUT(); } break; -- cgit v1.2.3