diff -r 000000000000 -r 2c8ba1964db7 MarlinSerial.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MarlinSerial.h Sat Nov 07 13:23:07 2015 +0100 @@ -0,0 +1,156 @@ +/* + HardwareSerial.h - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 28 September 2010 by Mark Sproul +*/ + + + +#ifndef MarlinSerial_h +#define MarlinSerial_h +#include "Marlin.h" + +#ifndef REPRAPPRO_MULTIMATERIALS + +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 +#define BYTE 0 + + +#if MOTHERBOARD != 8 // ! teensylu +// Define constants and variables for buffering incoming serial data. We're +// using a ring buffer (I think), in which rx_buffer_head is the index of the +// location to which to write the next incoming character and rx_buffer_tail +// is the index of the location from which to read. +#define RX_BUFFER_SIZE 128 + + +struct ring_buffer +{ + unsigned char buffer[RX_BUFFER_SIZE]; + int head; + int tail; +}; + +#if defined(UBRRH) || defined(UBRR0H) + extern ring_buffer rx_buffer; +#endif + +class MarlinSerial //: public Stream +{ + + public: + MarlinSerial(); + void begin(long); + void end(); + int peek(void); + int read(void); + void flush(void); + + FORCE_INLINE int available(void) + { + return (unsigned int)(RX_BUFFER_SIZE + rx_buffer.head - rx_buffer.tail) % RX_BUFFER_SIZE; + } + + FORCE_INLINE void write(uint8_t c) + { + while (!((UCSR0A) & (1 << UDRE0))) + ; + + UDR0 = c; + } + + + FORCE_INLINE void checkRx(void) + { + if((UCSR0A & (1<