diff options
Diffstat (limited to 'src/keymat.c')
| -rw-r--r-- | src/keymat.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/keymat.c b/src/keymat.c index f511a6b..ebdba3a 100644 --- a/src/keymat.c +++ b/src/keymat.c @@ -10,11 +10,11 @@ static const uint keymat_row_pins[] = { 4, 5, 6, 7 }; static const uint keymat_col_pins[] = { 29, 28, 27, 26, 22, 20 }; -static_assert(ARRLEN(keymat_row_pins) == KEY_ROWS); +static_assert(ARRLEN(keymat_row_pins) == KEY_ROWS_HALF); static_assert(ARRLEN(keymat_col_pins) == KEY_COLS); -bool keymat_prev[KEY_ROWS * 2][KEY_COLS]; -bool keymat[KEY_ROWS * 2][KEY_COLS]; +bool keymat_prev[KEY_ROWS][KEY_COLS]; +bool keymat[KEY_ROWS][KEY_COLS]; void keymat_init(void) @@ -27,22 +27,26 @@ keymat_init(void) gpio_pull_up(keymat_col_pins[x]); } - for (y = 0; y < KEY_ROWS; y++) { + for (y = 0; y < KEY_ROWS_HALF; y++) { gpio_init(keymat_row_pins[y]); gpio_set_dir(keymat_row_pins[y], GPIO_OUT); } } void +keymat_next(void) +{ + memcpy(keymat_prev, keymat, sizeof(keymat)); +} + +void keymat_scan(void) { bool (*keymat_half)[KEY_COLS]; uint x, y; - memcpy(keymat_prev, keymat, sizeof(keymat)); - keymat_half = KEYMAT_HALF(SPLIT_SIDE); - for (y = 0; y < KEY_ROWS; y++) { + for (y = 0; y < KEY_ROWS_HALF; y++) { gpio_put(keymat_row_pins[y], 0); busy_wait_us(5); for (x = 0; x < KEY_COLS; x++) @@ -61,7 +65,7 @@ keymat_encode_half(int side) mask = 0; keymat_half = KEYMAT_HALF(side); - for (y = 0; y < KEY_ROWS; y++) { + for (y = 0; y < KEY_ROWS_HALF; y++) { for (x = 0; x < KEY_COLS; x++) { if (keymat_half[y][x]) mask |= 1 << (y * KEY_COLS + x); @@ -78,7 +82,7 @@ keymat_decode_half(int side, uint32_t mask) uint x, y; keymat_half = KEYMAT_HALF(side); - for (y = 0; y < KEY_ROWS; y++) { + for (y = 0; y < KEY_ROWS_HALF; y++) { for (x = 0; x < KEY_COLS; x++) { keymat_half[y][x] = (mask >> (y * KEY_COLS + x)) & 1; } |
