forked from mirror/qmk_firmware
Fixed incorrect/missing control status stage transfers on demos, bootloaders and applications (thanks to Nate Lawson).
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user