+               /* Type Defines: */\r
+                       /** \brief HID Class Device Mode Configuration and State Structure.\r
+                        *\r
+                        *  Class state structure. An instance of this structure should be made for each HID interface\r
+                        *  within the user application, and passed to each of the HID class driver functions as the\r
+                        *  HIDInterfaceInfo parameter. This stores each HID interface's configuration and state information.\r
+                        *\r
+                        *  \note Due to technical limitations, the HID device class driver does not utilize a separate OUT\r
+                        *        endpoint for host->device communications. Instead, the host->device data (if any) is sent to\r
+                        *        the device via the control endpoint.\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                               const struct\r
+                               {\r
+                                       uint8_t  InterfaceNumber; /**< Interface number of the HID interface within the device */\r
+\r
+                                       uint8_t  ReportINEndpointNumber; /**< Endpoint number of the HID interface's IN report endpoint */\r
+                                       uint16_t ReportINEndpointSize; /**< Size in bytes of the HID interface's IN report endpoint */                                  \r
+                                       bool     ReportINEndpointDoubleBank; /** Indicates if the HID interface's IN report endpoint should use double banking */\r
+                                       \r
+                                       void*    PrevReportINBuffer; /**< Pointer to a buffer where the previously created HID input report can be\r
+                                                                     *  stored by the driver, for comparison purposes to detect report changes that\r
+                                                                     *  must be sent immediately to the host. This should point to a buffer big enough\r
+                                                                     *  to hold the largest HID input report sent from the HID interface. If this is set\r
+                                                                                                 *  to NULL, it is up to the user to force transfers when needed in the \r
+                                                                                                 *  \ref CALLBACK_HID_Device_CreateHIDReport() callback function.\r
+                                                                                                 *\r
+                                                                                                 *  \note Due to the single buffer, the internal driver can only correctly compare\r
+                                                                                                 *        subsequent reports with identical report IDs. In multiple report devices,\r
+                                                                                                 *        this buffer should be set to NULL and the decision to send reports made\r
+                                                                                                 *        by the user application instead.\r
+                                                                     */\r
+                                       uint8_t  PrevReportINBufferSize; /**< Size in bytes of the given input report buffer. This is used to create a\r
+                                                                         *  second buffer of the same size within the driver so that subsequent reports\r
+                                                                         *  can be compared. If the user app is to determine when reports are to be sent\r
+                                                                         *  exclusively (i.e. \ref PrevReportINBuffer is NULL) this value is ignored.\r
+                                                                         */\r
+                               } Config; /**< Config data for the USB class interface within the device. All elements in this section\r
+                                          *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.\r
+                                          */                                                                            \r
+                               struct\r
+                               {\r
+                                       bool     UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */\r
+                                       uint16_t IdleCount; /**< Report idle period, in milliseconds, set by the host */\r
+                                       uint16_t IdleMSRemaining; /**< Total number of milliseconds remaining before the idle period elapsed - this \r
+                                                                                          *   should be decremented by the user application if non-zero each millisecond */    \r
+                               } State; /**< State data for the USB class interface within the device. All elements in this section\r
+                                         *   are reset to their defaults when the interface is enumerated.\r
+                                         */\r
+                       } USB_ClassInfo_HID_Device_t;\r
+       \r