zer09.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "zer09.h"
  2. #include "lights.h"
  3. #include "tap_dance.h"
  4. __attribute__((weak)) void matrix_init_keymap(void) {}
  5. __attribute__((weak)) void matrix_scan_keymap(void) {}
  6. __attribute__((weak)) bool process_record_keymap(uint16_t keycode,
  7. keyrecord_t *record) {
  8. return true;
  9. }
  10. __attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}
  11. static uint8_t c_lyr = 0; // current layer.
  12. bool shifted_layer(void) {
  13. static bool is_shifted = false;
  14. if (c_lyr == _VL) {
  15. if (!is_shifted) {
  16. register_code(KC_LSFT);
  17. is_shifted = true;
  18. return true;
  19. }
  20. } else {
  21. if (is_shifted) {
  22. unregister_code(KC_LSFT);
  23. is_shifted = false;
  24. return true;
  25. }
  26. }
  27. return false;
  28. }
  29. void matrix_init_user(void) {
  30. eeprom_read_led_dim_lvl();
  31. matrix_init_keymap();
  32. }
  33. void matrix_scan_user(void) {
  34. static uint8_t is_leds_changes = 1;
  35. c_lyr = get_highest_layer(layer_state);
  36. is_leds_changes = is_leds_changes << set_layer_led(c_lyr);
  37. is_leds_changes = is_leds_changes << shifted_layer();
  38. is_leds_changes = is_leds_changes << rainbow_loop(c_lyr);
  39. if (is_leds_changes > 1) {
  40. rgblight_set();
  41. is_leds_changes = 1;
  42. }
  43. matrix_scan_keymap();
  44. }
  45. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  46. set_key_led(record, c_lyr);
  47. if (led_brightness(keycode, record)) {
  48. rgblight_set();
  49. return false;
  50. }
  51. rgblight_set();
  52. return process_record_keymap(keycode, record);
  53. }
  54. void led_set_user(uint8_t usb_led) {
  55. if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
  56. rbw_led_keys[RBW_LCAP].status = ENABLED;
  57. rbw_led_keys[RBW_RCAP].status = ENABLED;
  58. } else {
  59. rbw_led_keys[RBW_LCAP].status = DISABLED;
  60. rbw_led_keys[RBW_RCAP].status = DISABLED;
  61. }
  62. if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
  63. rbw_led_keys[RBW_SCRL].status = ENABLED;
  64. } else {
  65. rbw_led_keys[RBW_SCRL].status = DISABLED;
  66. }
  67. led_set_keymap(usb_led);
  68. }