diff options
author | pandeyan <anshuman.pandey@intel.com> | 2020-04-01 15:59:21 +0530 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-04-29 12:25:24 +0000 |
commit | 5d7cc5d7e1100f0767d3bd0bf53c1f7de81f444e (patch) | |
tree | 46cfe7993017f6239cbfbc612833a094243636f9 | |
parent | 7f310174323b5e67292b90375447f3ec06998ff3 (diff) | |
download | chrome-ec-5d7cc5d7e1100f0767d3bd0bf53c1f7de81f444e.tar.gz |
Button: Add unit tests for simulated button press
Added unit test cases to verify the button simulate operations.
BUG=b:149659987
BRANCH=None
TEST= Executed all unit tests locally
make runhosttests -j
Signed-off-by: pandeyan <anshuman.pandey@intel.com>
Change-Id: If936766e03d574590fd90b1ea7a543102e263b0c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2131966
Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r-- | test/button.c | 134 | ||||
-rw-r--r-- | test/test_config.h | 1 |
2 files changed, 135 insertions, 0 deletions
diff --git a/test/button.c b/test/button.c index 29cbbce93e..04d05e8bc3 100644 --- a/test/button.c +++ b/test/button.c @@ -14,10 +14,12 @@ #include "common.h" #include "console.h" #include "gpio.h" +#include "host_command.h" #include "test_util.h" #include "timer.h" #include "keyboard_config.h" #include "keyboard_protocol.h" +#include "util.h" #define UNCHANGED -1 @@ -142,6 +144,120 @@ static int test_button_press_both(void) return EC_SUCCESS; } +/* Button simulate test cases */ +static int send_button_hostcmd(uint32_t btn_mask, uint32_t press_ms) +{ + struct ec_params_button p; + + p.press_ms = press_ms; + p.btn_mask = btn_mask; + + return test_send_host_command(EC_CMD_BUTTON, 0, &p, sizeof(p), NULL, 0); +} + +static void test_sim_button_util(uint32_t btn_mask, uint32_t press_ms) +{ + send_button_hostcmd(btn_mask, press_ms); + msleep(100); +} + +/* Test simulate pressing a button */ +static int test_sim_button_press(void) +{ + test_sim_button_util(1 << KEYBOARD_BUTTON_VOLUME_DOWN, 100); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 1); + + return EC_SUCCESS; +} + +/* Test simulate releasing a button */ +static int test_sim_button_release(void) +{ + test_sim_button_util(1 << KEYBOARD_BUTTON_VOLUME_UP, 50); + TEST_ASSERT(button_state[BUTTON_VOLUME_UP] == 0); + + return EC_SUCCESS; +} + +/* A press shorter than the debounce time should not trigger an update */ +static int test_sim_button_debounce_short_press(void) +{ + test_sim_button_util(1 << KEYBOARD_BUTTON_VOLUME_DOWN, 10); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == UNCHANGED); + + return EC_SUCCESS; +} + +/* A short bounce while pressing should still result in a button press */ +static int test_sim_button_debounce_short_bounce(void) +{ + uint32_t btn_mask = 0; + + btn_mask |= (1 << KEYBOARD_BUTTON_VOLUME_DOWN); + send_button_hostcmd(btn_mask, 10); + msleep(50); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == UNCHANGED); + + send_button_hostcmd(btn_mask, 100); + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == UNCHANGED); + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 1); + + return EC_SUCCESS; +} + +/* Button level must be stable for the entire debounce interval */ +static int test_sim_button_debounce_stability(void) +{ + uint32_t btn_mask = 0; + + btn_mask |= (1 << KEYBOARD_BUTTON_VOLUME_DOWN); + send_button_hostcmd(btn_mask, 10); + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == UNCHANGED); + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == UNCHANGED); + + send_button_hostcmd(btn_mask, 100); + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == UNCHANGED); + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 1); + msleep(60); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 1); + + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 1); + msleep(20); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 0); + msleep(60); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 0); + + return EC_SUCCESS; +} + +/* Test simulate pressing both buttons */ +static int test_sim_button_press_both(void) +{ + uint32_t btn_mask = 0; + + btn_mask |= (1 << KEYBOARD_BUTTON_VOLUME_DOWN); + btn_mask |= (1 << KEYBOARD_BUTTON_VOLUME_UP); + send_button_hostcmd(btn_mask, 100); + msleep(10); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == UNCHANGED); + TEST_ASSERT(button_state[BUTTON_VOLUME_UP] == UNCHANGED); + msleep(60); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 1); + TEST_ASSERT(button_state[BUTTON_VOLUME_UP] == 1); + msleep(100); + TEST_ASSERT(button_state[BUTTON_VOLUME_DOWN] == 0); + TEST_ASSERT(button_state[BUTTON_VOLUME_UP] == 0); + + return EC_SUCCESS; +} + static void button_test_init(void) { int i; @@ -180,5 +296,23 @@ void run_test(void) button_test_init(); RUN_TEST(test_button_press_both); + button_test_init(); + RUN_TEST(test_sim_button_press); + + button_test_init(); + RUN_TEST(test_sim_button_release); + + button_test_init(); + RUN_TEST(test_sim_button_debounce_short_press); + + button_test_init(); + RUN_TEST(test_sim_button_debounce_short_bounce); + + button_test_init(); + RUN_TEST(test_sim_button_debounce_stability); + + button_test_init(); + RUN_TEST(test_sim_button_press_both); + test_print_result(); } diff --git a/test/test_config.h b/test/test_config.h index 4e5f413b7a..394c3fac22 100644 --- a/test/test_config.h +++ b/test/test_config.h @@ -271,6 +271,7 @@ int ncp15wb_calculate_temp(uint16_t adc); #define CONFIG_KEYBOARD_PROTOCOL_8042 #undef CONFIG_KEYBOARD_VIVALDI #define CONFIG_VOLUME_BUTTONS +#define CONFIG_HOSTCMD_BUTTON #endif #ifdef TEST_BATTERY_GET_PARAMS_SMART |