summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
authorDaniel Prilik <danielprilik@gmail.com>2019-04-03 18:30:47 -0700
committerDrashna Jaelre <drashna@live.com>2019-04-03 18:30:47 -0700
commit763b26cdb98c2702f7b2f8de239d4edba0fa4065 (patch)
treea99e15e1cb9be30eb5786e5ea1d3de809339b87b /quantum
parent63177760deaf23bb1f676974cecf211676285604 (diff)
RGB Matrix support for Massdrop CTRL/ALT (#5328)
* port Massdrop CTRL/ALT to use RGB Matrix

Co-authored-by: Matt Schneeberger <helluvamatt@gmail.com>

* 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
Diffstat (limited to 'quantum')
-rw-r--r--quantum/rgb_matrix.c19
-rw-r--r--quantum/rgb_matrix_types.h11
2 files changed, 27 insertions, 3 deletions
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;