diff options
-rw-r--r-- | common/keyboard_backlight.c | 5 | ||||
-rw-r--r-- | common/rgb_keyboard.c | 54 | ||||
-rw-r--r-- | include/keyboard_backlight.h | 7 | ||||
-rw-r--r-- | include/rgb_keyboard.h | 1 | ||||
-rw-r--r-- | test/rgb_keyboard.c | 21 |
5 files changed, 74 insertions, 14 deletions
diff --git a/common/keyboard_backlight.c b/common/keyboard_backlight.c index b1b3671d3d..8cf400dc34 100644 --- a/common/keyboard_backlight.c +++ b/common/keyboard_backlight.c @@ -21,8 +21,9 @@ static struct kblight_conf kblight; static int current_percent; static uint8_t current_enable; -void __attribute__((weak)) board_kblight_init(void) -{ } +__overridable void board_kblight_init(void) {} + +__overridable void board_kblight_shutdown(void) {} static int kblight_init(void) { diff --git a/common/rgb_keyboard.c b/common/rgb_keyboard.c index d909d3ad09..4f62271370 100644 --- a/common/rgb_keyboard.c +++ b/common/rgb_keyboard.c @@ -257,6 +257,24 @@ static int rgbkbd_set_global_brightness(uint8_t gcc) return rv; } +static int rgbkbd_set_scale(uint8_t scale) +{ + int e, i, rv = EC_SUCCESS; + + for (i = 0; i < rgbkbd_count; i++) { + struct rgbkbd *ctx = &rgbkbds[i]; + + e = ctx->cfg->drv->set_scale(ctx, 0, scale, get_grid_size(ctx)); + if (e) { + CPRINTS("Failed to set scale of GRID%d to %d (%d)", + i, scale, e); + rv = e; + } + } + + return rv; +} + static int rgbkbd_init(void) { int rv = EC_SUCCESS; @@ -338,6 +356,12 @@ static int rgbkbd_get_enabled(void) return rgbkbds[0].state >= RGBKBD_STATE_ENABLED; } +static void rgbkbd_reset(void) +{ + board_kblight_shutdown(); + board_kblight_init(); +} + const struct kblight_drv kblight_rgbkbd = { .init = rgbkbd_init, .set = rgbkbd_kblight_set, @@ -410,7 +434,7 @@ static enum ec_status hc_rgbkbd(struct host_cmd_handler_args *args) } DECLARE_HOST_COMMAND(EC_CMD_RGBKBD, hc_rgbkbd, EC_VER_MASK(0)); -test_export_static int cc_rgbk(int argc, char **argv) +test_export_static int cc_rgb(int argc, char **argv) { char *end, *comma; struct rgb_s color; @@ -445,6 +469,28 @@ test_export_static int cc_rgbk(int argc, char **argv) rgbkbd_reset_color((struct rgb_s){.r = 0, .g = 0, .b = 0}); ccprintf("Demo set to %d\n", demo); return EC_SUCCESS; + } else if (!strcasecmp(argv[1], "reset")) { + rgbkbd_reset(); + rv = rgbkbd_init(); + if (rv) + return rv; + return rgbkbd_enable(0); + } else if (!strcasecmp(argv[1], "enable")) { + return rgbkbd_enable(1); + } else if (!strcasecmp(argv[1], "disable")) { + return rgbkbd_enable(0); + } else if (!strcasecmp(argv[1], "scale")) { + /* Usage 6 */ + val = strtoi(argv[2], &end, 0); + if (*end || val > RGBKBD_MAX_SCALE) + return EC_ERROR_PARAM2; + return rgbkbd_set_scale(val); + } else if (!strcasecmp(argv[1], "red")) { + color.r = 255; + color.g = 0; + color.b = 0; + rgbkbd_reset_color(color); + return EC_SUCCESS; } else { /* Usage 1 */ if (argc != 2) @@ -497,12 +543,14 @@ test_export_static int cc_rgbk(int argc, char **argv) return rv; } #ifndef TEST_BUILD -DECLARE_CONSOLE_COMMAND(rgbk, cc_rgbk, +DECLARE_CONSOLE_COMMAND(rgb, cc_rgb, "\n" "1. rgbk <global-brightness>\n" "2. rgbk <col,row> <r-bright> <g-bright> <b-bright>\n" "3. rgbk all <r-bright> <g-bright> <b-bright>\n" - "4. rgbk demo <id>\n", + "4. rgbk demo <id>\n" + "5. rgbk reset/enable/disable/red\n" + "6. rgbk scale <val>\n", "Set color of RGB keyboard" ); #endif diff --git a/include/keyboard_backlight.h b/include/keyboard_backlight.h index 96bf69aaae..194bec66f4 100644 --- a/include/keyboard_backlight.h +++ b/include/keyboard_backlight.h @@ -54,7 +54,12 @@ struct kblight_drv { /** * Initialize keyboard backlight per board */ -void board_kblight_init(void); +__override_proto void board_kblight_init(void); + +/** + * Shutdown keyboard backlight + */ +__override_proto void board_kblight_shutdown(void); /** * Set keyboard backlight brightness diff --git a/include/rgb_keyboard.h b/include/rgb_keyboard.h index 3593ab6f0e..2a2e35003b 100644 --- a/include/rgb_keyboard.h +++ b/include/rgb_keyboard.h @@ -13,6 +13,7 @@ #define SIZE_OF_RGB sizeof(struct rgb_s) #define RGBKBD_MAX_GCC_LEVEL 0xff +#define RGBKBD_MAX_SCALE 0xff enum rgbkbd_demo { RGBKBD_DEMO_OFF = 0, diff --git a/test/rgb_keyboard.c b/test/rgb_keyboard.c index 935c60165b..76f4fe5a10 100644 --- a/test/rgb_keyboard.c +++ b/test/rgb_keyboard.c @@ -8,6 +8,7 @@ #include "common.h" #include "console.h" +#include "keyboard_backlight.h" #include "rgb_keyboard.h" #include "task.h" #include "test_util.h" @@ -71,6 +72,10 @@ static struct rgbkbd_mock { uint32_t gcc_level; } mock_state; +__override void board_kblight_init(void) {} + +__override void board_kblight_shutdown(void) {} + void before_test(void) { memset(&mock_state, 0, sizeof(mock_state)); @@ -201,7 +206,7 @@ static int test_rgbkbd_startup(void) return EC_SUCCESS; } -int cc_rgbk(int argc, char **argv); +int cc_rgb(int argc, char **argv); extern enum rgbkbd_demo demo; static int test_rgbkbd_console_command(void) @@ -220,13 +225,13 @@ static int test_rgbkbd_console_command(void) before_test(); argc = ARRAY_SIZE(argv_demo); zassert_equal(demo, 2, "demo == 2"); - zassert_equal(cc_rgbk(argc, argv_demo), EC_SUCCESS, "rgbk demo 0"); + zassert_equal(cc_rgb(argc, argv_demo), EC_SUCCESS, "rgbk demo 0"); zassert_equal(demo, 0, "demo == 0"); /* Test 'rgbk 100'. */ before_test(); argc = ARRAY_SIZE(argv_gcc); - zassert_equal(cc_rgbk(argc, argv_gcc), EC_SUCCESS, "rgbk 100"); + zassert_equal(cc_rgb(argc, argv_gcc), EC_SUCCESS, "rgbk 100"); zassert_equal(mock_state.count_drv_set_gcc, rgbkbd_count, "set_gcc() called"); zassert_equal(mock_state.gcc_level, 100, "gcc == 100"); @@ -239,7 +244,7 @@ static int test_rgbkbd_console_command(void) offset = rgbkbd_vsize * x + y; sprintf(buf, "%d,%d", x, y); argc = ARRAY_SIZE(argv_color); - zassert_equal(cc_rgbk(argc, argv_color), EC_SUCCESS, + zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, "rgbk %s 1 2 3", buf); zassert_equal(ctx->buf[offset].r, 1, "R = 1"); zassert_equal(ctx->buf[offset].g, 2, "G = 2"); @@ -252,7 +257,7 @@ static int test_rgbkbd_console_command(void) y = -1; sprintf(buf, "%d,%d", x, y); argc = ARRAY_SIZE(argv_color); - zassert_equal(cc_rgbk(argc, argv_color), EC_SUCCESS, + zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, "rgbk %s 1 2 3", buf); for (r = 0; r < rgbkbd_vsize; r++) { offset = rgbkbd_vsize * x + r; @@ -267,7 +272,7 @@ static int test_rgbkbd_console_command(void) y = 1; sprintf(buf, "%d,%d", x, y); argc = ARRAY_SIZE(argv_color); - zassert_equal(cc_rgbk(argc, argv_color), EC_SUCCESS, + zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, "rgbk %s 1 2 3", buf); for (c = 0; c < rgbkbd_hsize; c++) { ctx = &rgbkbds[c / rgbkbds[0].cfg->col_len]; @@ -280,7 +285,7 @@ static int test_rgbkbd_console_command(void) /* Test 'rgbk all 1 2 3'. */ before_test(); argc = ARRAY_SIZE(argv_all); - zassert_equal(cc_rgbk(argc, argv_all), EC_SUCCESS, "rgbk all 1 2 3"); + zassert_equal(cc_rgb(argc, argv_all), EC_SUCCESS, "rgbk all 1 2 3"); for (i = 0; i < rgbkbd_count; i++) { ctx = &rgbkbds[i]; for (c = 0; c < ctx->cfg->col_len; c++) { @@ -341,7 +346,7 @@ static int test_rgbkbd_demo_flow(void) int i, j, g; argc = ARRAY_SIZE(argv_demo); - zassert_equal(cc_rgbk(argc, argv_demo), EC_SUCCESS, "rgbk demo flow"); + zassert_equal(cc_rgb(argc, argv_demo), EC_SUCCESS, "rgbk demo flow"); for (j = 0; j < 0x100 / step; j++) { /* Take a snapshot. */ |