X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/cf313989e6f451a3b6058db94929a51bc1b5e68b..c5eeedd522c12c8b4996594f3c4167393d0af7ff:/Demos/Host/ClassDriver/CDCHost/CDCHost.c diff --git a/Demos/Host/ClassDriver/CDCHost/CDCHost.c b/Demos/Host/ClassDriver/CDCHost/CDCHost.c index 1edb352f5..0cbb77122 100644 --- a/Demos/Host/ClassDriver/CDCHost/CDCHost.c +++ b/Demos/Host/ClassDriver/CDCHost/CDCHost.c @@ -48,12 +48,8 @@ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface = .DataOUTPipeNumber = 2, .NotificationPipeNumber = 3, }, - - .State = - { - // Leave all state values to their defaults - } }; + /** Main program entry point. This routine configures the hardware required by the application, then * starts the scheduler to run the application tasks. @@ -62,7 +58,7 @@ int main(void) { SetupHardware(); - puts_P(PSTR(ESC_FG_CYAN "CDC Host Demo running.\r\n")); + puts_P(PSTR(ESC_FG_CYAN "CDC Host Demo running.\r\n" ESC_FG_WHITE)); LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); @@ -71,15 +67,43 @@ int main(void) switch (USB_HostState) { case HOST_STATE_Addressed: - if (!(CDC_Host_ConfigurePipes(&VirtualSerial_CDC_Interface))) - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); + + uint16_t ConfigDescriptorSize; + uint8_t ConfigDescriptorData[512]; + + if ((USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful) || + (ConfigDescriptorSize > sizeof(ConfigDescriptorData))) + { + printf("Error Retrieving Configuration Descriptor.\r\n"); + LEDs_SetAllLEDs(LEDMASK_USB_ERROR); + USB_HostState = HOST_STATE_WaitForDeviceRemoval; + break; + } + USB_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData); + + if (CDC_Host_ConfigurePipes(&VirtualSerial_CDC_Interface, + ConfigDescriptorSize, ConfigDescriptorData) != CDC_ENUMERROR_NoError) + { + printf("Attached Device Not a Valid CDC Class Device.\r\n"); + LEDs_SetAllLEDs(LEDMASK_USB_ERROR); + USB_HostState = HOST_STATE_WaitForDeviceRemoval; + break; + } + + if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) + { + printf("Error Setting Device Configuration.\r\n"); + LEDs_SetAllLEDs(LEDMASK_USB_ERROR); + USB_HostState = HOST_STATE_WaitForDeviceRemoval; + break; + } + + printf("CDC Device Enumerated.\r\n"); USB_HostState = HOST_STATE_Configured; break; case HOST_STATE_Configured: - USB_HostState = HOST_STATE_Ready; - break; - case HOST_STATE_Ready: break; } @@ -135,8 +159,8 @@ void EVENT_USB_HostError(const uint8_t ErrorCode) { USB_ShutDown(); - puts_P(PSTR(ESC_FG_RED "Host Mode Error\r\n" ESC_FG_WHITE)); - printf_P(PSTR(" -- Error Code %d\r\n"), ErrorCode); + puts_P(PSTR(ESC_FG_RED "Host Mode Error\r\n")); + printf_P(PSTR(" -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); LEDs_SetAllLEDs(LEDMASK_USB_ERROR); for(;;);