From 81706d1130fdc3c0d6d110f4d8665c47ffd7fb59 Mon Sep 17 00:00:00 2001 From: tmk Date: Sun, 10 Jun 2012 23:50:47 +0900 Subject: Moved protocol files; news and x68k. Renamed sony_usb to news_usb Renamed hbk to hbkb --- keyboard/hbkb/matrix.c | 270 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100644 keyboard/hbkb/matrix.c (limited to 'keyboard/hbkb/matrix.c') diff --git a/keyboard/hbkb/matrix.c b/keyboard/hbkb/matrix.c new file mode 100644 index 000000000..d7c066364 --- /dev/null +++ b/keyboard/hbkb/matrix.c @@ -0,0 +1,270 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" + + +/* + * Happy Buckling Keyboard(IBM Model M mod) + * + * Pin usage: + * COL: PD0-7 + * ROW: PB0-7, PF4-7 + */ + +#if (MATRIX_COLS > 16) +# error "MATRIX_COLS must not exceed 16" +#endif +#if (MATRIX_ROWS > 255) +# error "MATRIX_ROWS must not exceed 255" +#endif + + +#ifndef DEBOUNCE +# define DEBOUNCE 0 +#endif +static uint8_t debouncing = DEBOUNCE; + +// matrix state buffer(1:on, 0:off) +#if (MATRIX_COLS <= 8) +static uint8_t *matrix; +static uint8_t *matrix_prev; +static uint8_t _matrix0[MATRIX_ROWS]; +static uint8_t _matrix1[MATRIX_ROWS]; +#else +static uint16_t *matrix; +static uint16_t *matrix_prev; +static uint16_t _matrix0[MATRIX_ROWS]; +static uint16_t _matrix1[MATRIX_ROWS]; +#endif + +#ifdef MATRIX_HAS_GHOST +static bool matrix_has_ghost_in_row(uint8_t row); +#endif +static uint8_t read_col(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + print_enable = true; + debug_enable = true; + debug_matrix = true; + debug_keyboard = false; + debug_mouse = false; + print("debug enabled.\n"); + + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1<