summary refs log tree commit diff
path: root/quantum/led.c
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2022-01-22 21:17:02 +0000
committerGitHub <noreply@github.com>2022-01-22 21:17:02 +0000
commit6e83b449409f7fe479210a9fab808e8bcae64977 (patch)
tree0429c5a810d39fbd423350566d476fa3f798db27 /quantum/led.c
parent448a90f6b0b68ef074b1a19a081eceaafcc7425e (diff)
Align location of some host led logic (#15954)
* Align location of host led logic

* Move more

* align ifdefs

* Fix up includes

* Move callback defs

* Convert comment to build message
Diffstat (limited to 'quantum/led.c')
-rw-r--r--quantum/led.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/quantum/led.c b/quantum/led.c
index 8f0eccf55d..7ee67b55e6 100644
--- a/quantum/led.c
+++ b/quantum/led.c
@@ -13,13 +13,15 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-#include "quantum.h"
+#include "led.h"
+#include "host.h"
+#include "debug.h"
 
 #ifdef BACKLIGHT_ENABLE
 #    include "backlight.h"
 extern backlight_config_t backlight_config;
 #else
-// Cannot use BACKLIGHT_CAPS_LOCK without backlight being enabled
+#    pragma message "Cannot use BACKLIGHT_CAPS_LOCK without backlight being enabled"
 #    undef BACKLIGHT_CAPS_LOCK
 #endif
 
@@ -135,3 +137,41 @@ __attribute__((weak)) void led_set(uint8_t usb_led) {
     led_set_kb(usb_led);
     led_update_kb((led_t)usb_led);
 }
+
+/** \brief Trigger behaviour on transition to suspend
+ */
+void led_suspend(void) {
+    uint8_t leds_off = 0;
+#ifdef BACKLIGHT_CAPS_LOCK
+    if (is_backlight_enabled()) {
+        // Don't try to turn off Caps Lock indicator as it is backlight and backlight is already off
+        leds_off |= (1 << USB_LED_CAPS_LOCK);
+    }
+#endif
+    led_set(leds_off);
+}
+
+/** \brief Trigger behaviour on transition from suspend
+ */
+void led_wakeup(void) { led_set(host_keyboard_leds()); }
+
+/** \brief set host led state
+ *
+ * Only sets state if change detected
+ */
+void led_task(void) {
+    static uint8_t last_led_status = 0;
+
+    // update LED
+    uint8_t led_status = host_keyboard_leds();
+    if (last_led_status != led_status) {
+        last_led_status = led_status;
+
+        if (debug_keyboard) {
+            debug("led_task: ");
+            debug_hex8(led_status);
+            debug("\n");
+        }
+        led_set(led_status);
+    }
+}