X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=keyboard%2Fhid_liber%2Fmatrix.c;h=adf6ac8c428573bfadb558a74a0683e7ffcff084;hb=c61210cfff21f88c25ad102dcd3afe58ce251c96;hp=8e3739197dc6b7e5e09b26c9d95b63f94808ee9d;hpb=98052b8afd52c93e2d5a1e6acd6afd6e6d2a288c;p=max%2Ftmk_keyboard.git diff --git a/keyboard/hid_liber/matrix.c b/keyboard/hid_liber/matrix.c index 8e373919..adf6ac8c 100644 --- a/keyboard/hid_liber/matrix.c +++ b/keyboard/hid_liber/matrix.c @@ -19,19 +19,15 @@ #ifndef DEBOUNCE -# define DEBOUNCE 5 +# define DEBOUNCE 0 #endif 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 NROW 18 -#define NCOL 8 #define _DDRA (uint8_t *const)&DDRA #define _DDRB (uint8_t *const)&DDRB #define _DDRC (uint8_t *const)&DDRC @@ -64,35 +60,39 @@ static matrix_row_t _matrix1[MATRIX_ROWS]; /* Specifies the ports and pin numbers for the rows */ static -uint8_t *const row_ddr[NROW] = { _DDRB, _DDRB, - _DDRC, _DDRC, - _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, - _DDRF, _DDRF, _DDRF, _DDRF, _DDRF, _DDRF}; +uint8_t *const row_ddr[MATRIX_ROWS] = { + _DDRB, _DDRB, + _DDRC, _DDRC, + _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, _DDRD, + _DDRF, _DDRF, _DDRF, _DDRF, _DDRF, _DDRF}; static -uint8_t *const row_port[NROW] = { _PORTB, _PORTB, - _PORTC, _PORTC, - _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, - _PORTF, _PORTF, _PORTF, _PORTF, _PORTF, _PORTF}; +uint8_t *const row_port[MATRIX_ROWS] = { + _PORTB, _PORTB, + _PORTC, _PORTC, + _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, _PORTD, + _PORTF, _PORTF, _PORTF, _PORTF, _PORTF, _PORTF}; static -uint8_t *const row_pin[NROW] = { _PINB, _PINB, - _PINC, _PINC, - _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, - _PINF, _PINF, _PINF, _PINF, _PINF, _PINF}; +uint8_t *const row_pin[MATRIX_ROWS] = { + _PINB, _PINB, + _PINC, _PINC, + _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, _PIND, + _PINF, _PINF, _PINF, _PINF, _PINF, _PINF}; static -const uint8_t row_bit[NROW] = { _BIT4, _BIT7, - _BIT6, _BIT7, - _BIT0, _BIT1, _BIT2, _BIT3, _BIT4, _BIT5, _BIT6, _BIT7, - _BIT0, _BIT1, _BIT4, _BIT5, _BIT6, _BIT7}; +const uint8_t row_bit[MATRIX_ROWS] = { + _BIT4, _BIT7, + _BIT6, _BIT7, + _BIT0, _BIT1, _BIT2, _BIT3, _BIT4, _BIT5, _BIT6, _BIT7, + _BIT0, _BIT1, _BIT4, _BIT5, _BIT6, _BIT7}; static const uint8_t mask = 0x0E; /* Specifies the ports and pin numbers for the columns */ static -const uint8_t col_bit[NCOL] = { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E}; +const uint8_t col_bit[MATRIX_COLS] = { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E}; static inline void pull_column(int col) { @@ -110,7 +110,7 @@ void setup_io_pins(void) { uint8_t row; DDRB |= 0x0E; PORTB &= ~0x0E; - for(row = 0; row < NROW; row++) { + for(row = 0; row < MATRIX_ROWS; row++) { *row_ddr[row] &= ~row_bit[row]; *row_port[row] &= ~row_bit[row]; } @@ -146,30 +146,24 @@ void matrix_init(void) setup_leds(); // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00; - for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00; - matrix = _matrix0; - matrix_debounced = _matrix1; + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } } uint8_t matrix_scan(void) { - if (!debouncing) { - uint8_t *tmp = matrix_debounced; - matrix_debounced = matrix; - matrix = tmp; - } - - for (uint8_t col = 0; col < NCOL; col++) { // 0-7 + for (uint8_t col = 0; col < MATRIX_COLS; col++) { // 0-7 pull_column(col); // output hi on theline - _delay_us(1); // without this wait it won't read stable value. - for (uint8_t row = 0; row < NROW; row++) { // 0-17 - bool prev_bit = matrix[row] & (1<