From f0ac64d2db34f297602288e756c1cfb41da22804 Mon Sep 17 00:00:00 2001 From: Zach Eveland Date: Wed, 24 Aug 2011 21:04:30 -0400 Subject: bugfix - Serial.write() would try to send even if no CDC connection was open. --- cores/arduino/CDC.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'cores/arduino/CDC.cpp') 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; -- cgit v1.2.3-18-g5258