equal
deleted
inserted
replaced
18 static enum { |
18 static enum { |
19 SERIAL_CHARS_8 = 0b011, |
19 SERIAL_CHARS_8 = 0b011, |
20 } serial_chars = SERIAL_CHARS_8; |
20 } serial_chars = SERIAL_CHARS_8; |
21 |
21 |
22 /** Serial state */ |
22 /** Serial state */ |
23 char serial_rx = 0; |
23 #define SERIAL_BUF 64 |
|
24 |
|
25 struct serial { |
|
26 char buf[SERIAL_BUF]; |
|
27 byte in, out; |
|
28 } serial_rx; |
|
29 |
24 char serial_tx = 0; |
30 char serial_tx = 0; |
25 |
31 |
26 void serial_enable (char rx, char tx); |
32 void serial_enable (char rx, char tx); |
27 |
33 |
28 /* |
34 /* |
86 /* |
92 /* |
87 * Read incoming into buffer. |
93 * Read incoming into buffer. |
88 */ |
94 */ |
89 ISR(USART_RX_vect) |
95 ISR(USART_RX_vect) |
90 { |
96 { |
91 serial_rx = UDR0; |
97 serial_rx.buf[serial_rx.in++] = UDR0; |
|
98 |
|
99 if (serial_rx.in >= SERIAL_BUF) |
|
100 serial_rx.in = 0; |
92 } |
101 } |
93 |
102 |
94 /* |
103 /* |
95 * Write outgoing buffer. |
104 * Write outgoing buffer. |
96 */ |
105 */ |
105 serial_enable(1, 0); |
114 serial_enable(1, 0); |
106 } |
115 } |
107 |
116 |
108 char serial_read () |
117 char serial_read () |
109 { |
118 { |
110 char rx = serial_rx; |
119 if (serial_rx.out == serial_rx.in) |
|
120 return 0; |
111 |
121 |
112 // rx buffer consumed |
122 char rx = serial_rx.buf[serial_rx.out++]; |
113 serial_rx = 0; |
123 |
|
124 if (serial_rx.out >= SERIAL_BUF) |
|
125 serial_rx.out = 0; |
114 |
126 |
115 return rx; |
127 return rx; |
116 } |
128 } |
117 |
129 |
118 void serial_write (char c) |
130 void serial_write (char c) |