diff options
author | tmk <wakojun@gmail.com> | 2013-04-30 15:29:35 -0700 |
---|---|---|
committer | tmk <wakojun@gmail.com> | 2013-04-30 15:29:35 -0700 |
commit | a505dafe59e617844da403e2616900fecaf4a3dd (patch) | |
tree | 72bfe1436093a15ace410909700c74354a6bef54 | |
parent | f4760c822a34c338250dc47ff6d195935986bdae (diff) | |
parent | 3d503c8932b981ceb772c2e4e605607f421b49bf (diff) |
Merge pull request #30 from Wraul/phantom_debounce_fix
Fix debouncing on Phantom.
-rw-r--r-- | keyboard/phantom/matrix.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/keyboard/phantom/matrix.c b/keyboard/phantom/matrix.c index 7ea494a7e2..7b2461dcc7 100644 --- a/keyboard/phantom/matrix.c +++ b/keyboard/phantom/matrix.c @@ -24,10 +24,8 @@ static uint8_t debouncing = DEBOUNCE; // bit array of key state(1:on, 0:off) -static matrix_row_t *matrix; -static matrix_row_t *matrix_debounced; -static matrix_row_t matrix0[MATRIX_ROWS]; -static matrix_row_t matrix1[MATRIX_ROWS]; +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; #define _DDRA (uint8_t *const)&DDRA @@ -165,11 +163,9 @@ void matrix_init(void) // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix0[i] = 0; - matrix1[i] = 0; + matrix[i] = 0; + matrix_debouncing[i] = 0; } - matrix = matrix0; - matrix_debounced = matrix1; } uint8_t matrix_scan(void) @@ -178,10 +174,10 @@ uint8_t matrix_scan(void) pull_column(col); // output hi on theline _delay_us(3); // without this wait it won't read stable value. for (uint8_t row = 0; row < MATRIX_ROWS; row++) { // 0-5 - bool prev_bit = matrix[row] & ((matrix_row_t)1<<col); + bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col); bool curr_bit = !(*row_pin[row] & row_bit[row]); if (prev_bit != curr_bit) { - matrix[row] ^= ((matrix_row_t)1<<col); + matrix_debouncing[row] ^= ((matrix_row_t)1<<col); if (debouncing) { debug("bounce!: "); debug_hex(debouncing); print("\n"); } @@ -195,9 +191,9 @@ uint8_t matrix_scan(void) if (--debouncing) { _delay_ms(1); } else { - matrix_row_t *tmp = matrix_debounced; - matrix_debounced = matrix; - matrix = tmp; + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } } } @@ -213,13 +209,13 @@ bool matrix_is_modified(void) inline bool matrix_is_on(uint8_t row, uint8_t col) { - return (matrix_debounced[row] & ((matrix_row_t)1<<col)); + return (matrix[row] & ((matrix_row_t)1<<col)); } inline matrix_row_t matrix_get_row(uint8_t row) { - return matrix_debounced[row]; + return matrix[row]; } void matrix_print(void) |