diff options
author | Dean Camera <[email protected]> | 2009-12-21 08:29:12 +0000 |
---|---|---|
committer | Dean Camera <[email protected]> | 2009-12-21 08:29:12 +0000 |
commit | d4952265a6de30e2cc205cb5b65c8b43ab483fb5 (patch) | |
tree | 5b2d1e88df68f28e605ff8edccfdcca3203f38a0 | |
parent | c99f6657a6335b0a70fac9c6278672057e57f525 (diff) | |
download | qmk_firmware-d4952265a6de30e2cc205cb5b65c8b43ab483fb5.tar.gz qmk_firmware-d4952265a6de30e2cc205cb5b65c8b43ab483fb5.zip |
Ensure that unsupported SetFeature/ClearFeature request targets cause a STALL back to the host.
-rw-r--r-- | Bootloaders/TeensyHID/makefile | 2 | ||||
-rw-r--r-- | LUFA/Drivers/USB/LowLevel/DevChapter9.c | 17 | ||||
-rw-r--r-- | LUFA/Drivers/USB/LowLevel/Endpoint.c | 3 | ||||
-rw-r--r-- | LUFA/Drivers/USB/LowLevel/Pipe.c | 3 |
4 files changed, 17 insertions, 8 deletions
diff --git a/Bootloaders/TeensyHID/makefile b/Bootloaders/TeensyHID/makefile index 8de8f8f47b..e728c491fb 100644 --- a/Bootloaders/TeensyHID/makefile +++ b/Bootloaders/TeensyHID/makefile @@ -80,7 +80,7 @@ BOARD = # does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
-F_CPU = 16000000
+F_CPU = 8000000
# Input clock frequency.
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.c b/LUFA/Drivers/USB/LowLevel/DevChapter9.c index 3f0976b5cb..39b7a62e46 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);
diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.c b/LUFA/Drivers/USB/LowLevel/Endpoint.c index b0c09ca8d9..2244996d4d 100644 --- a/LUFA/Drivers/USB/LowLevel/Endpoint.c +++ b/LUFA/Drivers/USB/LowLevel/Endpoint.c @@ -207,6 +207,9 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length return ENDPOINT_RWSTREAM_NoError;
}
+/* The following abuses the C preprocessor in order to copy-past common code with slight alterations,
+ * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
+
#define TEMPLATE_FUNC_NAME Endpoint_Write_Stream_LE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c index 5c7b32af23..897c50b4f3 100644 --- a/LUFA/Drivers/USB/LowLevel/Pipe.c +++ b/LUFA/Drivers/USB/LowLevel/Pipe.c @@ -199,6 +199,9 @@ uint8_t Pipe_Discard_Stream(uint16_t Length return PIPE_RWSTREAM_NoError;
}
+/* The following abuses the C preprocessor in order to copy-past common code with slight alterations,
+ * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
+
#define TEMPLATE_FUNC_NAME Pipe_Write_Stream_LE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_TOKEN PIPE_TOKEN_OUT
|