summaryrefslogtreecommitdiff
path: root/chip/host/uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/host/uart.c')
-rw-r--r--chip/host/uart.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/chip/host/uart.c b/chip/host/uart.c
index ce8310f171..b39232833b 100644
--- a/chip/host/uart.c
+++ b/chip/host/uart.c
@@ -13,6 +13,7 @@
#include "common.h"
#include "queue.h"
#include "task.h"
+#include "test_util.h"
#include "uart.h"
#include "util.h"
@@ -66,16 +67,20 @@ const char *test_get_captured_console(void)
return (const char *)capture_buf;
}
+static void uart_interrupt(void)
+{
+ uart_process_input();
+ uart_process_output();
+}
+
static void trigger_interrupt(void)
{
- /*
- * TODO(crosbug.com/p/23804): Check global interrupt status when we
- * have interrupt support.
- */
- if (!int_disabled) {
- uart_process_input();
- uart_process_output();
- }
+ if (int_disabled)
+ return;
+ if (task_start_called())
+ task_trigger_test_interrupt(uart_interrupt);
+ else
+ uart_interrupt();
}
int uart_init_done(void)
@@ -177,9 +182,9 @@ void *uart_monitor_stdin(void *d)
}
tcsetattr(0, TCSANOW, &org_settings);
/*
- * TODO(crosbug.com/p/23804): Trigger emulated interrupt when
- * we have interrupt support. Also, we will need a condition
- * variable to indicate the character has been read.
+ * Trigger emulated interrupt to process input. Keyboard
+ * input while interrupt handler runs is queued by the
+ * system.
*/
trigger_interrupt();
}