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 | |
parent | b669d115c2969a58f0ae00f6ae5c2290dba44c03 (diff) |
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>
-rw-r--r-- | docs/config_options.md | 9 | ||||
-rw-r--r-- | keyboards/ergodox_ez/readme.md | 5 | ||||
-rw-r--r-- | tmk_core/common/keyboard.c | 11 |
3 files changed, 25 insertions, 0 deletions
diff --git a/docs/config_options.md b/docs/config_options.md index faa9c64814..a3a918be7f 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -123,6 +123,15 @@ If you define these options you will enable the associated feature, which may in * how many taps before oneshot toggle is triggered * `#define IGNORE_MOD_TAP_INTERRUPT` * makes it possible to do rolling combos (zx) with keys that convert to other keys on hold +* `#define QMK_KEYS_PER_SCAN 4` + * Allows sending more than one key per scan. By default, only one key event gets + sent via `process_record()` per scan. This has little impact on most typing, but + if you're doing a lot of chords, or your scan rate is slow to begin with, you can + have some delay in processing key events. Each press and release is a separate + event. For a keyboard with 1ms or so scan times, even a very fast typist isn't + going to produce the 500 keystrokes a second needed to actually get more than a + few ms of delay from this. But if you're doing chording on something with 3-4ms + scan times? You probably want this. ### RGB Light Configuration diff --git a/keyboards/ergodox_ez/readme.md b/keyboards/ergodox_ez/readme.md index f025c5991d..ffde65c88b 100644 --- a/keyboards/ergodox_ez/readme.md +++ b/keyboards/ergodox_ez/readme.md @@ -31,3 +31,8 @@ To flash with ´teensy-loader-cli´: - Press the Reset button by inserting a paperclip gently into the reset hole in the top right corder. + +## Settings + +You may want to enable QMK_KEYS_PER_SCAN because the Ergodox has a relatively +slow scan rate. diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index fd2cf74f57..c962a721cb 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -177,6 +177,9 @@ void keyboard_task(void) static uint8_t led_status = 0; matrix_row_t matrix_row = 0; matrix_row_t matrix_change = 0; +#ifdef QMK_KEYS_PER_SCAN + uint8_t keys_processed = 0; +#endif matrix_scan(); if (is_keyboard_master()) { @@ -208,6 +211,10 @@ void keyboard_task(void) }); // record a processed key matrix_prev[r] ^= ((matrix_row_t)1<<c); +#ifdef QMK_KEYS_PER_SCAN + // only jump out if we have processed "enough" keys. + if (++keys_processed >= QMK_KEYS_PER_SCAN) +#endif // process a key per task call goto MATRIX_LOOP_END; } @@ -216,6 +223,10 @@ void keyboard_task(void) } } // call with pseudo tick event when no real key event. +#ifdef QMK_KEYS_PER_SCAN + // we can get here with some keys processed now. + if (!keys_processed) +#endif action_exec(TICK); MATRIX_LOOP_END: |