diff options
Diffstat (limited to 'keyboard/gh60/matrix.c')
-rw-r--r-- | keyboard/gh60/matrix.c | 82 |
1 files changed, 37 insertions, 45 deletions
diff --git a/keyboard/gh60/matrix.c b/keyboard/gh60/matrix.c index 83016b77a..720ac3004 100644 --- a/keyboard/gh60/matrix.c +++ b/keyboard/gh60/matrix.c @@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #ifndef DEBOUNCE -# define DEBOUNCE 10 +# define DEBOUNCE 10 #endif static uint8_t debouncing = DEBOUNCE; @@ -56,21 +56,12 @@ uint8_t matrix_cols(void) return MATRIX_COLS; } -static -void setup_leds(void) { - DDRF |= 0x00; - PORTF |= 0x00; -} - - void matrix_init(void) { // initialize row and col unselect_rows(); init_cols(); - setup_leds(); - // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; @@ -104,15 +95,16 @@ uint8_t matrix_scan(void) } } - // uint8_t layer = biton32(default_layer_state); - switch (default_layer_state) { + uint8_t layer = biton32(layer_state); + switch (layer) { case 1: - DDRF &= ~(1<<0); - PORTF &= ~(1<<0); - break; case 2: - DDRF |= (1<<0); - PORTF |= (1<<0); + DDRC |= (1<<7); + PORTC |= (1<<7); + break; + case 0: + DDRC &= ~(1<<7); + PORTC &= ~(1<<7); break; } @@ -163,28 +155,28 @@ uint8_t matrix_key_count(void) static void init_cols(void) { - DDRC &= ~(1<<6 | 1<<7); - PORTC |= (1<<6 | 1<<7); - DDRD &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<5); - PORTD |= (1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<5); + DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7); + PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7); + DDRD &= ~(1<<0); + PORTD |= (1<<0); DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7); PORTB |= (1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<7); } static matrix_row_t read_cols(void) { - return (PIND&(1<<5) ? 0 : (1<< 0)) | - (PINC&(1<<7) ? 0 : (1<< 1)) | - (PINC&(1<<6) ? 0 : (1<< 2)) | - (PIND&(1<<3) ? 0 : (1<< 3)) | - (PIND&(1<<2) ? 0 : (1<< 4)) | - (PIND&(1<<1) ? 0 : (1<< 5)) | - (PIND&(1<<0) ? 0 : (1<< 6)) | - (PINB&(1<<7) ? 0 : (1<< 7)) | - (PINB&(1<<3) ? 0 : (1<< 8)) | - (PINB&(1<<2) ? 0 : (1<< 9)) | - (PINB&(1<<1) ? 0 : (1<<10)) | - (PINB&(1<<0) ? 0 : (1<<11)); + return (PINB&(1<<0) ? 0 : (1<< 0)) | + (PINB&(1<<1) ? 0 : (1<< 1)) | + (PINB&(1<<2) ? 0 : (1<< 2)) | + (PINB&(1<<3) ? 0 : (1<< 3)) | + (PINB&(1<<7) ? 0 : (1<< 4)) | + (PIND&(1<<0) ? 0 : (1<< 5)) | + (PINF&(1<<7) ? 0 : (1<< 6)) | + (PINF&(1<<6) ? 0 : (1<< 7)) | + (PINF&(1<<5) ? 0 : (1<< 8)) | + (PINF&(1<<4) ? 0 : (1<< 9)) | + (PINF&(1<<1) ? 0 : (1<<10)) | + (PINF&(1<<0) ? 0 : (1<<11)); } /* Row pin configuration @@ -194,30 +186,30 @@ static matrix_row_t read_cols(void) static void unselect_rows(void) { // Hi-Z(DDR:0, PORT:0) to unselect - DDRD &= ~(1<<4 | 1<<6 | 1<<7); - PORTD |= (1<<4 | 1<<6 | 1<<7); - DDRB &= ~(1<<4); - PORTB |= (1<<4); + DDRB &= ~0b01110000; + PORTB &= ~0b01110000; + DDRD &= ~0b10000000; + PORTD &= ~0b10000000; } static void select_row(uint8_t row) { switch (row) { case 0: - DDRD |= (1<<4); - PORTD &= ~(1<<4); + DDRB |= (1<<6); + PORTB &= ~(1<<6); break; case 1: - DDRD |= (1<<6); - PORTD &= ~(1<<6); + DDRB |= (1<<5); + PORTB &= ~(1<<5); break; case 2: - DDRD |= (1<<7); - PORTD &= ~(1<<7); - break; - case 3: DDRB |= (1<<4); PORTB &= ~(1<<4); break; + case 3: + DDRD |= (1<<7); + PORTD &= ~(1<<7); + break; } } |