From 6a9d1eab2d38bfd524ae5397852c01cb03325559 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Fri, 24 Feb 2012 20:28:27 +0000
Subject: [PATCH] Modified the CDC Host demos to set a default CDC Line
 Encoding on enumerated devices.

---
 .../VirtualSerialHost/VirtualSerialHost.c     | 12 +++++++++
 .../VirtualSerialHost/VirtualSerialHost.c     | 25 +++++++++++++++++++
 LUFA/DoxygenPages/ChangeLog.txt               |  2 +-
 3 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c b/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c
index 36ff503f7..631925e45 100644
--- a/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c
+++ b/Demos/Host/ClassDriver/VirtualSerialHost/VirtualSerialHost.c
@@ -163,6 +163,18 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void)
 		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
 		return;
 	}
+	
+	VirtualSerial_CDC_Interface.State.LineEncoding.BaudRateBPS = 9600;
+	VirtualSerial_CDC_Interface.State.LineEncoding.CharFormat  = CDC_LINEENCODING_OneStopBit;
+	VirtualSerial_CDC_Interface.State.LineEncoding.ParityType  = CDC_PARITY_None;
+	VirtualSerial_CDC_Interface.State.LineEncoding.DataBits    = 8;
+	
+	if (CDC_Host_SetLineEncoding(&VirtualSerial_CDC_Interface))
+	{
+		puts_P(PSTR("Error Setting Device Line Encoding.\r\n"));
+		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+		return;	
+	}
 
 	puts_P(PSTR("CDC Device Enumerated.\r\n"));
 	LEDs_SetAllLEDs(LEDMASK_USB_READY);
diff --git a/Demos/Host/LowLevel/VirtualSerialHost/VirtualSerialHost.c b/Demos/Host/LowLevel/VirtualSerialHost/VirtualSerialHost.c
index 5214dd476..88d7b74b0 100644
--- a/Demos/Host/LowLevel/VirtualSerialHost/VirtualSerialHost.c
+++ b/Demos/Host/LowLevel/VirtualSerialHost/VirtualSerialHost.c
@@ -126,6 +126,31 @@ void EVENT_USB_Host_DeviceEnumerationComplete(void)
 		return;
 	}
 
+	CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 9600,
+	                                    .CharFormat  = CDC_LINEENCODING_OneStopBit,
+	                                    .ParityType  = CDC_PARITY_None,
+	                                    .DataBits    = 8                            };
+
+	USB_ControlRequest = (USB_Request_Header_t)
+	{
+		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
+		.bRequest      = CDC_REQ_SetLineEncoding,
+		.wValue        = 0,
+		.wIndex        = 0,
+		.wLength       = sizeof(LineEncoding),
+	};
+
+	/* Set the Line Encoding of the CDC interface within the device, so that it is ready to accept data */
+	Pipe_SelectPipe(PIPE_CONTROLPIPE);
+	if (USB_Host_SendControlRequest(&LineEncoding) != HOST_SENDCONTROL_Successful)
+	{
+		printf_P(PSTR(ESC_FG_RED "Control Error (Set Line Encoding).\r\n"
+		                         " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+		return;	
+	}
+
 	puts_P(PSTR("CDC Device Enumerated.\r\n"));
 	LEDs_SetAllLEDs(LEDMASK_USB_READY);
 }
diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt
index 5bc80becb..2e2110afe 100644
--- a/LUFA/DoxygenPages/ChangeLog.txt
+++ b/LUFA/DoxygenPages/ChangeLog.txt
@@ -11,7 +11,7 @@
   *  - Core:
   *   - Added support for the BitWizard Multio and Big-Multio boards
   *  - Library Applications:
-  *   - None
+  *   - Modified the CDC Host demos to set a default CDC Line Encoding on enumerated devices
   *
   *  <b>Changed:</b>
   *  - Core:
-- 
GitLab