2011-07-20 15:32:52 +00:00
|
|
|
/*
|
|
|
|
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
|
|
|
|
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2011-02-21 06:43:17 +00:00
|
|
|
#ifndef MATRIX_H
|
|
|
|
#define MATRIX_H
|
2010-10-23 16:17:26 +00:00
|
|
|
|
2012-10-05 17:23:12 +00:00
|
|
|
#include <stdint.h>
|
2010-10-23 16:17:26 +00:00
|
|
|
#include <stdbool.h>
|
|
|
|
|
2016-05-24 03:42:21 +00:00
|
|
|
#if MATRIX_COLS <= 8
|
|
|
|
typedef uint8_t matrix_row_t;
|
|
|
|
#elif MATRIX_COLS <= 16
|
|
|
|
typedef uint16_t matrix_row_t;
|
|
|
|
#elif MATRIX_COLS <= 32
|
|
|
|
typedef uint32_t matrix_row_t;
|
2012-10-05 17:23:12 +00:00
|
|
|
#else
|
2016-05-24 03:42:21 +00:00
|
|
|
# error "There are too many columns."
|
2012-10-05 17:23:12 +00:00
|
|
|
#endif
|
|
|
|
|
2016-05-24 03:42:21 +00:00
|
|
|
#if DIODE_DIRECTION == ROW2COL
|
|
|
|
# if MATRIX_ROWS <= 8
|
|
|
|
typedef uint8_t matrix_col_t;
|
|
|
|
# elif MATRIX_ROWS <= 16
|
|
|
|
typedef uint16_t matrix_col_t;
|
|
|
|
# elif MATRIX_ROWS <= 32
|
|
|
|
typedef uint32_t matrix_col_t;
|
|
|
|
# else
|
|
|
|
# error "There are too many rows."
|
|
|
|
# endif
|
|
|
|
#endif
|
2012-10-05 17:23:12 +00:00
|
|
|
|
2016-05-24 03:42:21 +00:00
|
|
|
typedef struct {
|
|
|
|
uint8_t input_addr:4;
|
|
|
|
uint8_t bit:4;
|
|
|
|
} io_pin_t;
|
2012-10-05 17:23:12 +00:00
|
|
|
|
2015-01-04 08:03:47 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
2016-05-24 03:42:21 +00:00
|
|
|
/* counts the number of rows in the matrix */
|
2011-01-06 06:18:55 +00:00
|
|
|
uint8_t matrix_rows(void);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* counts the number of columns in the matrix */
|
2011-01-06 06:18:55 +00:00
|
|
|
uint8_t matrix_cols(void);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* sets up the matrix before matrix_init */
|
2015-05-17 10:34:34 +00:00
|
|
|
void matrix_setup(void);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* intializes the matrix */
|
2010-10-23 16:17:26 +00:00
|
|
|
void matrix_init(void);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* scans the entire matrix */
|
2011-01-06 06:18:55 +00:00
|
|
|
uint8_t matrix_scan(void);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* checks if the matrix has been modified */
|
2013-03-12 07:05:50 +00:00
|
|
|
bool matrix_is_modified(void) __attribute__ ((deprecated));
|
2016-05-24 03:42:21 +00:00
|
|
|
/* checks if a key is pressed */
|
2011-01-06 06:18:55 +00:00
|
|
|
bool matrix_is_on(uint8_t row, uint8_t col);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* inspects the state of a row in the matrix */
|
2015-01-04 08:03:47 +00:00
|
|
|
matrix_row_t matrix_get_row(uint8_t row);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* prints the matrix for debugging */
|
2012-10-17 15:10:20 +00:00
|
|
|
void matrix_print(void);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* counts the total number of keys pressed */
|
|
|
|
uint8_t matrix_key_count(void);
|
|
|
|
/* controls power to the matrix */
|
2014-11-23 04:08:05 +00:00
|
|
|
void matrix_power_up(void);
|
|
|
|
void matrix_power_down(void);
|
2016-05-24 03:42:21 +00:00
|
|
|
/* executes code for Quantum */
|
2016-05-15 04:27:32 +00:00
|
|
|
void matrix_init_quantum(void);
|
|
|
|
void matrix_scan_quantum(void);
|
2015-01-04 08:03:47 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
2014-11-23 04:08:05 +00:00
|
|
|
|
2010-10-23 16:17:26 +00:00
|
|
|
#endif
|