From d0e0202b272a28d6a1e7f0d059396067bb861272 Mon Sep 17 00:00:00 2001
From: Drashna Jaelre <drashna@live.com>
Date: Mon, 18 May 2020 06:05:35 -0700
Subject: [PATCH] Add query functions for RGB Light and RGB Matrix (#8960)

* Add additional query functions for RGBLIGHT

* Add additional query functions for RGB Matrix

* Change names of enable check functions

* Fix macro for rgb matrix takeover of rgblight functions

* Add documentation for rgb_matrix_get_hsv()

* Add *_get_hsv function to rgblight
---
 docs/feature_rgb_matrix.md | 16 ++++++++++------
 docs/feature_rgblight.md   | 14 ++++++++------
 quantum/rgb_matrix.c       | 11 +++++++++++
 quantum/rgb_matrix.h       | 13 +++++++++++++
 quantum/rgblight.c         |  6 ++++++
 quantum/rgblight.h         |  2 ++
 6 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index 2cec55ee77..15057827c8 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -437,12 +437,16 @@ Where `28` is an unused index from `eeconfig.h`.
 |`rgb_matrix_sethsv_noeeprom(h, s, v)`       |Set LEDs to the given HSV value where `h`/`s`/`v` are between 0 and 255 (not written to EEPROM) |
 
 ### Query Current Status :id=query-current-status
-|Function               |Description      |
-|-----------------------|-----------------|
-|`rgb_matrix_get_mode()`  |Get current mode |
-|`rgb_matrix_get_hue()`   |Get current hue  |
-|`rgb_matrix_get_sat()`   |Get current sat  |
-|`rgb_matrix_get_val()`   |Get current val  |
+|Function                         |Description                |
+|---------------------------------|---------------------------|
+|`rgb_matrix_is_enabled()`        |Gets current on/off status |
+|`rgb_matrix_get_mode()`          |Gets current mode          |
+|`rgb_matrix_get_hue()`           |Gets current hue           |
+|`rgb_matrix_get_sat()`           |Gets current sat           |
+|`rgb_matrix_get_val()`           |Gets current val           |
+|`rgb_matrix_get_hsv()`           |Gets hue, sat, and val and returns a [`HSV` structure](https://github.com/qmk/qmk_firmware/blob/7ba6456c0b2e041bb9f97dbed265c5b8b4b12192/quantum/color.h#L56-L61)|
+|`rgb_matrix_get_speed()`         |Gets current speed         |
+|`rgb_matrix_get_suspend_state()` |Gets current suspend state |
 
 ## Callbacks :id=callbacks
 
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index 7e54bfef3c..7f5c8a36c1 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -376,12 +376,14 @@ rgblight_sethsv(HSV_GREEN, 2); // led 2
 |`rgblight_set_layer_state(i, is_on)`        |Enable or disable lighting layer `i` based on value of `bool is_on` |
 
 #### query
-|Function               |Description      |
-|-----------------------|-----------------|
-|`rgblight_get_mode()`  |Get current mode |
-|`rgblight_get_hue()`   |Get current hue  |
-|`rgblight_get_sat()`   |Get current sat  |
-|`rgblight_get_val()`   |Get current val  |
+|Function               |Description                |
+|-----------------------|---------------------------|
+|`rgblight_is_enabled()`|Gets current on/off status |
+|`rgblight_get_mode()`  |Gets current mode          |
+|`rgblight_get_hue()`   |Gets current hue           |
+|`rgblight_get_sat()`   |Gets current sat           |
+|`rgblight_get_val()`   |Gets current val           |
+|`rgblight_get_speed()` |Gets current speed         |
 
 ## Colors
 
diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c
index 3fae9d7378..91032b6564 100644
--- a/quantum/rgb_matrix.c
+++ b/quantum/rgb_matrix.c
@@ -440,6 +440,8 @@ void rgb_matrix_set_suspend_state(bool state) {
     g_suspend_state = state;
 }
 
+bool rgb_matrix_get_suspend_state(void) { return g_suspend_state; }
+
 void rgb_matrix_toggle(void) {
     rgb_matrix_config.enable ^= 1;
     rgb_task_state = STARTING;
@@ -466,6 +468,8 @@ void rgb_matrix_disable_noeeprom(void) {
     rgb_matrix_config.enable = 0;
 }
 
+uint8_t rgb_matrix_is_enabled(void) { return rgb_matrix_config.enable; }
+
 void rgb_matrix_step(void) {
     rgb_matrix_config.mode++;
     if (rgb_matrix_config.mode >= RGB_MATRIX_EFFECT_MAX) rgb_matrix_config.mode = 1;
@@ -521,6 +525,8 @@ void rgb_matrix_decrease_speed(void) {
     eeconfig_update_rgb_matrix();
 }
 
+uint8_t rgb_matrix_get_speed(void) { return rgb_matrix_config.speed; }
+
 led_flags_t rgb_matrix_get_flags(void) { return rgb_effect_params.flags; }
 
 void rgb_matrix_set_flags(led_flags_t flags) { rgb_effect_params.flags = flags; }
@@ -546,3 +552,8 @@ void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
     rgb_matrix_config.hsv.v = val;
     if (rgb_matrix_config.hsv.v > RGB_MATRIX_MAXIMUM_BRIGHTNESS) rgb_matrix_config.hsv.v = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
 }
+
+HSV     rgb_matrix_get_hsv(void) { return rgb_matrix_config.hsv; }
+uint8_t rgb_matrix_get_hue(void) { return rgb_matrix_config.hsv.h; }
+uint8_t rgb_matrix_get_sat(void) { return rgb_matrix_config.hsv.s; }
+uint8_t rgb_matrix_get_val(void) { return rgb_matrix_config.hsv.v; }
diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h
index 96494836ee..7c37311b4e 100644
--- a/quantum/rgb_matrix.h
+++ b/quantum/rgb_matrix.h
@@ -104,11 +104,13 @@ void rgb_matrix_indicators_user(void);
 void rgb_matrix_init(void);
 
 void        rgb_matrix_set_suspend_state(bool state);
+bool        rgb_matrix_get_suspend_state(void);
 void        rgb_matrix_toggle(void);
 void        rgb_matrix_enable(void);
 void        rgb_matrix_enable_noeeprom(void);
 void        rgb_matrix_disable(void);
 void        rgb_matrix_disable_noeeprom(void);
+uint8_t     rgb_matrix_is_enabled(void);
 void        rgb_matrix_step(void);
 void        rgb_matrix_step_reverse(void);
 void        rgb_matrix_increase_hue(void);
@@ -119,6 +121,7 @@ void        rgb_matrix_increase_val(void);
 void        rgb_matrix_decrease_val(void);
 void        rgb_matrix_increase_speed(void);
 void        rgb_matrix_decrease_speed(void);
+uint8_t     rgb_matrix_get_speed(void);
 led_flags_t rgb_matrix_get_flags(void);
 void        rgb_matrix_set_flags(led_flags_t flags);
 void        rgb_matrix_mode(uint8_t mode);
@@ -126,6 +129,10 @@ void        rgb_matrix_mode_noeeprom(uint8_t mode);
 uint8_t     rgb_matrix_get_mode(void);
 void        rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val);
 void        rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
+HSV         rgb_matrix_get_hsv(void);
+uint8_t     rgb_matrix_get_hue(void);
+uint8_t     rgb_matrix_get_sat(void);
+uint8_t     rgb_matrix_get_val(void);
 
 #ifndef RGBLIGHT_ENABLE
 #    define rgblight_toggle rgb_matrix_toggle
@@ -133,6 +140,7 @@ void        rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
 #    define rgblight_enable_noeeprom rgb_matrix_enable_noeeprom
 #    define rgblight_disable rgb_matrix_disable
 #    define rgblight_disable_noeeprom rgb_matrix_disable_noeeprom
+#    define rgblight_is_enabled rgb_matrix_is_enabled
 #    define rgblight_step rgb_matrix_step
 #    define rgblight_sethsv rgb_matrix_sethsv
 #    define rgblight_sethsv_noeeprom rgb_matrix_sethsv_noeeprom
@@ -145,9 +153,14 @@ void        rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
 #    define rgblight_decrease_val rgb_matrix_decrease_val
 #    define rgblight_increase_speed rgb_matrix_increase_speed
 #    define rgblight_decrease_speed rgb_matrix_decrease_speed
+#    define rgblight_get_speed rgb_matrix_get_speed
 #    define rgblight_mode rgb_matrix_mode
 #    define rgblight_mode_noeeprom rgb_matrix_mode_noeeprom
 #    define rgblight_get_mode rgb_matrix_get_mode
+#    define rgblight_get_hue rgb_matrix_get_hue
+#    define rgblight_get_sat rgb_matrix_get_sat
+#    define rgblight_get_val rgb_matrix_get_val
+#    define rgblight_get_hsv rgb_matrix_get_hsv
 #endif
 
 typedef struct {
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index 64123774c7..b50be200ee 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -368,6 +368,8 @@ void rgblight_disable_noeeprom(void) {
     rgblight_set();
 }
 
+bool rgblight_is_enabled(void) { return rgblight_config.enable; }
+
 void rgblight_increase_hue_helper(bool write_to_eeprom) {
     uint8_t hue = rgblight_config.hue + RGBLIGHT_HUE_STEP;
     rgblight_sethsv_eeprom_helper(hue, rgblight_config.sat, rgblight_config.val, write_to_eeprom);
@@ -522,6 +524,10 @@ uint8_t rgblight_get_sat(void) { return rgblight_config.sat; }
 
 uint8_t rgblight_get_val(void) { return rgblight_config.val; }
 
+HSV rgblight_get_hsv(void) {
+    return (HSV){ rgblight_config.hue, rgblight_config.sat, rgblight_config.val };
+}
+
 void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
     if (!rgblight_config.enable) {
         return;
diff --git a/quantum/rgblight.h b/quantum/rgblight.h
index 6fc3b6f177..c36b328a35 100644
--- a/quantum/rgblight.h
+++ b/quantum/rgblight.h
@@ -350,6 +350,8 @@ uint8_t rgblight_get_mode(void);
 uint8_t rgblight_get_hue(void);
 uint8_t rgblight_get_sat(void);
 uint8_t rgblight_get_val(void);
+bool    rgblight_is_enabled(void);
+HSV     rgblight_get_hsv(void);
 
 /* === qmk_firmware (core)internal Functions === */
 void     rgblight_init(void);