* Refactor & reimplement mod tap macros * Reduce tapping term * Update readme * Add narze userspace * Make use of narze userspace * Extract Superduper mode * Refactor Superduper mode * (Ergodox Infinity) Prevent stuck modifiers * Update ergodox_infinity/narze likewise * Add warning for building Infinity with docker * Fix include eeprom.h in superduper * Try enabling superduper mode with combo for ergodox infinity * Apply suggestions on #4546 * Convert to 4 spaces * Map backlight step key * Replace PLAY_NOTE_ARRAY * Fix superduper toggle * Re enable audio in planck rev4 * Use perform_space_cadet * Remove superduper mod tap triggers * Add readme for planck light firmware flashing command * Remove unused layers * Remove unused keycodes * Add backlight toggle * Remove unused songs & use DEFAULT_LAYER_SONGS * Update readme * Move includes to header file
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "superduper.h"
 | |
| #include "eeconfig.h"
 | |
| #include "eeprom.h"
 | |
| #include "keymap_colemak.h"
 | |
| 
 | |
| // SuperDuper
 | |
| 
 | |
| #define SUPERDUPER_COMBO_COUNT 3
 | |
| #define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19
 | |
| 
 | |
| enum process_combo_event {
 | |
|     CB_SUPERDUPER,
 | |
| };
 | |
| 
 | |
| enum supported_layers {
 | |
|     _QWERTY,
 | |
|     _COLEMAK,
 | |
|     _QWOC
 | |
| };
 | |
| 
 | |
| const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = {
 | |
|     [_QWERTY] = {KC_S, KC_D, COMBO_END},
 | |
|     [_COLEMAK] = {KC_R, KC_S, COMBO_END},
 | |
|     [_QWOC] = {CM_S, CM_D, COMBO_END},
 | |
| };
 | |
| 
 | |
| combo_t key_combos[COMBO_COUNT] = {
 | |
|     [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]),
 | |
| };
 | |
| 
 | |
| volatile bool superduper_enabled = true;
 | |
| 
 | |
| const uint16_t PROGMEM empty_combo[] = {COMBO_END};
 | |
| 
 | |
| bool toggle_superduper_mode(void) {
 | |
|     superduper_enabled = !superduper_enabled;
 | |
| 
 | |
|     if (superduper_enabled) {
 | |
|         set_superduper_key_combos();
 | |
|     } else {
 | |
|         clear_superduper_key_combos();
 | |
|     }
 | |
| 
 | |
|     return superduper_enabled;
 | |
| }
 | |
| 
 | |
| void set_superduper_key_combo_layer(uint16_t layer) {
 | |
|     key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
 | |
|     eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, layer);
 | |
| }
 | |
| 
 | |
| void set_superduper_key_combos(void) {
 | |
|     uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX);
 | |
| 
 | |
|     switch (layer) {
 | |
|         case _QWERTY:
 | |
|         case _COLEMAK:
 | |
|         case _QWOC:
 | |
|             key_combos[CB_SUPERDUPER].keys = superduper_combos[layer];
 | |
|             break;
 | |
|     }
 | |
| }
 | |
| 
 | |
| void clear_superduper_key_combos(void) {
 | |
|     key_combos[CB_SUPERDUPER].keys = empty_combo;
 | |
| }
 |