+               /** Type define for a Microsoft OS Compatibility 1.0 descriptor. */
+               typedef struct
+               {
+                       uint32_t dwLength;
+                       uint16_t bcdVersion;
+                       uint16_t wIndex;
+                       uint8_t  bCount;
+                       uint8_t  bReserved[7];
+                       uint8_t  bFirstInterfaceNumber;
+                       uint8_t  bReserved2;
+                       char     compatibleID[8];
+                       char     subCompatibleID[8];
+                       uint8_t  bReserved3[6];
+               } USB_Descriptor_MSCompatibility_t;
+
+               /** Enum for the device interface descriptor IDs within the device. Each interface descriptor
+                *  should have a unique ID index associated with it, which can be used to refer to the
+                *  interface from other descriptors.
+                */
+               enum InterfaceDescriptors_t
+               {
+                       INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */
+                       INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */
+               };
+
+               /** 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_MS_Compat    = 0xEE, /**< MS OS Compatibility string descriptor ID (magic value set by Microsoft) */
+               };
+