From 98a63d8d6e91fcd0de4e8496d21ceef17b81d5d1 Mon Sep 17 00:00:00 2001 From: yiancar Date: Mon, 8 Oct 2018 23:27:04 +0100 Subject: [PATCH] DC01 updates and I2C avr speed overwrite (#4088) * DC01 updates and I2C avr speed overwrite - General updating of DC01 - Made F_SCL define in AVR I2C driver overwritable from config.h * Update drivers/avr/i2c_master.c --- drivers/avr/i2c_master.c | 2 ++ keyboards/dc01/left/config.h | 2 ++ keyboards/dc01/left/matrix.c | 41 ++++++++++++------------------------ 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/drivers/avr/i2c_master.c b/drivers/avr/i2c_master.c index 47c6f8e6c..a04e6570d 100755 --- a/drivers/avr/i2c_master.c +++ b/drivers/avr/i2c_master.c @@ -8,7 +8,9 @@ #include "i2c_master.h" #include "timer.h" +#ifndef F_SCL #define F_SCL 400000UL // SCL frequency +#endif #define Prescaler 1 #define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16 ) / 2) diff --git a/keyboards/dc01/left/config.h b/keyboards/dc01/left/config.h index 68484d835..e3d49404e 100644 --- a/keyboards/dc01/left/config.h +++ b/keyboards/dc01/left/config.h @@ -46,6 +46,8 @@ along with this program. If not, see . #define MATRIX_COL_PINS { F4, F1, F0, F7, F6, F5 } #define UNUSED_PINS +#define F_SCL 300000UL + /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/dc01/left/matrix.c b/keyboards/dc01/left/matrix.c index 792376635..806583580 100644 --- a/keyboards/dc01/left/matrix.c +++ b/keyboards/dc01/left/matrix.c @@ -43,7 +43,7 @@ static uint8_t error_count_arrow = 0; /* Set 0 if debouncing isn't needed */ #ifndef DEBOUNCING_DELAY -# define DEBOUNCING_DELAY 5 +# define DEBOUNCING_DELAY 5 #endif #if (DEBOUNCING_DELAY > 0) @@ -135,10 +135,7 @@ uint8_t matrix_cols(void) { return MATRIX_COLS; } - i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset); -//uint8_t i2c_transaction_numpad(void); -//uint8_t i2c_transaction_arrow(void); //this replases tmk code void matrix_setup(void){ @@ -220,7 +217,7 @@ uint8_t matrix_scan(void) matrix[i] &= 0x3F; //mask bits to keep } } - }else{ //no error + }else{ //no error error_count_right = 0; } @@ -440,40 +437,28 @@ static void unselect_cols(void) // Complete rows from other modules over i2c i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset) { i2c_status_t err = i2c_start((address << 1) | I2C_WRITE, 10); - if (err) return err; - i2c_write(0x01, 10); - if (err) return err; + i2c_write(0x01, 10); //request data in address 1 - i2c_start((address << 1) | I2C_READ, 10); - if (err) return err; + i2c_start((address << 1) | I2C_READ, 5); err = i2c_read_ack(10); if (err == 0x55) { //synchronization byte - for (uint8_t i = 0; i < MATRIX_ROWS-1 ; i++) { //assemble slave matrix in main matrix - matrix[i] &= mask; //mask bits to keep - err = i2c_read_ack(10); - if (err >= 0) { - matrix[i] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end - } else { - return err; - } - } - //last read request must be followed by a NACK - matrix[MATRIX_ROWS - 1] &= mask; //mask bits to keep - err = i2c_read_nack(10); - if (err >= 0) { + for (uint8_t i = 0; i < MATRIX_ROWS-1 ; i++) { //assemble slave matrix in main matrix + matrix[i] &= mask; //mask bits to keep + err = i2c_read_ack(10); + matrix[i] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end + } + //last read request must be followed by a NACK + matrix[MATRIX_ROWS - 1] &= mask; //mask bits to keep + err = i2c_read_nack(10); matrix[MATRIX_ROWS - 1] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end - } else { - return err; - } + } else { i2c_stop(10); return 1; } i2c_stop(10); - if (err) return err; - return 0; } \ No newline at end of file