Skip to content

fix(pa01): Optimize key matrix polling with split-cycle scanning (v2.11)#7409

Open
richardclli wants to merge 5 commits into
2.11from
richardclli/fix-pa01-keyboard-scanning-2.11
Open

fix(pa01): Optimize key matrix polling with split-cycle scanning (v2.11)#7409
richardclli wants to merge 5 commits into
2.11from
richardclli/fix-pa01-keyboard-scanning-2.11

Conversation

@richardclli
Copy link
Copy Markdown
Member

V2.11 version of #7405

…interrupt-driven caching

Split the 4-column matrix scan across 4 poll cycles (1 I2C read + 1 write per cycle
instead of 4 reads + 4 writes). The output for each column is set in one cycle and
read in the next (10ms later), eliminating the 10us settling delay.

Interrupt-driven caching: when no pin-change interrupt occurs between polls, the
I2C read is skipped and per-column cached results are reused. A forced full rescan
every 250ms catches key releases that may not trigger an interrupt.
… to bus-only reset

Add _track_i2c_error() helper used by both read and write paths.
_Recover_i2c now only resets the I2C bus (deinit/init) — the
AW9523B retains its register state, so chip re-config is unnecessary.
The bootloader calls pollKeys() only once (bl_keys.cpp:9) to detect held
trims for entry condition. Split-scan approach needs 4 calls to populate
all cached columns, so bootloader never sees the trims.

Add #if defined(BOOT) guard: bootloader path does a synchronous 4-column
scan in one call (same as original code). Firmware path keeps the split-scan
optimization.
@richardclli richardclli added this to the 2.11.7 milestone May 29, 2026
@richardclli richardclli self-assigned this May 29, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 29, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b596822a-71d0-47c2-b0c5-16fc87996e8e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch richardclli/fix-pa01-keyboard-scanning-2.11

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@pfeerick pfeerick added the backport/2.11 To be backported to a 2.11 release also. label Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport/2.11 To be backported to a 2.11 release also.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants