diff options
Diffstat (limited to 'quantum/dynamic_macro.h')
-rw-r--r-- | quantum/dynamic_macro.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 6aae7d230..7dca30f07 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h | |||
@@ -53,6 +53,15 @@ void dynamic_macro_led_blink(void) | |||
53 | backlight_toggle(); | 53 | backlight_toggle(); |
54 | } | 54 | } |
55 | 55 | ||
56 | /* Convenience macros used for retrieving the debug info. All of them | ||
57 | * need a `direction` variable accessible at the call site. | ||
58 | */ | ||
59 | #define DYNAMIC_MACRO_CURRENT_SLOT() (direction > 0 ? 1 : 2) | ||
60 | #define DYNAMIC_MACRO_CURRENT_LENGTH(BEGIN, POINTER) \ | ||
61 | ((int)(direction * ((POINTER) - (BEGIN)))) | ||
62 | #define DYNAMIC_MACRO_CURRENT_CAPACITY(BEGIN, END2) \ | ||
63 | ((int)(direction * ((END2) - (BEGIN)) + 1)) | ||
64 | |||
56 | /** | 65 | /** |
57 | * Start recording of the dynamic macro. | 66 | * Start recording of the dynamic macro. |
58 | * | 67 | * |
@@ -62,6 +71,8 @@ void dynamic_macro_led_blink(void) | |||
62 | void dynamic_macro_record_start( | 71 | void dynamic_macro_record_start( |
63 | keyrecord_t **macro_pointer, keyrecord_t *macro_buffer) | 72 | keyrecord_t **macro_pointer, keyrecord_t *macro_buffer) |
64 | { | 73 | { |
74 | dprintln("dynamic macro recording: started"); | ||
75 | |||
65 | dynamic_macro_led_blink(); | 76 | dynamic_macro_led_blink(); |
66 | 77 | ||
67 | clear_keyboard(); | 78 | clear_keyboard(); |
@@ -79,6 +90,8 @@ void dynamic_macro_record_start( | |||
79 | void dynamic_macro_play( | 90 | void dynamic_macro_play( |
80 | keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction) | 91 | keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction) |
81 | { | 92 | { |
93 | dprintf("dynamic macro: slot %d playback\n", DYNAMIC_MACRO_CURRENT_SLOT()); | ||
94 | |||
82 | uint32_t saved_layer_state = layer_state; | 95 | uint32_t saved_layer_state = layer_state; |
83 | 96 | ||
84 | clear_keyboard(); | 97 | clear_keyboard(); |
@@ -112,6 +125,7 @@ void dynamic_macro_record_key( | |||
112 | { | 125 | { |
113 | /* If we've just started recording, ignore all the key releases. */ | 126 | /* If we've just started recording, ignore all the key releases. */ |
114 | if (!record->event.pressed && *macro_pointer == macro_buffer) { | 127 | if (!record->event.pressed && *macro_pointer == macro_buffer) { |
128 | dprintln("dynamic macro: ignoring a leading key-up event"); | ||
115 | return; | 129 | return; |
116 | } | 130 | } |
117 | 131 | ||
@@ -124,6 +138,12 @@ void dynamic_macro_record_key( | |||
124 | } else { | 138 | } else { |
125 | dynamic_macro_led_blink(); | 139 | dynamic_macro_led_blink(); |
126 | } | 140 | } |
141 | |||
142 | dprintf( | ||
143 | "dynamic macro: slot %d length: %d/%d\n", | ||
144 | DYNAMIC_MACRO_CURRENT_SLOT(), | ||
145 | DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, *macro_pointer), | ||
146 | DYNAMIC_MACRO_CURRENT_CAPACITY(macro_buffer, macro2_end)); | ||
127 | } | 147 | } |
128 | 148 | ||
129 | /** | 149 | /** |
@@ -143,9 +163,15 @@ void dynamic_macro_record_end( | |||
143 | */ | 163 | */ |
144 | while (macro_pointer != macro_buffer && | 164 | while (macro_pointer != macro_buffer && |
145 | (macro_pointer - direction)->event.pressed) { | 165 | (macro_pointer - direction)->event.pressed) { |
166 | dprintln("dynamic macro: trimming a trailing key-down event"); | ||
146 | macro_pointer -= direction; | 167 | macro_pointer -= direction; |
147 | } | 168 | } |
148 | 169 | ||
170 | dprintf( | ||
171 | "dynamic macro: slot %d saved, length: %d\n", | ||
172 | DYNAMIC_MACRO_CURRENT_SLOT(), | ||
173 | DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, macro_pointer)); | ||
174 | |||
149 | *macro_end = macro_pointer; | 175 | *macro_end = macro_pointer; |
150 | } | 176 | } |
151 | 177 | ||
@@ -264,4 +290,8 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) | |||
264 | return true; | 290 | return true; |
265 | } | 291 | } |
266 | 292 | ||
293 | #undef DYNAMIC_MACRO_CURRENT_SLOT | ||
294 | #undef DYNAMIC_MACRO_CURRENT_LENGTH | ||
295 | #undef DYNAMIC_MACRO_CURRENT_CAPACITY | ||
296 | |||
267 | #endif | 297 | #endif |