Use refernece to avoid ctor/dtor

Use PinManager to determine reserved pins
This commit is contained in:
Blaz Kristan 2024-09-14 14:54:42 +02:00
parent e3d9417b84
commit 81e412fe5b
2 changed files with 20 additions and 32 deletions

View File

@ -1271,7 +1271,7 @@ void WS2812FX::finalizeInit() {
bool clash; bool clash;
do { do {
clash = false; clash = false;
for (const auto pin : defDataPins) { for (const auto &pin : defDataPins) {
if (pin == defPin[j]) { if (pin == defPin[j]) {
defPin[j]++; defPin[j]++;
if (defPin[j] < WLED_NUM_PINS) clash = true; if (defPin[j] < WLED_NUM_PINS) clash = true;

View File

@ -121,6 +121,7 @@ void fillUMPins(JsonObject &mods)
void appendGPIOinfo() { void appendGPIOinfo() {
char nS[8]; char nS[8];
// add usermod pins as d.um_p array
oappend(SET_F("d.um_p=[-1")); // has to have 1 element oappend(SET_F("d.um_p=[-1")); // has to have 1 element
if (i2c_sda > -1 && i2c_scl > -1) { if (i2c_sda > -1 && i2c_scl > -1) {
oappend(","); oappend(itoa(i2c_sda,nS,10)); oappend(","); oappend(itoa(i2c_sda,nS,10));
@ -140,54 +141,41 @@ void appendGPIOinfo() {
} }
oappend(SET_F("];")); oappend(SET_F("];"));
// add reserved and usermod pins as d.um_p array // add reserved (unusable) pins
#if defined(CONFIG_IDF_TARGET_ESP32S2) oappend(SET_F("d.rsvd=["));
oappend(SET_F("d.rsvd=[22,23,24,25,26,27,28,29,30,31,32")); for (unsigned i = 0; i < WLED_NUM_PINS; i++) {
#elif defined(CONFIG_IDF_TARGET_ESP32S3) if (!pinManager.isPinOk(i, false)) { // include readonly pins
oappend(SET_F("d.rsvd=[19,20,22,23,24,25,26,27,28,29,30,31,32")); // includes 19+20 for USB OTG (JTAG) oappendi(i); oappend(",");
if (psramFound()) oappend(SET_F(",33,34,35,36,37")); // in use for "octal" PSRAM or "octal" FLASH -seems that octal PSRAM is very common on S3. }
#elif defined(CONFIG_IDF_TARGET_ESP32C3) }
oappend(SET_F("d.rsvd=[11,12,13,14,15,16,17"));
#elif defined(ESP32)
oappend(SET_F("d.rsvd=[6,7,8,9,10,11,24,28,29,30,31,37,38"));
if (!pinManager.isPinOk(16,false)) oappend(SET_F(",16")); // covers PICO & WROVER
if (!pinManager.isPinOk(17,false)) oappend(SET_F(",17")); // covers PICO & WROVER
#else
oappend(SET_F("d.rsvd=[6,7,8,9,10,11"));
#endif
#ifdef WLED_ENABLE_DMX #ifdef WLED_ENABLE_DMX
oappend(SET_F(",2")); // DMX hardcoded pin oappend(SET_F("2,")); // DMX hardcoded pin
#endif #endif
#if defined(WLED_DEBUG) && !defined(WLED_DEBUG_HOST) #if defined(WLED_DEBUG) && !defined(WLED_DEBUG_HOST)
oappend(SET_F(",")); oappend(itoa(hardwareTX,nS,10)); // debug output (TX) pin oappend(itoa(hardwareTX,nS,10)); oappend(","); // debug output (TX) pin
#endif #endif
//Note: Using pin 3 (RX) disables Adalight / Serial JSON //Note: Using pin 3 (RX) disables Adalight / Serial JSON
#ifdef WLED_USE_ETHERNET #ifdef WLED_USE_ETHERNET
if (ethernetType != WLED_ETH_NONE && ethernetType < WLED_NUM_ETH_TYPES) { if (ethernetType != WLED_ETH_NONE && ethernetType < WLED_NUM_ETH_TYPES) {
for (unsigned p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) { oappend(","); oappend(itoa(esp32_nonconfigurable_ethernet_pins[p].pin,nS,10)); } for (unsigned p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) { oappend(itoa(esp32_nonconfigurable_ethernet_pins[p].pin,nS,10)); oappend(","); }
if (ethernetBoards[ethernetType].eth_power>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_power,nS,10)); } if (ethernetBoards[ethernetType].eth_power>=0) { oappend(itoa(ethernetBoards[ethernetType].eth_power,nS,10)); oappend(","); }
if (ethernetBoards[ethernetType].eth_mdc>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_mdc,nS,10)); } if (ethernetBoards[ethernetType].eth_mdc>=0) { oappend(itoa(ethernetBoards[ethernetType].eth_mdc,nS,10)); oappend(","); }
if (ethernetBoards[ethernetType].eth_mdio>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_mdio,nS,10)); } if (ethernetBoards[ethernetType].eth_mdio>=0) { oappend(itoa(ethernetBoards[ethernetType].eth_mdio,nS,10)); oappend(","); }
switch (ethernetBoards[ethernetType].eth_clk_mode) { switch (ethernetBoards[ethernetType].eth_clk_mode) {
case ETH_CLOCK_GPIO0_IN: case ETH_CLOCK_GPIO0_IN:
case ETH_CLOCK_GPIO0_OUT: case ETH_CLOCK_GPIO0_OUT:
oappend(SET_F(",0")); oappend(SET_F("0"));
break; break;
case ETH_CLOCK_GPIO16_OUT: case ETH_CLOCK_GPIO16_OUT:
oappend(SET_F(",16")); oappend(SET_F("16"));
break; break;
case ETH_CLOCK_GPIO17_OUT: case ETH_CLOCK_GPIO17_OUT:
oappend(SET_F(",17")); oappend(SET_F("17"));
break; break;
} }
} }
#endif #endif
oappend(SET_F("];")); // rsvd
oappend(SET_F("];"));
// add info for read-only GPIO // add info for read-only GPIO
oappend(SET_F("d.ro_gpio=[")); oappend(SET_F("d.ro_gpio=["));