diff options
| -rw-r--r-- | cores/arduino/CDC.cpp | 134 | ||||
| -rw-r--r-- | cores/arduino/USBAPI.h | 46 | 
2 files changed, 20 insertions, 160 deletions
| diff --git a/cores/arduino/CDC.cpp b/cores/arduino/CDC.cpp index 142f8f6..9fea948 100644 --- a/cores/arduino/CDC.cpp +++ b/cores/arduino/CDC.cpp @@ -163,140 +163,6 @@ bool CDC_Setup(USBSetup& setup)  	return false;  } - -void Serial_::begin(unsigned long /* baud_count */) -{ -	peek_buffer = -1; -} - -void Serial_::begin(unsigned long /* baud_count */, byte /* config */) -{ -	peek_buffer = -1; -} - -void Serial_::end(void) -{ -} - -int Serial_::available(void) -{ -	if (peek_buffer >= 0) { -		return 1 + USB_Available(CDC_RX); -	} -	return USB_Available(CDC_RX); -} - -int Serial_::peek(void) -{ -	if (peek_buffer < 0) -		peek_buffer = USB_Recv(CDC_RX); -	return peek_buffer; -} - -int Serial_::read(void) -{ -	if (peek_buffer >= 0) { -		int c = peek_buffer; -		peek_buffer = -1; -		return c; -	} -	return USB_Recv(CDC_RX); -} - -int Serial_::availableForWrite(void) -{ -	return USB_SendSpace(CDC_TX); -} - -void Serial_::flush(void) -{ -	USB_Flush(CDC_TX); -} - -size_t Serial_::write(uint8_t c) -{ -	return write(&c, 1); -} - -size_t Serial_::write(const uint8_t *buffer, size_t size) -{ -	/* 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)	{ -		int r = USB_Send(CDC_TX,buffer,size); -		if (r > 0) { -			return r; -		} else { -			setWriteError(); -			return 0; -		} -	} -	setWriteError(); -	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() { -	bool result = false; -	if (_usbLineInfo.lineState > 0)  -		result = true; -	delay(10); -	return result; -} - -unsigned long Serial_::baud() { -	// Disable interrupts while reading a multi-byte value -	uint32_t baudrate; -	ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { -		baudrate =  _usbLineInfo.dwDTERate; -	} -	return baudrate; -} - -uint8_t Serial_::stopbits() { -	return _usbLineInfo.bCharFormat; -} - -uint8_t Serial_::paritytype() { -	return _usbLineInfo.bParityType; -} - -uint8_t Serial_::numbits() { -	return _usbLineInfo.bDataBits; -} - -bool Serial_::dtr() { -	return _usbLineInfo.lineState & 0x1; -} - -bool Serial_::rts() { -	return _usbLineInfo.lineState & 0x2; -} - -int32_t Serial_::readBreak() { -	int32_t ret; -	// Disable IRQs while reading and clearing breakValue to make -	// sure we don't overwrite a value just set by the ISR. -	ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { -		ret = breakValue; -		breakValue = -1; -	} -	return ret; -} -  Serial_ Serial;  #endif /* if defined(USBCON) */ diff --git a/cores/arduino/USBAPI.h b/cores/arduino/USBAPI.h index 479ced9..06dd737 100644 --- a/cores/arduino/USBAPI.h +++ b/cores/arduino/USBAPI.h @@ -87,27 +87,21 @@ struct ring_buffer;  class Serial_ : public Stream  { -private: -	int peek_buffer;  public: -	Serial_() { peek_buffer = -1; }; -	void begin(unsigned long); -	void begin(unsigned long, uint8_t); -	void end(void); - -	virtual int available(void); -	virtual int peek(void); -	virtual int read(void); -	virtual int availableForWrite(void); -	virtual void flush(void); -	virtual size_t write(uint8_t); -	virtual size_t write(const uint8_t*, size_t); +	Serial_() {}; +	void begin(unsigned long) {} +	void begin(unsigned long, uint8_t) {} +	void end(void) {} + +	virtual int available(void) { return -1; } +	virtual int peek(void) { return -1; } +	virtual int read(void) { return -1; } +	virtual int availableForWrite(void) { return 0; } +	virtual void flush(void) {} +	virtual size_t write(uint8_t) { return 1; } +	virtual size_t write(const uint8_t*, size_t n) { return n; }  	using Print::write; // pull in write(str) and write(buf, size) from Print -	operator bool(); - -	volatile uint8_t _rx_buffer_head; -	volatile uint8_t _rx_buffer_tail; -	unsigned char _rx_buffer[SERIAL_BUFFER_SIZE]; +	operator bool() { return true; }  	// This method allows processing "SEND_BREAK" requests sent by  	// the USB host. Those requests indicate that the host wants to @@ -124,17 +118,17 @@ public:  	// first request is lost.  	// Note that the value returned is a long, so it can return  	// 0-0xffff as well as -1. -	int32_t readBreak(); +	int32_t readBreak() { return -1; };  	// These return the settings specified by the USB host for the  	// serial port. These aren't really used, but are offered here  	// in case a sketch wants to act on these settings. -	uint32_t baud(); -	uint8_t stopbits(); -	uint8_t paritytype(); -	uint8_t numbits(); -	bool dtr(); -	bool rts(); +	uint32_t baud() { return 0; } +	uint8_t stopbits() { return 1; } +	uint8_t paritytype() { return 0; } +	uint8_t numbits() { return 8; } +	bool dtr() { return true; } +	bool rts() { return true; }  	enum {  		ONE_STOP_BIT = 0,  		ONE_AND_HALF_STOP_BIT = 1, | 
