summaryrefslogtreecommitdiffstats
path: root/users/art/funcs/led_funcs.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/art/funcs/led_funcs.c')
-rw-r--r--users/art/funcs/led_funcs.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/users/art/funcs/led_funcs.c b/users/art/funcs/led_funcs.c
new file mode 100644
index 0000000000..873836d368
--- /dev/null
+++ b/users/art/funcs/led_funcs.c
@@ -0,0 +1,55 @@
+// Copyright 2022 Artjoms Rizihs (@artjomsR)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "led_funcs.h"
+
+bool hw_caps_on;
+
+__attribute__ ((weak)) void num_led_on(void) {}
+__attribute__ ((weak)) void num_led_off(void) {}
+__attribute__ ((weak)) void caps_led_on(void) {}
+__attribute__ ((weak)) void caps_led_off(void) {}
+__attribute__ ((weak)) void scroll_led_on(void) {}
+__attribute__ ((weak)) void scroll_led_off(void) {}
+
+void toggle_leds(int leds) {
+ if (NUM_LED_ON & leds) {
+ num_led_on();
+ } else {
+ num_led_off();
+ }
+ if (SCROLL_LED_ON & leds) {
+ scroll_led_on();
+ } else {
+ scroll_led_off();
+ }
+}
+
+bool led_update_user(led_t led_state) {
+ // only use caps LED - ignore Num & Scroll
+ if (led_state.caps_lock) {
+ caps_led_on();
+ } else {
+ caps_led_off();
+ }
+
+ hw_caps_on = led_state.caps_lock;
+ return false; // 'false' prevents led_update_kb from firing
+}
+
+void blink_leds(int leds) {
+ for (int i = 0; i < 3; i++) {
+ toggle_leds(leds);
+ wait_ms(BLINKING_INTERVAL);
+ toggle_leds(ALL_OFF);
+ wait_ms(BLINKING_INTERVAL);
+ }
+}
+
+void led_show_variable_status(bool value) {
+ if (value) {
+ blink_leds(NUM_LED_ON);
+ } else {
+ blink_leds(SCROLL_LED_ON);
+ }
+} \ No newline at end of file