Mark build test makefiles as being incompatible with parallel make builds, as they...
[pub/USBasp.git] / Bootloaders / DFU / Descriptors.c
index 6fa0af7..3a1a2e2 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
+     Copyright (C) Dean Camera, 2012.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -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},
 
@@ -57,8 +57,8 @@ USB_Descriptor_Device_t DeviceDescriptor =
        .ProductID              = PRODUCT_ID_CODE,
        .ReleaseNumber          = VERSION_BCD(00.00),
 
-       .ManufacturerStrIndex   = NO_DESCRIPTOR,
-       .ProductStrIndex        = 0x01,
+       .ManufacturerStrIndex   = 0x01,
+       .ProductStrIndex        = 0x02,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -69,21 +69,21 @@ 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 =
                {
-                       .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),
-                       .TotalInterfaces          = 1,
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
+                       .TotalInterfaces        = 1,
 
-                       .ConfigurationNumber      = 1,
-                       .ConfigurationStrIndex    = NO_DESCRIPTOR,
+                       .ConfigurationNumber    = 1,
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,
 
-                       .ConfigAttributes         = USB_CONFIG_ATTR_BUSPOWERED,
+                       .ConfigAttributes       = USB_CONFIG_ATTR_RESERVED,
 
-                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
                },
 
        .DFU_Interface =
@@ -111,7 +111,7 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor =
                        .DetachTimeout          = 0x0000,
                        .TransferSize           = 0x0C00,
 
-                       .DFUSpecification       = VERSION_BCD(01.01)
+                       .DFUSpecification       = VERSION_BCD(01.10)
                }
 };
 
@@ -119,18 +119,29 @@ 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},
 
        .UnicodeString          = {LANGUAGE_ID_ENG}
 };
 
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
+ *  Descriptor.
+ */
+const USB_Descriptor_String_t PROGMEM ManufacturerString =
+{
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
+
+       .UnicodeString          = L"Dean Camera"
+};
+
 /** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
  *  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},
 
@@ -169,7 +180,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                Address = &LanguageString;
                                Size    = LanguageString.Header.Size;
                        }
-                       else
+                       else if (DescriptorNumber == 0x01)
+                       {
+                               Address = &ManufacturerString;
+                               Size    = ManufacturerString.Header.Size;
+                       }
+                       else if (DescriptorNumber == 0x02)
                        {
                                Address = &ProductString;
                                Size    = ProductString.Header.Size;