X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/f896c00c48f04fb9273555ab8d9b1af99f865d25..cbbd3d746acef02a4afd562652a2ba71b24dfd6f:/Demos/Host/ClassDriver/CDCHost/CDCHost.c diff --git a/Demos/Host/ClassDriver/CDCHost/CDCHost.c b/Demos/Host/ClassDriver/CDCHost/CDCHost.c index 941cf7cc4..65f490f28 100644 --- a/Demos/Host/ClassDriver/CDCHost/CDCHost.c +++ b/Demos/Host/ClassDriver/CDCHost/CDCHost.c @@ -42,9 +42,17 @@ */ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface = { - .DataINPipeNumber = 1, - .DataOUTPipeNumber = 2, - .NotificationPipeNumber = 3, + .Config = + { + .DataINPipeNumber = 1, + .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 @@ -54,13 +62,38 @@ int main(void) { SetupHardware(); - puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY - "CDC Host Demo running.\r\n" ESC_INVERSE_OFF)); + puts_P(PSTR(ESC_FG_CYAN "CDC Host Demo running.\r\n" ESC_FG_WHITE)); LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); for (;;) { + switch (USB_HostState) + { + case HOST_STATE_Addressed: + if (!(CDC_Host_ConfigurePipes(&VirtualSerial_CDC_Interface))) + { + LEDs_SetAllLEDs(LEDMASK_USB_ERROR); + USB_HostState = HOST_STATE_WaitForDeviceRemoval; + break; + } + + if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) + { + LEDs_SetAllLEDs(LEDMASK_USB_ERROR); + USB_HostState = HOST_STATE_WaitForDeviceRemoval; + break; + } + + USB_HostState = HOST_STATE_Configured; + break; + case HOST_STATE_Configured: + USB_HostState = HOST_STATE_Ready; + break; + case HOST_STATE_Ready: + break; + } + CDC_Host_USBTask(&VirtualSerial_CDC_Interface); USB_USBTask(); } @@ -113,8 +146,8 @@ void EVENT_USB_HostError(const uint8_t ErrorCode) { USB_ShutDown(); - puts_P(PSTR(ESC_BG_RED "Host Mode Error\r\n")); - 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(;;); @@ -125,10 +158,10 @@ void EVENT_USB_HostError(const uint8_t ErrorCode) */ void EVENT_USB_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8_t SubErrorCode) { - puts_P(PSTR(ESC_BG_RED "Dev Enum Error\r\n")); + puts_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n")); printf_P(PSTR(" -- Error Code %d\r\n"), ErrorCode); printf_P(PSTR(" -- Sub Error Code %d\r\n"), SubErrorCode); - printf_P(PSTR(" -- In State %d\r\n"), USB_HostState); + printf_P(PSTR(" -- In State %d\r\n" ESC_FG_WHITE), USB_HostState); LEDs_SetAllLEDs(LEDMASK_USB_ERROR); }