]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/edvorakjp/edvorakjp_tap_dance.c
Remove more commented out MCUs
[qmk_firmware.git] / users / edvorakjp / edvorakjp_tap_dance.c
1 #include "edvorakjp.h"
2 #include "process_keycode/process_tap_dance.h"
3
4 enum tap_state {
5   NONE = 0,
6   SINGLE_TAP = 1,
7   DOUBLE_TAP = 2,
8   HOLD
9 };
10
11 typedef struct {
12   uint8_t lower;
13   uint8_t raise;
14 } td_status_t;
15 static td_status_t td_status = {NONE, NONE};
16
17 int cur_dance(qk_tap_dance_state_t *state) {
18   if (state->interrupted || !state->pressed) {
19     return state->count == 1 ? SINGLE_TAP : DOUBLE_TAP;
20   } else {
21     return HOLD;
22   }
23 }
24
25 void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
26   td_status.lower = cur_dance(state);
27   switch(td_status.lower) {
28     case SINGLE_TAP:
29       set_japanese_mode(false);
30       break;
31     case DOUBLE_TAP:
32       set_japanese_mode(false);
33       register_code(KC_ESC);
34       break;
35     case HOLD:
36       break;
37   }
38   layer_on(_LOWER);
39 }
40
41 void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) {
42   if (td_status.lower == DOUBLE_TAP) {
43     unregister_code(KC_ESC);
44   }
45   layer_off(_LOWER);
46   td_status.lower = NONE;
47 }
48
49 void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
50   td_status.raise = cur_dance(state);
51   switch(td_status.raise) {
52     case DOUBLE_TAP:
53       // same as single
54     case SINGLE_TAP:
55       set_japanese_mode(true);
56       break;
57     case HOLD:
58       break;
59   }
60   layer_on(_RAISE);
61 }
62
63 void td_raise_reset(qk_tap_dance_state_t *state, void *user_data) {
64   layer_off(_RAISE);
65   td_status.raise = NONE;
66 }
67
68 qk_tap_dance_action_t tap_dance_actions[] = {
69   [TD_LOWER] =
70     ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_lower_finished, td_lower_reset, 100),
71   [TD_RAISE] =
72     ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_raise_finished, td_raise_reset, 100)
73 };