aboutsummaryrefslogtreecommitdiff
path: root/quantum/process_keycode/process_tap_dance.h
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/process_keycode/process_tap_dance.h')
-rw-r--r--quantum/process_keycode/process_tap_dance.h113
1 files changed, 49 insertions, 64 deletions
diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h
index 00d70cbc5..b2d0cb829 100644
--- a/quantum/process_keycode/process_tap_dance.h
+++ b/quantum/process_keycode/process_tap_dance.h
@@ -18,75 +18,60 @@
18 18
19#ifdef TAP_DANCE_ENABLE 19#ifdef TAP_DANCE_ENABLE
20 20
21#include <stdbool.h> 21# include <stdbool.h>
22#include <inttypes.h> 22# include <inttypes.h>
23 23
24typedef struct 24typedef struct {
25{ 25 uint8_t count;
26 uint8_t count; 26 uint8_t oneshot_mods;
27 uint8_t oneshot_mods; 27 uint8_t weak_mods;
28 uint8_t weak_mods; 28 uint16_t keycode;
29 uint16_t keycode; 29 uint16_t interrupting_keycode;
30 uint16_t interrupting_keycode; 30 uint16_t timer;
31 uint16_t timer; 31 bool interrupted;
32 bool interrupted; 32 bool pressed;
33 bool pressed; 33 bool finished;
34 bool finished;
35} qk_tap_dance_state_t; 34} qk_tap_dance_state_t;
36 35
37#define TD(n) (QK_TAP_DANCE | ((n) & 0xFF)) 36# define TD(n) (QK_TAP_DANCE | ((n)&0xFF))
38 37
39typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state, void *user_data); 38typedef void (*qk_tap_dance_user_fn_t)(qk_tap_dance_state_t *state, void *user_data);
40 39
41typedef struct 40typedef struct {
42{ 41 struct {
43 struct { 42 qk_tap_dance_user_fn_t on_each_tap;
44 qk_tap_dance_user_fn_t on_each_tap; 43 qk_tap_dance_user_fn_t on_dance_finished;
45 qk_tap_dance_user_fn_t on_dance_finished; 44 qk_tap_dance_user_fn_t on_reset;
46 qk_tap_dance_user_fn_t on_reset; 45 } fn;
47 } fn; 46 qk_tap_dance_state_t state;
48 qk_tap_dance_state_t state; 47 uint16_t custom_tapping_term;
49 uint16_t custom_tapping_term; 48 void * user_data;
50 void *user_data;
51} qk_tap_dance_action_t; 49} qk_tap_dance_action_t;
52 50
53typedef struct 51typedef struct {
54{ 52 uint16_t kc1;
55 uint16_t kc1; 53 uint16_t kc2;
56 uint16_t kc2;
57} qk_tap_dance_pair_t; 54} qk_tap_dance_pair_t;
58 55
59typedef struct 56typedef struct {
60{ 57 uint16_t kc;
61 uint16_t kc; 58 uint8_t layer;
62 uint8_t layer;
63} qk_tap_dance_dual_role_t; 59} qk_tap_dance_dual_role_t;
64 60
65#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \ 61# define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) \
66 .fn = { qk_tap_dance_pair_on_each_tap, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \ 62 { .fn = {qk_tap_dance_pair_on_each_tap, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset}, .user_data = (void *)&((qk_tap_dance_pair_t){kc1, kc2}), }
67 .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }), \
68 }
69 63
70#define ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) { \ 64# define ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) \
71 .fn = { qk_tap_dance_dual_role_on_each_tap, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset }, \ 65 { .fn = {qk_tap_dance_dual_role_on_each_tap, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset}, .user_data = (void *)&((qk_tap_dance_dual_role_t){kc, layer}), }
72 .user_data = (void *)&((qk_tap_dance_dual_role_t) { kc, layer }), \
73 }
74 66
75#define ACTION_TAP_DANCE_FN(user_fn) { \ 67# define ACTION_TAP_DANCE_FN(user_fn) \
76 .fn = { NULL, user_fn, NULL }, \ 68 { .fn = {NULL, user_fn, NULL}, .user_data = NULL, }
77 .user_data = NULL, \
78 }
79 69
80#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \ 70# define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) \
81 .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \ 71 { .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset}, .user_data = NULL, }
82 .user_data = NULL, \
83 }
84 72
85#define ACTION_TAP_DANCE_FN_ADVANCED_TIME(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, tap_specific_tapping_term) { \ 73# define ACTION_TAP_DANCE_FN_ADVANCED_TIME(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, tap_specific_tapping_term) \
86 .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \ 74 { .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset}, .user_data = NULL, .custom_tapping_term = tap_specific_tapping_term, }
87 .user_data = NULL, \
88 .custom_tapping_term = tap_specific_tapping_term, \
89 }
90 75
91extern qk_tap_dance_action_t tap_dance_actions[]; 76extern qk_tap_dance_action_t tap_dance_actions[];
92 77
@@ -94,20 +79,20 @@ extern qk_tap_dance_action_t tap_dance_actions[];
94 79
95void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record); 80void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record);
96bool process_tap_dance(uint16_t keycode, keyrecord_t *record); 81bool process_tap_dance(uint16_t keycode, keyrecord_t *record);
97void matrix_scan_tap_dance (void); 82void matrix_scan_tap_dance(void);
98void reset_tap_dance (qk_tap_dance_state_t *state); 83void reset_tap_dance(qk_tap_dance_state_t *state);
99 84
100void qk_tap_dance_pair_on_each_tap (qk_tap_dance_state_t *state, void *user_data); 85void qk_tap_dance_pair_on_each_tap(qk_tap_dance_state_t *state, void *user_data);
101void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data); 86void qk_tap_dance_pair_finished(qk_tap_dance_state_t *state, void *user_data);
102void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data); 87void qk_tap_dance_pair_reset(qk_tap_dance_state_t *state, void *user_data);
103 88
104void qk_tap_dance_dual_role_on_each_tap (qk_tap_dance_state_t *state, void *user_data); 89void qk_tap_dance_dual_role_on_each_tap(qk_tap_dance_state_t *state, void *user_data);
105void qk_tap_dance_dual_role_finished (qk_tap_dance_state_t *state, void *user_data); 90void qk_tap_dance_dual_role_finished(qk_tap_dance_state_t *state, void *user_data);
106void qk_tap_dance_dual_role_reset (qk_tap_dance_state_t *state, void *user_data); 91void qk_tap_dance_dual_role_reset(qk_tap_dance_state_t *state, void *user_data);
107 92
108#else 93#else
109 94
110#define TD(n) KC_NO 95# define TD(n) KC_NO
111 96
112#endif 97#endif
113 98