Skip to content

Commit

Permalink
Allow multiple process_record() calls per scan
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
seebs authored and jackhumbert committed Nov 21, 2017
1 parent b669d11 commit 39d3d92
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 0 deletions.
9 changes: 9 additions & 0 deletions docs/config_options.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
5 changes: 5 additions & 0 deletions keyboards/ergodox_ez/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
11 changes: 11 additions & 0 deletions tmk_core/common/keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down Expand Up @@ -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;
}
Expand All @@ -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:
Expand Down

0 comments on commit 39d3d92

Please sign in to comment.