diff options
author | Cristian Maglie <c.maglie@bug.st> | 2013-07-26 13:50:34 +0200 |
---|---|---|
committer | Cristian Maglie <c.maglie@bug.st> | 2013-07-26 13:50:34 +0200 |
commit | cddc83bb19e760145ea312f187371f44a6a921e8 (patch) | |
tree | 0a333c9dd46dd144580fb4a18c7aaecb214535a7 /cores/robot/HardwareSerial.h | |
parent | 090d53a74e1ebe256523608c4b7fd90304d611b9 (diff) |
Applied HardwareSerial updates to robot's core.
Diffstat (limited to 'cores/robot/HardwareSerial.h')
-rw-r--r-- | cores/robot/HardwareSerial.h | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/cores/robot/HardwareSerial.h b/cores/robot/HardwareSerial.h index a73117f..0f62262 100644 --- a/cores/robot/HardwareSerial.h +++ b/cores/robot/HardwareSerial.h @@ -27,13 +27,19 @@ #include "Stream.h" -struct ring_buffer; +// Define constants and variables for buffering incoming serial data. We're +// using a ring buffer (I think), in which head is the index of the location +// to which to write the next incoming character and tail is the index of the +// location from which to read. +#if (RAMEND < 1000) + #define SERIAL_BUFFER_SIZE 16 +#else + #define SERIAL_BUFFER_SIZE 64 +#endif class HardwareSerial : public Stream { - private: - ring_buffer *_rx_buffer; - ring_buffer *_tx_buffer; + protected: volatile uint8_t *_ubrrh; volatile uint8_t *_ubrrl; volatile uint8_t *_ucsra; @@ -46,8 +52,20 @@ class HardwareSerial : public Stream uint8_t _udrie; uint8_t _u2x; bool transmitting; + public: - HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer, + volatile uint8_t _rx_buffer_head; + volatile uint8_t _rx_buffer_tail; + volatile uint8_t _tx_buffer_head; + volatile uint8_t _tx_buffer_tail; + + // Don't put any members after these buffers, since only the first + // 32 bytes of this struct can be accessed quickly using the ldd + // instruction. + unsigned char _rx_buffer[SERIAL_BUFFER_SIZE]; + unsigned char _tx_buffer[SERIAL_BUFFER_SIZE]; + + HardwareSerial( volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra, volatile uint8_t *ucsrb, volatile uint8_t *ucsrc, volatile uint8_t *udr, |