summaryrefslogtreecommitdiffstats
path: root/quantum/matrix.c
diff options
context:
space:
mode:
authorNikolaus Wittenstein <nikolaus.wittenstein@gmail.com>2017-02-06 01:42:00 +0100
committerNikolaus Wittenstein <nikolaus.wittenstein@gmail.com>2017-02-06 01:47:33 +0100
commit8cbf61c91923e5399b158f7f9258096cb0089ce2 (patch)
treeeb525287e392da707d5319296da1c8b6aaf815ef /quantum/matrix.c
parentd961c80df2391631f7b3f46afa595ce93f51f217 (diff)
downloadqmk_firmware-8cbf61c91923e5399b158f7f9258096cb0089ce2.tar.gz
qmk_firmware-8cbf61c91923e5399b158f7f9258096cb0089ce2.tar.xz
Add new DIODE_DIRECTION option
The previous two options were COL2ROW, ROW2COL; this adds CUSTOM_MATRIX to disable the built-in matrix scanning code. Most notably, this obviates the need to set MATRIX_ROW_PINS or MATRIX_COL_PINS.
Diffstat (limited to 'quantum/matrix.c')
-rw-r--r--quantum/matrix.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/quantum/matrix.c b/quantum/matrix.c
index fd312bffb..ac523482a 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -60,8 +60,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
extern const matrix_row_t matrix_mask[];
#endif
+#if (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+#endif
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
@@ -75,7 +77,7 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS];
static void unselect_rows(void);
static void select_row(uint8_t row);
static void unselect_row(uint8_t row);
-#else // ROW2COL
+#elif (DIODE_DIRECTION == ROW2COL)
static void init_rows(void);
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
static void unselect_cols(void);
@@ -132,7 +134,7 @@ uint8_t matrix_cols(void) {
// /* PORTxn */
// _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF);
// }
-// #else
+// #elif (DIODE_DIRECTION == ROW2COL)
// for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) {
// /* DDRxn */
// _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF);
@@ -157,7 +159,7 @@ void matrix_init(void) {
#if (DIODE_DIRECTION == COL2ROW)
unselect_rows();
init_cols();
-#else // ROW2COL
+#elif (DIODE_DIRECTION == ROW2COL)
unselect_cols();
init_rows();
#endif
@@ -192,7 +194,7 @@ uint8_t matrix_scan(void)
}
-#else // ROW2COL
+#elif (DIODE_DIRECTION == ROW2COL)
// Set col, read rows
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
@@ -334,7 +336,7 @@ static void unselect_rows(void)
}
}
-#else // ROW2COL
+#elif (DIODE_DIRECTION == ROW2COL)
static void init_rows(void)
{