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>
This commit is contained in:
parent
b669d115c2
commit
39d3d92364
3 changed files with 25 additions and 0 deletions
|
@ -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
|
* how many taps before oneshot toggle is triggered
|
||||||
* `#define IGNORE_MOD_TAP_INTERRUPT`
|
* `#define IGNORE_MOD_TAP_INTERRUPT`
|
||||||
* makes it possible to do rolling combos (zx) with keys that convert to other keys on hold
|
* 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
|
### RGB Light Configuration
|
||||||
|
|
||||||
|
|
|
@ -31,3 +31,8 @@ To flash with ´teensy-loader-cli´:
|
||||||
|
|
||||||
- Press the Reset button by inserting a paperclip gently into the reset hole
|
- Press the Reset button by inserting a paperclip gently into the reset hole
|
||||||
in the top right corder.
|
in the top right corder.
|
||||||
|
|
||||||
|
## Settings
|
||||||
|
|
||||||
|
You may want to enable QMK_KEYS_PER_SCAN because the Ergodox has a relatively
|
||||||
|
slow scan rate.
|
||||||
|
|
|
@ -177,6 +177,9 @@ void keyboard_task(void)
|
||||||
static uint8_t led_status = 0;
|
static uint8_t led_status = 0;
|
||||||
matrix_row_t matrix_row = 0;
|
matrix_row_t matrix_row = 0;
|
||||||
matrix_row_t matrix_change = 0;
|
matrix_row_t matrix_change = 0;
|
||||||
|
#ifdef QMK_KEYS_PER_SCAN
|
||||||
|
uint8_t keys_processed = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
matrix_scan();
|
matrix_scan();
|
||||||
if (is_keyboard_master()) {
|
if (is_keyboard_master()) {
|
||||||
|
@ -208,6 +211,10 @@ void keyboard_task(void)
|
||||||
});
|
});
|
||||||
// record a processed key
|
// record a processed key
|
||||||
matrix_prev[r] ^= ((matrix_row_t)1<<c);
|
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
|
// process a key per task call
|
||||||
goto MATRIX_LOOP_END;
|
goto MATRIX_LOOP_END;
|
||||||
}
|
}
|
||||||
|
@ -216,6 +223,10 @@ void keyboard_task(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// call with pseudo tick event when no real key event.
|
// 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);
|
action_exec(TICK);
|
||||||
|
|
||||||
MATRIX_LOOP_END:
|
MATRIX_LOOP_END:
|
||||||
|
|
Loading…
Reference in a new issue