summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorpandeyan <anshuman.pandey@intel.com>2020-01-31 12:03:17 +0530
committerCommit Bot <commit-bot@chromium.org>2020-03-17 10:59:27 +0000
commite5e676f641dec32ddf4b32d1b8f4f9636e31ff2a (patch)
tree70ff7dda81a04ab75e1f402847230d302343050c /util
parentc0bc2333b28bfad368768292fa84808bfb9cf954 (diff)
downloadchrome-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.c55
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},