diff options
author | Vic Yang <victoryang@chromium.org> | 2013-07-04 16:34:50 +0800 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-07-11 04:26:09 -0700 |
commit | b3f1d0d0593a430a5fb7605e5fc4337ae0a8833c (patch) | |
tree | 51962e353c36e1233f0b81021381a6f3d0922742 | |
parent | 6b46a0cfc5f26fef296feb3ded61762f1760fc49 (diff) | |
download | chrome-ec-b3f1d0d0593a430a5fb7605e5fc4337ae0a8833c.tar.gz |
Add function to inject console input from test
This can be used to test console command.
BUG=chrome-os-partner:19236
TEST=Build success
BRANCH=None
Change-Id: I7ce002f9e66fd7786492bacb453f126b9766d741
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/60978
Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r-- | chip/host/uart.c | 21 | ||||
-rw-r--r-- | include/test_util.h | 4 |
2 files changed, 23 insertions, 2 deletions
diff --git a/chip/host/uart.c b/chip/host/uart.c index 9add50d4d2..dc237c53b1 100644 --- a/chip/host/uart.c +++ b/chip/host/uart.c @@ -15,6 +15,7 @@ #include "queue.h" #include "task.h" #include "uart.h" +#include "util.h" static int stopped; static int int_disabled; @@ -102,6 +103,21 @@ void uart_enable_interrupt(void) int_disabled = 0; } +void uart_inject_char(char *s, int sz) +{ + int i; + int num_char; + + for (i = 0; i < sz; i += INPUT_BUFFER_SIZE - 1) { + num_char = MIN(INPUT_BUFFER_SIZE - 1, sz - i); + if (!queue_has_space(&cached_char, num_char)) + return; + queue_add_units(&cached_char, s + i, num_char); + char_available = num_char; + trigger_interrupt(); + } +} + void *uart_monitor_stdin(void *d) { struct termios org_settings, new_settings; @@ -118,9 +134,10 @@ void *uart_monitor_stdin(void *d) while (1) { tcsetattr(0, TCSANOW, &new_settings); rv = read(0, buf, INPUT_BUFFER_SIZE); - if (queue_has_space(&cached_char, rv)) + if (queue_has_space(&cached_char, rv)) { queue_add_units(&cached_char, buf, rv); - char_available = rv; + char_available = rv; + } tcsetattr(0, TCSANOW, &org_settings); /* * TODO: Trigger emulated interrupt when we have diff --git a/include/test_util.h b/include/test_util.h index d63acfa741..fe7ede5f9b 100644 --- a/include/test_util.h +++ b/include/test_util.h @@ -81,4 +81,8 @@ int test_send_host_command(int command, int version, const void *params, extern int __test_error_count; +void uart_inject_char(char *s, int sz); + +#define UART_INJECT(s) uart_inject_char(s, strlen(s)); + #endif /* __CROS_EC_TEST_UTIL_H */ |