aboutsummaryrefslogtreecommitdiff
path: root/keyboards/rgbkb/mun/matrix.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/rgbkb/mun/matrix.c')
-rw-r--r--keyboards/rgbkb/mun/matrix.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/keyboards/rgbkb/mun/matrix.c b/keyboards/rgbkb/mun/matrix.c
index b859847f1..2472d217c 100644
--- a/keyboards/rgbkb/mun/matrix.c
+++ b/keyboards/rgbkb/mun/matrix.c
@@ -11,7 +11,19 @@
11#include "atomic_util.h" 11#include "atomic_util.h"
12#include "gpio.h" 12#include "gpio.h"
13 13
14static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; 14#define ROWS_PER_HAND (MATRIX_ROWS / 2)
15static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
16static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
17
18void matrix_init_pins(void) {
19 for (size_t i = 0; i < MATRIX_COLS; i++) {
20 setPinInputHigh(col_pins[i]);
21 }
22 for (size_t i = 0; i < ROWS_PER_HAND; i++) {
23 setPinOutput(row_pins[i]);
24 writePinHigh(row_pins[i]);
25 }
26}
15 27
16void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { 28void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
17 /* Drive row pin low. */ 29 /* Drive row pin low. */
@@ -22,15 +34,17 @@ void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
22 uint16_t porta = palReadPort(GPIOA); 34 uint16_t porta = palReadPort(GPIOA);
23 uint16_t portb = palReadPort(GPIOB); 35 uint16_t portb = palReadPort(GPIOB);
24 36
37// clang-format off
25 /* Order of pins on the mun is: A0, B11, B0, B10, B12, B2, A8 38 /* Order of pins on the mun is: A0, B11, B0, B10, B12, B2, A8
26 Pin is active low, therefore we have to invert the result. */ 39 Pin is active low, therefore we have to invert the result. */
27 matrix_row_t cols = ~(((porta & (0x1 << 0)) >> 0) // A0 (0) 40 matrix_row_t cols = ~(((porta & (0x1 << 0)) >> 0) // A0 (0)
28 | ((portb & (0x1 << 11)) >> 10) // B11 (1) 41 | ((portb & (0x1 << 11)) >> 10) // B11 (1)
29 | ((portb & (0x1 << 0)) << 2) // B0 (2) 42 | ((portb & (0x1 << 0)) << 2) // B0 (2)
30 | ((portb & (0x1 << 10)) >> 7) // B10 (3) 43 | ((portb & (0x1 << 10)) >> 7) // B10 (3)
31 | ((portb & (0x1 << 12)) >> 8) // B12 (4) 44 | ((portb & (0x1 << 12)) >> 8) // B12 (4)
32 | ((portb & (0x1 << 2)) << 3) // B2 (5) 45 | ((portb & (0x1 << 2)) << 3) // B2 (5)
33 | ((porta & (0x1 << 8)) >> 2)); // A8 (6) 46 | ((porta & (0x1 << 8)) >> 2)); // A8 (6)
47// clang-format on
34 48
35 /* Reverse the order of columns for left hand as the board is flipped. */ 49 /* Reverse the order of columns for left hand as the board is flipped. */
36 // if (isLeftHand) { 50 // if (isLeftHand) {
@@ -50,7 +64,7 @@ void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
50 64
51 /* Drive row pin high again. */ 65 /* Drive row pin high again. */
52 ATOMIC_BLOCK_FORCEON { writePinHigh(row_pins[current_row]); } 66 ATOMIC_BLOCK_FORCEON { writePinHigh(row_pins[current_row]); }
53 matrix_output_unselect_delay(current_row, row_pins[current_row] != 0); 67 matrix_output_unselect_delay(current_row, cols != 0);
54} 68}
55 69
56#if defined(BUSY_WAIT) 70#if defined(BUSY_WAIT)