From e48285a33a3e32754d8dde38f7b924454ec0044a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 9 May 2022 20:12:49 +0200 Subject: [PATCH] Support detecting RAK14006 KB --- src/debug/i2cScan.h | 18 +++++++++++++++++- src/main.cpp | 4 +++- src/main.h | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/debug/i2cScan.h b/src/debug/i2cScan.h index 4bfd2adf..ba5636ea 100644 --- a/src/debug/i2cScan.h +++ b/src/debug/i2cScan.h @@ -34,6 +34,7 @@ uint8_t oled_probe(byte addr) void scanI2Cdevice(void) { byte err, addr; + uint8_t r = 0x00; int nDevices = 0; for (addr = 1; addr < 127; addr++) { Wire.beginTransmission(addr); @@ -72,7 +73,22 @@ void scanI2Cdevice(void) #endif if (addr == CARDKB_ADDR) { cardkb_found = addr; - DEBUG_MSG("m5 cardKB found\n"); + // Do we have the RAK14006 instead? + Wire.beginTransmission(addr); + Wire.write(0x04); // SENSOR_GET_VERSION + Wire.endTransmission(); + delay(20); + Wire.requestFrom((int)addr, 1); + if (Wire.available()) { + r = Wire.read(); + } + if (r == 0x02) { // KEYPAD_VERSION + DEBUG_MSG("RAK14004 found\n"); + kb_model = 0x02; + } else { + DEBUG_MSG("m5 cardKB found\n"); + kb_model = 0x00; + } } if (addr == FACESKB_ADDR) { faceskb_found = addr; diff --git a/src/main.cpp b/src/main.cpp index 6845c461..51dbeb80 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -75,6 +75,8 @@ uint8_t screen_model; // The I2C address of the cardkb or RAK14004 (if found) uint8_t cardkb_found; +// 0x02 for RAK14004 and 0x00 for cardkb +uint8_t kb_model; // The I2C address of the Faces Keyboard (if found) uint8_t faceskb_found; @@ -295,7 +297,7 @@ void setup() // Don't call screen setup until after nodedb is setup (because we need // the current region name) -#if defined(ST7735_CS) || defined(HAS_EINK) +#if defined(ST7735_CS) || defined(HAS_EINK) || defined(ILI9341_DRIVER) screen->setup(); #else if (screen_found) diff --git a/src/main.h b/src/main.h index de79435b..bb262a58 100644 --- a/src/main.h +++ b/src/main.h @@ -8,6 +8,7 @@ extern uint8_t screen_found; extern uint8_t screen_model; extern uint8_t cardkb_found; +extern uint8_t kb_model; extern uint8_t faceskb_found; extern uint8_t rtc_found;