diff options
Diffstat (limited to 'keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c')
| -rw-r--r-- | keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c b/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c index 677681691..e866d897c 100644 --- a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c +++ b/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | #include "satisfaction75.h" | 1 | #include "satisfaction75.h" |
| 2 | #include "tmk_core/common/eeprom.h" | ||
| 2 | 3 | ||
| 3 | void pre_encoder_mode_change(){ | 4 | void pre_encoder_mode_change(){ |
| 4 | if(encoder_mode == ENC_MODE_CLOCK_SET){ | 5 | if(encoder_mode == ENC_MODE_CLOCK_SET){ |
| @@ -111,6 +112,17 @@ uint16_t handle_encoder_clockwise(){ | |||
| 111 | case ENC_MODE_BRIGHTNESS: | 112 | case ENC_MODE_BRIGHTNESS: |
| 112 | mapped_code = KC_BRIGHTNESS_UP; | 113 | mapped_code = KC_BRIGHTNESS_UP; |
| 113 | break; | 114 | break; |
| 115 | #ifdef DYNAMIC_KEYMAP_ENABLE | ||
| 116 | case ENC_MODE_CUSTOM0: | ||
| 117 | mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_CW); | ||
| 118 | break; | ||
| 119 | case ENC_MODE_CUSTOM1: | ||
| 120 | mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_CW); | ||
| 121 | break; | ||
| 122 | case ENC_MODE_CUSTOM2: | ||
| 123 | mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_CW); | ||
| 124 | break; | ||
| 125 | #endif | ||
| 114 | case ENC_MODE_CLOCK_SET: | 126 | case ENC_MODE_CLOCK_SET: |
| 115 | update_time_config(1); | 127 | update_time_config(1); |
| 116 | queue_for_send = true; | 128 | queue_for_send = true; |
| @@ -145,6 +157,18 @@ uint16_t handle_encoder_ccw(){ | |||
| 145 | case ENC_MODE_BRIGHTNESS: | 157 | case ENC_MODE_BRIGHTNESS: |
| 146 | mapped_code = KC_BRIGHTNESS_DOWN; | 158 | mapped_code = KC_BRIGHTNESS_DOWN; |
| 147 | break; | 159 | break; |
| 160 | #ifdef DYNAMIC_KEYMAP_ENABLE | ||
| 161 | case ENC_MODE_CUSTOM0: | ||
| 162 | mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_CCW); | ||
| 163 | break; | ||
| 164 | case ENC_MODE_CUSTOM1: | ||
| 165 | mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_CCW); | ||
| 166 | break; | ||
| 167 | case ENC_MODE_CUSTOM2: | ||
| 168 | mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_CCW); | ||
| 169 | break; | ||
| 170 | #endif | ||
| 171 | |||
| 148 | case ENC_MODE_CLOCK_SET: | 172 | case ENC_MODE_CLOCK_SET: |
| 149 | update_time_config(-1); | 173 | update_time_config(-1); |
| 150 | queue_for_send = true; | 174 | queue_for_send = true; |
| @@ -159,6 +183,7 @@ uint16_t handle_encoder_press(){ | |||
| 159 | case ENC_MODE_VOLUME: | 183 | case ENC_MODE_VOLUME: |
| 160 | mapped_code = KC_MUTE; | 184 | mapped_code = KC_MUTE; |
| 161 | break; | 185 | break; |
| 186 | default: | ||
| 162 | case ENC_MODE_MEDIA: | 187 | case ENC_MODE_MEDIA: |
| 163 | mapped_code = KC_MEDIA_PLAY_PAUSE; | 188 | mapped_code = KC_MEDIA_PLAY_PAUSE; |
| 164 | break; | 189 | break; |
| @@ -174,11 +199,42 @@ uint16_t handle_encoder_press(){ | |||
| 174 | breathing_enable(); | 199 | breathing_enable(); |
| 175 | } | 200 | } |
| 176 | break; | 201 | break; |
| 202 | #ifdef DYNAMIC_KEYMAP_ENABLE | ||
| 203 | case ENC_MODE_CUSTOM0: | ||
| 204 | mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_PRESS); | ||
| 205 | break; | ||
| 206 | case ENC_MODE_CUSTOM1: | ||
| 207 | mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_PRESS); | ||
| 208 | break; | ||
| 209 | case ENC_MODE_CUSTOM2: | ||
| 210 | mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_PRESS); | ||
| 211 | break; | ||
| 212 | #endif | ||
| 177 | case ENC_MODE_CLOCK_SET: | 213 | case ENC_MODE_CLOCK_SET: |
| 178 | time_config_idx = (time_config_idx + 1) % 5; | 214 | time_config_idx = (time_config_idx + 1) % 5; |
| 179 | default: | ||
| 180 | case ENC_MODE_BRIGHTNESS: | 215 | case ENC_MODE_BRIGHTNESS: |
| 181 | break; | 216 | break; |
| 182 | } | 217 | } |
| 183 | return mapped_code; | 218 | return mapped_code; |
| 184 | } | 219 | } |
| 220 | |||
| 221 | |||
| 222 | uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior){ | ||
| 223 | #ifdef DYNAMIC_KEYMAP_ENABLE | ||
| 224 | void* addr = (void*)(DYNAMIC_KEYMAP_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2)); | ||
| 225 | //big endian | ||
| 226 | uint16_t keycode = eeprom_read_byte(addr) << 8; | ||
| 227 | keycode |= eeprom_read_byte(addr + 1); | ||
| 228 | return keycode; | ||
| 229 | #else | ||
| 230 | return 0; | ||
| 231 | #endif | ||
| 232 | } | ||
| 233 | |||
| 234 | void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code){ | ||
| 235 | #ifdef DYNAMIC_KEYMAP_ENABLE | ||
| 236 | void* addr = (void*)(DYNAMIC_KEYMAP_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2)); | ||
| 237 | eeprom_update_byte(addr, (uint8_t)(new_code >> 8)); | ||
| 238 | eeprom_update_byte(addr + 1, (uint8_t)(new_code & 0xFF)); | ||
| 239 | #endif | ||
| 240 | } | ||
