]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/zer09/tap_dance.c
Remove more commented out MCUs
[qmk_firmware.git] / users / zer09 / tap_dance.c
1 #include "tap_dance.h"
2 #include "lights.h"
3
4 qk_tap_dance_action_t tap_dance_actions[] = {
5     [DA_LCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lctl_finished,
6                                              dance_lctl_reset),
7     [DA_LSPR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lspr_finished,
8                                              dance_lspr_reset),
9     [DA_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_rctl_finished,
10                                              dance_rctl_reset),
11     [DA_RALT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_ralt_finished,
12                                              dance_ralt_reset),
13     [DA_UPLY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_uply_finished,
14                                              dance_uply_reset),
15     [DA_DWLY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_dwly_finished,
16                                              dance_dwly_reset),
17 };
18
19 volatile uint8_t active_layer = _BL;
20 volatile uint8_t gm_layer_act = false;
21 static tap upltap_state = {.state = 0};
22 static tap dwltap_state = {.state = 0};
23 static tap lsprtap_state = {.state = 0};
24 static tap ralttap_state = {.state = 0};
25
26 void layer_switcher_tap(uint8_t new_layer) {
27   if (gm_layer_act == true) {
28     layer_off(active_layer);
29     if (new_layer == _BL) {
30       layer_on(_GM);
31       active_layer = _GM;
32     } else {
33       layer_on(new_layer);
34       active_layer = new_layer;
35     }
36   } else {
37     layer_off(active_layer);
38     layer_on(new_layer);
39     active_layer = new_layer;
40   }
41 }
42
43 int cur_dance(qk_tap_dance_state_t *state) {
44   switch (state->count) {
45   case 1:
46     return state->pressed == 0 ? SINGLE_TAP : SINGLE_HOLD;
47   case 2:
48     return state->pressed == 0 ? DOUBLE_TAP : DOUBLE_HOLD;
49   case 3:
50     return state->pressed == 0 ? TRIPLE_TAP : TRIPLE_HOLD;
51   default:
52     return state->pressed == 0 ? DEFAULT_TAP : DEFAULT_HOLD;
53   }
54 }
55
56 void dance_lctl_finished(qk_tap_dance_state_t *state, void *user_data) {
57   rbw_led_keys[RBW_LCTL].status = ENABLED;
58   register_code(KC_LCTRL);
59 };
60
61 void dance_lctl_reset(qk_tap_dance_state_t *state, void *user_data) {
62   unregister_code(KC_LCTRL);
63   rbw_led_keys[RBW_LCTL].status = DISABLED;
64 };
65
66 void dance_lspr_finished(qk_tap_dance_state_t *state, void *user_data) {
67   lsprtap_state.state = cur_dance(state);
68
69   switch (lsprtap_state.state) {
70   case DOUBLE_HOLD:
71     rbw_led_keys[RBW_LSPR].status = ENABLED;
72     register_code(KC_LALT);
73     break;
74   default:
75     register_code(KC_LGUI);
76     break;
77   }
78 };
79
80 void dance_lspr_reset(qk_tap_dance_state_t *state, void *user_data) {
81   switch (lsprtap_state.state) {
82   case DOUBLE_HOLD:
83     unregister_code(KC_LALT);
84     rbw_led_keys[RBW_LSPR].status = DISABLED;
85     break;
86   default:
87     unregister_code(KC_LGUI);
88     break;
89   }
90 };
91
92 void dance_rctl_finished(qk_tap_dance_state_t *state, void *user_data) {
93   rbw_led_keys[RBW_RCTL].status = ENABLED;
94   register_code(KC_RCTRL);
95 };
96
97 void dance_rctl_reset(qk_tap_dance_state_t *state, void *user_data) {
98   unregister_code(KC_RCTRL);
99   rbw_led_keys[RBW_RCTL].status = DISABLED;
100 };
101
102 void dance_ralt_finished(qk_tap_dance_state_t *state, void *user_data) {
103   ralttap_state.state = cur_dance(state);
104
105   switch (ralttap_state.state) {
106   case DOUBLE_HOLD:
107     rbw_led_keys[RBW_RALT].status = ENABLED;
108     unregister_code(KC_LGUI);
109     break;
110   default:
111     register_code(KC_RALT);
112     break;
113   }
114 };
115
116 void dance_ralt_reset(qk_tap_dance_state_t *state, void *user_data) {
117   switch (ralttap_state.state) {
118   case DOUBLE_HOLD:
119     unregister_code(KC_RGUI);
120     rbw_led_keys[RBW_RALT].status = DISABLED;
121     break;
122   default:
123     unregister_code(KC_RALT);
124     break;
125   }
126 };
127
128 void dance_uply_finished(qk_tap_dance_state_t *state, void *user_data) {
129   upltap_state.state = cur_dance(state);
130
131   switch (upltap_state.state) {
132   case SINGLE_TAP:
133     if (active_layer == _UL) {
134       layer_switcher_tap(_BL);
135     } else {
136       layer_switcher_tap(_UL);
137     }
138     break;
139   case SINGLE_HOLD:
140     layer_switcher_tap(_UL);
141     break;
142   default:
143     layer_switcher_tap(_BL);
144     break;
145   }
146 }
147
148 void dance_uply_reset(qk_tap_dance_state_t *state, void *user_data) {
149   switch (upltap_state.state) {
150   case SINGLE_TAP:
151     break;
152   case SINGLE_HOLD:
153   default:
154     layer_switcher_tap(_BL);
155     break;
156   }
157   upltap_state.state = 0;
158 }
159
160 void dance_dwly_finished(qk_tap_dance_state_t *state, void *user_data) {
161   dwltap_state.state = cur_dance(state);
162
163   switch (dwltap_state.state) {
164   case SINGLE_TAP:
165     if (active_layer == _DL) {
166       layer_switcher_tap(_BL);
167     } else {
168       layer_switcher_tap(_DL);
169     }
170     break;
171   case SINGLE_HOLD:
172     layer_switcher_tap(_DL);
173     break;
174   case DOUBLE_HOLD:
175     layer_switcher_tap(_AL);
176     break;
177   case TRIPLE_TAP:
178     if (gm_layer_act == true) {
179       gm_layer_act = false;
180       layer_switcher_tap(_BL);
181     } else {
182       gm_layer_act = true;
183       layer_switcher_tap(_GM);
184     }
185   default:
186     layer_switcher_tap(_BL);
187     break;
188   }
189 }
190
191 void dance_dwly_reset(qk_tap_dance_state_t *state, void *user_data) {
192   switch (dwltap_state.state) {
193   case SINGLE_TAP:
194     break;
195   case SINGLE_HOLD:
196   case DOUBLE_HOLD:
197   case TRIPLE_TAP:
198   default:
199     layer_switcher_tap(_BL);
200     break;
201   }
202   dwltap_state.state = 0;
203 }