Fixed USB_RemoteWakeupEnabled flag never being set (the REMOTE WAKEUP Set Feature...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / DevChapter9.c
index bf2b127..bf1cb6c 100644 (file)
@@ -46,31 +46,31 @@ void USB_Device_ProcessControlPacket(void)
        \r
        for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)\r
          *(RequestHeader++) = Endpoint_Read_Byte();\r
+         \r
+       uint8_t bmRequestType = USB_ControlRequest.bmRequestType;\r
        \r
        switch (USB_ControlRequest.bRequest)\r
        {\r
                case REQ_GetStatus:\r
-                       if ((USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||\r
-                           (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT)))\r
+                       if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||\r
+                           (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT)))\r
                        {\r
                                USB_Device_GetStatus();\r
                                RequestHandled = true;\r
                        }\r
 \r
                        break;\r
-#if !defined(FEATURELESS_CONTROL_ONLY_DEVICE)\r
                case REQ_ClearFeature:\r
                case REQ_SetFeature:\r
-                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT))\r
+                       if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT))\r
                        {\r
                                USB_Device_ClearSetFeature();\r
                                RequestHandled = true;\r
                        }\r
 \r
                        break;\r
-#endif\r
                case REQ_SetAddress:\r
-                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))\r
+                       if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))\r
                        {\r
                                USB_Device_SetAddress();\r
                                RequestHandled = true;\r
@@ -78,8 +78,8 @@ void USB_Device_ProcessControlPacket(void)
 \r
                        break;\r
                case REQ_GetDescriptor:\r
-                       if ((USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||\r
-                           (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE)))\r
+                       if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||\r
+                           (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE)))\r
                        {\r
                                USB_Device_GetDescriptor();\r
                                RequestHandled = true;\r
@@ -87,7 +87,7 @@ void USB_Device_ProcessControlPacket(void)
                        \r
                        break;\r
                case REQ_GetConfiguration:\r
-                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))\r
+                       if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))\r
                        {\r
                                USB_Device_GetConfiguration();\r
                                RequestHandled = true;\r
@@ -95,7 +95,7 @@ void USB_Device_ProcessControlPacket(void)
 \r
                        break;\r
                case REQ_SetConfiguration:\r
-                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))\r
+                       if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))\r
                        {\r
                                USB_Device_SetConfiguration();\r
                                RequestHandled = true;\r
@@ -124,7 +124,7 @@ static void USB_Device_SetAddress(void)
        \r
        while (!(Endpoint_IsINReady()));\r
 \r
-       UDADDR = ((1 << ADDEN) | (USB_ControlRequest.wValue & 0x7F));\r
+       UDADDR = ((1 << ADDEN) | ((uint8_t)USB_ControlRequest.wValue & 0x7F));\r
 \r
        return;\r
 }\r
@@ -134,17 +134,17 @@ static void USB_Device_SetConfiguration(void)
        bool    AlreadyConfigured = (USB_ConfigurationNumber != 0);\r
 \r
 #if defined(USE_SINGLE_DEVICE_CONFIGURATION)\r
-       if (USB_ControlRequest.wValue > 1)\r
+       if ((uint8_t)USB_ControlRequest.wValue > 1)\r
 #else\r
        USB_Descriptor_Device_t* DevDescriptorPtr;\r
 \r
        if ((USB_GetDescriptor((DTYPE_Device << 8), 0, (void*)&DevDescriptorPtr) == NO_DESCRIPTOR) ||\r
        #if defined(USE_RAM_DESCRIPTORS)\r
-           (USB_ControlRequest.wValue > DevDescriptorPtr->NumberOfConfigurations))\r
+           ((uint8_t)USB_ControlRequest.wValue > DevDescriptorPtr->NumberOfConfigurations))\r
        #elif defined (USE_EEPROM_DESCRIPTORS)\r
-           (USB_ControlRequest.wValue > eeprom_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))\r
+           ((uint8_t)USB_ControlRequest.wValue > eeprom_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))\r
        #else\r
-           (USB_ControlRequest.wValue > pgm_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))\r
+           ((uint8_t)USB_ControlRequest.wValue > pgm_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))\r
        #endif\r
 #endif\r
        {\r
@@ -153,7 +153,7 @@ static void USB_Device_SetConfiguration(void)
        \r
        Endpoint_ClearSETUP();\r
 \r
-       USB_ConfigurationNumber = USB_ControlRequest.wValue;\r
+       USB_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue;\r
 \r
        Endpoint_ClearIN();\r
 \r
@@ -245,9 +245,9 @@ static void USB_Device_GetStatus(void)
                          CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;\r
                        \r
                        break;\r
-#if !defined(FEATURELESS_CONTROL_ONLY_DEVICE)\r
+#if !defined(CONTROL_ONLY_DEVICE)\r
                case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT):\r
-                       Endpoint_SelectEndpoint(USB_ControlRequest.wIndex);\r
+                       Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex);\r
 \r
                        CurrentStatus = Endpoint_IsStalled();\r
 \r
@@ -267,15 +267,20 @@ static void USB_Device_GetStatus(void)
        Endpoint_ClearOUT();\r
 }\r
 \r
-#if !defined(FEATURELESS_CONTROL_ONLY_DEVICE)\r
 static void USB_Device_ClearSetFeature(void)\r
 {      \r
        switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT)\r
        {\r
+               case REQREC_DEVICE:\r
+                       if ((uint8_t)USB_ControlRequest.wValue == FEATURE_REMOTE_WAKEUP)\r
+                         USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);\r
+                       \r
+                       break;                  \r
+#if !defined(CONTROL_ONLY_DEVICE)\r
                case REQREC_ENDPOINT:\r
-                       if (USB_ControlRequest.wValue == FEATURE_ENDPOINT_HALT)\r
+                       if ((uint8_t)USB_ControlRequest.wValue == FEATURE_ENDPOINT_HALT)\r
                        {\r
-                               uint8_t EndpointIndex = (USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);\r
+                               uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);\r
                                \r
                                if (EndpointIndex != ENDPOINT_CONTROLEP)\r
                                {\r
@@ -302,8 +307,8 @@ static void USB_Device_ClearSetFeature(void)
                        }\r
                        \r
                        break;\r
+#endif\r
        }\r
 }\r
-#endif\r
 \r
 #endif\r