1 #include "satisfaction75.h"
3 void pre_encoder_mode_change(){
4 if(encoder_mode == ENC_MODE_CLOCK_SET){
6 timespec.year = year_config;
7 timespec.month = month_config;
8 timespec.day = day_config;
9 // timespec.dayofweek = last_timespec.dayofweek;
10 // timespec.dstflag = last_timespec.dstflag;
11 timespec.millisecond = (hour_config * 60 + minute_config) * 60 * 1000;
12 rtcSetTime(&RTCD1, ×pec);
13 } else if (encoder_mode == ENC_MODE_BACKLIGHT){
14 save_backlight_config_to_eeprom();
18 void post_encoder_mode_change(){
19 if(encoder_mode == ENC_MODE_CLOCK_SET){
20 hour_config = (last_minute / 60);
21 minute_config = last_minute % 60;
22 year_config = last_timespec.year;
23 month_config = last_timespec.month;
24 day_config = last_timespec.day;
29 void change_encoder_mode(bool negative){
30 pre_encoder_mode_change();
31 if(enabled_encoder_modes == 0){
32 enabled_encoder_modes = 0x1F;
36 if (encoder_mode == 0){
37 encoder_mode = _NUM_ENCODER_MODES - 1;
39 encoder_mode = encoder_mode - 1;
42 encoder_mode = (encoder_mode + 1) % _NUM_ENCODER_MODES;
44 } while(((1 << encoder_mode) & enabled_encoder_modes) == 0);
45 post_encoder_mode_change();
48 void update_time_config(int8_t increment){
49 uint8_t day_limit = 31;
50 uint16_t adjusted_year = 1980 + year_config;
51 switch(time_config_idx){
54 hour_config = (hour_config + increment) % 24;
60 minute_config = (minute_config + increment) % 60;
61 if (minute_config < 0){
66 year_config += increment;
69 month_config = (month_config % 12) + increment;
70 if (month_config <= 0){
75 if (month_config == 9 || month_config == 4 || month_config == 6 || month_config == 11){
77 } else if(month_config == 2){
78 day_limit = adjusted_year % 4 == 0 && !(adjusted_year % 100 == 0 && adjusted_year % 400 != 0) ? 29 : 28;
80 day_config = (day_config % day_limit) + increment;
82 day_config += day_limit;
88 uint16_t handle_encoder_clockwise(){
89 uint16_t mapped_code = 0;
93 mapped_code = KC_VOLU;
96 mapped_code = KC_MEDIA_NEXT_TRACK;
99 mapped_code = KC_WH_D;
101 case ENC_MODE_BACKLIGHT:
102 kb_backlight_config.level = kb_backlight_config.level + 1;
103 if(kb_backlight_config.level > BACKLIGHT_LEVELS){
104 kb_backlight_config.level = BACKLIGHT_LEVELS;
106 backlight_set(kb_backlight_config.level);
107 if (kb_backlight_config.level != 0){
108 kb_backlight_config.enable = true;
111 case ENC_MODE_BRIGHTNESS:
112 mapped_code = KC_BRIGHTNESS_UP;
114 case ENC_MODE_CLOCK_SET:
115 update_time_config(1);
116 queue_for_send = true;
122 uint16_t handle_encoder_ccw(){
123 uint16_t mapped_code = 0;
124 switch(encoder_mode){
126 case ENC_MODE_VOLUME:
127 mapped_code = KC_VOLD;
130 mapped_code = KC_MEDIA_PREV_TRACK;
132 case ENC_MODE_SCROLL:
133 mapped_code = KC_WH_U;
135 case ENC_MODE_BACKLIGHT:
136 // mapped_code = BL_DEC;
137 if(kb_backlight_config.level != 0){
138 kb_backlight_config.level = kb_backlight_config.level - 1;
140 backlight_set(kb_backlight_config.level);
141 if (kb_backlight_config.level == 0){
142 kb_backlight_config.enable = false;
145 case ENC_MODE_BRIGHTNESS:
146 mapped_code = KC_BRIGHTNESS_DOWN;
148 case ENC_MODE_CLOCK_SET:
149 update_time_config(-1);
150 queue_for_send = true;
156 uint16_t handle_encoder_press(){
157 uint16_t mapped_code = 0;
158 switch(encoder_mode){
159 case ENC_MODE_VOLUME:
160 mapped_code = KC_MUTE;
163 mapped_code = KC_MEDIA_PLAY_PAUSE;
165 case ENC_MODE_SCROLL:
166 mapped_code = KC_BTN3;
168 case ENC_MODE_BACKLIGHT:
169 // mapped_code = BL_TOGG;
170 kb_backlight_config.breathing = !kb_backlight_config.breathing;
171 if(!kb_backlight_config.breathing){
177 case ENC_MODE_CLOCK_SET:
178 time_config_idx = (time_config_idx + 1) % 5;
180 case ENC_MODE_BRIGHTNESS: