Migrate ROW_SHIFTER to core MATRIX_ROW_SHIFTER (#25977)
This commit is contained in:
parent
9aec0e2c9f
commit
db4d8823d6
|
|
@ -27,8 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
#define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
#define print_matrix_header() print("\nr/c 01234567\n")
|
#define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
#define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
|
|
||||||
|
|
||||||
static void matrix_make(uint8_t code);
|
static void matrix_make(uint8_t code);
|
||||||
static void matrix_break(uint8_t code);
|
static void matrix_break(uint8_t code);
|
||||||
|
|
|
||||||
|
|
@ -48,15 +48,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -252,7 +249,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -314,12 +311,12 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
||||||
{
|
{
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -52,15 +52,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -277,7 +274,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -339,12 +336,12 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
||||||
{
|
{
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -48,15 +48,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -252,7 +249,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -314,12 +311,12 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
||||||
{
|
{
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -46,15 +46,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -250,7 +247,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -312,12 +309,12 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
||||||
{
|
{
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -34,15 +34,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAIN_ROWMASK 0xFFF0;
|
#define MAIN_ROWMASK 0xFFF0;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2)
|
#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2)
|
||||||
#define ROW_SHIFTER ((matrix_row_t)1)
|
|
||||||
|
|
||||||
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
|
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
|
||||||
|
|
||||||
|
|
@ -100,10 +99,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
|
|
||||||
if (col_state & (1 << current_row)) {
|
if (col_state & (1 << current_row)) {
|
||||||
// key closed; set state bit in matrix
|
// key closed; set state bit in matrix
|
||||||
current_matrix[current_row] |= (ROW_SHIFTER << current_col);
|
current_matrix[current_row] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// key open; clear state bit in matrix
|
// key open; clear state bit in matrix
|
||||||
current_matrix[current_row] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[current_row] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine whether the matrix changed state
|
// Determine whether the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -76,8 +76,6 @@ uint8_t expander_status;
|
||||||
uint8_t expander_input_pin_mask;
|
uint8_t expander_input_pin_mask;
|
||||||
bool i2c_initialized = false;
|
bool i2c_initialized = false;
|
||||||
|
|
||||||
#define ROW_SHIFTER ((matrix_row_t)1)
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
__attribute__ ((weak))
|
||||||
void matrix_init_user(void) {}
|
void matrix_init_user(void) {}
|
||||||
|
|
||||||
|
|
@ -284,7 +282,7 @@ uint8_t matrix_scan(void)
|
||||||
inline
|
inline
|
||||||
bool matrix_is_on(uint8_t row, uint8_t col)
|
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||||
{
|
{
|
||||||
return (matrix[row] & (ROW_SHIFTER << col));
|
return (matrix[row] & (MATRIX_ROW_SHIFTER << col));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
|
|
@ -344,7 +342,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
if (! col_expanded[col_index]) {
|
if (! col_expanded[col_index]) {
|
||||||
uint8_t pin = onboard_col_pins[col_index];
|
uint8_t pin = onboard_col_pins[col_index];
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -432,10 +430,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
|
|
||||||
if (column_state & (1 << current_row)) {
|
if (column_state & (1 << current_row)) {
|
||||||
// key closed; set state bit in matrix
|
// key closed; set state bit in matrix
|
||||||
current_matrix[current_row] |= (ROW_SHIFTER << current_col);
|
current_matrix[current_row] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// key open; clear state bit in matrix
|
// key open; clear state bit in matrix
|
||||||
current_matrix[current_row] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[current_row] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine whether the matrix changed state
|
// Determine whether the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -31,15 +31,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
|
|
@ -150,7 +147,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(dat_pin);
|
uint8_t pin_state = gpio_read_pin(dat_pin);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
|
||||||
|
|
@ -43,15 +43,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -227,7 +224,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << tp_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << tp_index);
|
||||||
}
|
}
|
||||||
return (last_row_value != current_matrix[current_row]);
|
return (last_row_value != current_matrix[current_row]);
|
||||||
}
|
}
|
||||||
|
|
@ -245,7 +242,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
|
||||||
|
|
@ -86,8 +86,6 @@ uint8_t expander_status;
|
||||||
uint8_t expander_input_pin_mask;
|
uint8_t expander_input_pin_mask;
|
||||||
bool i2c_initialized = false;
|
bool i2c_initialized = false;
|
||||||
|
|
||||||
#define ROW_SHIFTER ((matrix_row_t)1)
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
__attribute__ ((weak))
|
||||||
void matrix_init_user(void) {}
|
void matrix_init_user(void) {}
|
||||||
|
|
||||||
|
|
@ -256,7 +254,7 @@ uint8_t matrix_scan(void)
|
||||||
inline
|
inline
|
||||||
bool matrix_is_on(uint8_t row, uint8_t col)
|
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||||
{
|
{
|
||||||
return (matrix[row] & (ROW_SHIFTER << col));
|
return (matrix[row] & (MATRIX_ROW_SHIFTER << col));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
|
|
@ -314,7 +312,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
if (! col_expanded[col_index]) {
|
if (! col_expanded[col_index]) {
|
||||||
uint8_t pin = onboard_col_pins[col_index];
|
uint8_t pin = onboard_col_pins[col_index];
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -401,10 +399,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
|
|
||||||
if (column_state & (1 << current_row)) {
|
if (column_state & (1 << current_row)) {
|
||||||
// key closed; set state bit in matrix
|
// key closed; set state bit in matrix
|
||||||
current_matrix[current_row] |= (ROW_SHIFTER << current_col);
|
current_matrix[current_row] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// key open; clear state bit in matrix
|
// key open; clear state bit in matrix
|
||||||
current_matrix[current_row] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[current_row] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine whether the matrix changed state
|
// Determine whether the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
|
|
||||||
#define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
|
|
||||||
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
|
@ -62,10 +60,10 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
// Check col pin pin_state
|
// Check col pin pin_state
|
||||||
if (gpio_read_pin(col_pins[col_index]) == 0) {
|
if (gpio_read_pin(col_pins[col_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[current_row] |= (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= (MATRIX_ROW_SHIFTER << col_index);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[current_row] &= ~(ROW_SHIFTER << col_index);
|
current_matrix[current_row] &= ~(MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
|
|
||||||
#define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
|
|
||||||
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
|
@ -62,10 +60,10 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
// Check col pin pin_state
|
// Check col pin pin_state
|
||||||
if (gpio_read_pin(col_pins[col_index]) == 0) {
|
if (gpio_read_pin(col_pins[col_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[current_row] |= (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= (MATRIX_ROW_SHIFTER << col_index);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[current_row] &= ~(ROW_SHIFTER << col_index);
|
current_matrix[current_row] &= ~(MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -149,7 +146,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -174,10 +171,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[tmp] |= (ROW_SHIFTER << current_col);
|
current_matrix[tmp] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[tmp] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -149,7 +146,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -174,10 +171,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[tmp] |= (ROW_SHIFTER << current_col);
|
current_matrix[tmp] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[tmp] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
|
|
||||||
#if (MATRIX_COLS <= 8)
|
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
|
@ -88,7 +80,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -113,10 +105,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[tmp] |= (ROW_SHIFTER << current_col);
|
current_matrix[tmp] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[tmp] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -149,7 +146,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -174,10 +171,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[tmp] |= (ROW_SHIFTER << current_col);
|
current_matrix[tmp] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[tmp] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
|
|
@ -157,18 +154,18 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if (row_index == 3 && current_col == 0) {
|
if (row_index == 3 && current_col == 0) {
|
||||||
if (gpio_read_pin(E2) == 0) {
|
if (gpio_read_pin(E2) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,15 +35,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define UART_MATRIX_RESPONSE_TIMEOUT 10000
|
#define UART_MATRIX_RESPONSE_TIMEOUT 10000
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
|
|
||||||
static const pin_t row_pins[] = MATRIX_ROW_PINS;
|
static const pin_t row_pins[] = MATRIX_ROW_PINS;
|
||||||
static const pin_t col_pins[] = MATRIX_COL_PINS;
|
static const pin_t col_pins[] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
|
@ -74,7 +72,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
|
|
||||||
// For each col...
|
// For each col...
|
||||||
for (uint8_t col_index = 0; col_index < MATRIX_COLS / 2; col_index++) {
|
for (uint8_t col_index = 0; col_index < MATRIX_COLS / 2; col_index++) {
|
||||||
uint16_t column_index_bitmask = ROW_SHIFTER << ((col_index * 2) + 1);
|
uint16_t column_index_bitmask = MATRIX_ROW_SHIFTER << ((col_index * 2) + 1);
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(col_pins[col_index*2])) {
|
if (gpio_read_pin(col_pins[col_index*2])) {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
|
|
@ -103,7 +101,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Store last value of row prior to reading
|
// Store last value of row prior to reading
|
||||||
matrix_row_t last_row_value = current_matrix[row_index];
|
matrix_row_t last_row_value = current_matrix[row_index];
|
||||||
|
|
||||||
uint16_t column_index_bitmask = ROW_SHIFTER << (current_col * 2);
|
uint16_t column_index_bitmask = MATRIX_ROW_SHIFTER << (current_col * 2);
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index])) {
|
if (gpio_read_pin(row_pins[row_index])) {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
|
|
|
||||||
|
|
@ -50,15 +50,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -251,7 +248,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -312,12 +309,12 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
||||||
{
|
{
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -18,14 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "wait.h"
|
#include "wait.h"
|
||||||
|
|
||||||
#if (MATRIX_COLS <= 8)
|
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
|
||||||
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
|
||||||
|
|
||||||
|
|
@ -95,7 +87,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -123,12 +115,12 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0)
|
if (gpio_read_pin(row_pins[row_index]) == 0)
|
||||||
{
|
{
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[tmp] |= (ROW_SHIFTER << current_col);
|
current_matrix[tmp] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[tmp] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -115,7 +112,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
||||||
pin_t pin = direct_pins[current_row][col_index];
|
pin_t pin = direct_pins[current_row][col_index];
|
||||||
if (pin != NO_PIN) {
|
if (pin != NO_PIN) {
|
||||||
current_matrix[current_row] |= gpio_read_pin(pin) ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= gpio_read_pin(pin) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -224,7 +221,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -272,10 +269,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -115,7 +112,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
||||||
pin_t pin = direct_pins[current_row][col_index];
|
pin_t pin = direct_pins[current_row][col_index];
|
||||||
if (pin != NO_PIN) {
|
if (pin != NO_PIN) {
|
||||||
current_matrix[current_row] |= gpio_read_pin(pin) ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= gpio_read_pin(pin) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -224,7 +221,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -272,10 +269,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -115,7 +112,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
|
||||||
pin_t pin = direct_pins[current_row][col_index];
|
pin_t pin = direct_pins[current_row][col_index];
|
||||||
if (pin != NO_PIN) {
|
if (pin != NO_PIN) {
|
||||||
current_matrix[current_row] |= gpio_read_pin(pin) ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= gpio_read_pin(pin) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -224,7 +221,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
uint8_t pin_state = gpio_read_pin(col_pins[col_index]);
|
||||||
|
|
||||||
// Populate the matrix row with the state of the col pin
|
// Populate the matrix row with the state of the col pin
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unselect row
|
// Unselect row
|
||||||
|
|
@ -272,10 +269,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
// Check row pin state
|
// Check row pin state
|
||||||
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
if (gpio_read_pin(row_pins[row_index]) == 0) {
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
} else {
|
} else {
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
|
|
@ -42,15 +42,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MATRIX_MASKED
|
#ifdef MATRIX_MASKED
|
||||||
|
|
@ -227,7 +224,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
|
||||||
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
|
||||||
|
|
||||||
/* Populate the matrix row with the state of the col pin */
|
/* Populate the matrix row with the state of the col pin */
|
||||||
current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
|
current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unselect row */
|
/* Unselect row */
|
||||||
|
|
|
||||||
|
|
@ -38,15 +38,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#if (MATRIX_COLS <= 8)
|
#if (MATRIX_COLS <= 8)
|
||||||
# define print_matrix_header() print("\nr/c 01234567\n")
|
# define print_matrix_header() print("\nr/c 01234567\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint8_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 16)
|
#elif (MATRIX_COLS <= 16)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint16_t)1)
|
|
||||||
#elif (MATRIX_COLS <= 32)
|
#elif (MATRIX_COLS <= 32)
|
||||||
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
|
||||||
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
|
||||||
# define ROW_SHIFTER ((uint32_t)1)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
@ -202,12 +199,12 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
|
||||||
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
|
||||||
{
|
{
|
||||||
// Pin LO, set col bit
|
// Pin LO, set col bit
|
||||||
current_matrix[row_index] |= (ROW_SHIFTER << current_col);
|
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Pin HI, clear col bit
|
// Pin HI, clear col bit
|
||||||
current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
|
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the matrix changed state
|
// Determine if the matrix changed state
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue