Minor documentation adjustments to the demos, projects and bootloaders to ensure...
[pub/USBasp.git] / Demos / Device / ClassDriver / DualVirtualSerial / DualVirtualSerial.c
index cc8f92c..a07967c 100644 (file)
@@ -1,21 +1,21 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
-              
+     Copyright (C) Dean Camera, 2012.
+
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
-  Permission to use, copy, modify, distribute, and sell this 
+  Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
+  without fee, provided that the above copyright notice appear in
   all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
@@ -45,19 +45,25 @@ USB_ClassInfo_CDC_Device_t VirtualSerial1_CDC_Interface =
        {
                .Config =
                        {
-                               .ControlInterfaceNumber           = 0,
-
-                               .DataINEndpointNumber             = CDC1_TX_EPNUM,
-                               .DataINEndpointSize               = CDC_TXRX_EPSIZE,
-                               .DataINEndpointDoubleBank         = false,
-
-                               .DataOUTEndpointNumber            = CDC1_RX_EPNUM,
-                               .DataOUTEndpointSize              = CDC_TXRX_EPSIZE,
-                               .DataOUTEndpointDoubleBank        = false,
-
-                               .NotificationEndpointNumber       = CDC1_NOTIFICATION_EPNUM,
-                               .NotificationEndpointSize         = CDC_NOTIFICATION_EPSIZE,
-                               .NotificationEndpointDoubleBank   = false,
+                               .ControlInterfaceNumber   = 0,
+                               .DataINEndpoint           =
+                                       {
+                                               .Address          = CDC1_TX_EPADDR,
+                                               .Size             = CDC_TXRX_EPSIZE,
+                                               .Banks            = 1,
+                                       },
+                               .DataOUTEndpoint =
+                                       {
+                                               .Address          = CDC1_RX_EPADDR,
+                                               .Size             = CDC_TXRX_EPSIZE,
+                                               .Banks            = 1,
+                                       },
+                               .NotificationEndpoint =
+                                       {
+                                               .Address          = CDC1_NOTIFICATION_EPADDR,
+                                               .Size             = CDC_NOTIFICATION_EPSIZE,
+                                               .Banks            = 1,
+                                       },
                        },
        };
 
@@ -70,29 +76,37 @@ USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface =
        {
                .Config =
                        {
-                               .ControlInterfaceNumber           = 2,
-
-                               .DataINEndpointNumber             = CDC2_TX_EPNUM,
-                               .DataINEndpointSize               = CDC_TXRX_EPSIZE,
-                               .DataINEndpointDoubleBank         = false,
-
-                               .DataOUTEndpointNumber            = CDC2_RX_EPNUM,
-                               .DataOUTEndpointSize              = CDC_TXRX_EPSIZE,
-                               .DataOUTEndpointDoubleBank        = false,
+                               .ControlInterfaceNumber   = 2,
+                               .DataINEndpoint           =
+                                       {
+                                               .Address          = CDC2_TX_EPADDR,
+                                               .Size             = CDC_TXRX_EPSIZE,
+                                               .Banks            = 1,
+                                       },
+                               .DataOUTEndpoint =
+                                       {
+                                               .Address          = CDC2_RX_EPADDR,
+                                               .Size             = CDC_TXRX_EPSIZE,
+                                               .Banks            = 1,
+                                       },
+                               .NotificationEndpoint =
+                                       {
+                                               .Address          = CDC2_NOTIFICATION_EPADDR,
+                                               .Size             = CDC_NOTIFICATION_EPSIZE,
+                                               .Banks            = 1,
+                                       },
 
-                               .NotificationEndpointNumber       = CDC2_NOTIFICATION_EPNUM,
-                               .NotificationEndpointSize         = CDC_NOTIFICATION_EPSIZE,
-                               .NotificationEndpointDoubleBank   = false,
                        },
        };
 
+
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
 int main(void)
 {
        SetupHardware();
-       
+
        LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
        sei();
 
@@ -101,13 +115,13 @@ int main(void)
                CheckJoystickMovement();
 
                /* Discard all received data on the first CDC interface */
-               while (CDC_Device_BytesReceived(&VirtualSerial1_CDC_Interface))
-                 CDC_Device_ReceiveByte(&VirtualSerial1_CDC_Interface);
+               CDC_Device_ReceiveByte(&VirtualSerial1_CDC_Interface);
 
                /* Echo all received data on the second CDC interface */
-               while (CDC_Device_BytesReceived(&VirtualSerial2_CDC_Interface))
-                 CDC_Device_SendByte(&VirtualSerial2_CDC_Interface, CDC_Device_ReceiveByte(&VirtualSerial2_CDC_Interface));
-                 
+               int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial2_CDC_Interface);
+               if (!(ReceivedByte < 0))
+                 CDC_Device_SendByte(&VirtualSerial2_CDC_Interface, (uint8_t)ReceivedByte);
+
                CDC_Device_USBTask(&VirtualSerial1_CDC_Interface);
                CDC_Device_USBTask(&VirtualSerial2_CDC_Interface);
                USB_USBTask();
@@ -151,12 +165,12 @@ void CheckJoystickMovement(void)
          ReportString = "Joystick Pressed\r\n";
        else
          ActionSent = false;
-         
+
        if ((ReportString != NULL) && (ActionSent == false))
        {
                ActionSent = true;
-               
-               CDC_Device_SendString(&VirtualSerial1_CDC_Interface, ReportString, strlen(ReportString));               
+
+               CDC_Device_SendString(&VirtualSerial1_CDC_Interface, ReportString);
        }
 }
 
@@ -175,18 +189,18 @@ void EVENT_USB_Device_Disconnect(void)
 /** Event handler for the library USB Configuration Changed event. */
 void EVENT_USB_Device_ConfigurationChanged(void)
 {
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);
+       bool ConfigSuccess = true;
 
-       if (!(CDC_Device_ConfigureEndpoints(&VirtualSerial1_CDC_Interface)))
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+       ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial1_CDC_Interface);
+       ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial2_CDC_Interface);
 
-       if (!(CDC_Device_ConfigureEndpoints(&VirtualSerial2_CDC_Interface)))
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+       LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
 }
 
-/** Event handler for the library USB Unhandled Control Request event. */
-void EVENT_USB_Device_UnhandledControlRequest(void)
+/** Event handler for the library USB Control Request reception event. */
+void EVENT_USB_Device_ControlRequest(void)
 {
        CDC_Device_ProcessControlRequest(&VirtualSerial1_CDC_Interface);
        CDC_Device_ProcessControlRequest(&VirtualSerial2_CDC_Interface);
 }
+