aboutsummaryrefslogtreecommitdiff
path: root/quantum/matrix_common.c
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2020-01-04 20:29:44 +0000
committerGitHub <noreply@github.com>2020-01-04 20:29:44 +0000
commitdcb7ca3f7910420cfa85ba659d48285b3633a978 (patch)
treed571ff362775734c533ed5b9d1982c62a609d20b /quantum/matrix_common.c
parentc1feeaa57f28c781e39996e5d4eea3a31f083439 (diff)
downloadqmk_firmware-dcb7ca3f7910420cfa85ba659d48285b3633a978.tar.gz
qmk_firmware-dcb7ca3f7910420cfa85ba659d48285b3633a978.zip
Move some common matrix code to a common location (#7699)
* Move some common matrix code to a common location * Refactor some 'custom_matrix_helper' logic to use custom matrix lite * Fix build for kinesis/stapelberg - abuse of vpath was picking up matrix.c from core when custom matrix was enabled * Add validation for CUSTOM_MATRIX
Diffstat (limited to 'quantum/matrix_common.c')
-rw-r--r--quantum/matrix_common.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/quantum/matrix_common.c b/quantum/matrix_common.c
new file mode 100644
index 000000000..22704e8ee
--- /dev/null
+++ b/quantum/matrix_common.c
@@ -0,0 +1,59 @@
1#include "matrix.h"
2#include "debounce.h"
3#include "print.h"
4#include "debug.h"
5
6// user-defined overridable functions
7
8__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
9
10__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
11
12__attribute__((weak)) void matrix_init_user(void) {}
13
14__attribute__((weak)) void matrix_scan_user(void) {}
15
16// helper functions
17
18inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
19
20inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
21
22// Deprecated.
23bool matrix_is_modified(void) {
24 if (debounce_active()) return false;
25 return true;
26}
27
28#if (MATRIX_COLS <= 8)
29# define print_matrix_header() print("\nr/c 01234567\n")
30# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
31# define matrix_bitpop(row) bitpop(matrix_get_row(row))
32#elif (MATRIX_COLS <= 16)
33# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
34# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
35# define matrix_bitpop(row) bitpop16(matrix_get_row(row))
36#elif (MATRIX_COLS <= 32)
37# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
38# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
39# define matrix_bitpop(row) bitpop32(matrix_get_row(row))
40#endif
41
42void matrix_print(void) {
43 print_matrix_header();
44
45 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
46 phex(row);
47 print(": ");
48 print_matrix_row(row);
49 print("\n");
50 }
51}
52
53uint8_t matrix_key_count(void) {
54 uint8_t count = 0;
55 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
56 count += matrix_bitpop(i);
57 }
58 return count;
59}