]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
DC01 updates and I2C avr speed overwrite (#4088)
authoryiancar <yiangosyiangou@cytanet.com.cy>
Mon, 8 Oct 2018 22:27:04 +0000 (23:27 +0100)
committerJack Humbert <jack.humb@gmail.com>
Mon, 8 Oct 2018 22:27:04 +0000 (18:27 -0400)
* 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
keyboards/dc01/left/config.h
keyboards/dc01/left/matrix.c

index 47c6f8e6c64af021614feae3c0d7d767e204336f..a04e6570d7645c23aa07a7ac333ceb1477bb1021 100755 (executable)
@@ -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)
 
index 68484d8355cc5ba88df19ed259522f4947595c1b..e3d49404ea53fe88c3f3b94ec809944459d8bdac 100644 (file)
@@ -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
 
index 792376635963811e8b91fe4db17bee6f020986cd..806583580d7f1f8d3832c5ff22f37f4b948f6efd 100644 (file)
@@ -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