From 28cce575faa27bb8f7f39efc78046f85ce4b57da Mon Sep 17 00:00:00 2001 From: Retic1337 Date: Thu, 7 Oct 2021 22:35:35 -0700 Subject: [PATCH] RGB Work --- .../arm/retic1337_tkl/Kconfig.defconfig | 2 +- app/src/led_perkey.c | 26 ++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/boards/arm/retic1337_tkl/Kconfig.defconfig b/app/boards/arm/retic1337_tkl/Kconfig.defconfig index 83f82e06..bbee0090 100644 --- a/app/boards/arm/retic1337_tkl/Kconfig.defconfig +++ b/app/boards/arm/retic1337_tkl/Kconfig.defconfig @@ -3,7 +3,7 @@ if BOARD_RETIC1337_TKL config ZMK_KEYBOARD_NAME - default "Test_Keyboard" + default "Test_TKL_v2" config I2C default y diff --git a/app/src/led_perkey.c b/app/src/led_perkey.c index 85811646..d82569f1 100644 --- a/app/src/led_perkey.c +++ b/app/src/led_perkey.c @@ -11,10 +11,12 @@ #include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +const uint8_t RGB = 1; +const uint8_t GRB = 2; #define ZMK_KSCAN_EVENT_STATE_PRESSED 0 #define ZMK_KSCAN_EVENT_STATE_RELEASED 1 #define BASE_RED 255 -#define BASE_GREEN 0 +#define BASE_GREEN 255 #define BASE_BLUE 255 uint8_t led_base_color[3] = {BASE_RED, BASE_GREEN, BASE_BLUE}; #define PRESSED_RED 250 @@ -26,6 +28,7 @@ struct zmk_kscan_event { uint32_t column; uint32_t state; }; + K_MSGQ_DEFINE(zmk_kscan_msgxq, sizeof(struct zmk_kscan_event), CONFIG_ZMK_KSCAN_EVENT_QUEUE_SIZE, 4); struct zmk_kscan_msg_processor { struct k_work work; @@ -42,13 +45,28 @@ static void zmk_kscan_callback_led(const struct device *dev, uint32_t row, uint3 k_work_submit(&led_processor.work); } +uint8_t led_type_matrix[128] = { GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, + RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, GRB, GRB, RGB, RGB, RGB, RGB, RGB, RGB, + RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, RGB, GRB, + GRB, GRB, RGB, GRB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB, + RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, GRB, RGB, GRB, RGB, GRB, GRB, GRB, RGB, RGB, RGB, RGB, + RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, RGB, + GRB, RGB, GRB, RGB, GRB, RGB, GRB, RGB}; uint8_t led_lookup_matrix[108] = { 1, 0, 3, 5, 7, 9, 11, 13, 15, 65, 0, 67, 69, 71, 73, 75, 77, 79, 17, 20, 22, 24, 26, 28, 30, 80, 81, 82, 83, 84, 85, 0, 86, 87, 88, 90, 19, 21, 23, 25, 27, 29, 31, 96, 98, 100, 102, 104, 106, 0, 108, 109, 110, 92, 34, 36, 38, 40, 42, 44, 46, 97, 99, 101, 103, 105, 0, 0, 107, 0, 0, 0, 35, 0, 37, 39, 41, 43, 45, 47, 112, 113, 114, 115, 0, 0, 119, 0, 111, 0, - 49, 51, 53, 0, 0, 0, 0, 57, 0, 0, 0, 62, 116, 118, 121, 123, 125, 127}; + 49, 51, 53, 0, 0, 0, 55, 57, 0, 0, 0, 62, 116, 118, 121, 123, 125, 127}; +void led_set_color_rgb(struct device *dev, uint8_t led,uint8_t qty, uint8_t *rgb, uint8_t type){ + if (led_type_matrix[led] == RGB) + led_set_color(dev, led, qty, rgb); + else if (led_type_matrix[led] == GRB){ + uint8_t color[3] = {rgb[1], rgb[0], rgb[2]}; + led_set_color(dev, led, qty, color); + } +} void set_led_rgb(uint8_t led, uint8_t *rgb){ struct device *dev = NULL; if (led < 64){ @@ -63,7 +81,7 @@ void set_led_rgb(uint8_t led, uint8_t *rgb){ LOG_ERR("Failed to get device binding\n"); return; } - led_set_color(dev, led, 3, rgb); + led_set_color_rgb(dev, led, 3, rgb, 1); } void zmk_kscan_process_msgxq(struct k_work *item) { struct zmk_kscan_event evx; @@ -91,7 +109,7 @@ void set_all_on(const struct device *dev){ } void set_all_rgb(const struct device *dev, uint8_t *rgb){ for (uint8_t led = 0; led < 64; led++) { - led_set_color(dev, led, 3, rgb); + led_set_color_rgb(dev, led, 3, rgb, 1); } } int led_perkey_init(char *name) {