--- a/src/serial.c Fri Apr 11 19:18:15 2014 +0300
+++ b/src/serial.c Fri Apr 11 19:30:41 2014 +0300
@@ -20,7 +20,13 @@
} serial_chars = SERIAL_CHARS_8;
/** Serial state */
-char serial_rx = 0;
+#define SERIAL_BUF 64
+
+struct serial {
+ char buf[SERIAL_BUF];
+ byte in, out;
+} serial_rx;
+
char serial_tx = 0;
void serial_enable (char rx, char tx);
@@ -88,7 +94,10 @@
*/
ISR(USART_RX_vect)
{
- serial_rx = UDR0;
+ serial_rx.buf[serial_rx.in++] = UDR0;
+
+ if (serial_rx.in >= SERIAL_BUF)
+ serial_rx.in = 0;
}
/*
@@ -107,10 +116,13 @@
char serial_read ()
{
- char rx = serial_rx;
+ if (serial_rx.out == serial_rx.in)
+ return 0;
- // rx buffer consumed
- serial_rx = 0;
+ char rx = serial_rx.buf[serial_rx.out++];
+
+ if (serial_rx.out >= SERIAL_BUF)
+ serial_rx.out = 0;
return rx;
}