diff options
Diffstat (limited to 'test/kb_mkbp.c')
-rw-r--r-- | test/kb_mkbp.c | 54 |
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); |