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