summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeebs <seebs@seebs.net>2017-11-18 15:39:50 -0600
committerJack Humbert <jack.humb@gmail.com>2017-11-21 00:20:52 -0500
commit39d3d92364039b278f8e4db0b1c63eb057ab8016 (patch)
tree101db1ebcc9ea863cf4dc445d44abe42cbc1750c
parentb669d115c2969a58f0ae00f6ae5c2290dba44c03 (diff)
Allow multiple process_record() calls per scan0.5.172
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.md9
-rw-r--r--keyboards/ergodox_ez/readme.md5
-rw-r--r--tmk_core/common/keyboard.c11
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: