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