]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Rename i2c_slave functions so it can coexist with i2c_master (#4875)
authorJames Churchill <pelrun@gmail.com>
Tue, 22 Jan 2019 16:57:13 +0000 (02:57 +1000)
committerDrashna Jaelre <drashna@live.com>
Tue, 22 Jan 2019 16:57:13 +0000 (08:57 -0800)
Also merges tx/rx buffers, as only one is necessary.

drivers/avr/i2c_slave.c
drivers/avr/i2c_slave.h
keyboards/dc01/arrow/matrix.c
keyboards/dc01/numpad/matrix.c
keyboards/dc01/right/matrix.c

index 27696ca01ab5f99d28faea9c16d6b07654b4b77e..18a29a45a5a440433c6a7b8376c2ae4777734545 100755 (executable)
@@ -9,23 +9,26 @@
 
 #include "i2c_slave.h"
 
-void i2c_init(uint8_t address){
+volatile uint8_t i2c_slave_reg[I2C_SLAVE_REG_COUNT];
+
+static volatile uint8_t buffer_address;
+static volatile bool slave_has_register_set = false;
+
+void i2c_slave_init(uint8_t address){
     // load address into TWI address register
     TWAR = (address << 1);
     // set the TWCR to enable address matching and enable TWI, clear TWINT, enable TWI interrupt
     TWCR = (1 << TWIE) | (1 << TWEA) | (1 << TWINT) | (1 << TWEN);
 }
 
-void i2c_stop(void){
+void i2c_slave_stop(void){
     // clear acknowledge and enable bits
     TWCR &= ~((1 << TWEA) | (1 << TWEN));
 }
 
 ISR(TWI_vect){
     uint8_t ack = 1;
-    // temporary stores the received data
-    //uint8_t data;
-    
+
     switch(TW_STATUS){
         case TW_SR_SLA_ACK:
             // The device is now a slave receiver
@@ -38,13 +41,13 @@ ISR(TWI_vect){
             if(!slave_has_register_set){
                 buffer_address = TWDR;
 
-                if (buffer_address >= RX_BUFFER_SIZE){ // address out of bounds dont ack
-                    ack = 0;
-                    buffer_address = 0;
+                if (buffer_address >= I2C_SLAVE_REG_COUNT) {  // address out of bounds dont ack
+                  ack            = 0;
+                  buffer_address = 0;
                 }
                 slave_has_register_set = true; // address has been receaved now fill in buffer
             } else {
-                rxbuffer[buffer_address] = TWDR;
+                i2c_slave_reg[buffer_address] = TWDR;
                 buffer_address++;
             }
             break;
@@ -52,7 +55,7 @@ ISR(TWI_vect){
         case TW_ST_SLA_ACK:
         case TW_ST_DATA_ACK:
             // This device is a slave transmitter and master has requested data
-            TWDR = txbuffer[buffer_address];
+            TWDR = i2c_slave_reg[buffer_address];
             buffer_address++;
             break;
 
@@ -63,6 +66,6 @@ ISR(TWI_vect){
             break;
     }
 
-    // Reset i2c state mahcine to be ready for next interrupt
+    // Reset i2c state machine to be ready for next interrupt
     TWCR |= (1 << TWIE) | (1 << TWINT) | (ack << TWEA) | (1 << TWEN);
 }
\ No newline at end of file
index 1c3b9ecc00333e8c98e2220ba15a39615b7b0ae7..7b5dcbdc3eb2f0a534ffabfcac2e1eb63a9e3ded 100755 (executable)
@@ -8,16 +8,11 @@
 #ifndef I2C_SLAVE_H
 #define I2C_SLAVE_H
 
-#define TX_BUFFER_SIZE 30
-#define RX_BUFFER_SIZE 30
+#define I2C_SLAVE_REG_COUNT 30
 
-volatile uint8_t buffer_address;
-static volatile bool slave_has_register_set = false;
-volatile uint8_t txbuffer[TX_BUFFER_SIZE];
-volatile uint8_t rxbuffer[RX_BUFFER_SIZE];
+extern volatile uint8_t i2c_slave_reg[I2C_SLAVE_REG_COUNT];
 
-void i2c_init(uint8_t address);
-void i2c_stop(void);
-ISR(TWI_vect);
+void i2c_slave_init(uint8_t address);
+void i2c_slave_stop(void);
 
 #endif // I2C_SLAVE_H
\ No newline at end of file
index 68abb6791a7331e12cf8f7dd2f782f3ac8a61785..85591f6026ab43a1c9029d8de0a296a1688e1bc3 100644 (file)
@@ -195,14 +195,14 @@ uint8_t matrix_scan(void)
             debouncing = false;
         }
 #   endif
-        
+
         if (USB_DeviceState != DEVICE_STATE_Configured){
-            txbuffer[1] = 0x55;
+            i2c_slave_reg[1] = 0x55;
             for (uint8_t i = 0; i < MATRIX_ROWS; i++){
-                txbuffer[i+2] = matrix[i]; //send matrix over i2c
+                i2c_slave_reg[i+2] = matrix[i]; //send matrix over i2c
             }
         }
-    
+
     matrix_scan_quantum();
     return 1;
 }
@@ -396,9 +396,9 @@ static void unselect_cols(void)
 
 //this replases tmk code
 void matrix_setup(void){
-    
+
     if (USB_DeviceState != DEVICE_STATE_Configured){
-        i2c_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
+        i2c_slave_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
         sei(); //enable interupts
     }
 }
\ No newline at end of file
index f9a9a7f63d714bef778b949f17fe9801455433a5..39637241d7e358b20defaaca9d196bfbb3299c80 100644 (file)
@@ -195,14 +195,14 @@ uint8_t matrix_scan(void)
             debouncing = false;
         }
 #   endif
-        
+
         if (USB_DeviceState != DEVICE_STATE_Configured){
-            txbuffer[1] = 0x55;
+            i2c_slave_reg[1] = 0x55;
             for (uint8_t i = 0; i < MATRIX_ROWS; i++){
-                txbuffer[i+2] = matrix[i]; //send matrix over i2c
+                i2c_slave_reg[i+2] = matrix[i]; //send matrix over i2c
             }
         }
-    
+
     matrix_scan_quantum();
     return 1;
 }
@@ -396,9 +396,9 @@ static void unselect_cols(void)
 
 //this replases tmk code
 void matrix_setup(void){
-    
+
     if (USB_DeviceState != DEVICE_STATE_Configured){
-        i2c_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
+        i2c_slave_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
         sei(); //enable interupts
     }
 }
\ No newline at end of file
index aa2e880d01ef5d0ee167874c6a0083b6e8fe29de..50fe19b8d1a6f9a137a0a1588efb48932ab4b872 100644 (file)
@@ -195,14 +195,14 @@ uint8_t matrix_scan(void)
             debouncing = false;
         }
 #   endif
-        
+
         if (USB_DeviceState != DEVICE_STATE_Configured){
-            txbuffer[1] = 0x55;
+            i2c_slave_reg[1] = 0x55;
             for (uint8_t i = 0; i < MATRIX_ROWS; i++){
-                txbuffer[i+2] = matrix[i]; //send matrix over i2c
+                i2c_slave_reg[i+2] = matrix[i]; //send matrix over i2c
             }
         }
-    
+
     matrix_scan_quantum();
     return 1;
 }
@@ -396,9 +396,9 @@ static void unselect_cols(void)
 
 //this replases tmk code
 void matrix_setup(void){
-    
+
     if (USB_DeviceState != DEVICE_STATE_Configured){
-        i2c_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
+        i2c_slave_init(SLAVE_I2C_ADDRESS); //setup address of slave i2c
         sei(); //enable interupts
     }
 }
\ No newline at end of file