aboutsummaryrefslogtreecommitdiff
path: root/kernel/uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/uart.c')
-rw-r--r--kernel/uart.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/kernel/uart.c b/kernel/uart.c
index 8407113..9fc7e28 100644
--- a/kernel/uart.c
+++ b/kernel/uart.c
@@ -33,6 +33,8 @@
FILE uart_stream = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
+uint8_t (*data)(void);
+
#ifdef USE_RXCIE
ISR(SIG_UART_RECV)
{
@@ -51,10 +53,21 @@ ISR(SIG_UART_RECV)
for (p = (uint8_t *)0; p <= (uint8_t *)RAMEND; p++)
uart_putchar(*p, NULL);
break;
+ case 'L':
+ data = rqlen;
+ UCSRB |= _BV(UDRIE);
+ break;
case 'T':
+ data = running;
+ UCSRB |= _BV(UDRIE);
+ break;
+ case 'S':
+ data = semaphore;
UCSRB |= _BV(UDRIE);
break;
+ case 'l':
case 't':
+ case 's':
UCSRB &= ~_BV(UDRIE);
break;
case '\r':
@@ -68,7 +81,7 @@ ISR(SIG_UART_RECV)
ISR(SIG_UART_DATA)
{
- uint8_t r = running();
+ uint8_t r = data();
UDR = r ? '0' + r : '.';
}