diff options
author | pandeyan <anshuman.pandey@intel.com> | 2020-01-31 12:03:17 +0530 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-03-17 10:59:27 +0000 |
commit | e5e676f641dec32ddf4b32d1b8f4f9636e31ff2a (patch) | |
tree | 70ff7dda81a04ab75e1f402847230d302343050c /util | |
parent | c0bc2333b28bfad368768292fa84808bfb9cf954 (diff) | |
download | chrome-ec-e5e676f641dec32ddf4b32d1b8f4f9636e31ff2a.tar.gz |
Button: add ectool command to simulate button press
Added a new ectool command 'ectool button' for simulating
volume up and volume down button operations along with the duration
in milli-seconds for which button needs to be pressed.
BUG=b:149659987
BRANCH=None
TEST=Tested on hatch board.
From Kernel console, entered the below commands:
$ectool button vup 500
Observed volume UP key press on EC console.
Change-Id: I6fcdf80ea45b80403f72af89ce99214226731d0f
Signed-off-by: pandeyan <anshuman.pandey@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2059929
Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/ectool.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/util/ectool.c b/util/ectool.c index c521f94900..c04fddb4c6 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -80,6 +80,8 @@ const char help_str[] = " Read or write board-specific battery parameter\n" " boardversion\n" " Prints the board version\n" + " button [vup|vdown|rec] <Delay-ms>\n" + " Simulates button press.\n" " cbi\n" " Get/Set Cros Board Info\n" " chargecurrentlimit\n" @@ -1106,6 +1108,58 @@ int cmd_reboot_ap_on_g3(int argc, char *argv[]) return (rv < 0 ? rv : 0); } +int cmd_button(int argc, char *argv[]) +{ + struct ec_params_button p; + char *e; + int argv_idx; + int button = KEYBOARD_BUTTON_COUNT; + int rv; + + if (argc < 2) { + fprintf(stderr, "Invalid num param %d.\n", argc); + return -1; + } + + p.press_ms = 50; + p.btn_mask = 0; + + for (argv_idx = 1; argv_idx < argc; argv_idx++) { + if (!strcasecmp(argv[argv_idx], "vup")) + button = KEYBOARD_BUTTON_VOLUME_UP; + else if (!strcasecmp(argv[argv_idx], "vdown")) + button = KEYBOARD_BUTTON_VOLUME_DOWN; + else if (!strcasecmp(argv[argv_idx], "rec")) + button = KEYBOARD_BUTTON_RECOVERY; + else { + /* If last parameter check if it is an integer. */ + if (argv_idx == argc - 1) { + p.press_ms = strtol(argv[argv_idx], &e, 0); + /* If integer, break out of the loop. */ + if (!*e) + break; + } + button = KEYBOARD_BUTTON_COUNT; + } + + if (button == KEYBOARD_BUTTON_COUNT) { + fprintf(stderr, "Invalid button input.\n"); + return -1; + } + + p.btn_mask |= (1 << button); + } + if (!p.btn_mask) + return 0; + + rv = ec_command(EC_CMD_BUTTON, 0, &p, sizeof(p), NULL, 0); + if (rv < 0) + return rv; + + printf("Button(s) %d set to %d ms\n", p.btn_mask, p.press_ms); + return 0; +} + int cmd_flash_info(int argc, char *argv[]) { struct ec_response_flash_info_1 r; @@ -9428,6 +9482,7 @@ const struct command commands[] = { {"batterycutoff", cmd_battery_cut_off}, {"batteryparam", cmd_battery_vendor_param}, {"boardversion", cmd_board_version}, + {"button", cmd_button}, {"cbi", cmd_cbi}, {"chargecurrentlimit", cmd_charge_current_limit}, {"chargecontrol", cmd_charge_control}, |