summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordexter93 <d3xter93@gmail.com>2023-02-12 18:38:36 +0200
committerGitHub <noreply@github.com>2023-02-13 03:38:36 +1100
commit3ae87b155531b4529970c65c7a92a7399ab0233f (patch)
tree965b795d54fcd7859e133e9a098b6d34a109443c
parentdb1eeea4788de062eccf327da5844fc3f46844f9 (diff)
core: allow locking the matrix state (#18852)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com> Co-authored-by: Stefan Kerkmann <karlk90@pm.me> Co-authored-by: Nick Brassel <nick@tzarc.org>
-rw-r--r--quantum/keyboard.c14
-rw-r--r--quantum/matrix.h2
2 files changed, 15 insertions, 1 deletions
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index e8e3292dbc..ec2f2e4496 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -252,6 +252,14 @@ __attribute__((weak)) void keyboard_post_init_kb(void) {
keyboard_post_init_user();
}
+/** \brief matrix_can_read
+ *
+ * Allows overriding when matrix scanning operations should be executed.
+ */
+__attribute__((weak)) bool matrix_can_read(void) {
+ return true;
+}
+
/** \brief keyboard_setup
*
* FIXME: needs doc
@@ -449,10 +457,14 @@ static inline void generate_tick_event(void) {
* @return false Matrix didn't change
*/
static bool matrix_task(void) {
+ if (!matrix_can_read()) {
+ generate_tick_event();
+ return false;
+ }
+
static matrix_row_t matrix_previous[MATRIX_ROWS];
matrix_scan();
-
bool matrix_changed = false;
for (uint8_t row = 0; row < MATRIX_ROWS && !matrix_changed; row++) {
matrix_changed |= matrix_previous[row] ^ matrix_get_row(row);
diff --git a/quantum/matrix.h b/quantum/matrix.h
index 760d21e0c1..a5b628fc59 100644
--- a/quantum/matrix.h
+++ b/quantum/matrix.h
@@ -51,6 +51,8 @@ void matrix_setup(void);
void matrix_init(void);
/* scan all key states on matrix */
uint8_t matrix_scan(void);
+/* whether matrix scanning operations should be executed */
+bool matrix_can_read(void);
/* whether a switch is on */
bool matrix_is_on(uint8_t row, uint8_t col);
/* matrix state on row */