summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Adolfsson <sadolfsson@google.com>2018-04-24 14:54:58 +0200
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2018-06-19 19:58:39 +0000
commit6e023aa847e5852a1a613c313d7950b1e824a231 (patch)
tree148f9d30e9bdc121b3edd0d02ef6c8fddc47edf9
parentcfe3518586f6112ac1bb679403930b5b74d7b0c8 (diff)
downloadchrome-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.c74
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},