diff options
author | Stefan Adolfsson <sadolfsson@google.com> | 2018-04-24 14:54:58 +0200 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-06-19 19:58:39 +0000 |
commit | 6e023aa847e5852a1a613c313d7950b1e824a231 (patch) | |
tree | 148f9d30e9bdc121b3edd0d02ef6c8fddc47edf9 | |
parent | cfe3518586f6112ac1bb679403930b5b74d7b0c8 (diff) | |
download | chrome-ec-6e023aa847e5852a1a613c313d7950b1e824a231.tar.gz |
CEC: Add cecset/cecget to ectool
Set and get CEC parameters. Currently supported
parameters are "enable" and "address"
Signed-off-by: Stefan Adolfsson <sadolfsson@chromium.org>
BUG=b:76467407
BRANCH=none
TEST=Using EC firmware with CEC support, set values
and read them back.
CQ-DEPEND=CL:1030217
Reviewed-on: https://chromium-review.googlesource.com/1030218
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Change-Id: I429710f5d8897b23c5b5e54bd10cbf38d1830811
Reviewed-on: https://chromium-review.googlesource.com/1055517
Tested-by: Stefan Adolfsson <sadolfsson@chromium.org>
Commit-Queue: Stefan Adolfsson <sadolfsson@chromium.org>
-rw-r--r-- | util/ectool.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/util/ectool.c b/util/ectool.c index bafd82d8c2..d09b5bfda0 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -75,6 +75,10 @@ const char help_str[] = " Prints supported version mask for a command number\n" " console\n" " Prints the last output to the EC debug console\n" + " cecset <address|enable> <val>\n" + " Set the value of a CEC setting\n" + " cecget <address|enable>\n" + " Get the value of a CEC setting\n" " cecread [timeout]\n" " Read data from the CEC bus\n" " cecwrite [write bytes...]\n" @@ -7782,6 +7786,74 @@ int cmd_cec_read(int argc, char *argv[]) return 0; } +static int cec_cmd_from_str(const char *str) +{ + if (!strcmp("address", str)) + return CEC_CMD_LOGICAL_ADDRESS; + if (!strcmp("enable", str)) + return CEC_CMD_ENABLE; + return -1; +} + +int cmd_cec_set(int argc, char *argv[]) +{ + char *e; + struct ec_params_cec_set p; + uint8_t val; + int cmd; + + if (argc != 3) { + fprintf(stderr, "Usage: %s [address|enable] param\n", argv[0]); + return -1; + } + + val = (uint8_t)strtol(argv[2], &e, 0); + if (e && *e) { + fprintf(stderr, "Bad parameter '%s'.\n", argv[2]); + return -1; + } + + cmd = cec_cmd_from_str(argv[1]); + if (cmd < 0) { + fprintf(stderr, "Invalid command '%s'.\n", argv[1]); + return -1; + } + p.cmd = cmd; + p.val = val; + + return ec_command(EC_CMD_CEC_SET, + 0, &p, sizeof(p), NULL, 0); +} + + +int cmd_cec_get(int argc, char *argv[]) +{ + int rv, cmd; + struct ec_params_cec_get p; + struct ec_response_cec_get r; + + + if (argc != 2) { + fprintf(stderr, "Usage: %s [address|enable]\n", argv[0]); + return -1; + } + + cmd = cec_cmd_from_str(argv[1]); + if (cmd < 0) { + fprintf(stderr, "Invalid command '%s'.\n", argv[1]); + return -1; + } + p.cmd = cmd; + + + rv = ec_command(EC_CMD_CEC_GET, 0, &p, sizeof(p), &r, sizeof(r)); + if (rv < 0) + return rv; + + printf("%d\n", r.val); + + return 0; +} /* NULL-terminated list of commands */ const struct command commands[] = { @@ -7801,6 +7873,8 @@ const struct command commands[] = { {"console", cmd_console}, {"cecwrite", cmd_cec_write}, {"cecread", cmd_cec_read}, + {"cecset", cmd_cec_set}, + {"cecget", cmd_cec_get}, {"echash", cmd_ec_hash}, {"eventclear", cmd_host_event_clear}, {"eventclearb", cmd_host_event_clear_b}, |