|
|
|
@ -102,7 +102,7 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, |
|
|
|
|
i2cStart(&I2C_DRIVER, &i2cconfig); |
|
|
|
|
|
|
|
|
|
uint8_t complete_packet[length + 1]; |
|
|
|
|
for (uint8_t i = 0; i < length; i++) { |
|
|
|
|
for (uint16_t i = 0; i < length; i++) { |
|
|
|
|
complete_packet[i + 1] = data[i]; |
|
|
|
|
} |
|
|
|
|
complete_packet[0] = regaddr; |
|
|
|
@ -111,6 +111,21 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, |
|
|
|
|
return chibios_to_qmk(&status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { |
|
|
|
|
i2c_address = devaddr; |
|
|
|
|
i2cStart(&I2C_DRIVER, &i2cconfig); |
|
|
|
|
|
|
|
|
|
uint8_t complete_packet[length + 2]; |
|
|
|
|
for (uint16_t i = 0; i < length; i++) { |
|
|
|
|
complete_packet[i + 2] = data[i]; |
|
|
|
|
} |
|
|
|
|
complete_packet[0] = regaddr >> 8; |
|
|
|
|
complete_packet[1] = regaddr & 0xFF; |
|
|
|
|
|
|
|
|
|
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), complete_packet, length + 2, 0, 0, TIME_MS2I(timeout)); |
|
|
|
|
return chibios_to_qmk(&status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { |
|
|
|
|
i2c_address = devaddr; |
|
|
|
|
i2cStart(&I2C_DRIVER, &i2cconfig); |
|
|
|
@ -118,4 +133,12 @@ i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16 |
|
|
|
|
return chibios_to_qmk(&status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { |
|
|
|
|
i2c_address = devaddr; |
|
|
|
|
i2cStart(&I2C_DRIVER, &i2cconfig); |
|
|
|
|
uint8_t register_packet[2] = {regaddr >> 8, regaddr & 0xFF}; |
|
|
|
|
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), ®ister_packet, 2, data, length, TIME_MS2I(timeout)); |
|
|
|
|
return chibios_to_qmk(&status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void i2c_stop(void) { i2cStop(&I2C_DRIVER); } |
|
|
|
|