remember which devices were scanned on which bus and set them accordingly.

This commit is contained in:
Thomas Göttgens
2022-11-12 17:12:40 +01:00
parent 7a67388a97
commit 861ded37db
23 changed files with 177 additions and 119 deletions

View File

@@ -1,52 +1,59 @@
#include "kbI2cBase.h"
#include "configuration.h"
#include "main.h"
#include <Wire.h>
extern uint8_t cardkb_found;
extern uint8_t kb_model;
KbI2cBase::KbI2cBase(const char *name) : concurrency::OSThread(name)
{
this->_originName = name;
}
uint8_t read_from_14004(uint8_t reg, uint8_t *data, uint8_t length)
uint8_t read_from_14004(uint8_t reg, uint8_t *data, uint8_t length, TwoWire myWire)
{
uint8_t readflag = 0;
Wire.beginTransmission(CARDKB_ADDR);
Wire.write(reg);
Wire.endTransmission(); // stop transmitting
myWire.beginTransmission(CARDKB_ADDR);
myWire.write(reg);
myWire.endTransmission(); // stop transmitting
delay(20);
Wire.requestFrom(CARDKB_ADDR, (int)length);
myWire.requestFrom(CARDKB_ADDR, (int)length);
int i = 0;
while ( Wire.available() ) // slave may send less than requested
while ( myWire.available() ) // slave may send less than requested
{
data[i++] = Wire.read(); // receive a byte as a proper uint8_t
data[i++] = myWire.read(); // receive a byte as a proper uint8_t
readflag = 1;
}
return readflag;
}
void write_to_14004(uint8_t reg, uint8_t data)
void write_to_14004(uint8_t reg, uint8_t data, TwoWire myWire)
{
Wire.beginTransmission(CARDKB_ADDR);
Wire.write(reg);
Wire.write(data);
Wire.endTransmission(); // stop transmitting
myWire.beginTransmission(CARDKB_ADDR);
myWire.write(reg);
myWire.write(data);
myWire.endTransmission(); // stop transmitting
}
int32_t KbI2cBase::runOnce()
{
if (cardkb_found != CARDKB_ADDR){
if (i2cScanMap[CARDKB_ADDR].addr != CARDKB_ADDR) {
// Input device is not detected.
return INT32_MAX;
}
TwoWire myWire = Wire;
if (i2cScanMap[CARDKB_ADDR].bus == 1) {
#ifdef I2C_SDA1
myWire = Wire1;
#endif
}
if (kb_model == 0x02) {
// RAK14004
uint8_t rDataBuf[8] = {0};
uint8_t PrintDataBuf = 0;
if (read_from_14004(0x01, rDataBuf, 0x04) == 1) {
if (read_from_14004(0x01, rDataBuf, 0x04, myWire) == 1) {
for (uint8_t aCount = 0; aCount < 0x04; aCount++) {
for (uint8_t bCount = 0; bCount < 0x04; bCount++ ) {
if (((rDataBuf[aCount] >> bCount) & 0x01) == 0x01) {
@@ -65,10 +72,10 @@ int32_t KbI2cBase::runOnce()
}
} else {
// m5 cardkb
Wire.requestFrom(CARDKB_ADDR, 1);
myWire.requestFrom(CARDKB_ADDR, 1);
while (Wire.available()) {
char c = Wire.read();
while (myWire.available()) {
char c = myWire.read();
InputEvent e;
e.inputEvent = ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
e.source = this->_originName;