~ruther/qmk_firmware

4e3397ca8aacf843c6c491716c0a638d0c63af49 — Jack Humbert 10 years ago 4a8b9b8
Update matrix.c
1 files changed, 37 insertions(+), 45 deletions(-)

M keyboard/gh60/matrix.c
M keyboard/gh60/matrix.c => keyboard/gh60/matrix.c +37 -45
@@ 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;
    }
}