From ee611dc194fad72d2db9a901208577857365778f Mon Sep 17 00:00:00 2001
From: Zach Eveland <zeveland@blacklabel-development.com>
Date: Fri, 6 Apr 2012 21:23:17 -0400
Subject: Revert "Revert "added a short delay and comment to boolean operator
 in CDC""

This reverts commit 200eefb4e2ac7796c5c901e8fd9369c85ec544c5.
---
 cores/arduino/CDC.cpp | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/cores/arduino/CDC.cpp b/cores/arduino/CDC.cpp
index 1275304..c1e646d 100644
--- a/cores/arduino/CDC.cpp
+++ b/cores/arduino/CDC.cpp
@@ -213,10 +213,19 @@ size_t Serial_::write(uint8_t c)
 	return 0;
 }
 
+// This operator is a convenient way for a sketch to check whether the
+// port has actually been configured and opened by the host (as opposed
+// to just being connected to the host).  It can be used, for example, in 
+// setup() before printing to ensure that an application on the host is
+// actually ready to receive and display the data.
+// We add a short delay before returning to fix a bug observed by Federico
+// where the port is configured (lineState != 0) but not quite opened.
 Serial_::operator bool() {
-	if (_usbLineInfo.lineState > 0)
-		return true;
-	return false;
+	bool result = false;
+	if (_usbLineInfo.lineState > 0) 
+		result = true;
+	delay(10);
+	return result;
 }
 
 Serial_ Serial;
-- 
cgit v1.2.3-18-g5258