diff options
| author | Dean Camera <dean@fourwalledcubicle.com> | 2009-12-21 08:29:12 +0000 | 
|---|---|---|
| committer | Dean Camera <dean@fourwalledcubicle.com> | 2009-12-21 08:29:12 +0000 | 
| commit | d4952265a6de30e2cc205cb5b65c8b43ab483fb5 (patch) | |
| tree | 5b2d1e88df68f28e605ff8edccfdcca3203f38a0 /LUFA/Drivers/USB/LowLevel/DevChapter9.c | |
| parent | c99f6657a6335b0a70fac9c6278672057e57f525 (diff) | |
| download | lufa-d4952265a6de30e2cc205cb5b65c8b43ab483fb5.tar.gz lufa-d4952265a6de30e2cc205cb5b65c8b43ab483fb5.tar.bz2 lufa-d4952265a6de30e2cc205cb5b65c8b43ab483fb5.zip  | |
Ensure that unsupported SetFeature/ClearFeature request targets cause a STALL back to the host.
Diffstat (limited to 'LUFA/Drivers/USB/LowLevel/DevChapter9.c')
| -rw-r--r-- | LUFA/Drivers/USB/LowLevel/DevChapter9.c | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.c b/LUFA/Drivers/USB/LowLevel/DevChapter9.c index 3f0976b5c..39b7a62e4 100644 --- a/LUFA/Drivers/USB/LowLevel/DevChapter9.c +++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.c @@ -307,18 +307,19 @@ static void USB_Device_GetStatus(void)  	switch (USB_ControlRequest.bmRequestType)
  	{
 +#if !defined(NO_DEVICE_SELF_POWER) || !defined(NO_DEVICE_REMOTE_WAKEUP)	
  		case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE):
 -#if !defined(NO_DEVICE_SELF_POWER)
 +	#if !defined(NO_DEVICE_SELF_POWER)
  			if (USB_CurrentlySelfPowered)
  			  CurrentStatus |= FEATURE_SELFPOWERED_ENABLED;
 -#endif
 +	#endif
 -#if !defined(NO_DEVICE_REMOTE_WAKEUP)			
 +	#if !defined(NO_DEVICE_REMOTE_WAKEUP)			
  			if (USB_RemoteWakeupEnabled)
  			  CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;
 -#endif
 -
 +	#endif
  			break;
 +#endif
  #if !defined(CONTROL_ONLY_DEVICE)
  		case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT):
  			Endpoint_SelectEndpoint(USB_ControlRequest.wIndex & 0xFF);
 @@ -345,15 +346,15 @@ static void USB_Device_ClearSetFeature(void)  {	
  	switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT)
  	{
 -		case REQREC_DEVICE:
  #if !defined(NO_DEVICE_REMOTE_WAKEUP)			
 +		case REQREC_DEVICE:
  			if ((uint8_t)USB_ControlRequest.wValue == FEATURE_REMOTE_WAKEUP)
  			  USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
  			else
  			  return;
 -#endif
  			break;			
 +#endif
  #if !defined(CONTROL_ONLY_DEVICE)
  		case REQREC_ENDPOINT:
  			if ((uint8_t)USB_ControlRequest.wValue == FEATURE_ENDPOINT_HALT)
 @@ -382,6 +383,8 @@ static void USB_Device_ClearSetFeature(void)  			break;
  #endif
 +		default:
 +			return;
  	}
  	Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
  | 
