summaryrefslogtreecommitdiffstats
path: root/keyboards/handwired/dactyl/matrix.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/handwired/dactyl/matrix.c')
-rw-r--r--keyboards/handwired/dactyl/matrix.c99
1 files changed, 48 insertions, 51 deletions
diff --git a/keyboards/handwired/dactyl/matrix.c b/keyboards/handwired/dactyl/matrix.c
index 615621522d..a21cd08e14 100644
--- a/keyboards/handwired/dactyl/matrix.c
+++ b/keyboards/handwired/dactyl/matrix.c
@@ -25,7 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "util.h"
#include "matrix.h"
#include "dactyl.h"
-#include "i2cmaster.h"
+#include "i2c_master.h"
#include "timer.h"
@@ -147,9 +147,6 @@ void init_expander(void) {
#endif
}
- expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out;
- expander_status = i2c_write(IODIRA); if (expander_status) goto out;
-
/*
Pin direction and pull-up depends on both the diode direction
and on whether the column register is GPIOA or GPIOB
@@ -164,50 +161,65 @@ void init_expander(void) {
#if (EXPANDER_COL_REGISTER == GPIOA)
# if (DIODE_DIRECTION == COL2ROW)
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
- expander_status = i2c_write(0); if (expander_status) goto out;
+ uint8_t direction[2] = {
+ expander_input_pin_mask,
+ 0,
+ };
# elif (DIODE_DIRECTION == ROW2COL)
- expander_status = i2c_write(0); if (expander_status) goto out;
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
+ uint8_t direction[2] = {
+ 0,
+ expander_input_pin_mask,
+ };
# endif
#elif (EXPANDER_COL_REGISTER == GPIOB)
# if (DIODE_DIRECTION == COL2ROW)
- expander_status = i2c_write(0); if (expander_status) goto out;
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
+ uint8_t direction[2] = {
+ 0,
+ expander_input_pin_mask,
+ };
# elif (DIODE_DIRECTION == ROW2COL)
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
- expander_status = i2c_write(0); if (expander_status) goto out;
+ uint8_t direction[2] = {
+ expander_input_pin_mask,
+ 0,
+ };
# endif
#endif
- i2c_stop();
-
// set pull-up
// - unused : off : 0
// - input : on : 1
// - driving : off : 0
- expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out;
- expander_status = i2c_write(GPPUA); if (expander_status) goto out;
#if (EXPANDER_COL_REGISTER == GPIOA)
# if (DIODE_DIRECTION == COL2ROW)
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
- expander_status = i2c_write(0); if (expander_status) goto out;
+ uint8_t pullup[2] = {
+ expander_input_pin_mask,
+ 0,
+ };
# elif (DIODE_DIRECTION == ROW2COL)
- expander_status = i2c_write(0); if (expander_status) goto out;
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
+ uint8_t pullup[2] = {
+ 0,
+ expander_input_pin_mask,
+ };
# endif
#elif (EXPANDER_COL_REGISTER == GPIOB)
# if (DIODE_DIRECTION == COL2ROW)
- expander_status = i2c_write(0); if (expander_status) goto out;
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
+ uint8_t pullup[2] = {
+ 0,
+ expander_input_pin_mask,
+ };
# elif (DIODE_DIRECTION == ROW2COL)
- expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out;
- expander_status = i2c_write(0); if (expander_status) goto out;
+ uint8_t pullup[2] = {
+ expander_input_pin_mask,
+ 0,
+ };
# endif
#endif
-out:
- i2c_stop();
+
+ expander_status = i2c_writeReg(I2C_ADDR, IODIRA, direction, 2, I2C_TIMEOUT);
+ if (expander_status) return;
+
+ expander_status = i2c_writeReg(I2C_ADDR, GPPUA, pullup, 2, I2C_TIMEOUT);
}
uint8_t matrix_scan(void)
@@ -337,14 +349,11 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
// Read columns from expander, unless it's in an error state
if (! expander_status) {
- expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out;
- expander_status = i2c_write(EXPANDER_COL_REGISTER); if (expander_status) goto out;
- expander_status = i2c_start(I2C_ADDR_READ); if (expander_status) goto out;
-
- current_matrix[current_row] |= (~i2c_readNak()) & expander_input_pin_mask;
-
- out:
- i2c_stop();
+ uint8_t state = 0;
+ expander_status = i2c_readReg(I2C_ADDR, EXPANDER_COL_REGISTER, &state, 1, I2C_TIMEOUT);
+ if (! expander_status) {
+ current_matrix[current_row] |= (~state) & expander_input_pin_mask;
+ }
}
// Read columns from onboard pins
@@ -366,11 +375,8 @@ static void select_row(uint8_t row) {
if (! expander_status) {
// set active row low : 0
// set other rows hi-Z : 1
- expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out;
- expander_status = i2c_write(EXPANDER_ROW_REGISTER); if (expander_status) goto out;
- expander_status = i2c_write(0xFF & ~(1<<row)); if (expander_status) goto out;
- out:
- i2c_stop();
+ uint8_t port = 0xFF & ~(1<<row);
+ expander_status = i2c_writeReg(I2C_ADDR, EXPANDER_ROW_REGISTER, &port, 1, I2C_TIMEOUT);
}
// select on teensy
@@ -426,13 +432,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
return false;
}
- expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out;
- expander_status = i2c_write(EXPANDER_ROW_REGISTER); if (expander_status) goto out;
- expander_status = i2c_start(I2C_ADDR_READ); if (expander_status) goto out;
- column_state = i2c_readNak();
-
- out:
- i2c_stop();
+ expander_status = i2c_readReg(I2C_ADDR, EXPANDER_ROW_REGISTER, &column_state, 1, I2C_TIMEOUT);
column_state = ~column_state;
} else {
@@ -476,11 +476,8 @@ static void select_col(uint8_t col)
} else {
// set active col low : 0
// set other cols hi-Z : 1
- expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out;
- expander_status = i2c_write(EXPANDER_COL_REGISTER); if (expander_status) goto out;
- expander_status = i2c_write(0xFF & ~(1<<col)); if (expander_status) goto out;
- out:
- i2c_stop();
+ uint8_t port = 0xFF & ~(1<<col);
+ expander_status = i2c_writeReg(I2C_ADDR, EXPANDER_COL_REGISTER, &port, 1, I2C_TIMEOUT);
}
} else {
// select on teensy