summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common_features.mk10
-rw-r--r--docs/i2c_driver.md2
-rw-r--r--drivers/arm/i2c_master.c3
-rw-r--r--drivers/arm/i2c_master.h2
-rwxr-xr-xdrivers/avr/i2c_master.c160
-rwxr-xr-xdrivers/avr/i2c_master.h2
-rwxr-xr-xdrivers/avr/i2c_slave.c2
-rw-r--r--keyboards/cannonkeys/satisfaction75/i2c_master.c2
-rw-r--r--keyboards/dc01/left/matrix.c4
-rw-r--r--keyboards/ergodox_ez/ergodox_ez.c6
-rw-r--r--keyboards/ergodox_ez/matrix.c4
-rw-r--r--keyboards/gergo/gergo.c4
-rw-r--r--keyboards/gergo/matrix.c36
-rw-r--r--quantum/keymap_common.c22
-rw-r--r--quantum/quantum.c30
-rw-r--r--quantum/quantum.h4
-rw-r--r--quantum/split_common/i2c.c184
-rw-r--r--quantum/split_common/i2c.h59
-rw-r--r--quantum/split_common/matrix.c1
-rw-r--r--quantum/split_common/split_flags.c5
-rw-r--r--quantum/split_common/split_flags.h15
-rw-r--r--quantum/split_common/split_util.c5
-rw-r--r--quantum/split_common/transport.c236
-rw-r--r--tmk_core/common/avr/suspend.c9
24 files changed, 190 insertions, 617 deletions
diff --git a/common_features.mk b/common_features.mk
index 20c38ae82e..046f94d1db 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -308,16 +308,16 @@ ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
OPT_DEFS += -DSPLIT_KEYBOARD
# Include files used by all split keyboards
- QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
- $(QUANTUM_DIR)/split_common/split_util.c
+ QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_util.c
# Determine which (if any) transport files are required
ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c
# Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called.
- # Unused functions are pruned away, which is why we can add both drivers here without bloat.
- QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c \
- $(QUANTUM_DIR)/split_common/serial.c
+ # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
+ QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c \
+ i2c_master.c \
+ i2c_slave.c
endif
COMMON_VPATH += $(QUANTUM_PATH)/split_common
endif
diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md
index 18546fc62b..bb1a2d74ff 100644
--- a/docs/i2c_driver.md
+++ b/docs/i2c_driver.md
@@ -12,7 +12,7 @@ The I2C Master drivers used in QMK have a set of common functions to allow porta
|`uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. |
|`uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written. |
|`uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_receive` function but `regaddr` sets from where in the slave the data will be read. |
-|`uint8_t i2c_stop(uint16_t timeout);` |Stops the I2C driver. |
+|`uint8_t i2c_stop(void);` |Ends an I2C transaction. |
### Function Return
diff --git a/drivers/arm/i2c_master.c b/drivers/arm/i2c_master.c
index 50a30ebce7..0e5edcc380 100644
--- a/drivers/arm/i2c_master.c
+++ b/drivers/arm/i2c_master.c
@@ -101,8 +101,7 @@ uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t l
return i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
}
-// This is usually not needed. It releases the driver to allow pins to become GPIO again.
-uint8_t i2c_stop(uint16_t timeout)
+uint8_t i2c_stop(void)
{
i2cStop(&I2C_DRIVER);
return 0;
diff --git a/drivers/arm/i2c_master.h b/drivers/arm/i2c_master.h
index 7a9eb32eb9..4ab2301f8c 100644
--- a/drivers/arm/i2c_master.h
+++ b/drivers/arm/i2c_master.h
@@ -47,4 +47,4 @@ uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t ti
uint8_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
-uint8_t i2c_stop(uint16_t timeout);
+uint8_t i2c_stop(void);
diff --git a/drivers/avr/i2c_master.c b/drivers/avr/i2c_master.c
index 19bae33e9f..d97a35cd6b 100755
--- a/drivers/avr/i2c_master.c
+++ b/drivers/avr/i2c_master.c
@@ -7,43 +7,44 @@
#include "i2c_master.h"
#include "timer.h"
+#include "wait.h"
#ifndef F_SCL
-#define F_SCL 400000UL // SCL frequency
+# define F_SCL 400000UL // SCL frequency
#endif
#define Prescaler 1
-#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16 ) / 2)
+#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16) / 2)
-void i2c_init(void)
-{
- TWSR = 0; /* no prescaler */
+void i2c_init(void) {
+ TWSR = 0; /* no prescaler */
TWBR = (uint8_t)TWBR_val;
}
-i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
-{
+i2c_status_t i2c_start(uint8_t address, uint16_t timeout) {
// reset TWI control register
TWCR = 0;
// transmit START condition
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+ TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
uint16_t timeout_timer = timer_read();
- while( !(TWCR & (1<<TWINT)) ) {
+ while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
}
// check if the start condition was successfully transmitted
- if(((TW_STATUS & 0xF8) != TW_START) && ((TW_STATUS & 0xF8) != TW_REP_START)){ return I2C_STATUS_ERROR; }
+ if (((TW_STATUS & 0xF8) != TW_START) && ((TW_STATUS & 0xF8) != TW_REP_START)) {
+ return I2C_STATUS_ERROR;
+ }
// load slave address into data register
TWDR = address;
// start transmission of address
- TWCR = (1<<TWINT) | (1<<TWEN);
+ TWCR = (1 << TWINT) | (1 << TWEN);
timeout_timer = timer_read();
- while( !(TWCR & (1<<TWINT)) ) {
+ while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
@@ -51,38 +52,39 @@ i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
// check if the device has acknowledged the READ / WRITE mode
uint8_t twst = TW_STATUS & 0xF8;
- if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return I2C_STATUS_ERROR;
+ if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+ return I2C_STATUS_ERROR;
+ }
return I2C_STATUS_SUCCESS;
}
-i2c_status_t i2c_write(uint8_t data, uint16_t timeout)
-{
+i2c_status_t i2c_write(uint8_t data, uint16_t timeout) {
// load data into data register
TWDR = data;
// start transmission of data
- TWCR = (1<<TWINT) | (1<<TWEN);
+ TWCR = (1 << TWINT) | (1 << TWEN);
uint16_t timeout_timer = timer_read();
- while( !(TWCR & (1<<TWINT)) ) {
+ while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
}
- if( (TW_STATUS & 0xF8) != TW_MT_DATA_ACK ){ return I2C_STATUS_ERROR; }
+ if ((TW_STATUS & 0xF8) != TW_MT_DATA_ACK) {
+ return I2C_STATUS_ERROR;
+ }
return I2C_STATUS_SUCCESS;
}
-int16_t i2c_read_ack(uint16_t timeout)
-{
-
+int16_t i2c_read_ack(uint16_t timeout) {
// start TWI module and acknowledge data after reception
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
+ TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWEA);
uint16_t timeout_timer = timer_read();
- while( !(TWCR & (1<<TWINT)) ) {
+ while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
@@ -92,14 +94,12 @@ int16_t i2c_read_ack(uint16_t timeout)
return TWDR;
}
-int16_t i2c_read_nack(uint16_t timeout)
-{
-
+int16_t i2c_read_nack(uint16_t timeout) {
// start receiving without acknowledging reception
- TWCR = (1<<TWINT) | (1<<TWEN);
+ TWCR = (1 << TWINT) | (1 << TWEN);
uint16_t timeout_timer = timer_read();
- while( !(TWCR & (1<<TWINT)) ) {
+ while (!(TWCR & (1 << TWINT))) {
if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
return I2C_STATUS_TIMEOUT;
}
@@ -109,115 +109,89 @@ int16_t i2c_read_nack(uint16_t timeout)
return TWDR;
}
-i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(address | I2C_WRITE, timeout);
- if (status) return status;
- for (uint16_t i = 0; i < length; i++) {
+ for (uint16_t i = 0; i < length && status >= 0; i++) {
status = i2c_write(data[i], timeout);
- if (status) return status;
}
- status = i2c_stop(timeout);
- if (status) return status;
+ i2c_stop();
- return I2C_STATUS_SUCCESS;
+ return status;
}
-i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(address | I2C_READ, timeout);
- if (status) return status;
- for (uint16_t i = 0; i < (length-1); i++) {
+ for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {
status = i2c_read_ack(timeout);
if (status >= 0) {
data[i] = status;
- } else {
- return status;
}
}
- status = i2c_read_nack(timeout);
- if (status >= 0 ) {
- data[(length-1)] = status;
- } else {
- return status;
+ if (status >= 0) {
+ status = i2c_read_nack(timeout);
+ if (status >= 0) {
+ data[(length - 1)] = status;
+ }
}
- status = i2c_stop(timeout);
- if (status) return status;
+ i2c_stop();
- return I2C_STATUS_SUCCESS;
+ return status;
}
-i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(devaddr | 0x00, timeout);
- if (status) return status;
-
- status = i2c_write(regaddr, timeout);
- if (status) return status;
+ if (status >= 0) {
+ status = i2c_write(regaddr, timeout);
- for (uint16_t i = 0; i < length; i++) {
- status = i2c_write(data[i], timeout);
- if (status) return status;
+ for (uint16_t i = 0; i < length && status >= 0; i++) {
+ status = i2c_write(data[i], timeout);
+ }
}
- status = i2c_stop(timeout);
- if (status) return status;
+ i2c_stop();
- return I2C_STATUS_SUCCESS;
+ return status;
}
-i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_status_t status = i2c_start(devaddr, timeout);
- if (status) return status;
+ if (status < 0) {
+ goto error;
+ }
status = i2c_write(regaddr, timeout);
- if (status) return status;
-
- status = i2c_stop(timeout);
- if (status) return status;
+ if (status < 0) {
+ goto error;
+ }
status = i2c_start(devaddr | 0x01, timeout);
- if (status) return status;
- for (uint16_t i = 0; i < (length-1); i++) {
+ for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {
status = i2c_read_ack(timeout);
if (status >= 0) {
data[i] = status;
- } else {
- return status;
}
}
- status = i2c_read_nack(timeout);
- if (status >= 0 ) {
- data[(length-1)] = status;
- } else {
- return status;
+ if (status >= 0) {
+ status = i2c_read_nack(timeout);
+ if (status >= 0) {
+ data[(length - 1)] = status;
+ }
}
- status = i2c_stop(timeout);
- if (status) return status;
+error:
+ i2c_stop();
- return I2C_STATUS_SUCCESS;
+ return status;
}
-i2c_status_t i2c_stop(uint16_t timeout)
-{
+void i2c_stop(void) {
// transmit STOP condition
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t timeout_timer = timer_read();
- while(TWCR & (1<<TWSTO)) {
- if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
- return I2C_STATUS_TIMEOUT;
- }
- }
-
- return I2C_STATUS_SUCCESS;
+ TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
}
diff --git a/drivers/avr/i2c_master.h b/drivers/avr/i2c_master.h
index 89c64599c5..81a7fb5e32 100755
--- a/drivers/avr/i2c_master.h
+++ b/drivers/avr/i2c_master.h
@@ -26,6 +26,6 @@ i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint1
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
-i2c_status_t i2c_stop(uint16_t timeout);
+void i2c_stop(void);
#endif // I2C_MASTER_H \ No newline at end of file
diff --git a/drivers/avr/i2c_slave.c b/drivers/avr/i2c_slave.c
index 18a29a45a5..dbb9fb0df3 100755
--- a/drivers/avr/i2c_slave.c
+++ b/drivers/avr/i2c_slave.c
@@ -16,7 +16,7 @@ static volatile bool slave_has_register_set = false;
void i2c_slave_init(uint8_t address){
// load address into TWI address register
- TWAR = (address << 1);
+ TWAR = address;
// set the TWCR to enable address matching and enable TWI, clear TWINT, enable TWI interrupt
TWCR = (1 << TWIE) | (1 << TWEA) | (1 << TWINT) | (1 << TWEN);
}
diff --git a/keyboards/cannonkeys/satisfaction75/i2c_master.c b/keyboards/cannonkeys/satisfaction75/i2c_master.c
index a19dbcc9f5..d81eb92d49 100644
--- a/keyboards/cannonkeys/satisfaction75/i2c_master.c
+++ b/keyboards/cannonkeys/satisfaction75/i2c_master.c
@@ -109,7 +109,7 @@ uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t l
}
// This is usually not needed. It releases the driver to allow pins to become GPIO again.
-uint8_t i2c_stop(uint16_t timeout)
+uint8_t i2c_stop(void)
{
i2cStop(&I2C_DRIVER);
return 0;
diff --git a/keyboards/dc01/left/matrix.c b/keyboards/dc01/left/matrix.c
index cbe3b3f3d8..a3db220e4f 100644
--- a/keyboards/dc01/left/matrix.c
+++ b/keyboards/dc01/left/matrix.c
@@ -455,10 +455,10 @@ i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset)
matrix[MATRIX_ROWS - 1] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end
} else {
- i2c_stop(10);
+ i2c_stop();
return 1;
}
- i2c_stop(10);
+ i2c_stop();
return 0;
} \ No newline at end of file
diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c
index 3b2c943506..b27a6b89da 100644
--- a/keyboards/ergodox_ez/ergodox_ez.c
+++ b/keyboards/ergodox_ez/ergodox_ez.c
@@ -128,7 +128,7 @@ uint8_t init_mcp23018(void) {
mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b00000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
// set pull-up
// - unused : on : 1
@@ -140,7 +140,7 @@ uint8_t init_mcp23018(void) {
mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
out:
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
#ifdef LEFT_LEDS
if (!mcp23018_status) mcp23018_status = ergodox_left_leds_update();
@@ -179,7 +179,7 @@ uint8_t ergodox_left_leds_update(void) {
if (mcp23018_status) goto out;
out:
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
return mcp23018_status;
}
#endif
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c
index 22837d312a..860cf7b229 100644
--- a/keyboards/ergodox_ez/matrix.c
+++ b/keyboards/ergodox_ez/matrix.c
@@ -309,7 +309,7 @@ static matrix_row_t read_cols(uint8_t row)
data = ~((uint8_t)mcp23018_status);
mcp23018_status = I2C_STATUS_SUCCESS;
out:
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
return data;
}
} else {
@@ -362,7 +362,7 @@ static void select_row(uint8_t row)
mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
out:
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
}
} else {
// select on teensy
diff --git a/keyboards/gergo/gergo.c b/keyboards/gergo/gergo.c
index d32792e2a8..cc0bef391d 100644
--- a/keyboards/gergo/gergo.c
+++ b/keyboards/gergo/gergo.c
@@ -47,7 +47,7 @@ uint8_t init_mcp23018(void) {
mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
// set pull-up
// - unused : on : 1
@@ -59,7 +59,7 @@ uint8_t init_mcp23018(void) {
mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
out:
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
// SREG=sreg_prev;
//uprintf("Init %x\n", mcp23018_status);
return mcp23018_status;
diff --git a/keyboards/gergo/matrix.c b/keyboards/gergo/matrix.c
index 29fe48ccb3..9886ecf153 100644
--- a/keyboards/gergo/matrix.c
+++ b/keyboards/gergo/matrix.c
@@ -72,14 +72,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//Trackball pin defs
#define TRKUP (1<<4)
#define TRKDN (1<<5)
-#define TRKLT (1<<6)
+#define TRKLT (1<<6)
#define TRKRT (1<<7)
#define TRKBTN (1<<6)
// Multiple for mouse moves
#ifndef TRKSTEP
-#define TRKSTEP 20
+#define TRKSTEP 20
#endif
// multiple for mouse scroll
@@ -98,13 +98,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Trackball interrupts accumulate over here. Processed on scan
// Stores prev state of mouse, high bits store direction
-uint8_t trkState = 0;
-uint8_t trkBtnState = 0;
+uint8_t trkState = 0;
+uint8_t trkBtnState = 0;
-volatile uint8_t tbUpCnt = 0;
-volatile uint8_t tbDnCnt = 0;
-volatile uint8_t tbLtCnt = 0;
-volatile uint8_t tbRtCnt = 0;
+volatile uint8_t tbUpCnt = 0;
+volatile uint8_t tbDnCnt = 0;
+volatile uint8_t tbLtCnt = 0;
+volatile uint8_t tbRtCnt = 0;
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
@@ -240,14 +240,14 @@ uint8_t matrix_scan(void)
// First we handle the mouse inputs
#ifdef BALLER
uint8_t pBtn = PINE & TRKBTN;
-
+
#ifdef DEBUG_BALLER
- // Compare to previous, mod report
+ // Compare to previous, mod report
if (tbUpCnt + tbDnCnt + tbLtCnt + tbRtCnt != 0)
xprintf("U: %d D: %d L: %d R: %d B: %d\n", tbUpCnt, tbDnCnt, tbLtCnt, tbRtCnt, (trkBtnState >> 6));
#endif
- // Modify the report
+ // Modify the report
report_mouse_t pRprt = pointing_device_get_report();
// Scroll by default, move on layer
@@ -264,7 +264,7 @@ uint8_t matrix_scan(void)
}
#ifdef DEBUG_BALLER
- if (pRprt.x != 0 || pRprt.y != 0)
+ if (pRprt.x != 0 || pRprt.y != 0)
xprintf("X: %d Y: %d\n", pRprt.x, pRprt.y);
#endif
@@ -272,7 +272,7 @@ uint8_t matrix_scan(void)
if ((pBtn != trkBtnState) && ((pBtn >> 6) == 1)) pRprt.buttons &= ~MOUSE_BTN1;
// Save state, push update
- if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
+ if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
pointing_device_set_report(pRprt);
trkBtnState = pBtn;
@@ -325,8 +325,8 @@ uint8_t matrix_scan(void)
enableInterrupts();
#ifdef DEBUG_MATRIX
- for (uint8_t c = 0; c < MATRIX_COLS; c++)
- for (uint8_t r = 0; r < MATRIX_ROWS; r++)
+ for (uint8_t c = 0; c < MATRIX_COLS; c++)
+ for (uint8_t r = 0; r < MATRIX_ROWS; r++)
if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
#endif
@@ -394,7 +394,7 @@ static matrix_row_t read_cols(uint8_t row)
data = ~((uint8_t)mcp23018_status);
mcp23018_status = I2C_STATUS_SUCCESS;
out:
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
#ifdef DEBUG_MATRIX
if (data != 0x00) xprintf("I2C: %d\n", data);
@@ -439,12 +439,12 @@ static void select_row(uint8_t row)
if (row < 7) {
// select on mcp23018
if (mcp23018_status) { // do nothing on error
- } else { // set active row low : 0 // set other rows hi-Z : 1
+ } else { // set active row low : 0 // set other rows hi-Z : 1
mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT); if (mcp23018_status) goto out;
out:
- i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_stop();
}
} else {
// Output low(DDR:1, PORT:0) to select
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 9d2d331ce5..eef739a14a 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -29,10 +29,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "backlight.h"
#include "quantum.h"
-#ifdef SPLIT_KEYBOARD
- #include "split_flags.h"
-#endif
-
#ifdef MIDI_ENABLE
#include "process_midi.h"
#endif
@@ -138,39 +134,21 @@ action_t action_for_key(uint8_t layer, keypos_t key)
#ifdef BACKLIGHT_ENABLE
case BL_ON:
action.code = ACTION_BACKLIGHT_ON();
- #ifdef SPLIT_KEYBOARD
- BACKLIT_DIRTY = true;
- #endif
break;
case BL_OFF:
action.code = ACTION_BACKLIGHT_OFF();
- #ifdef SPLIT_KEYBOARD
- BACKLIT_DIRTY = true;
- #endif
break;
case BL_DEC:
action.code = ACTION_BACKLIGHT_DECREASE();
- #ifdef SPLIT_KEYBOARD
- BACKLIT_DIRTY = true;
- #endif
break;
case BL_INC:
action.code = ACTION_BACKLIGHT_INCREASE();
- #ifdef SPLIT_KEYBOARD
- BACKLIT_DIRTY = true;
- #endif
break;
case BL_TOGG:
action.code = ACTION_BACKLIGHT_TOGGLE();
- #ifdef SPLIT_KEYBOARD
- BACKLIT_DIRTY = true;
- #endif
break;
case BL_STEP:
action.code = ACTION_BACKLIGHT_STEP();
- #ifdef SPLIT_KEYBOARD
- BACKLIT_DIRTY = true;
- #endif
break;
#endif
#ifdef SWAP_HANDS_ENABLE
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 46d404029f..8316d1f06a 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -360,9 +360,6 @@ bool process_record_quantum(keyrecord_t *record) {
if (!record->event.pressed) {
#endif
rgblight_toggle();
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_MODE_FORWARD:
@@ -374,9 +371,6 @@ bool process_record_quantum(keyrecord_t *record) {
else {
rgblight_step();
}
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_MODE_REVERSE:
@@ -388,9 +382,6 @@ bool process_record_quantum(keyrecord_t *record) {
else {
rgblight_step_reverse();
}
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_HUI:
@@ -401,9 +392,6 @@ bool process_record_quantum(keyrecord_t *record) {
if (!record->event.pressed) {
#endif
rgblight_increase_hue();
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_HUD:
@@ -414,9 +402,6 @@ bool process_record_quantum(keyrecord_t *record) {
if (!record->event.pressed) {
#endif
rgblight_decrease_hue();
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_SAI:
@@ -427,9 +412,6 @@ bool process_record_quantum(keyrecord_t *record) {
if (!record->event.pressed) {
#endif
rgblight_increase_sat();
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_SAD:
@@ -440,9 +422,6 @@ bool process_record_quantum(keyrecord_t *record) {
if (!record->event.pressed) {
#endif
rgblight_decrease_sat();
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_VAI:
@@ -453,9 +432,6 @@ bool process_record_quantum(keyrecord_t *record) {
if (!record->event.pressed) {
#endif
rgblight_increase_val();
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_VAD:
@@ -466,9 +442,6 @@ bool process_record_quantum(keyrecord_t *record) {
if (!record->event.pressed) {
#endif
rgblight_decrease_val();
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_SPI:
@@ -484,9 +457,6 @@ bool process_record_quantum(keyrecord_t *record) {
case RGB_MODE_PLAIN:
if (record->event.pressed) {
rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
- #ifdef SPLIT_KEYBOARD
- RGB_DIRTY = true;
- #endif
}
return false;
case RGB_MODE_BREATHE:
diff --git a/quantum/quantum.h b/quantum/quantum.h
index d2c5862f88..c12ac9ab8a 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -44,10 +44,6 @@
#endif
#endif
-#ifdef SPLIT_KEYBOARD
- #include "split_flags.h"
-#endif
-
#ifdef RGB_MATRIX_ENABLE
#include "rgb_matrix.h"
#endif
diff --git a/quantum/split_common/i2c.c b/quantum/split_common/i2c.c
deleted file mode 100644
index 45e958b395..0000000000
--- a/quantum/split_common/i2c.c
+++ /dev/null
@@ -1,184 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-#include "split_flags.h"
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-uint8_t