Oops - Bootloader optimizations to GetDescriptor() don't work, as the Configuration...
[pub/USBasp.git] / Bootloaders / HID / Descriptors.c
index f79d346..fef43ab 100644 (file)
@@ -154,23 +154,33 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                     const uint8_t wIndex,\r
                                     const void** const DescriptorAddress)\r
 {\r
-       const uint8_t DescriptorType = (wValue >> 8);\r
+       const uint8_t DescriptorType   = (wValue >> 8);\r
 \r
        const void* Address = NULL;\r
        uint16_t    Size    = NO_DESCRIPTOR;\r
        \r
+       /* If/Else If chain compiles slightly smaller than a switch case */\r
        if (DescriptorType == DTYPE_Device)\r
-         Address = &DeviceDescriptor;\r
+       {\r
+               Address = &DeviceDescriptor;\r
+               Size    = sizeof(USB_Descriptor_Device_t);      \r
+       }\r
        else if (DescriptorType == DTYPE_Configuration)\r
-         Address = &ConfigurationDescriptor;\r
+       {\r
+               Address = &ConfigurationDescriptor;\r
+               Size    = sizeof(USB_Descriptor_Configuration_t);       \r
+       }\r
        else if (DescriptorType == HID_DTYPE_HID)\r
-         Address = &ConfigurationDescriptor.HID_VendorHID;\r
+       {\r
+               Address = &ConfigurationDescriptor.HID_VendorHID;\r
+               Size    = sizeof(USB_HID_Descriptor_HID_t);\r
+       }\r
        else\r
-         Address = &HIDReport;\r
+       {\r
+               Address = &HIDReport;\r
+               Size    = sizeof(HIDReport);\r
+       }\r
 \r
-       if (Address != NULL)\r
-         Size = (Address == &HIDReport) ? sizeof(HIDReport) : ((USB_Descriptor_Header_t*)Address)->Size;\r
-       \r
        *DescriptorAddress = Address;\r
        return Size;\r
 }\r