diff options
Diffstat (limited to 'test/kb_mkbp.c')
-rw-r--r-- | test/kb_mkbp.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/kb_mkbp.c b/test/kb_mkbp.c index 15952e74bb..324b5b3e91 100644 --- a/test/kb_mkbp.c +++ b/test/kb_mkbp.c @@ -101,6 +101,46 @@ int verify_key(int c, int r, int pressed) return 1; } +int verify_key_v2(int c, int r, int pressed, int expect_more) +{ + struct host_cmd_handler_args args; + struct ec_response_get_next_event_v1 event; + int i; + + args.version = 2; + 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; + + if (c >= 0 && r >= 0) { + ccprintf("Verify %s (%d, %d). Expect %smore.\n", + action[pressed], c, r, expect_more ? "" : "no "); + set_state(c, r, pressed); + + if (host_command_process(&args) != EC_RES_SUCCESS) + return 0; + + if (!!(event.event_type & EC_MKBP_HAS_MORE_EVENTS) != + expect_more) { + ccprintf("Incorrect more events!\n"); + return 0; + } + + for (i = 0; i < KEYBOARD_COLS_MAX; ++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; +} + int mkbp_config(struct ec_params_mkbp_set_config params) { struct host_cmd_handler_args args; @@ -179,6 +219,24 @@ int single_key_press(void) return EC_SUCCESS; } +int single_key_press_v2(void) +{ + keyboard_clear_buffer(); + clear_state(); + TEST_ASSERT(press_key(0, 0, 1) == EC_SUCCESS); + TEST_ASSERT(FIFO_NOT_EMPTY()); + TEST_ASSERT(press_key(0, 0, 0) == EC_SUCCESS); + TEST_ASSERT(FIFO_NOT_EMPTY()); + + clear_state(); + TEST_ASSERT(verify_key_v2(0, 0, 1, 1)); + TEST_ASSERT(FIFO_NOT_EMPTY()); + TEST_ASSERT(verify_key_v2(0, 0, 0, 0)); + TEST_ASSERT(FIFO_EMPTY()); + + return EC_SUCCESS; +} + int test_fifo_size(void) { keyboard_clear_buffer(); @@ -236,6 +294,7 @@ void run_test(void) /* Clear any pending events such as lid open. */ clear_mkbp_events(); RUN_TEST(single_key_press); + RUN_TEST(single_key_press_v2); RUN_TEST(test_fifo_size); RUN_TEST(test_enable); RUN_TEST(fifo_underrun); |