aboutsummaryrefslogtreecommitdiff
path: root/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c')
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c58
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
3void pre_encoder_mode_change(){ 4void 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
222uint16_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
234void 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}