led_funcs.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright 2022 Artjoms Rizihs (@artjomsR)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "led_funcs.h"
  4. bool hw_caps_on;
  5. __attribute__ ((weak)) void num_led_on(void) {}
  6. __attribute__ ((weak)) void num_led_off(void) {}
  7. __attribute__ ((weak)) void caps_led_on(void) {}
  8. __attribute__ ((weak)) void caps_led_off(void) {}
  9. __attribute__ ((weak)) void scroll_led_on(void) {}
  10. __attribute__ ((weak)) void scroll_led_off(void) {}
  11. void toggle_leds(int leds) {
  12. if (NUM_LED_ON & leds) {
  13. num_led_on();
  14. } else {
  15. num_led_off();
  16. }
  17. if (SCROLL_LED_ON & leds) {
  18. scroll_led_on();
  19. } else {
  20. scroll_led_off();
  21. }
  22. }
  23. bool led_update_user(led_t led_state) {
  24. // only use caps LED - ignore Num & Scroll
  25. if (led_state.caps_lock) {
  26. caps_led_on();
  27. } else {
  28. caps_led_off();
  29. }
  30. hw_caps_on = led_state.caps_lock;
  31. return false; // 'false' prevents led_update_kb from firing
  32. }
  33. void blink_leds(int leds) {
  34. for (int i = 0; i < 3; i++) {
  35. toggle_leds(leds);
  36. wait_ms(BLINKING_INTERVAL);
  37. toggle_leds(ALL_OFF);
  38. wait_ms(BLINKING_INTERVAL);
  39. }
  40. }
  41. void led_show_variable_status(bool value) {
  42. if (value) {
  43. blink_leds(NUM_LED_ON);
  44. } else {
  45. blink_leds(SCROLL_LED_ON);
  46. }
  47. }