From cde2afc50e25054a0ba21c4454e7101d7ac02a35 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Thu, 6 May 2010 11:13:24 +0000
Subject: [PATCH] Ensure that the CDC class drivers return 0 if the number of
 unread bytes is queried and the bank has become empty.

---
 Bootloaders/TeensyHID/makefile      |  2 +-
 LUFA/Drivers/USB/Class/Device/CDC.c | 11 ++++++++---
 LUFA/Drivers/USB/Class/Host/CDC.c   | 16 ++++++++++------
 3 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/Bootloaders/TeensyHID/makefile b/Bootloaders/TeensyHID/makefile
index 9a9f5ff0d..404b55f9c 100644
--- a/Bootloaders/TeensyHID/makefile
+++ b/Bootloaders/TeensyHID/makefile
@@ -68,7 +68,7 @@ BOARD  =
 #     does not *change* the processor frequency - it should merely be updated to
 #     reflect the processor speed set externally so that the code can use accurate
 #     software delays.
-F_CPU = 8000000
+F_CPU = 16000000
 
 
 # Input clock frequency.
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c
index 4cdea9485..ade2a1b50 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.c
+++ b/LUFA/Drivers/USB/Class/Device/CDC.c
@@ -195,9 +195,14 @@ uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterface
 	if (Endpoint_IsOUTReceived())
 	{
 		if (!(Endpoint_BytesInEndpoint()))
-		  Endpoint_ClearOUT();
-
-		return Endpoint_BytesInEndpoint();
+		{
+			Endpoint_ClearOUT();
+			return 0;
+		}
+		else
+		{
+			return Endpoint_BytesInEndpoint();
+		}
 	}
 	else
 	{
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.c b/LUFA/Drivers/USB/Class/Host/CDC.c
index cc1ff8a0b..bc8e089a8 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.c
+++ b/LUFA/Drivers/USB/Class/Host/CDC.c
@@ -315,12 +315,16 @@ uint16_t CDC_Host_BytesReceived(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo
 	if (Pipe_IsINReceived())
 	{
 		if (!(Pipe_BytesInPipe()))
-		  Pipe_ClearIN();
-		
-		BytesInPipe = Pipe_BytesInPipe();
-		Pipe_Freeze();
-		
-		return BytesInPipe;
+		{
+			Pipe_ClearIN();
+			Pipe_Freeze();
+			return 0;
+		}
+		else
+		{
+			Pipe_Freeze();
+			return Pipe_BytesInPipe();
+		}
 	}
 	else
 	{
-- 
GitLab