diff options
| author | Seebs <seebs@seebs.net> | 2017-11-18 15:39:50 -0600 |
|---|---|---|
| committer | Jack Humbert <jack.humb@gmail.com> | 2017-11-21 00:20:52 -0500 |
| commit | 39d3d92364039b278f8e4db0b1c63eb057ab8016 (patch) | |
| tree | 101db1ebcc9ea863cf4dc445d44abe42cbc1750c /tmk_core/common/keyboard.c | |
| parent | b669d115c2969a58f0ae00f6ae5c2290dba44c03 (diff) | |
| download | qmk_firmware-39d3d92364039b278f8e4db0b1c63eb057ab8016.tar.gz qmk_firmware-39d3d92364039b278f8e4db0b1c63eb057ab8016.zip | |
Allow multiple process_record() calls per scan
This is particularly relevant for, e.g., the ergodox EZ and
other keyboards with slow scan rates. Without changing the API or
behavior of individual process_record() calls, we allow a
configuration flag to make multiple calls in a single scan.
This will probably have miniscule effects on non-steno users,
and it's not enabled by default for any keyboards. Added note
about it to ergodox README.
Signed-off-by: seebs <seebs@seebs.net>
Diffstat (limited to 'tmk_core/common/keyboard.c')
| -rw-r--r-- | tmk_core/common/keyboard.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index fd2cf74f5..c962a721c 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c | |||
| @@ -177,6 +177,9 @@ void keyboard_task(void) | |||
| 177 | static uint8_t led_status = 0; | 177 | static uint8_t led_status = 0; |
| 178 | matrix_row_t matrix_row = 0; | 178 | matrix_row_t matrix_row = 0; |
| 179 | matrix_row_t matrix_change = 0; | 179 | matrix_row_t matrix_change = 0; |
| 180 | #ifdef QMK_KEYS_PER_SCAN | ||
| 181 | uint8_t keys_processed = 0; | ||
| 182 | #endif | ||
| 180 | 183 | ||
| 181 | matrix_scan(); | 184 | matrix_scan(); |
| 182 | if (is_keyboard_master()) { | 185 | if (is_keyboard_master()) { |
| @@ -208,6 +211,10 @@ void keyboard_task(void) | |||
| 208 | }); | 211 | }); |
| 209 | // record a processed key | 212 | // record a processed key |
| 210 | matrix_prev[r] ^= ((matrix_row_t)1<<c); | 213 | matrix_prev[r] ^= ((matrix_row_t)1<<c); |
| 214 | #ifdef QMK_KEYS_PER_SCAN | ||
| 215 | // only jump out if we have processed "enough" keys. | ||
| 216 | if (++keys_processed >= QMK_KEYS_PER_SCAN) | ||
| 217 | #endif | ||
| 211 | // process a key per task call | 218 | // process a key per task call |
| 212 | goto MATRIX_LOOP_END; | 219 | goto MATRIX_LOOP_END; |
| 213 | } | 220 | } |
| @@ -216,6 +223,10 @@ void keyboard_task(void) | |||
| 216 | } | 223 | } |
| 217 | } | 224 | } |
| 218 | // call with pseudo tick event when no real key event. | 225 | // call with pseudo tick event when no real key event. |
| 226 | #ifdef QMK_KEYS_PER_SCAN | ||
| 227 | // we can get here with some keys processed now. | ||
| 228 | if (!keys_processed) | ||
| 229 | #endif | ||
| 219 | action_exec(TICK); | 230 | action_exec(TICK); |
| 220 | 231 | ||
| 221 | MATRIX_LOOP_END: | 232 | MATRIX_LOOP_END: |
