From 763b26cdb98c2702f7b2f8de239d4edba0fa4065 Mon Sep 17 00:00:00 2001 From: Daniel Prilik Date: Wed, 3 Apr 2019 18:30:47 -0700 Subject: RGB Matrix support for Massdrop CTRL/ALT (#5328) * port Massdrop CTRL/ALT to use RGB Matrix Co-authored-by: Matt Schneeberger * Massdrop lighting support working This commit is to get the Massdrop lighting code working again through use of the compilation define USE_MASSDROP_CONFIGURATOR added to a keymap's rules.mk. Added keymaps for both CTRL and ALT named default_md and mac_md. These should be used if the Massdrop style lighting is desired. * Updating config based on testing results with patrickmt & compile errors * Updates for PR5328 For CTRL and ALT: Moved location of new RGB Matrix macros from config_led.h to config.h. Added RGB_MATRIX_LED_FLUSH_LIMIT (time between flushes) to config.h for correct LED driver update timing. Re-added missing breathing code for when Massdrop configurator mode is defined. * remove prilik keymap form PR --- quantum/rgb_matrix.c | 19 ++++++++++++++++++- quantum/rgb_matrix_types.h | 11 +++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) (limited to 'quantum') diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c index 0728e2431f..413e5777fc 100644 --- a/quantum/rgb_matrix.c +++ b/quantum/rgb_matrix.c @@ -142,11 +142,28 @@ void rgb_matrix_update_pwm_buffers(void) { } void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) { +#ifdef RGB_MATRIX_EXTRA_TOG + const bool is_key = g_rgb_leds[index].matrix_co.raw != 0xff; + if ( + (rgb_matrix_config.enable == RGB_ZONE_KEYS && !is_key) || + (rgb_matrix_config.enable == RGB_ZONE_UNDER && is_key) + ) { + rgb_matrix_driver.set_color(index, 0, 0, 0); + return; + } +#endif + rgb_matrix_driver.set_color(index, red, green, blue); } void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) { +#ifdef RGB_MATRIX_EXTRA_TOG + for (int i = 0; i < DRIVER_LED_TOTAL; i++) { + rgb_matrix_set_color(i, red, green, blue); + } +#else rgb_matrix_driver.set_color_all(red, green, blue); +#endif } bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) { @@ -494,7 +511,7 @@ void rgb_matrix_set_suspend_state(bool state) { } void rgb_matrix_toggle(void) { - rgb_matrix_config.enable ^= 1; + rgb_matrix_config.enable++; if (!rgb_matrix_config.enable) { rgb_task_state = STARTING; } diff --git a/quantum/rgb_matrix_types.h b/quantum/rgb_matrix_types.h index f7643d2b0c..908e96da56 100644 --- a/quantum/rgb_matrix_types.h +++ b/quantum/rgb_matrix_types.h @@ -73,11 +73,18 @@ typedef struct PACKED { uint8_t modifier:1; } rgb_led; +typedef enum { + RGB_ZONE_OFF = 0, + RGB_ZONE_ALL, + RGB_ZONE_KEYS, + RGB_ZONE_UNDER, +} rgb_zone_t; + typedef union { uint32_t raw; struct PACKED { - bool enable :1; - uint8_t mode :7; + uint8_t enable :2; + uint8_t mode :6; uint8_t hue :8; uint8_t sat :8; uint8_t val :8; -- cgit v1.2.3