aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/Magstripe/Magstripe.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-03-10 05:56:17 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-03-10 05:56:17 +0000
commit38039765346c7441208dbcb3fd3cf8f13b7ced58 (patch)
treeaafe05db569ec7a2938b3e7cdbd63e4a5d6a054e /Projects/Magstripe/Magstripe.c
parent4a09da20989dfe0c41dc1272fa6dce1e11539c15 (diff)
downloadlufa-38039765346c7441208dbcb3fd3cf8f13b7ced58.tar.gz
lufa-38039765346c7441208dbcb3fd3cf8f13b7ced58.tar.bz2
lufa-38039765346c7441208dbcb3fd3cf8f13b7ced58.zip
Fixed incorrect/missing control status stage transfers on demos, bootloaders and applications (thanks to Nate Lawson).
Diffstat (limited to 'Projects/Magstripe/Magstripe.c')
-rw-r--r--Projects/Magstripe/Magstripe.c14
1 files changed, 12 insertions, 2 deletions
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;