summaryrefslogtreecommitdiff
path: root/test/kb_mkbp.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/kb_mkbp.c')
-rw-r--r--test/kb_mkbp.c54
1 files changed, 39 insertions, 15 deletions
diff --git a/test/kb_mkbp.c b/test/kb_mkbp.c
index e1abcc3adb..f838a0c411 100644
--- a/test/kb_mkbp.c
+++ b/test/kb_mkbp.c
@@ -71,31 +71,33 @@ int press_key(int c, int r, int pressed)
int verify_key(int c, int r, int pressed)
{
struct host_cmd_handler_args args;
- uint8_t mkbp_out[KEYBOARD_COLS];
+ struct ec_response_get_next_event event;
int i;
- if (c >= 0 && r >= 0) {
- ccprintf("Verify %s (%d, %d)\n", action[pressed], c, r);
- set_state(c, r, pressed);
- } else {
- ccprintf("Verify last state\n");
- }
-
args.version = 0;
- args.command = EC_CMD_MKBP_STATE;
+ args.command = EC_CMD_GET_NEXT_EVENT;
args.params = NULL;
args.params_size = 0;
- args.response = mkbp_out;
- args.response_max = sizeof(mkbp_out);
+ args.response = &event;
+ args.response_max = sizeof(event);
args.response_size = 0;
- if (host_command_process(&args) != EC_RES_SUCCESS)
- return 0;
+ if (c >= 0 && r >= 0) {
+ ccprintf("Verify %s (%d, %d)\n", action[pressed], c, r);
+ set_state(c, r, pressed);
- for (i = 0; i < KEYBOARD_COLS; ++i)
- if (mkbp_out[i] != state[i])
+ if (host_command_process(&args) != EC_RES_SUCCESS)
return 0;
+ for (i = 0; i < KEYBOARD_COLS; ++i)
+ if (event.data.key_matrix[i] != state[i])
+ return 0;
+ } else {
+ ccprintf("Verify no events available\n");
+ if (host_command_process(&args) != EC_RES_UNAVAILABLE)
+ return 0;
+ }
+
return 1;
}
@@ -136,6 +138,26 @@ int set_kb_scan_enabled(int enabled)
return mkbp_config(params);
}
+void clear_mkbp_events(void)
+{
+ struct host_cmd_handler_args args;
+ struct ec_response_get_next_event event;
+
+ args.version = 0;
+ args.command = EC_CMD_GET_NEXT_EVENT;
+ args.params = NULL;
+ args.params_size = 0;
+ args.response = &event;
+ args.response_max = sizeof(event);
+ args.response_size = 0;
+
+ /*
+ * We should return EC_RES_UNAVAILABLE if there are no MKBP events left.
+ */
+ while (host_command_process(&args) != EC_RES_UNAVAILABLE)
+ ;
+}
+
/*****************************************************************************/
/* Tests */
@@ -211,6 +233,8 @@ void run_test(void)
ec_int_level = 1;
test_reset();
+ /* Clear any pending events such as lid open. */
+ clear_mkbp_events();
RUN_TEST(single_key_press);
RUN_TEST(test_fifo_size);
RUN_TEST(test_enable);