summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2022-05-12 19:40:50 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-06-07 20:18:07 +0000
commitb80f85a94a423273c1638ef7b662c56931a138dd (patch)
tree9dd267f5b5dd58e5b3375354e75804655b3f64dd
parent3263365e34bc8b3e594917feb6acd8c5351a9f76 (diff)
downloadchrome-ec-b80f85a94a423273c1638ef7b662c56931a138dd.tar.gz
RGBKBD: Add demo sub-command to EC_CMD_RGBKBD
BUG=None BRANCH=None TEST=Vell Change-Id: Ie486b9ae6731622882b21d5273f79280770bbd17 Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3657839 Reviewed-by: Parth Malkan <parthmalkan@google.com>
-rw-r--r--common/rgb_keyboard.c33
-rw-r--r--include/ec_commands.h13
-rw-r--r--include/rgb_keyboard.h7
-rw-r--r--test/rgb_keyboard.c2
-rw-r--r--util/ectool.c26
5 files changed, 53 insertions, 28 deletions
diff --git a/common/rgb_keyboard.c b/common/rgb_keyboard.c
index e77939ff9e..aac7c48d61 100644
--- a/common/rgb_keyboard.c
+++ b/common/rgb_keyboard.c
@@ -23,15 +23,14 @@
#define CPRINTF(fmt, args...) cprintf(CC_RGBKBD, "RGBKBD: " fmt, ##args)
#define CPRINTS(fmt, args...) cprints(CC_RGBKBD, "RGBKBD: " fmt, ##args)
-test_export_static enum rgbkbd_demo demo =
+test_export_static enum ec_rgbkbd_demo demo =
#if defined(CONFIG_RGBKBD_DEMO_FLOW)
- RGBKBD_DEMO_FLOW
+ EC_RGBKBD_DEMO_FLOW;
#elif defined(CONFIG_RGBKBD_DEMO_DOT)
- RGBKBD_DEMO_DOT
+ EC_RGBKBD_DEMO_DOT;
#else
- RGBKBD_DEMO_OFF
+ EC_RGBKBD_DEMO_OFF;
#endif
- ;
const int default_demo_interval_ms = 250;
test_export_static int demo_interval_ms = -1;
@@ -183,16 +182,16 @@ static void rgbkbd_demo_dot(void)
#endif
}
-static void rgbkbd_demo_run(enum rgbkbd_demo id)
+static void rgbkbd_demo_run(enum ec_rgbkbd_demo id)
{
switch (id) {
- case RGBKBD_DEMO_FLOW:
+ case EC_RGBKBD_DEMO_FLOW:
rgbkbd_demo_flow();
break;
- case RGBKBD_DEMO_DOT:
+ case EC_RGBKBD_DEMO_DOT:
rgbkbd_demo_dot();
break;
- case RGBKBD_DEMO_OFF:
+ case EC_RGBKBD_DEMO_OFF:
default:
break;
}
@@ -383,7 +382,7 @@ static int rgbkbd_enable(int enable)
return rv;
}
-static void rgbkbd_demo_set(enum rgbkbd_demo new_demo)
+static void rgbkbd_demo_set(enum ec_rgbkbd_demo new_demo)
{
CPRINTS("Setting demo %d with %d ms interval", demo, demo_interval_ms);
@@ -394,7 +393,7 @@ static void rgbkbd_demo_set(enum rgbkbd_demo new_demo)
rgbkbd_init();
rgbkbd_enable(1);
- if (demo == RGBKBD_DEMO_OFF)
+ if (demo == EC_RGBKBD_DEMO_OFF)
return;
demo_interval_ms = default_demo_interval_ms;
@@ -484,7 +483,7 @@ DECLARE_HOST_COMMAND(EC_CMD_RGBKBD_SET_COLOR, hc_rgbkbd_set_color,
static enum ec_status hc_rgbkbd(struct host_cmd_handler_args *args)
{
const struct ec_params_rgbkbd *p = args->params;
- enum ec_status rv = EC_RES_ERROR;
+ enum ec_status rv = EC_RES_SUCCESS;
if (rgbkbd_late_init())
return EC_RES_ERROR;
@@ -492,7 +491,11 @@ static enum ec_status hc_rgbkbd(struct host_cmd_handler_args *args)
switch (p->subcmd) {
case EC_RGBKBD_SUBCMD_CLEAR:
rgbkbd_reset_color(p->color);
- rv = EC_RES_SUCCESS;
+ break;
+ case EC_RGBKBD_SUBCMD_DEMO:
+ if (p->demo >= EC_RGBKBD_DEMO_COUNT)
+ return EC_RES_INVALID_PARAM;
+ rgbkbd_demo_set(p->demo);
break;
default:
rv = EC_RES_INVALID_PARAM;
@@ -532,7 +535,7 @@ test_export_static int cc_rgb(int argc, char **argv)
} else if (!strcasecmp(argv[1], "demo")) {
/* Usage 4 */
val = strtoi(argv[2], &end, 0);
- if (*end || val >= RGBKBD_DEMO_COUNT)
+ if (*end || val >= EC_RGBKBD_DEMO_COUNT)
return EC_ERROR_PARAM1;
rgbkbd_demo_set(val);
return EC_SUCCESS;
@@ -584,7 +587,7 @@ test_export_static int cc_rgb(int argc, char **argv)
return EC_ERROR_PARAM4;
color.b = val;
- rgbkbd_demo_set(RGBKBD_DEMO_OFF);
+ rgbkbd_demo_set(EC_RGBKBD_DEMO_OFF);
if (y < 0 && x < 0) {
/* Usage 3 */
rgbkbd_reset_color(color);
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 3755acce19..a23785c260 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -7156,13 +7156,24 @@ enum rgbkbd_state {
enum ec_rgbkbd_subcmd {
EC_RGBKBD_SUBCMD_CLEAR = 1,
+ EC_RGBKBD_SUBCMD_DEMO = 2,
EC_RGBKBD_SUBCMD_COUNT
};
+enum ec_rgbkbd_demo {
+ EC_RGBKBD_DEMO_OFF = 0,
+ EC_RGBKBD_DEMO_FLOW = 1,
+ EC_RGBKBD_DEMO_DOT = 2,
+ EC_RGBKBD_DEMO_COUNT,
+};
+
+BUILD_ASSERT(EC_RGBKBD_DEMO_COUNT <= 255);
+
struct ec_params_rgbkbd {
uint8_t subcmd; /* Sub-command (enum ec_rgbkbd_subcmd) */
union {
- struct rgb_s color;
+ struct rgb_s color; /* EC_RGBKBD_SUBCMD_CLEAR */
+ uint8_t demo; /* EC_RGBKBD_SUBCMD_DEMO */
};
} __ec_align1;
diff --git a/include/rgb_keyboard.h b/include/rgb_keyboard.h
index 58dc3c30f6..3b781a8b95 100644
--- a/include/rgb_keyboard.h
+++ b/include/rgb_keyboard.h
@@ -15,13 +15,6 @@
#define RGBKBD_MAX_GCC_LEVEL 0xff
#define RGBKBD_MAX_SCALE 0xff
-enum rgbkbd_demo {
- RGBKBD_DEMO_OFF = 0,
- RGBKBD_DEMO_FLOW = 1,
- RGBKBD_DEMO_DOT = 2,
- RGBKBD_DEMO_COUNT
-};
-
struct rgbkbd_cfg {
/* Driver for LED IC */
const struct rgbkbd_drv * const drv;
diff --git a/test/rgb_keyboard.c b/test/rgb_keyboard.c
index 9f49db2ab1..aff374bf33 100644
--- a/test/rgb_keyboard.c
+++ b/test/rgb_keyboard.c
@@ -213,7 +213,7 @@ static int test_rgbkbd_startup(void)
}
int cc_rgb(int argc, char **argv);
-extern enum rgbkbd_demo demo;
+extern enum ec_rgbkbd_demo demo;
static int test_rgbkbd_console_command(void)
{
diff --git a/util/ectool.c b/util/ectool.c
index 9d2f8f29fa..28a141d65c 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -1293,13 +1293,17 @@ int cmd_reboot_ap_on_g3(int argc, char *argv[])
static void cmd_rgbkbd_help(char *cmd)
{
fprintf(stderr,
- " Usage1: %s <key> <RGB>\n"
- " Set the color of <key> to <RGB>.\n"
+ " Usage1: %s <key> <RGB> [<RGB> ...]\n"
+ " Set the color of <key> to <RGB>. Multiple colors for\n"
+ " adjacent keys can be set at once.\n"
"\n"
" Usage2: %s clear <RGB>\n"
" Set the color of all keys to <RGB>.\n"
+ "\n"
+ " Usage3: %s demo <num>\n"
+ " Run demo-<num>. 0: Off, 1: Flow, 2: Dot.\n"
"\n",
- cmd, cmd);
+ cmd, cmd, cmd);
}
static int cmd_rgbkbd_parse_rgb_text(const char *text, struct rgb_s *color)
@@ -1361,6 +1365,8 @@ out:
static int cmd_rgbkbd(int argc, char *argv[])
{
+ int val;
+ char *e;
int rv = -1;;
if (argc < 3) {
@@ -1377,7 +1383,19 @@ static int cmd_rgbkbd(int argc, char *argv[])
return -1;
rv = ec_command(EC_CMD_RGBKBD, 0, &p, sizeof(p), NULL, 0);
- } else if (2 < argc) {
+ } else if (argc == 3 && !strcasecmp(argv[1], "demo")) {
+ /* Usage 3 */
+ struct ec_params_rgbkbd p;
+
+ val = strtol(argv[2], &e, 0);
+ if ((e && *e) || val >= EC_RGBKBD_DEMO_COUNT) {
+ fprintf(stderr, "Invalid demo id: %s\n", argv[2]);
+ return -1;
+ }
+ p.subcmd = EC_RGBKBD_SUBCMD_DEMO;
+ p.demo = val;
+ rv = ec_command(EC_CMD_RGBKBD, 0, &p, sizeof(p), NULL, 0);
+ } else {
/* Usage 1 */
rv = cmd_rgbkbd_set_color(argc, argv);
}