-               switch (USB_HostState)\r
-               {\r
-                       case HOST_STATE_Addressed:\r
-                               LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-\r
-                               uint16_t ConfigDescriptorSize;\r
-                               uint8_t  ConfigDescriptorData[512];\r
-\r
-                               if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,\r
-                                                                      sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)\r
-                               {\r
-                                       puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n"));\r
-                                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                                       break;\r
-                               }\r
-\r
-                               if (HID_Host_ConfigurePipes(&Device_HID_Interface,\r
-                                                           ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError)\r
-                               {\r
-                                       puts_P(PSTR("Attached Device Not a Valid HID Device.\r\n"));\r
-                                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                                       break;\r
-                               }\r
-\r
-                               if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)\r
-                               {\r
-                                       puts_P(PSTR("Error Setting Device Configuration.\r\n"));\r
-                                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                                       break;\r
-                               }\r
-\r
-                               if (HID_Host_SetReportProtocol(&Device_HID_Interface) != 0)\r
-                               {\r
-                                       puts_P(PSTR("Error Setting Report Protocol Mode.\r\n"));\r
-                                       LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-                                       USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                                       break;\r
-                               }\r
-\r
-                               puts_P(PSTR("HID Device Enumerated.\r\n"));\r
-                               LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-                               USB_HostState = HOST_STATE_Configured;\r
-                               break;\r
-                       case HOST_STATE_Configured:\r
-                               LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
-                               \r
-                               printf_P(PSTR("\r\n\r\nTotal Reports: %" PRId8 "\r\n"), HIDReportInfo.TotalDeviceReports);\r
-                               for (uint8_t ReportIndex = 0; ReportIndex < HIDReportInfo.TotalDeviceReports; ReportIndex++)\r
-                               {\r
-                                       HID_ReportSizeInfo_t* CurrReportIDInfo = &HIDReportInfo.ReportIDSizes[ReportIndex];\r
-\r
-                                       uint8_t ReportSizeInBits      = CurrReportIDInfo->ReportSizeBits[HID_REPORT_ITEM_In];\r
-                                       uint8_t ReportSizeOutBits     = CurrReportIDInfo->ReportSizeBits[HID_REPORT_ITEM_Out];\r
-                                       uint8_t ReportSizeFeatureBits = CurrReportIDInfo->ReportSizeBits[HID_REPORT_ITEM_Feature];\r
-\r
-                                       /* Print out the byte sizes of each report within the device */\r
-                                       printf_P(PSTR("  + Report ID 0x%02" PRIX8 "\r\n"\r
-                                                     "    - Input Data:   %" PRId8 " bits (%" PRId8 " bytes)\r\n"\r
-                                                     "    - Output Data:  %" PRId8 " bits (%" PRId8 " bytes)\r\n"\r
-                                                     "    - Feature Data: %" PRId8 " bits (%" PRId8 " bytes)\r\n"),\r
-                                                CurrReportIDInfo->ReportID,\r
-                                                ReportSizeInBits,\r
-                                                ((ReportSizeInBits      >> 3) + ((ReportSizeInBits      & 0x07) != 0)),\r
-                                                ReportSizeOutBits,\r
-                                                ((ReportSizeOutBits     >> 3) + ((ReportSizeOutBits     & 0x07) != 0)),\r
-                                                ReportSizeFeatureBits,\r
-                                                ((ReportSizeFeatureBits >> 3) + ((ReportSizeFeatureBits & 0x07) != 0)));\r
-                               }\r
-                               \r
-                               puts_P(PSTR("\r\nReport Items:\r\n"));\r
-                               for (uint8_t ItemIndex = 0; ItemIndex < HIDReportInfo.TotalReportItems; ItemIndex++)\r
-                               {\r
-                                       const HID_ReportItem_t* RItem = &HIDReportInfo.ReportItems[ItemIndex];\r
-\r
-                                       printf_P(PSTR("  + Item %" PRId8 ":\r\n"\r
-                                                     "    - Report ID:          0x%02" PRIX8  "\r\n"\r
-                                                     "    - Data Direction:     %s\r\n"\r
-                                                     "    - Item Flags:         0x%02" PRIX8  "\r\n"\r
-                                                     "    - Item Offset (Bits): 0x%02" PRIX8  "\r\n"\r
-                                                     "    - Item Size (Bits):   0x%02" PRIX8  "\r\n"\r
-                                                     "    - Usage Page:         0x%04" PRIX16 "\r\n"\r
-                                                     "    - Usage:              0x%04" PRIX16 "\r\n"\r
-                                                     "    - Unit Type:          0x%08" PRIX32 "\r\n"\r
-                                                     "    - Unit Exponent:      0x%02" PRIX8  "\r\n"\r
-                                                     "    - Logical Minimum:    0x%08" PRIX32 "\r\n"\r
-                                                     "    - Logical Maximum:    0x%08" PRIX32 "\r\n"\r
-                                                     "    - Physical Minimum:   0x%08" PRIX32 "\r\n"\r
-                                                     "    - Physical Maximum:   0x%08" PRIX32 "\r\n"\r
-                                                     "    - Collection Path:\r\n"),\r
-                                                ItemIndex,\r
-                                                RItem->ReportID,\r
-                                                ((RItem->ItemType == HID_REPORT_ITEM_In) ? "IN" : ((RItem->ItemType == HID_REPORT_ITEM_Out) ? "OUT" : "FEATURE")),\r
-                                                RItem->ItemFlags,\r
-                                                RItem->BitOffset,\r
-                                                RItem->Attributes.BitSize,\r
-                                                RItem->Attributes.Usage.Page,\r
-                                                RItem->Attributes.Usage.Usage,\r
-                                                RItem->Attributes.Unit.Type,\r
-                                                RItem->Attributes.Unit.Exponent,\r
-                                                RItem->Attributes.Logical.Minimum,\r
-                                                RItem->Attributes.Logical.Maximum,\r
-                                                RItem->Attributes.Physical.Minimum,\r
-                                                RItem->Attributes.Physical.Maximum);\r
-                                       \r
-                                       const HID_CollectionPath_t* CollectionPath  = RItem->CollectionPath;\r
-                                       uint8_t                     CollectionDepth = 6;\r
-                                       \r
-                                       while (CollectionPath != NULL)\r
-                                       {\r
-                                               for (uint8_t i = 0; i < CollectionDepth; i++)\r
-                                                 putchar(' ');\r
-\r
-                                               printf_P(PSTR("- Type:  0x%02" PRIX8 "\r\n"), CollectionPath->Type);\r
-                                       \r
-                                               for (uint8_t i = 0; i < CollectionDepth; i++)\r
-                                                 putchar(' ');\r
-\r
-                                               printf_P(PSTR("- Usage: 0x%02" PRIX8 "\r\n"), CollectionPath->Usage);\r
-\r
-                                               CollectionDepth += 3;\r
-                                               CollectionPath   = CollectionPath->Parent;\r
-                                       }\r
-                               }\r
-                               \r
-                               LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-                               USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
-                               break;\r
-               }\r
-\r