diff options
| -rwxr-xr-x | drivers/avr/i2c_master.c | 2 | ||||
| -rw-r--r-- | keyboards/dc01/left/config.h | 2 | ||||
| -rw-r--r-- | 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 47c6f8e6c6..a04e6570d7 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 68484d8355..e3d49404ea 100644 --- a/keyboards/dc01/left/config.h +++ b/keyboards/dc01/left/config.h @@ -46,6 +46,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #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 7923766359..806583580d 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  | 
