diff options
| -rw-r--r-- | tmk_core/protocol/lufa/descriptor.c | 18 | 
1 files changed, 17 insertions, 1 deletions
| diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c index 357954368b..e9f7f87308 100644 --- a/tmk_core/protocol/lufa/descriptor.c +++ b/tmk_core/protocol/lufa/descriptor.c @@ -275,7 +275,7 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =      .ManufacturerStrIndex   = 0x01,      .ProductStrIndex        = 0x02, -    .SerialNumStrIndex      = NO_DESCRIPTOR, +    .SerialNumStrIndex      = 0x03,      .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS  }; @@ -860,6 +860,18 @@ const USB_Descriptor_String_t PROGMEM ProductString =      .UnicodeString          = LSTR(PRODUCT)  }; +#ifndef SERIAL_NUMBER +    #define SERIAL_NUMBER 0 +#endif + +const USB_Descriptor_String_t PROGMEM SerialNumberString = +{ +    /* subtract 1 for null terminator */ +    .Header                 = {.Size = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER))-1), .Type = DTYPE_String}, + +    .UnicodeString          = LSTR(SERIAL_NUMBER) +}; +  /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"   *  documentation) by the application code so that the address and size of a requested descriptor can be given @@ -902,6 +914,10 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,                      Address = &ProductString;                      Size    = pgm_read_byte(&ProductString.Header.Size);                      break; +                case 0x03: +                    Address = &SerialNumberString; +                    Size    = pgm_read_byte(&SerialNumberString.Header.Size); +                    break;              }              break;          case HID_DTYPE_HID: | 
