Fixed broken DFU bootloader, added XPLAIN support for bootloader start when XCK jumpe...
[pub/USBasp.git] / LUFA / Drivers / USB / HighLevel / DeviceStandardReq.c
index 93b4440..cceffc9 100644 (file)
@@ -48,72 +48,61 @@ bool    USB_RemoteWakeupEnabled;
 
 void USB_Device_ProcessControlRequest(void)
 {
-       bool     RequestHandled = false;
        uint8_t* RequestHeader  = (uint8_t*)&USB_ControlRequest;
 
        for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
          *(RequestHeader++) = Endpoint_Read_Byte();
 
-       uint8_t bmRequestType = USB_ControlRequest.bmRequestType;
+       EVENT_USB_Device_ControlRequest();
 
-       switch (USB_ControlRequest.bRequest)
+       if (Endpoint_IsSETUPReceived())
        {
-               case REQ_GetStatus:
-                       if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
-                           (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT)))
-                       {
-                               USB_Device_GetStatus();
-                               RequestHandled = true;
-                       }
+               uint8_t bmRequestType = USB_ControlRequest.bmRequestType;
 
-                       break;
-               case REQ_ClearFeature:
-               case REQ_SetFeature:
-                       if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) ||
-                           (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT)))
-                       {
-                               USB_Device_ClearSetFeature();
-                               RequestHandled = true;
-                       }
+               switch (USB_ControlRequest.bRequest)
+               {
+                       case REQ_GetStatus:
+                               if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
+                                       (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT)))
+                               {
+                                       USB_Device_GetStatus();
+                               }
 
-                       break;
-               case REQ_SetAddress:
-                       if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
-                       {
-                               USB_Device_SetAddress();
-                               RequestHandled = true;
-                       }
+                               break;
+                       case REQ_ClearFeature:
+                       case REQ_SetFeature:
+                               if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) ||
+                                       (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT)))
+                               {
+                                       USB_Device_ClearSetFeature();
+                               }
 
-                       break;
-               case REQ_GetDescriptor:
-                       if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
-                           (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE)))
-                       {
-                               USB_Device_GetDescriptor();
-                               RequestHandled = true;
-                       }
+                               break;
+                       case REQ_SetAddress:
+                               if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
+                                 USB_Device_SetAddress();
 
-                       break;
-               case REQ_GetConfiguration:
-                       if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
-                       {
-                               USB_Device_GetConfiguration();
-                               RequestHandled = true;
-                       }
+                               break;
+                       case REQ_GetDescriptor:
+                               if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
+                                       (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE)))
+                               {
+                                       USB_Device_GetDescriptor();
+                               }
 
-                       break;
-               case REQ_SetConfiguration:
-                       if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
-                       {
-                               USB_Device_SetConfiguration();
-                               RequestHandled = true;
-                       }
+                               break;
+                       case REQ_GetConfiguration:
+                               if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
+                                 USB_Device_GetConfiguration();
 
-                       break;
-       }
+                               break;
+                       case REQ_SetConfiguration:
+                               if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
+                                 USB_Device_SetConfiguration();
 
-       if (!(RequestHandled))
-         EVENT_USB_Device_UnhandledControlRequest();
+                               break;
+               }
+       }
 
        if (Endpoint_IsSETUPReceived())
        {
@@ -209,12 +198,6 @@ static void USB_Device_GetConfiguration(void)
 }
 
 #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
-static char USB_Device_NibbleToASCII(uint8_t Nibble)
-{
-       Nibble &= 0x0F;
-       return (Nibble >= 10) ? (('A' - 10) + Nibble) : ('0' + Nibble);
-}
-
 static void USB_Device_GetInternalSerialDescriptor(void)
 {
        struct
@@ -240,7 +223,10 @@ static void USB_Device_GetInternalSerialDescriptor(void)
                                SigReadAddress++;
                        }
 
-                       SignatureDescriptor.UnicodeString[SerialCharNum] = USB_Device_NibbleToASCII(SerialByte);
+                       SerialByte &= 0x0F;
+
+                       SignatureDescriptor.UnicodeString[SerialCharNum] = (SerialByte >= 10) ?
+                                                                          (('A' - 10) + SerialByte) : ('0' + SerialByte);
                }
        }