Minor correction to the DevChapter9.c handling of Set and Clear feature requests -- remote wake up requests now complete correctly rather than stalling the request.

pull/1469/head
Dean Camera 16 years ago
parent a908773a13
commit 2bd88ebc4f

@ -274,6 +274,8 @@ static void USB_Device_ClearSetFeature(void)
case REQREC_DEVICE: case REQREC_DEVICE:
if ((uint8_t)USB_ControlRequest.wValue == FEATURE_REMOTE_WAKEUP) if ((uint8_t)USB_ControlRequest.wValue == FEATURE_REMOTE_WAKEUP)
USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
else
return;
break; break;
#if !defined(CONTROL_ONLY_DEVICE) #if !defined(CONTROL_ONLY_DEVICE)
@ -282,33 +284,38 @@ static void USB_Device_ClearSetFeature(void)
{ {
uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
if (EndpointIndex != ENDPOINT_CONTROLEP) if (EndpointIndex == ENDPOINT_CONTROLEP)
{ return;
Endpoint_SelectEndpoint(EndpointIndex);
Endpoint_SelectEndpoint(EndpointIndex);
if (Endpoint_IsEnabled()) if (Endpoint_IsEnabled())
{
if (USB_ControlRequest.bRequest == REQ_ClearFeature)
{ {
if (USB_ControlRequest.bRequest == REQ_ClearFeature) Endpoint_ClearStall();
{ Endpoint_ResetFIFO(EndpointIndex);
Endpoint_ClearStall(); Endpoint_ResetDataToggle();
Endpoint_ResetFIFO(EndpointIndex); }
Endpoint_ResetDataToggle(); else
} {
else Endpoint_StallTransaction();
{
Endpoint_StallTransaction();
}
} }
Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
Endpoint_ClearSETUP();
Endpoint_ClearIN();
} }
} }
break; break;
#endif #endif
} }
Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
Endpoint_ClearSETUP();
Endpoint_ClearIN();
while (!(Endpoint_IsOUTReceived()));
Endpoint_ClearOUT();
} }
#endif #endif

Loading…
Cancel
Save