+       /* Type Defines: */
+               /** \brief CDC class-specific Functional Header Descriptor (LUFA naming conventions).
+                *
+                *  Type define for a CDC class-specific functional header descriptor. This indicates to the host that the device
+                *  contains one or more CDC functional data descriptors, which give the CDC interface's capabilities and configuration.
+                *  See the CDC class specification for more details.
+                *
+                *  \see \ref USB_CDC_StdDescriptor_FunctionalHeader_t for the version of this type with standard element names.
+                */
+               typedef struct
+               {
+                       USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */
+                       uint8_t                 Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors,
+                                                         *   must be \ref CDC_DSUBTYPE_CSInterface_Header.
+                                                         */
+                       uint16_t                CDCSpecification; /**< Version number of the CDC specification implemented by the device,
+                                                                  *   encoded in BCD format.
+                                                                  */
+               } USB_CDC_Descriptor_FunctionalHeader_t;
+
+               /** \brief CDC class-specific Functional Header Descriptor (USB-IF naming conventions).
+                *
+                *  Type define for a CDC class-specific functional header descriptor. This indicates to the host that the device
+                *  contains one or more CDC functional data descriptors, which give the CDC interface's capabilities and configuration.
+                *  See the CDC class specification for more details.
+                *
+                *  \see \ref USB_CDC_Descriptor_FunctionalHeader_t for the version of this type with non-standard LUFA specific
+                *       element names.
+                */
+               typedef struct
+               {
+                       uint8_t  bFunctionLength; /**< Size of the descriptor, in bytes. */
+                       uint8_t  bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
+                                                  *   given by the specific class.
+                                                  */
+                       uint8_t  bDescriptorSubType; /**< Sub type value used to distinguish between CDC class-specific descriptors,
+                                                     *   must be \ref CDC_DSUBTYPE_CSInterface_Header.
+                                                     */
+                       uint16_t bcdCDC; /**< Version number of the CDC specification implemented by the device, encoded in BCD format. */
+               } USB_CDC_StdDescriptor_FunctionalHeader_t;
+
+               /** \brief CDC class-specific Functional ACM Descriptor (LUFA naming conventions).
+                *
+                *  Type define for a CDC class-specific functional ACM descriptor. This indicates to the host that the CDC interface
+                *  supports the CDC ACM subclass of the CDC specification. See the CDC class specification for more details.
+                *
+                *  \see \ref USB_CDC_StdDescriptor_FunctionalACM_t for the version of this type with standard element names.
+                */
+               typedef struct
+               {
+                       USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */
+                       uint8_t                 Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors,
+                                                         *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
+                                                         */
+                       uint8_t                 Capabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
+                                                              *   this should be set to a fixed value of 0x06 - for other capabilities, refer
+                                                              *   to the CDC ACM specification.
+                                                              */
+               } USB_CDC_Descriptor_FunctionalACM_t;
+
+               /** \brief CDC class-specific Functional ACM Descriptor (USB-IF naming conventions).
+                *
+                *  Type define for a CDC class-specific functional ACM descriptor. This indicates to the host that the CDC interface
+                *  supports the CDC ACM subclass of the CDC specification. See the CDC class specification for more details.
+                *
+                *  \see \ref USB_CDC_Descriptor_FunctionalACM_t for the version of this type with non-standard LUFA specific
+                *       element names.
+                */
+               typedef struct
+               {
+                       uint8_t bFunctionLength; /**< Size of the descriptor, in bytes. */
+                       uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
+                                                 *   given by the specific class.
+                                                 */
+                       uint8_t bDescriptorSubType; /**< Sub type value used to distinguish between CDC class-specific descriptors,
+                                                    *   must be \ref CDC_DSUBTYPE_CSInterface_ACM.
+                                                    */
+                       uint8_t bmCapabilities; /**< Capabilities of the ACM interface, given as a bit mask. For most devices,
+                                                *   this should be set to a fixed value of 0x06 - for other capabilities, refer
+                                                *   to the CDC ACM specification.
+                                                */
+               } USB_CDC_StdDescriptor_FunctionalACM_t;
+
+               /** \brief CDC class-specific Functional Union Descriptor (LUFA naming conventions).
+                *
+                *  Type define for a CDC class-specific functional Union descriptor. This indicates to the host that specific
+                *  CDC control and data interfaces are related. See the CDC class specification for more details.
+                *
+                *  \see \ref USB_CDC_StdDescriptor_FunctionalUnion_t for the version of this type with standard element names.
+                */
+               typedef struct
+               {
+                       USB_Descriptor_Header_t Header; /**< Regular descriptor header containing the descriptor's type and length. */
+                       uint8_t                 Subtype; /**< Sub type value used to distinguish between CDC class-specific descriptors,
+                                                         *   must be \ref CDC_DSUBTYPE_CSInterface_Union.
+                                                         */
+                       uint8_t                 MasterInterfaceNumber; /**< Interface number of the CDC Control interface. */
+                       uint8_t                 SlaveInterfaceNumber; /**< Interface number of the CDC Data interface. */
+               } USB_CDC_Descriptor_FunctionalUnion_t;
+
+               /** \brief CDC class-specific Functional Union Descriptor (USB-IF naming conventions).
+                *
+                *  Type define for a CDC class-specific functional Union descriptor. This indicates to the host that specific
+                *  CDC control and data interfaces are related. See the CDC class specification for more details.
+                *
+                *  \see \ref USB_CDC_Descriptor_FunctionalUnion_t for the version of this type with non-standard LUFA specific
+                *       element names.
+                */
+               typedef struct
+               {
+                       uint8_t bFunctionLength; /**< Size of the descriptor, in bytes. */
+                       uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
+                                                 *   given by the specific class.
+                                                 */
+                       uint8_t bDescriptorSubType; /**< Sub type value used to distinguish between CDC class-specific descriptors,
+                                                    *   must be \ref CDC_DSUBTYPE_CSInterface_Union.
+                                                    */
+                       uint8_t bMasterInterface; /**< Interface number of the CDC Control interface. */
+                       uint8_t bSlaveInterface0; /**< Interface number of the CDC Data interface. */
+               } USB_CDC_StdDescriptor_FunctionalUnion_t;
+               
+               /** \brief CDC Virtual Serial Port Line Encoding Settings Structure.
+                *
+                *  Type define for a CDC Line Encoding structure, used to hold the various encoding parameters for a virtual
+                *  serial port.
+                */
+               typedef struct
+               {
+                       uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second. */
+                       uint8_t  CharFormat; /**< Character format of the virtual serial port, a value from the
+                                                                 *   \ref CDC_LineEncodingFormats_t enum.
+                                                                 */
+                       uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the
+                                                                 *   \ref CDC_LineEncodingParity_t enum.
+                                                                 */
+                       uint8_t  DataBits; /**< Bits of data per character of the virtual serial port. */
+               } CDC_LineEncoding_t;
+