parent
							
								
									9e6ee47779
								
							
						
					
					
						commit
						89b80b79d5
					
				| @ -0,0 +1,20 @@ | ||||
| /*
 | ||||
| Copyright 2018 Fredric Silberberg (333fred) | ||||
| 
 | ||||
| This program is free software: you can redistribute it and/or modify | ||||
| it under the terms of the GNU General Public License as published by | ||||
| the Free Software Foundation, either version 2 of the License, or | ||||
| (at your option) any later version. | ||||
| 
 | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU General Public License for more details. | ||||
| 
 | ||||
| You should have received a copy of the GNU General Public License | ||||
| along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| #pragma once | ||||
| 
 | ||||
| // Long tapping term on the big switch, because it takes so long to press
 | ||||
| #define TAPPING_TERM 500 | ||||
| @ -0,0 +1,123 @@ | ||||
| #include QMK_KEYBOARD_H | ||||
| 
 | ||||
| typedef enum { | ||||
|     SINGLE_TAP, SINGLE_HOLD, DOUBLE, TRIPLE, QUAD | ||||
| } tap_dance_state_enum; | ||||
| 
 | ||||
| enum { | ||||
|   TD_KEY = 0 | ||||
| }; | ||||
| 
 | ||||
| static tap_dance_state_enum tap_dance_state; | ||||
| static bool tap_dance_active = false; | ||||
| static uint16_t timer; | ||||
| 
 | ||||
| void dance_cycle(bool override_timer) { | ||||
|   if (tap_dance_active) | ||||
|   { | ||||
|     if (timer_elapsed(timer) > 100 || override_timer) | ||||
|     { | ||||
|       switch (tap_dance_state) | ||||
|       { | ||||
|         case SINGLE_HOLD: | ||||
|         { | ||||
|           rgblight_increase_hue_noeeprom(); | ||||
|           break; | ||||
|         } | ||||
| 
 | ||||
|         case DOUBLE: | ||||
|         { | ||||
|           rgblight_step_noeeprom(); | ||||
|           break; | ||||
|         } | ||||
| 
 | ||||
|         case TRIPLE: | ||||
|         { | ||||
|           rgblight_toggle_noeeprom(); | ||||
|           break; | ||||
|         } | ||||
| 
 | ||||
|         default: | ||||
|           // Not needed
 | ||||
|           break; | ||||
|       } | ||||
| 
 | ||||
|       timer = timer_read(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void dance_finished(qk_tap_dance_state_t *state, void* user_data) { | ||||
|   // Determine the current state
 | ||||
|   switch (state->count) | ||||
|   { | ||||
|     case 1: | ||||
|     { | ||||
|       if (state->interrupted || state->pressed == 0) tap_dance_state = SINGLE_TAP; | ||||
|       else tap_dance_state = SINGLE_HOLD; | ||||
|       break; | ||||
|     } | ||||
|     case 2: | ||||
|     { | ||||
|       tap_dance_state = DOUBLE; | ||||
|       break; | ||||
|     } | ||||
|     case 3: | ||||
|     { | ||||
|       tap_dance_state = TRIPLE; | ||||
|       break; | ||||
|     } | ||||
|     default: | ||||
|     { | ||||
|       tap_dance_state = QUAD; | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   switch (tap_dance_state) | ||||
|   { | ||||
|     case SINGLE_TAP: | ||||
|     { | ||||
|       // VS Build: CTRL+SHIFT+B
 | ||||
|       SEND_STRING(SS_DOWN(X_LCTRL) SS_DOWN(X_LALT) "b" SS_UP(X_LALT) SS_UP(X_LCTRL)); | ||||
|       tap_dance_active = false; | ||||
|       break; | ||||
|     } | ||||
| 
 | ||||
|     case SINGLE_HOLD: | ||||
|     case DOUBLE: | ||||
|     case TRIPLE: | ||||
|     { | ||||
|       // These are handled by the matrix_scan, which will register the appropriate rgb
 | ||||
|       // functions every scan
 | ||||
|       tap_dance_active = true; | ||||
|       timer = timer_read(); | ||||
|       dance_cycle(true); | ||||
|       break; | ||||
|     } | ||||
| 
 | ||||
|     case QUAD: | ||||
|     { | ||||
|       // Reprogram
 | ||||
|       reset_keyboard(); | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void dance_reset(qk_tap_dance_state_t *state, void* user_data) | ||||
| { | ||||
|   tap_dance_active = false; | ||||
| } | ||||
| 
 | ||||
| qk_tap_dance_action_t tap_dance_actions[] = { | ||||
|   [TD_KEY] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_finished, dance_reset) | ||||
| }; | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
|   [0] = LAYOUT(TD(TD_KEY)) | ||||
| }; | ||||
| 
 | ||||
| void matrix_scan_user(void) { | ||||
|   dance_cycle(false); | ||||
| } | ||||
| @ -0,0 +1,5 @@ | ||||
| # I'm not using things from my userpace in this one
 | ||||
| USER_NAME = disable | ||||
| 
 | ||||
| RGBLIGHT_ENABLE = yes | ||||
| TAP_DANCE_ENABLE = yes | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 Fredric Silberberg
						Fredric Silberberg