Commit 355d12e0 authored by Dean Camera's avatar Dean Camera
Browse files

Tighten up the Bootloader GetDescriptor() function, as the descriptor size can...

Tighten up the Bootloader GetDescriptor() function, as the descriptor size can be extracted from the header after the address has been found.
parent a95d2241
...@@ -206,38 +206,29 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ...@@ -206,38 +206,29 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint8_t wIndex, const uint8_t wIndex,
const void** const DescriptorAddress) const void** const DescriptorAddress)
{ {
const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorType = (wValue >> 8);
const uint8_t DescriptorNumber = (wValue & 0xFF); const uint8_t DescriptorNumber = (wValue & 0xFF);
const void* Address = NULL; const void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType) switch (DescriptorType)
{ {
case DTYPE_Device: case DTYPE_Device:
Address = &DeviceDescriptor; Address = &DeviceDescriptor;
Size = sizeof(USB_Descriptor_Device_t);
break; break;
case DTYPE_Configuration: case DTYPE_Configuration:
Address = &ConfigurationDescriptor; Address = &ConfigurationDescriptor;
Size = sizeof(USB_Descriptor_Configuration_t);
break; break;
case DTYPE_String: case DTYPE_String:
if (!(DescriptorNumber)) if (!(DescriptorNumber))
{ Address = &LanguageString;
Address = &LanguageString;
Size = LanguageString.Header.Size;
}
else else
{ Address = &ProductString;
Address = &ProductString;
Size = ProductString.Header.Size;
}
break; break;
} }
*DescriptorAddress = Address; *DescriptorAddress = Address;
return Size; return (Address != NULL) ? ((USB_Descriptor_Header_t*)Address)->Size : NO_DESCRIPTOR;
} }
...@@ -73,17 +73,17 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = ...@@ -73,17 +73,17 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor =
{ {
.Config = .Config =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
.TotalInterfaces = 1, .TotalInterfaces = 1,
.ConfigurationNumber = 1, .ConfigurationNumber = 1,
.ConfigurationStrIndex = NO_DESCRIPTOR, .ConfigurationStrIndex = NO_DESCRIPTOR,
.ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED,
.MaxPowerConsumption = USB_CONFIG_POWER_MA(100) .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
}, },
.DFU_Interface = .DFU_Interface =
...@@ -147,38 +147,29 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, ...@@ -147,38 +147,29 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint8_t wIndex, const uint8_t wIndex,
const void** const DescriptorAddress) const void** const DescriptorAddress)
{ {
const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorType = (wValue >> 8);
const uint8_t DescriptorNumber = (wValue & 0xFF); const uint8_t DescriptorNumber = (wValue & 0xFF);
const void* Address = NULL; const void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType) switch (DescriptorType)
{ {
case DTYPE_Device: case DTYPE_Device:
Address = &DeviceDescriptor; Address = &DeviceDescriptor;
Size = sizeof(USB_Descriptor_Device_t);
break; break;
case DTYPE_Configuration: case DTYPE_Configuration:
Address = &ConfigurationDescriptor; Address = &ConfigurationDescriptor;
Size = sizeof(USB_Descriptor_Configuration_t);
break; break;
case DTYPE_String: case DTYPE_String:
if (!(DescriptorNumber)) if (!(DescriptorNumber))
{ Address = &LanguageString;
Address = &LanguageString;
Size = LanguageString.Header.Size;
}
else else
{ Address = &ProductString;
Address = &ProductString;
Size = ProductString.Header.Size;
}
break; break;
} }
*DescriptorAddress = Address; *DescriptorAddress = Address;
return Size; return (Address != NULL) ? ((USB_Descriptor_Header_t*)Address)->Size : NO_DESCRIPTOR;
} }
...@@ -137,21 +137,21 @@ ...@@ -137,21 +137,21 @@
*/ */
typedef struct typedef struct
{ {
USB_Descriptor_Header_t Header; /**< Standard descriptor header structure */ USB_Descriptor_Header_t Header; /**< Standard descriptor header structure */
uint8_t Attributes; /**< DFU device attributes, a mask comprising of the uint8_t Attributes; /**< DFU device attributes, a mask comprising of the
* ATTR_* macros listed in this source file * ATTR_* macros listed in this source file
*/ */
uint16_t DetachTimeout; /**< Timeout in milliseconds between a USB_DETACH uint16_t DetachTimeout; /**< Timeout in milliseconds between a USB_DETACH
* command being issued and the device detaching * command being issued and the device detaching
* from the USB bus * from the USB bus
*/ */
uint16_t TransferSize; /**< Maximum number of bytes the DFU device can accept uint16_t TransferSize; /**< Maximum number of bytes the DFU device can accept
* from the host in a transaction * from the host in a transaction
*/ */
uint16_t DFUSpecification; /**< BCD packed DFU specification number this DFU uint16_t DFUSpecification; /**< BCD packed DFU specification number this DFU
* device complies with * device complies with
*/ */
} USB_Descriptor_DFU_Functional_t; } USB_Descriptor_DFU_Functional_t;
/** Type define for the device configuration descriptor structure. This must be defined in the /** Type define for the device configuration descriptor structure. This must be defined in the
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment