1 /* 2 HardwareSerial.h - Hardware serial library for Wiring 3 Copyright (c) 2006 Nicholas Zambetti. All right reserved. 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Modified 28 September 2010 by Mark Sproul 20 */ 21 22 #ifndef HardwareSerial_h 23 #define HardwareSerial_h 24 25 #include <inttypes.h> 26 27 #include "Stream.h" 28 29 struct ring_buffer; 30 31 class HardwareSerial : public Stream 32 { 33 private: 34 ring_buffer *_rx_buffer; 35 volatile uint8_t *_ubrrh; 36 volatile uint8_t *_ubrrl; 37 volatile uint8_t *_ucsra; 38 volatile uint8_t *_ucsrb; 39 volatile uint8_t *_udr; 40 uint8_t _rxen; 41 uint8_t _txen; 42 uint8_t _rxcie; 43 uint8_t _udre; 44 uint8_t _u2x; 45 public: 46 HardwareSerial(ring_buffer *rx_buffer, 47 volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, 48 volatile uint8_t *ucsra, volatile uint8_t *ucsrb, 49 volatile uint8_t *udr, 50 uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udre, uint8_t u2x); 51 void begin(long); 52 void end(); 53 virtual int available(void); 54 virtual int peek(void); 55 virtual int read(void); 56 virtual void flush(void); 57 virtual void write(uint8_t); 58 using Print::write; // pull in write(str) and write(buf, size) from Print 59 }; 60 61 #if defined(UBRRH) || defined(UBRR0H) 62 extern HardwareSerial Serial; 63 #elif defined(USBCON) 64 #include "usb_api.h" 65 #endif 66 #if defined(UBRR1H) 67 extern HardwareSerial Serial1; 68 #endif 69 #if defined(UBRR2H) 70 extern HardwareSerial Serial2; 71 #endif 72 #if defined(UBRR3H) 73 extern HardwareSerial Serial3; 74 #endif 75 76 #endif 77