mirror of
https://github.com/wled/WLED.git
synced 2025-07-10 12:26:31 +00:00
Merge pull request #4312 from willmmiles/mixed-led-crash
Defer calling begin() on buses
This commit is contained in:
commit
2448e2ae3b
@ -1286,14 +1286,9 @@ void WS2812FX::finalizeInit() {
|
|||||||
_isOffRefreshRequired |= bus->isOffRefreshRequired() && !bus->isPWM(); // use refresh bit for phase shift with analog
|
_isOffRefreshRequired |= bus->isOffRefreshRequired() && !bus->isPWM(); // use refresh bit for phase shift with analog
|
||||||
unsigned busEnd = bus->getStart() + bus->getLength();
|
unsigned busEnd = bus->getStart() + bus->getLength();
|
||||||
if (busEnd > _length) _length = busEnd;
|
if (busEnd > _length) _length = busEnd;
|
||||||
#ifdef ESP8266
|
|
||||||
// why do we need to reinitialise GPIO3???
|
// This must be done after all buses have been created, as some kinds (parallel I2S) interact
|
||||||
//if (!bus->isDigital() || bus->is2Pin()) continue;
|
bus->begin();
|
||||||
//uint8_t pins[5];
|
|
||||||
//if (!bus->getPins(pins)) continue;
|
|
||||||
//BusDigital* bd = static_cast<BusDigital*>(bus);
|
|
||||||
//if (pins[0] == 3) bd->reinit();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Segment::maxWidth = _length;
|
Segment::maxWidth = _length;
|
||||||
|
@ -410,7 +410,7 @@ std::vector<LEDType> BusDigital::getLEDTypes() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void BusDigital::reinit() {
|
void BusDigital::begin() {
|
||||||
if (!_valid) return;
|
if (!_valid) return;
|
||||||
PolyBus::begin(_busPtr, _iType, _pins);
|
PolyBus::begin(_busPtr, _iType, _pins);
|
||||||
}
|
}
|
||||||
@ -910,7 +910,7 @@ void BusManager::on() {
|
|||||||
if (busses[i]->isDigital() && busses[i]->getPins(pins)) {
|
if (busses[i]->isDigital() && busses[i]->getPins(pins)) {
|
||||||
if (pins[0] == LED_BUILTIN || pins[1] == LED_BUILTIN) {
|
if (pins[0] == LED_BUILTIN || pins[1] == LED_BUILTIN) {
|
||||||
BusDigital *bus = static_cast<BusDigital*>(busses[i]);
|
BusDigital *bus = static_cast<BusDigital*>(busses[i]);
|
||||||
bus->reinit();
|
bus->begin();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,7 @@ class Bus {
|
|||||||
|
|
||||||
virtual ~Bus() {} //throw the bus under the bus
|
virtual ~Bus() {} //throw the bus under the bus
|
||||||
|
|
||||||
|
virtual void begin() {};
|
||||||
virtual void show() = 0;
|
virtual void show() = 0;
|
||||||
virtual bool canShow() const { return true; }
|
virtual bool canShow() const { return true; }
|
||||||
virtual void setStatusPixel(uint32_t c) {}
|
virtual void setStatusPixel(uint32_t c) {}
|
||||||
@ -213,7 +214,7 @@ class BusDigital : public Bus {
|
|||||||
uint16_t getLEDCurrent() const override { return _milliAmpsPerLed; }
|
uint16_t getLEDCurrent() const override { return _milliAmpsPerLed; }
|
||||||
uint16_t getUsedCurrent() const override { return _milliAmpsTotal; }
|
uint16_t getUsedCurrent() const override { return _milliAmpsTotal; }
|
||||||
uint16_t getMaxCurrent() const override { return _milliAmpsMax; }
|
uint16_t getMaxCurrent() const override { return _milliAmpsMax; }
|
||||||
void reinit();
|
void begin() override;
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
static std::vector<LEDType> getLEDTypes();
|
static std::vector<LEDType> getLEDTypes();
|
||||||
|
@ -597,7 +597,7 @@ class PolyBus {
|
|||||||
case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break;
|
case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break;
|
||||||
case I_SS_P98_3: busPtr = new B_SS_P98_3(len, pins[1], pins[0]); break;
|
case I_SS_P98_3: busPtr = new B_SS_P98_3(len, pins[1], pins[0]); break;
|
||||||
}
|
}
|
||||||
begin(busPtr, busType, pins, clock_kHz);
|
|
||||||
return busPtr;
|
return busPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user