From f68ac4377a29a121a47b6313eb537f46845d0cb8 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:57:27 +0200 Subject: [PATCH] Fix udisplay positional replacements (#21121) --- lib/lib_display/UDisplay/uDisplay.cpp | 3 +- .../xdsp_17_universal.ino | 33 +++++++++++-------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/lib_display/UDisplay/uDisplay.cpp b/lib/lib_display/UDisplay/uDisplay.cpp index 3d410a679..9be4d2e72 100755 --- a/lib/lib_display/UDisplay/uDisplay.cpp +++ b/lib/lib_display/UDisplay/uDisplay.cpp @@ -1074,10 +1074,11 @@ Renderer *uDisplay::Init(void) { wire = &Wire1; } #endif // ESP32 +/* if (i2c_sda != i2c_scl) { wire->begin(i2c_sda, i2c_scl); // TODO: aren't I2C buses already initialized? Shouldn't this be moved to display driver? } - +*/ #ifdef UDSP_DEBUG Serial.printf("I2C cmds: %d\n", dsp_ncmds); #endif diff --git a/tasmota/tasmota_xdsp_display/xdsp_17_universal.ino b/tasmota/tasmota_xdsp_display/xdsp_17_universal.ino index 8c07b1d56..11ec240f3 100644 --- a/tasmota/tasmota_xdsp_display/xdsp_17_universal.ino +++ b/tasmota/tasmota_xdsp_display/xdsp_17_universal.ino @@ -171,9 +171,11 @@ int8_t cs; } //,3c,22,21,-1 uint8_t i2caddr = strtol(cp, &cp, 16); - int8_t scl, sda; - scl = replacepin(&cp, Pin(GPIO_I2C_SCL, wire_n - 1)); - sda = replacepin(&cp, Pin(GPIO_I2C_SDA, wire_n - 1)); + //,22,21,-1 + cp++; + //22,21,-1 + int8_t scl = replacepin(&cp, Pin(GPIO_I2C_SCL, wire_n - 1)); + int8_t sda = replacepin(&cp, Pin(GPIO_I2C_SDA, wire_n - 1)); replacepin(&cp, Pin(GPIO_OLED_RESET)); if (wire_n == 1) { @@ -346,19 +348,17 @@ int8_t cs; cp += 2; uint8_t i2caddr = strtol(cp, &cp, 16); - int8_t scl, sda, irq = -1, rst = -1; - scl = replacepin(&cp, Pin(GPIO_I2C_SCL, wire_n)); - sda = replacepin(&cp, Pin(GPIO_I2C_SDA, wire_n)); + cp++; + int8_t scl = replacepin(&cp, Pin(GPIO_I2C_SCL, wire_n)); + int8_t sda = replacepin(&cp, Pin(GPIO_I2C_SDA, wire_n)); + int8_t irq = -1; if (*(cp - 1) == ',') { irq = strtol(cp, &cp, 10); - } else { - irq = -1; } + int8_t rst = -1; if (*cp == ',') { cp++; rst = strtol(cp, &cp, 10); - } else { - rst = -1; } if (wire_n == 0) { @@ -523,16 +523,21 @@ int8_t cs; int8_t replacepin(char **cp, int16_t pin) { int8_t res = 0; char *lp = *cp; - if (*lp == ',') lp++; - if (*lp == '*') { + // cp = 6,*,* and pin = 4 => lp = 6,*,* and cp = *,* + // cp = *,*,* and pin = 4 => lp = 4,*,* and cp = *,* + // cp = ,*,* and pin = 4 => lp = 4,*,* and cp = *,* + if ((*lp == '*') || (*lp == ',')) { char val[8]; itoa(pin, val, 10); uint16_t slen = strlen(val); //AddLog(LOG_LEVEL_INFO, PSTR("replace pin: %d"), pin); - memmove(lp + slen, lp + 1, strlen(lp)); + uint32_t idx = 0; + if (*lp == '*') { idx++; } + memmove(lp + slen, lp + idx, strlen(lp)); memmove(lp, val, slen); } - res= strtol(lp, 0, 10); + + res = strtol(lp, 0, 10); char *np = strchr(lp, ','); if (np) { *cp = np + 1;