diff options
Diffstat (limited to 'quantum/matrix.c')
-rw-r--r-- | quantum/matrix.c | 79 |
1 files changed, 3 insertions, 76 deletions
diff --git a/quantum/matrix.c b/quantum/matrix.c index 9b5ce33d2..292171490 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c | |||
@@ -25,17 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
25 | #include "quantum.h" | 25 | #include "quantum.h" |
26 | 26 | ||
27 | 27 | ||
28 | /* Set 0 if debouncing isn't needed */ | ||
29 | |||
30 | #ifndef DEBOUNCING_DELAY | ||
31 | # define DEBOUNCING_DELAY 5 | ||
32 | #endif | ||
33 | |||
34 | #if (DEBOUNCING_DELAY > 0) | ||
35 | static uint16_t debouncing_time; | ||
36 | static bool debouncing = false; | ||
37 | #endif | ||
38 | |||
39 | #if (MATRIX_COLS <= 8) | 28 | #if (MATRIX_COLS <= 8) |
40 | # define print_matrix_header() print("\nr/c 01234567\n") | 29 | # define print_matrix_header() print("\nr/c 01234567\n") |
41 | # define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) | 30 | # define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) |
@@ -65,8 +54,6 @@ static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; | |||
65 | /* matrix state(1:on, 0:off) */ | 54 | /* matrix state(1:on, 0:off) */ |
66 | static matrix_row_t matrix[MATRIX_ROWS]; | 55 | static matrix_row_t matrix[MATRIX_ROWS]; |
67 | 56 | ||
68 | static matrix_row_t matrix_debouncing[MATRIX_ROWS]; | ||
69 | |||
70 | 57 | ||
71 | #if (DIODE_DIRECTION == COL2ROW) | 58 | #if (DIODE_DIRECTION == COL2ROW) |
72 | static void init_cols(void); | 59 | static void init_cols(void); |
@@ -120,30 +107,6 @@ uint8_t matrix_cols(void) { | |||
120 | return MATRIX_COLS; | 107 | return MATRIX_COLS; |
121 | } | 108 | } |
122 | 109 | ||
123 | // void matrix_power_up(void) { | ||
124 | // #if (DIODE_DIRECTION == COL2ROW) | ||
125 | // for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { | ||
126 | // /* DDRxn */ | ||
127 | // _SFR_IO8((row_pins[r] >> 4) + 1) |= _BV(row_pins[r] & 0xF); | ||
128 | // toggle_row(r); | ||
129 | // } | ||
130 | // for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { | ||
131 | // /* PORTxn */ | ||
132 | // _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF); | ||
133 | // } | ||
134 | // #elif (DIODE_DIRECTION == ROW2COL) | ||
135 | // for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { | ||
136 | // /* DDRxn */ | ||
137 | // _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF); | ||
138 | // toggle_col(c); | ||
139 | // } | ||
140 | // for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { | ||
141 | // /* PORTxn */ | ||
142 | // _SFR_IO8((row_pins[r] >> 4) + 2) |= _BV(row_pins[r] & 0xF); | ||
143 | // } | ||
144 | // #endif | ||
145 | // } | ||
146 | |||
147 | void matrix_init(void) { | 110 | void matrix_init(void) { |
148 | 111 | ||
149 | // initialize row and col | 112 | // initialize row and col |
@@ -158,7 +121,6 @@ void matrix_init(void) { | |||
158 | // initialize matrix state: all keys off | 121 | // initialize matrix state: all keys off |
159 | for (uint8_t i=0; i < MATRIX_ROWS; i++) { | 122 | for (uint8_t i=0; i < MATRIX_ROWS; i++) { |
160 | matrix[i] = 0; | 123 | matrix[i] = 0; |
161 | matrix_debouncing[i] = 0; | ||
162 | } | 124 | } |
163 | 125 | ||
164 | matrix_init_quantum(); | 126 | matrix_init_quantum(); |
@@ -168,59 +130,24 @@ uint8_t matrix_scan(void) | |||
168 | { | 130 | { |
169 | 131 | ||
170 | #if (DIODE_DIRECTION == COL2ROW) | 132 | #if (DIODE_DIRECTION == COL2ROW) |
171 | |||
172 | // Set row, read cols | 133 | // Set row, read cols |
173 | for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { | 134 | for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { |
174 | # if (DEBOUNCING_DELAY > 0) | 135 | read_cols_on_row(matrix, current_row); |
175 | bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row); | ||
176 | |||
177 | if (matrix_changed) { | ||
178 | debouncing = true; | ||
179 | debouncing_time = timer_read(); | ||
180 | } | ||
181 | |||
182 | # else | ||
183 | read_cols_on_row(matrix, current_row); | ||
184 | # endif | ||
185 | |||
186 | } | 136 | } |
187 | |||
188 | #elif (DIODE_DIRECTION == ROW2COL) | 137 | #elif (DIODE_DIRECTION == ROW2COL) |
189 | |||
190 | // Set col, read rows | 138 | // Set col, read rows |
191 | for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { | 139 | for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { |
192 | # if (DEBOUNCING_DELAY > 0) | 140 | read_rows_on_col(matrix, current_col); |
193 | bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col); | ||
194 | if (matrix_changed) { | ||
195 | debouncing = true; | ||
196 | debouncing_time = timer_read(); | ||
197 | } | ||
198 | # else | ||
199 | read_rows_on_col(matrix, current_col); | ||
200 | # endif | ||
201 | |||
202 | } | 141 | } |
203 | |||
204 | #endif | 142 | #endif |
205 | 143 | ||
206 | # if (DEBOUNCING_DELAY > 0) | ||
207 | if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { | ||
208 | for (uint8_t i = 0; i < MATRIX_ROWS; i++) { | ||
209 | matrix[i] = matrix_debouncing[i]; | ||
210 | } | ||
211 | debouncing = false; | ||
212 | } | ||
213 | # endif | ||
214 | |||
215 | matrix_scan_quantum(); | 144 | matrix_scan_quantum(); |
216 | return 1; | 145 | return 1; |
217 | } | 146 | } |
218 | 147 | ||
148 | //Deprecated. | ||
219 | bool matrix_is_modified(void) | 149 | bool matrix_is_modified(void) |
220 | { | 150 | { |
221 | #if (DEBOUNCING_DELAY > 0) | ||
222 | if (debouncing) return false; | ||
223 | #endif | ||
224 | return true; | 151 | return true; |
225 | } | 152 | } |
226 | 153 | ||