X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=quantum%2Fmatrix.c;h=7ccac3533195d8898b211a29f727824681520816;hb=a25dd58bc56b0c4010673723ac44eaff914979bb;hp=2dab6ae941e0cf8320bb74b122b6c9151f2bdfcf;hpb=a4ff9f256738cf637553e7840d53f778d791fb6f;p=qmk_firmware.git
diff --git a/quantum/matrix.c b/quantum/matrix.c
index 2dab6ae94..7ccac3533 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -1,6 +1,5 @@
/*
-Copyright 2012 Jun Wako
-Generated by planckkeyboard.com (2014 Jack Humbert)
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,170 +14,118 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-
-/*
- * scan matrix
- */
#include
#include
-#include
-#include
+#include "wait.h"
#include "print.h"
#include "debug.h"
#include "util.h"
#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
-#ifndef DEBOUNCE
-# define DEBOUNCE 10
+#ifdef DIRECT_PINS
+static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
+#elif (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
#endif
-static uint8_t debouncing = DEBOUNCE;
/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
+static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
-#if DIODE_DIRECTION == ROW2COL
- static matrix_row_t matrix_reversed[MATRIX_COLS];
- static matrix_row_t matrix_reversed_debouncing[MATRIX_COLS];
-#endif
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
-static matrix_row_t read_cols(void);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
__attribute__ ((weak))
void matrix_init_kb(void) {
-
+ matrix_init_user();
}
__attribute__ ((weak))
void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
}
inline
-uint8_t matrix_rows(void)
-{
+uint8_t matrix_rows(void) {
return MATRIX_ROWS;
}
inline
-uint8_t matrix_cols(void)
-{
+uint8_t matrix_cols(void) {
return MATRIX_COLS;
}
-void matrix_init(void)
-{
- // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
- MCUCR |= (1<> y) << x;
- }
- matrix[y] = row;
- }
-#endif
-
- matrix_scan_kb();
-
- return 1;
-}
-
+//Deprecated.
bool matrix_is_modified(void)
{
- if (debouncing) return false;
+ if (debounce_active()) return false;
return true;
}
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
- return (matrix[row] & ((matrix_row_t)1