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),
 
        .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
        .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:
                        Size    = sizeof(USB_Descriptor_Configuration_t);
                        break;
                case DTYPE_String:
-                       if (!(DescriptorNumber))
+                       if (DescriptorNumber == STRING_ID_Language)
                        {
                                Address = &LanguageString;
                                Size    = LanguageString.Header.Size;
                        }
                        {
                                Address = &LanguageString;
                                Size    = LanguageString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x01)
+                       else if (DescriptorNumber == STRING_ID_Manufacturer)
                        {
                                Address = &ManufacturerString;
                                Size    = ManufacturerString.Header.Size;
                        }
                        {
                                Address = &ManufacturerString;
                                Size    = ManufacturerString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x02)
+                       else if (DescriptorNumber == STRING_ID_Product)
                        {
                                Address = &ProductString;
                                Size    = ProductString.Header.Size;
                        {
                                Address = &ProductString;
                                Size    = ProductString.Header.Size;
index 8c358de..24d1a39 100644 (file)
                        USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
                } USB_Descriptor_Configuration_t;
 
                        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,
        /* 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),
 
        .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
        .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:
                        Size    = sizeof(USB_Descriptor_Configuration_t);
                        break;
                case DTYPE_String:
-                       if (!(DescriptorNumber))
+                       if (DescriptorNumber == STRING_ID_Language)
                        {
                                Address = &LanguageString;
                                Size    = LanguageString.Header.Size;
                        }
                        {
                                Address = &LanguageString;
                                Size    = LanguageString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x01)
+                       else if (DescriptorNumber == STRING_ID_Manufacturer)
                        {
                                Address = &ManufacturerString;
                                Size    = ManufacturerString.Header.Size;
                        }
                        {
                                Address = &ManufacturerString;
                                Size    = ManufacturerString.Header.Size;
                        }
-                       else if (DescriptorNumber == 0x02)
+                       else if (DescriptorNumber == STRING_ID_Product)
                        {
                                Address = &ProductString;
                                Size    = ProductString.Header.Size;
                        {
                                Address = &ProductString;
                                Size    = ProductString.Header.Size;
index 71ae30a..c33e388 100644 (file)
                        USB_Descriptor_DFU_Functional_t       DFU_Functional;
                } USB_Descriptor_Configuration_t;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = LanguageString.Header.Size;
                                        break;
                                        Address = &LanguageString;
                                        Size    = LanguageString.Header.Size;
                                        break;
-                               case 0x01:
+                               case STRING_ID_Manufacturer:
                                        Address = &ManufacturerString;
                                        Size    = ManufacturerString.Header.Size;
                                        break;
                                        Address = &ManufacturerString;
                                        Size    = ManufacturerString.Header.Size;
                                        break;
-                               case 0x02:
+                               case STRING_ID_Product:
                                        Address = &ProductString;
                                        Size    = ProductString.Header.Size;
                                        break;
                                        Address = &ProductString;
                                        Size    = ProductString.Header.Size;
                                        break;
index 1265f21..fba326a 100644 (file)
                        USB_Descriptor_Endpoint_t             Printer_DataOutEndpoint;
                } USB_Descriptor_Configuration_t;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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 <avr/pgmspace.h>
 
                #include <LUFA/Drivers/USB/USB.h>
-               
+
                #include "Config/AppConfig.h"
 
        /* Type Defines: */
                #include "Config/AppConfig.h"
 
        /* Type Defines: */
                USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
                } USB_Descriptor_Configuration_t;
 
                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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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"
                #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)
        /* 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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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"
                #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)
        /* 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;
 
                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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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"
                #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)
        /* 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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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.
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2013.
-              
+
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
   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)
 
   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
   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
   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
   software without specific, written prior permission.
 
   The author disclaims all warranties with regard to this
@@ -33,7 +33,7 @@
  *
  *  Header file for Descriptors.c.
  */
  *
  *  Header file for Descriptors.c.
  */
+
 #ifndef _DESCRIPTORS_H_
 #define _DESCRIPTORS_H_
 
 #ifndef _DESCRIPTORS_H_
 #define _DESCRIPTORS_H_
 
@@ -66,7 +66,7 @@
                typedef struct
                {
                        USB_Descriptor_Configuration_Header_t Config;
                typedef struct
                {
                        USB_Descriptor_Configuration_Header_t Config;
-                       
+
                        // Test and Measurement Interface
                        USB_Descriptor_Interface_t            TM_Interface;
                        USB_Descriptor_Endpoint_t             TM_DataOutEndpoint;
                        // 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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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"
                #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)
        /* 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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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"
                #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
        /* 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;
 
                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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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,
 
        .ProductID              = 0x2041,
        .ReleaseNumber          = 0x0000,
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = STRING_ID_Manufacturer,
+       .ProductStrIndex        = STRING_ID_Product,
        .SerialNumStrIndex      = NO_DESCRIPTOR,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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)
        /* 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;
 
        /** 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
        /** 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),
 
        .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
 };
 
        .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},
 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?
 };
 
        .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;
        uint16_t    Size    = NO_DESCRIPTOR;
 
        *DescriptorMemorySpace = MEMSPACE_FLASH;
-       
+
        switch (DescriptorType)
        {
                case DTYPE_Device:
        switch (DescriptorType)
        {
                case DTYPE_Device:
@@ -219,25 +219,25 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &AVRISP_LanguageString;
                                        Size    = pgm_read_byte(&AVRISP_LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
                                        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));
                                        /* 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;
                        }
                                        *DescriptorMemorySpace = MEMSPACE_RAM;
                                        break;
                        }
@@ -259,7 +259,7 @@ uint16_t AVRISP_GetDescriptor(const uint16_t wValue,
  *  change.
  */
 void CheckExternalReset(void)
  *  change.
  */
 void CheckExternalReset(void)
-{      
+{
        /* If an external reset occurred, we need to change compatibility mode */
        AVRISP_NeedCompatibilitySwitch = (MCUSR == (1 << EXTRF));
 
        /* 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);
 {
        /* 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)
        {
        /* 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);
                        {
                                LEDs_ToggleLEDs(LEDS_ALL_LEDS);
                                Delay_MS(100);
-                       }               
+                       }
                        break;
                case AVRISP_DATA_IN_EPADDR_LIBUSB:
                        /* Five flashes for libUSB compatibility mode */
                        break;
                case AVRISP_DATA_IN_EPADDR_LIBUSB:
                        /* Five flashes for libUSB compatibility mode */
@@ -314,7 +314,7 @@ void UpdateCurrentCompatibilityMode(void)
                        }
                        break;
        }
                        }
                        break;
        }
-       
+
        Delay_MS(500);
 }
 #endif
        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 <LUFA/Drivers/USB/USB.h>
                #include <LUFA/Drivers/Board/LEDs.h>
-               
+
                #include "Config/AppConfig.h"
 
        /* Preprocessor Checks: */
                #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
                        /** 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
 
                /** Size in bytes of the AVRISP data endpoint. */
                #define AVRISP_DATA_EPSIZE             64
 
                        USB_Descriptor_Endpoint_t                AVRISP_DataOutEndpoint;
                } AVRISP_USB_Descriptor_Configuration_t;
 
                        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
        /* 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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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)
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                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)
        /* 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),
 
        .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
 };
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
 };
@@ -176,19 +176,19 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &RelayBoard_LanguageString;
                                        Size    = pgm_read_byte(&RelayBoard_LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* 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),
 
        .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
        .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 DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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"
                #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)
        /* 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;
 
                        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,
        /* 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),
 
        .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
        .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;
        uint16_t    Size    = NO_DESCRIPTOR;
 
        *DescriptorMemorySpace = MEMSPACE_FLASH;
-       
+
        switch (DescriptorType)
        {
                case DTYPE_Device:
        switch (DescriptorType)
        {
                case DTYPE_Device:
@@ -237,15 +237,15 @@ uint16_t USART_GetDescriptor(const uint16_t wValue,
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
                case DTYPE_String:
                        switch (DescriptorNumber)
                        {
-                               case 0x00:
+                               case STRING_ID_Language:
                                        Address = &USART_LanguageString;
                                        Size    = pgm_read_byte(&USART_LanguageString.Header.Size);
                                        break;
                                        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;
                                        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;
                                        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;
 
                        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,
        /* Function Prototypes: */
                uint16_t USART_GetDescriptor(const uint16_t wValue,
                                             const uint8_t wIndex,