2
0

keyboard.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "keyboard.h"
  2. #include "ch.h"
  3. #include "hal.h"
  4. #include "led_custom.h"
  5. #include "util.h"
  6. #include "quantum.h"
  7. #include "tmk_core/common/eeprom.h"
  8. #include "ws2812.h"
  9. backlight_config_t kb_backlight_config = {
  10. .enable = true,
  11. .breathing = true,
  12. .level = BACKLIGHT_LEVELS
  13. };
  14. bool eeprom_is_valid(void)
  15. {
  16. return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
  17. eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION);
  18. }
  19. void eeprom_set_valid(bool valid)
  20. {
  21. eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
  22. eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
  23. }
  24. void eeprom_reset(void)
  25. {
  26. eeprom_set_valid(false);
  27. eeconfig_disable();
  28. }
  29. void save_backlight_config_to_eeprom(){
  30. eeprom_update_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT, kb_backlight_config.raw);
  31. }
  32. void load_custom_config(){
  33. kb_backlight_config.raw = eeprom_read_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT);
  34. }
  35. void eeprom_init_kb(void)
  36. {
  37. // If the EEPROM has the magic, the data is good.
  38. // OK to load from EEPROM.
  39. if (eeprom_is_valid()) {
  40. load_custom_config();
  41. } else {
  42. // Save the magic number last, in case saving was interrupted
  43. eeprom_set_valid(true);
  44. }
  45. }
  46. void matrix_init_kb(void){
  47. eeprom_init_kb();
  48. /* MOSI pin*/
  49. palSetPadMode(PORT_WS2812, PIN_WS2812, PAL_MODE_ALTERNATE(0));
  50. wait_ms(500);
  51. #ifdef RGBLIGHT_ENABLE
  52. leds_init();
  53. #endif
  54. backlight_init_ports();
  55. }
  56. void matrix_scan_kb(void)
  57. {
  58. #ifdef RGBLIGHT_ENABLE
  59. rgblight_task();
  60. #endif
  61. }
  62. bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
  63. switch (keycode) {
  64. case BL_INC:
  65. if (record->event.pressed) {
  66. kb_backlight_config.level = kb_backlight_config.level + 1;
  67. if(kb_backlight_config.level > BACKLIGHT_LEVELS){
  68. kb_backlight_config.level = BACKLIGHT_LEVELS;
  69. }
  70. backlight_set(kb_backlight_config.level);
  71. save_backlight_config_to_eeprom();
  72. }
  73. return false;
  74. case BL_TOGG:
  75. if (record->event.pressed) {
  76. kb_backlight_config.enable = !kb_backlight_config.enable;
  77. if(kb_backlight_config.enable){
  78. backlight_set(kb_backlight_config.level);
  79. } else {
  80. backlight_set(0);
  81. }
  82. save_backlight_config_to_eeprom();
  83. }
  84. return false;
  85. case BL_DEC:
  86. if (record->event.pressed) {
  87. if(kb_backlight_config.level <= 1){
  88. kb_backlight_config.level = 0;
  89. } else {
  90. kb_backlight_config.level = kb_backlight_config.level - 1;
  91. }
  92. backlight_set(kb_backlight_config.level);
  93. save_backlight_config_to_eeprom();
  94. }
  95. return false;
  96. case BL_BRTG:
  97. if (record->event.pressed) {
  98. kb_backlight_config.breathing = !kb_backlight_config.breathing;
  99. breathing_toggle();
  100. save_backlight_config_to_eeprom();
  101. }
  102. return false;
  103. }
  104. return true;
  105. }