Add symbolic names for USB Device String Descriptors within the demos, applications...
authorDean Camera <dean@fourwalledcubicle.com>
Wed, 15 May 2013 16:40:25 +0000 (18:40 +0200)
committerDean Camera <dean@fourwalledcubicle.com>
Wed, 15 May 2013 16:40:25 +0000 (18:40 +0200)
90 files changed:
Bootloaders/CDC/Descriptors.c
Bootloaders/CDC/Descriptors.h
Bootloaders/DFU/Descriptors.c
Bootloaders/DFU/Descriptors.h
Bootloaders/Printer/Descriptors.c
Bootloaders/Printer/Descriptors.h
Demos/Device/ClassDriver/AudioInput/Descriptors.c
Demos/Device/ClassDriver/AudioInput/Descriptors.h
Demos/Device/ClassDriver/AudioOutput/Descriptors.c
Demos/Device/ClassDriver/AudioOutput/Descriptors.h
Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.c
Demos/Device/ClassDriver/DualVirtualSerial/Descriptors.h
Demos/Device/ClassDriver/GenericHID/Descriptors.c
Demos/Device/ClassDriver/GenericHID/Descriptors.h
Demos/Device/ClassDriver/Joystick/Descriptors.c
Demos/Device/ClassDriver/Joystick/Descriptors.h
Demos/Device/ClassDriver/Keyboard/Descriptors.c
Demos/Device/ClassDriver/Keyboard/Descriptors.h
Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c
Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h
Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.c
Demos/Device/ClassDriver/KeyboardMouseMultiReport/Descriptors.h
Demos/Device/ClassDriver/MIDI/Descriptors.c
Demos/Device/ClassDriver/MIDI/Descriptors.h
Demos/Device/ClassDriver/MassStorage/Descriptors.c
Demos/Device/ClassDriver/MassStorage/Descriptors.h
Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.c
Demos/Device/ClassDriver/MassStorageKeyboard/Descriptors.h
Demos/Device/ClassDriver/Mouse/Descriptors.c
Demos/Device/ClassDriver/Mouse/Descriptors.h
Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c
Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h
Demos/Device/ClassDriver/VirtualSerial/Descriptors.c
Demos/Device/ClassDriver/VirtualSerial/Descriptors.h
Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.c
Demos/Device/ClassDriver/VirtualSerialMassStorage/Descriptors.h
Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.c
Demos/Device/ClassDriver/VirtualSerialMouse/Descriptors.h
Demos/Device/Incomplete/TestAndMeasurement/Descriptors.c
Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h
Demos/Device/LowLevel/AudioInput/Descriptors.c
Demos/Device/LowLevel/AudioInput/Descriptors.h
Demos/Device/LowLevel/AudioOutput/Descriptors.c
Demos/Device/LowLevel/AudioOutput/Descriptors.h
Demos/Device/LowLevel/DualVirtualSerial/Descriptors.c
Demos/Device/LowLevel/DualVirtualSerial/Descriptors.h
Demos/Device/LowLevel/GenericHID/Descriptors.c
Demos/Device/LowLevel/GenericHID/Descriptors.h
Demos/Device/LowLevel/Joystick/Descriptors.c
Demos/Device/LowLevel/Joystick/Descriptors.h
Demos/Device/LowLevel/Keyboard/Descriptors.c
Demos/Device/LowLevel/Keyboard/Descriptors.h
Demos/Device/LowLevel/KeyboardMouse/Descriptors.c
Demos/Device/LowLevel/KeyboardMouse/Descriptors.h
Demos/Device/LowLevel/MIDI/Descriptors.c
Demos/Device/LowLevel/MIDI/Descriptors.h
Demos/Device/LowLevel/MassStorage/Descriptors.c
Demos/Device/LowLevel/MassStorage/Descriptors.h
Demos/Device/LowLevel/Mouse/Descriptors.c
Demos/Device/LowLevel/Mouse/Descriptors.h
Demos/Device/LowLevel/RNDISEthernet/Descriptors.c
Demos/Device/LowLevel/RNDISEthernet/Descriptors.h
Demos/Device/LowLevel/VirtualSerial/Descriptors.c
Demos/Device/LowLevel/VirtualSerial/Descriptors.h
Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.c
Demos/DualRole/ClassDriver/MouseHostDevice/Descriptors.h
Projects/AVRISP-MKII/AVRISPDescriptors.c
Projects/AVRISP-MKII/AVRISPDescriptors.h
Projects/Benito/Descriptors.c
Projects/Benito/Descriptors.h
Projects/LEDNotifier/Descriptors.c
Projects/LEDNotifier/Descriptors.h
Projects/MIDIToneGenerator/Descriptors.c
Projects/MIDIToneGenerator/Descriptors.h
Projects/Magstripe/Descriptors.c
Projects/Magstripe/Descriptors.h
Projects/MediaController/Descriptors.c
Projects/MediaController/Descriptors.h
Projects/RelayBoard/Descriptors.c
Projects/RelayBoard/Descriptors.h
Projects/SerialToLCD/Descriptors.c
Projects/SerialToLCD/Descriptors.h
Projects/TempDataLogger/Descriptors.c
Projects/TempDataLogger/Descriptors.h
Projects/USBtoSerial/Descriptors.c
Projects/USBtoSerial/Descriptors.h
Projects/Webserver/Descriptors.c
Projects/Webserver/Descriptors.h
Projects/XPLAINBridge/USARTDescriptors.c
Projects/XPLAINBridge/USARTDescriptors.h

index 9c144dd..03a4a5d 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t DeviceDescriptor =
        .ProductID              = 0x204A,
        .ReleaseNumber          = VERSION_BCD(01.00),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -234,17 +234,17 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                        Size    = sizeof(USB_Descriptor_Configuration_t);
                        break;
                case DTYPE_String:
-                       if (!(DescriptorNumber))
+                       if (DescriptorNumber == STRING_ID_Language)
                        {
                                Address = &LanguageString;
                                Size    = LanguageString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x01)
+                       else if (DescriptorNumber == STRING_ID_Manufacturer)
                        {
                                Address = &ManufacturerString;
                                Size    = ManufacturerString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x02)
+                       else if (DescriptorNumber == STRING_ID_Product)
                        {
                                Address = &ProductString;
                                Size    = ProductString.Header.Size;
index 8c358de..24d1a39 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 3d70cf5..5901dad 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t DeviceDescriptor =
        .ProductID              = PRODUCT_ID_CODE,
        .ReleaseNumber          = VERSION_BCD(00.00),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -175,17 +175,17 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                        Size    = sizeof(USB_Descriptor_Configuration_t);
                        break;
                case DTYPE_String:
-                       if (!(DescriptorNumber))
+                       if (DescriptorNumber == STRING_ID_Language)
                        {
                                Address = &LanguageString;
                                Size    = LanguageString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x01)
+                       else if (DescriptorNumber == STRING_ID_Manufacturer)
                        {
                                Address = &ManufacturerString;
                                Size    = ManufacturerString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x02)
+                       else if (DescriptorNumber == STRING_ID_Product)
                        {
                                Address = &ProductString;
                                Size    = ProductString.Header.Size;
index 71ae30a..c33e388 100644 (file)
                        USB_Descriptor_DFU_Functional_t       DFU_Functional;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 0bf32c6..0fbb3ae 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t DeviceDescriptor =
        .ProductID              = 0x206B,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -186,15 +186,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = LanguageString.Header.Size;
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = ManufacturerString.Header.Size;
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = ProductString.Header.Size;
                                        break;
index 1265f21..fba326a 100644 (file)
                        USB_Descriptor_Endpoint_t             Printer_DataOutEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 9056573..eb4c21c 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2047,
        .ReleaseNumber          = VERSION_BCD(00.02),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 81ea989..1bb38ff 100644 (file)
                        USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 3012bb4..4ced7a0 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2046,
        .ReleaseNumber          = VERSION_BCD(00.02),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index d5def43..80f1426 100644 (file)
                        USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index fa593c6..d0992de 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204E,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -352,15 +352,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 2c01ba0..1105ab7 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 83f475f..57c3502 100644 (file)
@@ -75,8 +75,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204F,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -204,15 +204,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 31e9c45..b598e98 100644 (file)
@@ -40,7 +40,7 @@
                #include <avr/pgmspace.h>
 
                #include <LUFA/Drivers/USB/USB.h>
-               
+
                #include "Config/AppConfig.h"
 
        /* Type Defines: */
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Generic HID reporting IN endpoint. */
                #define GENERIC_IN_EPADDR         (ENDPOINT_DIR_IN | 1)
index ad96b4c..8a6ef20 100644 (file)
@@ -75,8 +75,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2043,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -204,15 +204,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 93315ee..89c0584 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Joystick HID reporting IN endpoint. */
                #define JOYSTICK_EPADDR              (ENDPOINT_DIR_IN | 1)
index 7b5ee30..f40e3b9 100644 (file)
@@ -71,8 +71,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2042,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -200,15 +200,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 6821c15..abaf9c6 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Keyboard HID reporting IN endpoint. */
                #define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN | 1)
index 9920576..c3b2e2c 100644 (file)
@@ -87,8 +87,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204D,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -253,15 +253,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index b4b5767..27120eb 100644 (file)
                        USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Keyboard HID reporting IN endpoint. */
                #define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN | 1)
index 1cd4493..a361473 100644 (file)
@@ -134,8 +134,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2066,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -263,15 +263,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 8697bdf..a47d185 100644 (file)
                        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the HID reporting IN endpoint. */
                #define HID_IN_EPADDR             (ENDPOINT_DIR_IN | 1)
index c83c853..5413f27 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2048,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -306,15 +306,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 9d41d7c..92c6c38 100644 (file)
                        USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index e422b61..d069bce 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2045,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -186,15 +186,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 15ee5ad..3b9a96c 100644 (file)
@@ -42,7 +42,7 @@
                #include <LUFA/Drivers/USB/USB.h>
 
                #include "Config/AppConfig.h"
-               
+
        /* Macros: */
                /** Endpoint address of the Mass Storage device-to-host data IN endpoint. */
                #define MASS_STORAGE_IN_EPADDR         (ENDPOINT_DIR_IN  | 3)
                        USB_Descriptor_Endpoint_t             MS_DataOutEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 8a5b5fc..2209d51 100644 (file)
@@ -73,8 +73,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2061,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -238,15 +238,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index cd9552c..2b70e11 100644 (file)
@@ -43,7 +43,7 @@
                #include <LUFA/Drivers/USB/USB.h>
 
                #include "Config/AppConfig.h"
-               
+
        /* Macros: */
                /** Endpoint address of the Keyboard HID reporting IN endpoint. */
                #define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN  | 1)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 0251cbd..c21a8cc 100644 (file)
@@ -76,8 +76,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2041,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -205,15 +205,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index a0a5ea9..a5380a1 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index ade6833..ca70633 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204C,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -236,15 +236,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 7ae8c22..be50157 100644 (file)
@@ -42,7 +42,7 @@
                #include <avr/pgmspace.h>
 
                #include "Config/AppConfig.h"
-               
+
        /* Macros: */
                /** Endpoint address of the CDC device-to-host notification IN endpoint. */
                #define CDC_NOTIFICATION_EPADDR        (ENDPOINT_DIR_IN  | 3)
                        USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index b6e5325..9432562 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2044,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 439c49e..e2d09b2 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 49fb692..e41a91a 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2068,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -287,15 +287,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 787795b..25d31bf 100644 (file)
                        USB_Descriptor_Endpoint_t                MS_DataOutEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index cd55c11..42c77dd 100644 (file)
@@ -77,8 +77,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2062,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -307,15 +307,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 675e7a3..1bce496 100644 (file)
                USB_Descriptor_Endpoint_t                HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 64f7f40..8bf9237 100644 (file)
@@ -59,8 +59,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2065,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -197,15 +197,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index f44fcee..9beb3d2 100644 (file)
@@ -1,7 +1,7 @@
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2013.
-              
+
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
   Copyright 2013  Dean Camera (dean [at] fourwalledcubicle [dot] com)
   Copyright 2010  Peter Lawrence (majbthrd [at] gmail [dot] com)
 
-  Permission to use, copy, modify, distribute, and sell this 
+  Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
+  without fee, provided that the above copyright notice appear in
   all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
   The author disclaims all warranties with regard to this
@@ -33,7 +33,7 @@
  *
  *  Header file for Descriptors.c.
  */
+
 #ifndef _DESCRIPTORS_H_
 #define _DESCRIPTORS_H_
 
@@ -66,7 +66,7 @@
                typedef struct
                {
                        USB_Descriptor_Configuration_Header_t Config;
-                       
+
                        // Test and Measurement Interface
                        USB_Descriptor_Interface_t            TM_Interface;
                        USB_Descriptor_Endpoint_t             TM_DataOutEndpoint;
                        USB_Descriptor_Endpoint_t             TM_NotificationEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 1e4231f..b3490d0 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2047,
        .ReleaseNumber          = VERSION_BCD(00.02),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index e8a9515..a3d3ec3 100644 (file)
@@ -42,7 +42,7 @@
                #include <avr/pgmspace.h>
 
                #include "Config/AppConfig.h"
-               
+
        /* Macros: */
                /** Endpoint address of the Audio isochronous streaming data IN endpoint. */
                #define AUDIO_STREAM_EPADDR          (ENDPOINT_DIR_IN | 1)
                        USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 9c70329..43f7175 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2046,
        .ReleaseNumber          = VERSION_BCD(00.02),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -304,15 +304,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index f07bc7f..b8ae901 100644 (file)
                        USB_Audio_Descriptor_StreamEndpoint_Spc_t Audio_StreamEndpoint_SPC;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index fa593c6..d0992de 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204E,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -352,15 +352,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index ee8ef48..154ed0c 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 19e281e..bcbb386 100644 (file)
@@ -83,8 +83,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204F,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -222,15 +222,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index b5c7c79..8842334 100644 (file)
@@ -42,7 +42,7 @@
                #include <avr/pgmspace.h>
 
                #include "Config/AppConfig.h"
-               
+
        /* Type Defines: */
                /** Type define for the device configuration descriptor structure. This must be defined in the
                 *  application code, as the configuration descriptor contains several sub-descriptors which
                USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Generic HID reporting IN endpoint. */
                #define GENERIC_IN_EPADDR         (ENDPOINT_DIR_IN  | 1)
index 2b6724b..3762387 100644 (file)
@@ -95,8 +95,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2043,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -224,15 +224,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 5357e5a..f06b3ca 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Joystick HID reporting IN endpoint. */
                #define JOYSTICK_EPADDR           (ENDPOINT_DIR_IN | 1)
index 52b553b..e3da4b6 100644 (file)
@@ -100,8 +100,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2042,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -239,15 +239,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 37fc728..f9d5424 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportOUTEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Keyboard HID reporting IN endpoint. */
                #define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN  | 1)
index 73e65f0..d45cd59 100644 (file)
@@ -135,8 +135,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204D,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -311,15 +311,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 5ae62dd..6d2543a 100644 (file)
                        USB_Descriptor_Endpoint_t             HID2_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Keyboard HID reporting IN endpoint. */
                #define KEYBOARD_IN_EPADDR        (ENDPOINT_DIR_IN  | 1)
index c83c853..5413f27 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2048,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -306,15 +306,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 1044459..1572b1c 100644 (file)
                        USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index e422b61..d069bce 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2045,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -186,15 +186,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 88192ea..dc6748f 100644 (file)
                        USB_Descriptor_Endpoint_t             MS_DataOutEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index edd6709..99780a4 100644 (file)
@@ -95,8 +95,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2041,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -224,15 +224,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index a0a5ea9..a5380a1 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index ade6833..ca70633 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204C,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -236,15 +236,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 91b6096..763bc0c 100644 (file)
                        USB_Descriptor_Endpoint_t             RNDIS_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index b6e5325..9432562 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2044,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 655d867..a704614 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 257c905..6b714eb 100644 (file)
@@ -76,8 +76,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2041,
        .ReleaseNumber          = 0x0000,
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -205,15 +205,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 1a7acc9..eca1e79 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Mouse HID reporting IN endpoint. */
                #define MOUSE_EPADDR              (ENDPOINT_DIR_IN | 1)
index 8f4ef54..61c9206 100644 (file)
@@ -43,7 +43,7 @@
 
        /** Current AVRISP data IN endpoint address. */
        uint8_t AVRISP_CurrDataINEndpointAddress;
-       
+
        /** Saved AVRISP data IN endpoint address in EEPROM. */
        uint8_t AVRISP_CurrDataINEndpointAddress_EEPROM EEMEM;
 #endif
@@ -68,9 +68,9 @@ const USB_Descriptor_Device_t PROGMEM AVRISP_DeviceDescriptor =
        .ProductID              = 0x2104,
        .ReleaseNumber          = VERSION_BCD(02.00),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
-       .SerialNumStrIndex      = 0x03,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
+       .SerialNumStrIndex      = STRING_ID_Serial,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 };
@@ -177,7 +177,7 @@ const USB_Descriptor_String_t PROGMEM AVRISP_ProductString =
 USB_Descriptor_String_t AVRISP_SerialString =
 {
        .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
-       
+
        .UnicodeString          = L"000200012345\0" // Note: Real AVRISP-MKII has the embedded NUL byte, bug in firmware?
 };
 
@@ -199,7 +199,7 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
        uint16_t    Size    = NO_DESCRIPTOR;
 
        *DescriptorMemorySpace = MEMSPACE_FLASH;
-       
+
        switch (DescriptorType)
        {
                case DTYPE_Device:
@@ -219,25 +219,25 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &AVRISP_LanguageString;
                                        Size    = pgm_read_byte(&AVRISP_LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &AVRISP_ManufacturerString;
                                        Size    = pgm_read_byte(&AVRISP_ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &AVRISP_ProductString;
                                        Size    = pgm_read_byte(&AVRISP_ProductString.Header.Size);
                                        break;
-                               case 0x03:
+                               case STRING_ID_Serial:
                                        Address = &AVRISP_SerialString;
                                        Size    = AVRISP_SerialString.Header.Size;
-                                       
+
                                        /* Update serial number to have a different serial based on the current endpoint address */
                                        ((uint16_t*)&AVRISP_SerialString.UnicodeString)[6] = cpu_to_le16('0' + (AVRISP_DATA_IN_EPADDR & ENDPOINT_EPNUM_MASK));
-                                       
+
                                        *DescriptorMemorySpace = MEMSPACE_RAM;
                                        break;
                        }
@@ -259,7 +259,7 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
  *  change.
  */
 void CheckExternalReset(void)
-{      
+{
        /* If an external reset occurred, we need to change compatibility mode */
        AVRISP_NeedCompatibilitySwitch = (MCUSR == (1 << EXTRF));
 
@@ -277,7 +277,7 @@ void UpdateCurrentCompatibilityMode(void)
 {
        /* Load the current IN endpoint address stored in EEPROM */
        AVRISP_CurrDataINEndpointAddress = eeprom_read_byte(&AVRISP_CurrDataINEndpointAddress_EEPROM);
-       
+
        /* Check if we need to switch compatibility modes */
        if (AVRISP_NeedCompatibilitySwitch)
        {
@@ -303,7 +303,7 @@ void UpdateCurrentCompatibilityMode(void)
                        {
                                LEDs_ToggleLEDs(LEDS_ALL_LEDS);
                                Delay_MS(100);
-                       }               
+                       }
                        break;
                case AVRISP_DATA_IN_EPADDR_LIBUSB:
                        /* Five flashes for libUSB compatibility mode */
@@ -314,7 +314,7 @@ void UpdateCurrentCompatibilityMode(void)
                        }
                        break;
        }
-       
+
        Delay_MS(500);
 }
 #endif
index 3c87480..d372350 100644 (file)
@@ -41,7 +41,7 @@
 
                #include <LUFA/Drivers/USB/USB.h>
                #include <LUFA/Drivers/Board/LEDs.h>
-               
+
                #include "Config/AppConfig.h"
 
        /* Preprocessor Checks: */
@@ -67,7 +67,7 @@
                        /** Endpoint address of the AVRISP data IN endpoint. */
                        #define AVRISP_DATA_IN_EPADDR      AVRISP_DATA_IN_EPADDR_JUNGO
                #endif
-               
+
                /** Size in bytes of the AVRISP data endpoint. */
                #define AVRISP_DATA_EPSIZE             64
 
                        USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint;
                } AVRISP_USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+                   STRING_ID_Serial        = 3, /**< Serial number string ID */
+               };
+
        /* External Variables: */
                #if defined(RESET_TOGGLES_LIBUSB_COMPAT)
                        extern uint8_t AVRISP_CurrDataINEndpointAddress;
                #endif
-               
+
        /* Function Prototypes: */
                uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
                                              const uint8_t wIndex,
index 26b00c6..ebb11ca 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2060,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -236,15 +236,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index fcc4254..12be7bf 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 5a0c760..1875bba 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2044,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index f111e43..363951c 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index c83c853..5413f27 100644 (file)
@@ -57,8 +57,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2048,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -306,15 +306,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 9a47caf..cb87891 100644 (file)
                        USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index bd7c067..6809440 100644 (file)
@@ -72,8 +72,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2042,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -200,15 +200,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index b09124b..0f4869f 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint; /**< Keyboard key report endpoint descriptor */
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the keyboard key press reporting endpoint. */
                #define KEYBOARD_EPADDR              (ENDPOINT_DIR_IN | 1)
index 3ee18dc..636bbb6 100644 (file)
@@ -89,8 +89,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x206A,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -218,15 +218,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index be57f22..9f88964 100644 (file)
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Macros: */
                /** Endpoint address of the Media Control HID reporting IN endpoint. */
                #define MEDIACONTROL_HID_EPADDR           (ENDPOINT_DIR_IN | 1)
index 1722c08..c6b2d8f 100644 (file)
@@ -58,9 +58,9 @@ const USB_Descriptor_Device_t PROGMEM RelayBoard_DeviceDescriptor =
        .ProductID              = 0xFD11,
        .ReleaseNumber          = VERSION_BCD(02.00),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
-       .SerialNumStrIndex      = 0x03,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
+       .SerialNumStrIndex      = STRING_ID_Serial,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 };
@@ -176,19 +176,19 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &RelayBoard_LanguageString;
                                        Size    = pgm_read_byte(&RelayBoard_LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &RelayBoard_ManufacturerString;
                                        Size    = pgm_read_byte(&RelayBoard_ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &RelayBoard_ProductString;
                                        Size    = pgm_read_byte(&RelayBoard_ProductString.Header.Size);
                                        break;
-                               case 0x03:
+                               case STRING_ID_Serial:
                                        Address = &RelayBoard_SerialString;
                                        Size    = pgm_read_byte(&RelayBoard_SerialString.Header.Size);
                                        break;
index 92f03c5..97ed225 100644 (file)
                        USB_Descriptor_Interface_t            RelayBoardInterface;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+                   STRING_ID_Serial        = 3, /**< Serial number string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index e0e461f..8a55f82 100644 (file)
@@ -70,8 +70,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204B,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -249,15 +249,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index e3215db..5776098 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 0ec19f4..6ec6f64 100644 (file)
@@ -76,8 +76,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2063,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -241,15 +241,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 34ed62c..91e238f 100644 (file)
                        USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index bcd84c8..b2d2285 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x204B,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -237,15 +237,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index f111e43..363951c 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index c88938b..8fcba5c 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
        .ProductID              = 0x2069,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -287,15 +287,15 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = pgm_read_byte(&ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = pgm_read_byte(&ProductString.Header.Size);
                                        break;
index 54240ad..2c25512 100644 (file)
@@ -42,7 +42,7 @@
                #include <LUFA/Drivers/USB/USB.h>
 
                #include "Config/AppConfig.h"
-               
+
        /* Macros: */
                /** Endpoint address of the Mass Storage device-to-host data IN endpoint. */
                #define MASS_STORAGE_IN_EPADDR         (ENDPOINT_DIR_IN  | 3)
                        USB_Descriptor_Endpoint_t              MS_DataOutEndpoint;
                } USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                                                    const uint8_t wIndex,
index 75938c3..6e69462 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t PROGMEM USART_DeviceDescriptor =
        .ProductID              = 0x204B,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
@@ -223,7 +223,7 @@ uint16_t USART_GetDescriptor(const uint16_t wValue,
        uint16_t    Size    = NO_DESCRIPTOR;
 
        *DescriptorMemorySpace = MEMSPACE_FLASH;
-       
+
        switch (DescriptorType)
        {
                case DTYPE_Device:
@@ -237,15 +237,15 @@ uint16_t USART_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &USART_LanguageString;
                                        Size    = pgm_read_byte(&USART_LanguageString.Header.Size);
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &USART_ManufacturerString;
                                        Size    = pgm_read_byte(&USART_ManufacturerString.Header.Size);
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &USART_ProductString;
                                        Size    = pgm_read_byte(&USART_ProductString.Header.Size);
                                        break;
index a7c390f..07acbae 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USART_USB_Descriptor_Configuration_t;
 
+               /** Enum for the device string descriptor IDs within the device. Each string descriptor should
+                *  have a unique ID index associated with it, which can be used to refer to the string from
+                *  other descriptors.
+                */
+               enum StringDescriptors_t
+               {
+                   STRING_ID_Language      = 0, /**< Supported Languages string descriptor ID (must be zero) */
+                   STRING_ID_Manufacturer  = 1, /**< Manufacturer string ID */
+                   STRING_ID_Product       = 2, /**< Product string ID */
+               };
+
        /* Function Prototypes: */
                uint16_t USART_GetDescriptor(const uint16_t wValue,
                                             const uint8_t wIndex,