aboutsummaryrefslogtreecommitdiff
path: root/cores
diff options
context:
space:
mode:
authorZach Eveland <zeveland@blacklabel-development.com>2011-08-24 21:04:30 -0400
committerZach Eveland <zeveland@blacklabel-development.com>2011-08-24 21:04:30 -0400
commitf0ac64d2db34f297602288e756c1cfb41da22804 (patch)
tree1765ed8f5ba27e8a9fafdb7f967a2b7b7d5aec3f /cores
parent160bf890e0cc96a7be4166eca7b9753d64635339 (diff)
bugfix - Serial.write() would try to send even if no CDC connection was open.
Diffstat (limited to 'cores')
-rw-r--r--cores/arduino/CDC.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/cores/arduino/CDC.cpp b/cores/arduino/CDC.cpp
index 7d9d682..7da9077 100644
--- a/cores/arduino/CDC.cpp
+++ b/cores/arduino/CDC.cpp
@@ -155,7 +155,17 @@ void Serial_::flush(void)
void Serial_::write(uint8_t c)
{
- USB_Send(CDC_TX,&c,1);
+ /* only try to send bytes if the high-level CDC connection itself
+ is open (not just the pipe) - the OS should set lineState when the port
+ is opened and clear lineState when the port is closed.
+ bytes sent before the user opens the connection or after
+ the connection is closed are lost - just like with a UART. */
+
+ // TODO - ZE - check behavior on different OSes and test what happens if an
+ // open connection isn't broken cleanly (cable is yanked out, host dies
+ // or locks up, or host virtual serial port hangs)
+ if (_usbLineInfo.lineState > 0)
+ USB_Send(CDC_TX,&c,1);
}
Serial_ Serial;