summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
authorThomas Weißschuh <thomas@t-8ch.de>2022-10-06 12:24:41 +0200
committerGitHub <noreply@github.com>2022-10-06 21:24:41 +1100
commitcbe1c22d468d64d7a3274061ce9c2073ecb208a4 (patch)
tree00fea20653a9bb57af68c9a5c873f3c4a1874ecd /quantum
parentc255174cf3e55483f14351a69689e24e849445a0 (diff)
quantum: led: split out led_update_ports() for customization of led behaviour (#14452)
Diffstat (limited to 'quantum')
-rw-r--r--quantum/led.c48
-rw-r--r--quantum/led.h1
2 files changed, 27 insertions, 22 deletions
diff --git a/quantum/led.c b/quantum/led.c
index 444d38f751..7db38bb88c 100644
--- a/quantum/led.c
+++ b/quantum/led.c
@@ -92,32 +92,36 @@ __attribute__((weak)) bool led_update_user(led_t led_state) {
 __attribute__((weak)) bool led_update_kb(led_t led_state) {
     bool res = led_update_user(led_state);
     if (res) {
-#if defined(LED_NUM_LOCK_PIN) || defined(LED_CAPS_LOCK_PIN) || defined(LED_SCROLL_LOCK_PIN) || defined(LED_COMPOSE_PIN) || defined(LED_KANA_PIN)
-#    if LED_PIN_ON_STATE == 0
-        // invert the whole thing to avoid having to conditionally !led_state.x later
-        led_state.raw = ~led_state.raw;
-#    endif
-
-#    ifdef LED_NUM_LOCK_PIN
-        writePin(LED_NUM_LOCK_PIN, led_state.num_lock);
-#    endif
-#    ifdef LED_CAPS_LOCK_PIN
-        writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock);
-#    endif
-#    ifdef LED_SCROLL_LOCK_PIN
-        writePin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock);
-#    endif
-#    ifdef LED_COMPOSE_PIN
-        writePin(LED_COMPOSE_PIN, led_state.compose);
-#    endif
-#    ifdef LED_KANA_PIN
-        writePin(LED_KANA_PIN, led_state.kana);
-#    endif
-#endif
+        led_update_ports(led_state);
     }
     return res;
 }
 
+/** \brief Write LED state to hardware
+ */
+__attribute__((weak)) void led_update_ports(led_t led_state) {
+#if LED_PIN_ON_STATE == 0
+    // invert the whole thing to avoid having to conditionally !led_state.x later
+    led_state.raw = ~led_state.raw;
+#endif
+
+#ifdef LED_NUM_LOCK_PIN
+    writePin(LED_NUM_LOCK_PIN, led_state.num_lock);
+#endif
+#ifdef LED_CAPS_LOCK_PIN
+    writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock);
+#endif
+#ifdef LED_SCROLL_LOCK_PIN
+    writePin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock);
+#endif
+#ifdef LED_COMPOSE_PIN
+    writePin(LED_COMPOSE_PIN, led_state.compose);
+#endif
+#ifdef LED_KANA_PIN
+    writePin(LED_KANA_PIN, led_state.kana);
+#endif
+}
+
 /** \brief Initialise any LED related hardware and/or state
  */
 __attribute__((weak)) void led_init_ports(void) {
diff --git a/quantum/led.h b/quantum/led.h
index b8262cbd8e..d12e519ea2 100644
--- a/quantum/led.h
+++ b/quantum/led.h
@@ -60,6 +60,7 @@ void led_set_user(uint8_t usb_led);
 void led_set_kb(uint8_t usb_led);
 bool led_update_user(led_t led_state);
 bool led_update_kb(led_t led_state);
+void led_update_ports(led_t led_state);
 
 uint32_t last_led_activity_time(void);    // Timestamp of the LED activity
 uint32_t last_led_activity_elapsed(void); // Number of milliseconds since the last LED activity