From be9d0a5aa97c84cc8723f69f2b88576965e386aa Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sun, 11 Oct 2009 06:14:08 +0000
Subject: [PATCH] Added stdio.h stream examples for the virtual CDC UART in the
 CDC host demos.

Removed accidental reference to the incomplete MIDI class bootloader in the Bootloader folder makefile.
---
 Bootloaders/makefile                     |  1 -
 Demos/Host/ClassDriver/CDCHost/CDCHost.c | 21 +++++++++++
 Demos/Host/LowLevel/CDCHost/CDCHost.c    | 46 ++++++++++++++++++++++++
 LUFA/ManPages/ChangeLog.txt              |  1 +
 LUFA/ManPages/FutureChanges.txt          |  2 +-
 5 files changed, 69 insertions(+), 2 deletions(-)

diff --git a/Bootloaders/makefile b/Bootloaders/makefile
index 5fd5aef4b..1083587f7 100644
--- a/Bootloaders/makefile
+++ b/Bootloaders/makefile
@@ -26,5 +26,4 @@ all:
 %:
 	make -C 'DFU/' $@
 	make -C 'CDC/' $@
-	make -C 'MIDI/' $@
 	make -C 'TeensyHID/' $@
diff --git a/Demos/Host/ClassDriver/CDCHost/CDCHost.c b/Demos/Host/ClassDriver/CDCHost/CDCHost.c
index fd12137c8..99c0c8172 100644
--- a/Demos/Host/ClassDriver/CDCHost/CDCHost.c
+++ b/Demos/Host/ClassDriver/CDCHost/CDCHost.c
@@ -50,6 +50,27 @@ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface =
 			},
 	};
 
+#if 0
+/* NOTE: Here you can set up a standard stream using the created virtual serial port, so that the standard stream functions in
+ *       <stdio.h> can be used on the virtual serial port (e.g. fprintf(&USBSerial, "Test"); to print a string).
+ */
+
+static int CDC_putchar(char c, FILE *stream)
+{
+	CDC_Host_SendByte(&VirtualSerial_CDC_Interface, c);
+	return 0;
+}
+
+static int CDC_getchar(FILE *stream)
+{
+	if (!(CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface)))
+	  return -1;
+
+	return CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface);
+}
+
+static FILE USBSerial = FDEV_SETUP_STREAM(CDC_putchar, CDC_getchar, _FDEV_SETUP_RW);
+#endif
 	
 /** Main program entry point. This routine configures the hardware required by the application, then
  *  enters a loop to run the application tasks in sequence.
diff --git a/Demos/Host/LowLevel/CDCHost/CDCHost.c b/Demos/Host/LowLevel/CDCHost/CDCHost.c
index 7a1788b17..0b09c5a93 100644
--- a/Demos/Host/LowLevel/CDCHost/CDCHost.c
+++ b/Demos/Host/LowLevel/CDCHost/CDCHost.c
@@ -36,6 +36,52 @@
  
 #include "CDCHost.h"
 
+#if 0
+/* NOTE: Here you can set up a standard stream using the created virtual serial port, so that the standard stream functions in
+ *       <stdio.h> can be used on the virtual serial port (e.g. fprintf(&USBSerial, "Test"); to print a string).
+ */
+	
+static int CDC_putchar(char c, FILE *stream)
+{	  
+	Pipe_SelectPipe(CDC_DATAPIPE_OUT);
+	
+	if (Pipe_WaitUntilReady())
+	  return -1;
+
+	Pipe_Write_Byte(c);
+	Pipe_ClearIN();
+	
+	return 0;
+}
+
+static int CDC_getchar(FILE *stream)
+{
+	int c;
+
+	Pipe_SelectPipe(CDC_DATAPIPE_IN);
+	
+	for (;;)
+	{
+		if (Pipe_WaitUntilReady())
+		  return -1;
+	
+		if (!(Pipe_BytesInPipe()))
+		{
+			Pipe_ClearOUT();
+		}
+		else
+		{
+			c = Pipe_Read_Byte();
+			break;
+		}
+	}
+	
+	return c;
+}
+
+static FILE USBSerial = FDEV_SETUP_STREAM(CDC_putchar, CDC_getchar, _FDEV_SETUP_RW);
+#endif
+
 /** Main program entry point. This routine configures the hardware required by the application, then
  *  enters a loop to run the application tasks in sequence.
  */
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index e0750ded4..b47097c42 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -13,6 +13,7 @@
   *  - Added new HID_HOST_BOOT_PROTOCOL_ONLY compile time token to reduce the size of the HID Host Class driver when
   *    Report protocol is not needed
   *  - Added new MIDI LowLevel and ClassDriver Host demo, add new MIDI Host Class driver
+  *  - Added stdio.h stream examples for the virtual CDC UART in the CDC host demos
   *
   *  <b>Changed:</b>
   *  - Removed mostly useless "TestApp" demo, as it was mainly useful only for checking for sytax errors in the library
diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt
index 59c51b106..2ca27ec60 100644
--- a/LUFA/ManPages/FutureChanges.txt
+++ b/LUFA/ManPages/FutureChanges.txt
@@ -22,7 +22,7 @@
   *  - Master LUFA include file rather than per-module includes
   *  - Change makefiles to allow for absolute LUFA location to be used
   *  - Abstract out the physical media from the Mass Storage device demos
-  *  - Add MIDI Host Class driver
+  *  - Add RNDIS Host Class driver
   *  - Make new demos
   *      -# Multiple-report HID device
   *      -# Mouse/CDC Dual Class Device
-- 
GitLab