Explorar o código

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.
Nikolaus Wittenstein %!s(int64=8) %!d(string=hai) anos
pai
achega
8cbf61c919
Modificáronse 3 ficheiros con 12 adicións e 8 borrados
  1. 4 2
      quantum/config_common.h
  2. 7 5
      quantum/matrix.c
  3. 1 1
      quantum/template/config.h

+ 4 - 2
quantum/config_common.h

@@ -2,8 +2,10 @@
 #define CONFIG_DEFINITIONS_H
 #define CONFIG_DEFINITIONS_H
 
 
 /* diode directions */
 /* diode directions */
-#define COL2ROW 0
-#define ROW2COL 1
+#define COL2ROW       0
+#define ROW2COL       1
+#define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */
+
 /* I/O pins */
 /* I/O pins */
 #ifndef F0
 #ifndef F0
     #define B0 0x30
     #define B0 0x30

+ 7 - 5
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[];
     extern const matrix_row_t matrix_mask[];
 #endif
 #endif
 
 
+#if (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
 static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
 static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
 static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
 static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+#endif
 
 
 /* matrix state(1:on, 0:off) */
 /* matrix state(1:on, 0:off) */
 static matrix_row_t matrix[MATRIX_ROWS];
 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 unselect_rows(void);
     static void select_row(uint8_t row);
     static void select_row(uint8_t row);
     static void unselect_row(uint8_t row);
     static void unselect_row(uint8_t row);
-#else // ROW2COL
+#elif (DIODE_DIRECTION == ROW2COL)
     static void init_rows(void);
     static void init_rows(void);
     static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
     static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
     static void unselect_cols(void);
     static void unselect_cols(void);
@@ -132,7 +134,7 @@ uint8_t matrix_cols(void) {
 //         /* PORTxn */
 //         /* PORTxn */
 //         _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF);
 //         _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) {
 //     for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) {
 //         /* DDRxn */
 //         /* DDRxn */
 //         _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF);
 //         _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF);
@@ -157,7 +159,7 @@ void matrix_init(void) {
 #if (DIODE_DIRECTION == COL2ROW)
 #if (DIODE_DIRECTION == COL2ROW)
     unselect_rows();
     unselect_rows();
     init_cols();
     init_cols();
-#else // ROW2COL
+#elif (DIODE_DIRECTION == ROW2COL)
     unselect_cols();
     unselect_cols();
     init_rows();
     init_rows();
 #endif
 #endif
@@ -192,7 +194,7 @@ uint8_t matrix_scan(void)
 
 
     }
     }
 
 
-#else // ROW2COL
+#elif (DIODE_DIRECTION == ROW2COL)
 
 
     // Set col, read rows
     // Set col, read rows
     for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
     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)
 static void init_rows(void)
 {
 {

+ 1 - 1
quantum/template/config.h

@@ -46,7 +46,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MATRIX_COL_PINS { F1, F0, B0 }
 #define MATRIX_COL_PINS { F1, F0, B0 }
 #define UNUSED_PINS
 #define UNUSED_PINS
 
 
-/* COL2ROW or ROW2COL */
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
 #define DIODE_DIRECTION COL2ROW
 #define DIODE_DIRECTION COL2ROW
  
  
 // #define BACKLIGHT_PIN B7
 // #define BACKLIGHT_PIN B7