From a6dd9c737f4dbcd79f1ffb0656eb7312aeec3cc8 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Tue, 18 Oct 2022 12:06:54 +0200 Subject: [PATCH] small change: 4LD bugfix Initially i2c_sda and i2c_scl are set to "-1" in wled.h. This can cause a bootloop when trying to initialize I2C with pins (-1, -1). This fix ensures that usermod initialization will fail when SDA=-1 or SCL=-1. --- .../usermod_v2_four_line_display/usermod_v2_four_line_display.h | 2 ++ .../usermod_v2_four_line_display_ALT.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h index 3fcf6612..b4c205aa 100644 --- a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h +++ b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h @@ -175,7 +175,9 @@ class FourLineDisplayUsermod : public Usermod { if (!pinManager.allocateMultiplePins(pins, 5, po)) { type=NONE; return; } } else { isHW = (ioPin[0]==i2c_scl && ioPin[1]==i2c_sda); + //isHW = true; if (isHW) po = PinOwner::HW_I2C; // allow multiple allocations of HW I2C bus pins + if (ioPin[0] < 0 || ioPin[1] < 0) { type=NONE; return; } //WLEDSR bugfix - ensure that "final" GPIO are valid PinManagerPinType pins[2] = { { ioPin[0], true }, { ioPin[1], true } }; if (!pinManager.allocateMultiplePins(pins, 2, po)) { type=NONE; return; } } diff --git a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h index 7555933f..e599909e 100644 --- a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h +++ b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h @@ -336,8 +336,10 @@ class FourLineDisplayUsermod : public Usermod { ioPin[1] = hw_sda; } isHW = (ioPin[0]==hw_scl && ioPin[1]==hw_sda); + // isHW = true; if (isHW) po = PinOwner::HW_I2C; // allow multiple allocations of HW I2C bus pins PinManagerPinType pins[2] = { {ioPin[0], true }, { ioPin[1], true } }; + if (ioPin[0] < 0 || ioPin[1] < 0) { type=NONE; return; } //WLEDSR bugfix - ensure that "final" GPIO are valid if (!pinManager.allocateMultiplePins(pins, 2, po)) { type=NONE; return; } }