It's alive!!!! i2c2 that is!

This commit is contained in:
Drashna Jael're
2021-06-14 14:08:30 -07:00
parent 69b6931577
commit 29456f7b6b
5 changed files with 23 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
// Copyright (c) 2018 Cirque Corp. Restrictions apply. See: www.cirque.com/sw-license
#include "i2c_master.h"
#include "i2c2_master.h"
#include "cirque_tm040040.h"
#include "pointing_device.h"
@@ -71,6 +71,7 @@ void pointing_device_task(void) {
/* Pinnacle-based TM040040 Functions */
void pointing_device_init(void) {
i2c2_init();
// Host clears SW_CC flag
Pinnacle_ClearFlags();
@@ -185,19 +186,19 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
uint8_t cmdByte = READ_MASK | address; // Form the READ command byte
// uint8_t i = 0;
i2c_start(SLAVE_ADDR << 1);
i2c_writeReg(SLAVE_ADDR << 1, cmdByte, NULL, 0, I2C_TIMEOUT);
i2c_readReg(SLAVE_ADDR << 1, cmdByte, data, count, I2C_TIMEOUT);
i2c_stop();
i2c2_start(SLAVE_ADDR << 1);
i2c2_writeReg(SLAVE_ADDR << 1, cmdByte, NULL, 0, I2C_TIMEOUT);
i2c2_readReg(SLAVE_ADDR << 1, cmdByte, data, count, I2C_TIMEOUT);
i2c2_stop();
}
// Writes single-byte <data> to <address>
void RAP_Write(uint8_t address, uint8_t data) {
uint8_t cmdByte = WRITE_MASK | address; // Form the WRITE command byte
i2c_start(SLAVE_ADDR << 1);
i2c_writeReg(SLAVE_ADDR << 1, cmdByte, &data, sizeof(data), I2C_TIMEOUT);
i2c_stop();
i2c2_start(SLAVE_ADDR << 1);
i2c2_writeReg(SLAVE_ADDR << 1, cmdByte, &data, sizeof(data), I2C_TIMEOUT);
i2c2_stop();
}
/* Logical Scaling Functions */

View File

@@ -79,27 +79,27 @@ __attribute__((weak)) void i2c2_init(void) {
i2c_status_t i2c2_start(uint8_t address) {
i2c_address = address;
i2cStart(&I2C_DRIVER, &i2cconfig);
i2cStart(&I2C2_DRIVER, &i2cconfig);
return I2C_STATUS_SUCCESS;
}
i2c_status_t i2c2_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_address = address;
i2cStart(&I2C_DRIVER, &i2cconfig);
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, 0, 0, TIME_MS2I(timeout));
i2cStart(&I2C2_DRIVER, &i2cconfig);
msg_t status = i2cMasterTransmitTimeout(&I2C2_DRIVER, (i2c_address >> 1), data, length, 0, 0, TIME_MS2I(timeout));
return chibios_to_qmk(&status);
}
i2c_status_t i2c2_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_address = address;
i2cStart(&I2C_DRIVER, &i2cconfig);
msg_t status = i2cMasterReceiveTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, TIME_MS2I(timeout));
i2cStart(&I2C2_DRIVER, &i2cconfig);
msg_t status = i2cMasterReceiveTimeout(&I2C2_DRIVER, (i2c_address >> 1), data, length, TIME_MS2I(timeout));
return chibios_to_qmk(&status);
}
i2c_status_t i2c2_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig);
i2cStart(&I2C2_DRIVER, &i2cconfig);
uint8_t complete_packet[length + 1];
for (uint8_t i = 0; i < length; i++) {
@@ -107,15 +107,15 @@ i2c_status_t i2c2_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data
}
complete_packet[0] = regaddr;
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), complete_packet, length + 1, 0, 0, TIME_MS2I(timeout));
msg_t status = i2cMasterTransmitTimeout(&I2C2_DRIVER, (i2c_address >> 1), complete_packet, length + 1, 0, 0, TIME_MS2I(timeout));
return chibios_to_qmk(&status);
}
i2c_status_t i2c2_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig);
msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), &regaddr, 1, data, length, TIME_MS2I(timeout));
i2cStart(&I2C2_DRIVER, &i2cconfig);
msg_t status = i2cMasterTransmitTimeout(&I2C2_DRIVER, (i2c_address >> 1), &regaddr, 1, data, length, TIME_MS2I(timeout));
return chibios_to_qmk(&status);
}
void i2c2_stop(void) { i2cStop(&I2C_DRIVER); }
void i2c2_stop(void) { i2cStop(&I2C2_DRIVER); }

View File

@@ -77,8 +77,8 @@
# endif
#endif
#ifndef I2C_DRIVER
# define I2C_DRIVER I2CD2
#ifndef I2C2_DRIVER
# define I2C2_DRIVER I2CD2
#endif
#ifdef USE_GPIOV1

View File

@@ -23,7 +23,7 @@
// for future hardware
#undef STM32_I2C_USE_I2C2
#define STM32_I2C_USE_I2C2 TRUE
#define STM32_I2C_USE_I2C2 TRUE
#undef STM32_I2C_I2C2_IRQ_PRIORITY
#define STM32_I2C_I2C2_IRQ_PRIORITY 12

View File

@@ -159,7 +159,7 @@
* I2C driver system settings.
*/
#define STM32_I2C_USE_I2C1 TRUE
#define STM32_I2C_USE_I2C2 FALSE
#define STM32_I2C_USE_I2C2 TRUE
#define STM32_I2C_BUSY_TIMEOUT 50
#define STM32_I2C_I2C1_IRQ_PRIORITY 10
#define STM32_I2C_I2C2_IRQ_PRIORITY 10