Update UC3 platform driver support to use the bitmasks defined in the header files...
[pub/USBasp.git] / Bootloaders / DFU / Descriptors.c
index 9baa889..b9c77aa 100644 (file)
@@ -42,7 +42,7 @@
  *  number of device configurations. The descriptor is read out by the USB host when the enumeration
  *  process begins.
  */
-USB_Descriptor_Device_t DeviceDescriptor =
+const USB_Descriptor_Device_t DeviceDescriptor =
 {
        .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 
@@ -69,7 +69,7 @@ USB_Descriptor_Device_t DeviceDescriptor =
  *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
  *  a configuration so that the host may correctly communicate with the USB device.
  */
-USB_Descriptor_Configuration_t ConfigurationDescriptor =
+const USB_Descriptor_Configuration_t ConfigurationDescriptor =
 {
        .Config =
                {
@@ -119,7 +119,7 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor =
  *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
  *  via the language ID table available at USB.org what languages the device supports for its string descriptors.
  */
-USB_Descriptor_String_t LanguageString =
+const USB_Descriptor_String_t LanguageString =
 {
        .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
 
@@ -130,7 +130,7 @@ USB_Descriptor_String_t LanguageString =
  *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
  *  Descriptor.
  */
-USB_Descriptor_String_t ProductString =
+const USB_Descriptor_String_t ProductString =
 {
        .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},
 
@@ -147,29 +147,38 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                     const uint8_t wIndex,
                                     const void** const DescriptorAddress)
 {
-       const uint8_t DescriptorType   = (wValue >> 8);
-       const uint8_t DescriptorNumber = (wValue & 0xFF);
+       const uint8_t  DescriptorType   = (wValue >> 8);
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);
 
        const void* Address = NULL;
+       uint16_t    Size    = NO_DESCRIPTOR;
 
        switch (DescriptorType)
        {
                case DTYPE_Device:
                        Address = &DeviceDescriptor;
+                       Size    = sizeof(USB_Descriptor_Device_t);
                        break;
-               case DTYPE_Configuration:
+               case DTYPE_Configuration: 
                        Address = &ConfigurationDescriptor;
+                       Size    = sizeof(USB_Descriptor_Configuration_t);
                        break;
-               case DTYPE_String:
+               case DTYPE_String: 
                        if (!(DescriptorNumber))
-                         Address = &LanguageString;
+                       {
+                               Address = &LanguageString;
+                               Size    = LanguageString.Header.Size;
+                       }
                        else
-                         Address = &ProductString;
-
+                       {
+                               Address = &ProductString;
+                               Size    = ProductString.Header.Size;
+                       }
+                       
                        break;
        }
-
+       
        *DescriptorAddress = Address;
-       return (Address != NULL) ? ((USB_Descriptor_Header_t*)Address)->Size : NO_DESCRIPTOR;
+       return Size;
 }