Skip to content

Commit 849e04a

Browse files
committed
Better handling of DMA re-init
1 parent 67833c5 commit 849e04a

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

wled00/FX_fcn.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void WS2812FX::init(bool supportWhite, uint16_t countPixels, bool skipFirst)
6262
_lengthRaw += LED_SKIP_AMOUNT;
6363
}
6464

65-
uint8_t pins[] = {2};
65+
uint8_t pins[] = {LEDPIN};
6666

6767
while (!busses->canAllShow()) yield();
6868
busses->removeAll();
@@ -72,6 +72,17 @@ void WS2812FX::init(bool supportWhite, uint16_t countPixels, bool skipFirst)
7272
_segments[0].stop = _length;
7373

7474
setBrightness(_brightness);
75+
76+
#ifdef ESP8266
77+
for (uint8_t i = 0; i < busses->getNumBusses(); i++) {
78+
Bus* b = busses->getBus(i);
79+
if ((!IS_DIGITAL(b->getType()) || IS_2PIN(b->getType()))) continue;
80+
uint8_t pins[5];
81+
b->getPins(pins);
82+
BusDigital* bd = static_cast<BusDigital*>(b);
83+
if (pins[0] == 3) bd->reinit();
84+
}
85+
#endif
7586
}
7687

7788
void WS2812FX::service() {

wled00/bus_manager.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ class BusDigital : public Bus {
102102
}
103103

104104
void setBrightness(uint8_t b) {
105-
//Fix for turning off onboard LED breaking bus and quick fix for DMA not initializing correctly
105+
//Fix for turning off onboard LED breaking bus
106106
#ifdef LED_BUILTIN
107107
if (_bri == 0 && b > 0) {
108-
if (_pins[0] == LED_BUILTIN || _pins[1] == LED_BUILTIN || (_pins[0] == 3 && _iType < 17)) PolyBus::begin(_busPtr, _iType);
108+
if (_pins[0] == LED_BUILTIN || _pins[1] == LED_BUILTIN) PolyBus::begin(_busPtr, _iType);
109109
}
110110
#endif
111111
_bri = b;
@@ -141,6 +141,10 @@ class BusDigital : public Bus {
141141
_colorOrder = colorOrder;
142142
}
143143

144+
void reinit() {
145+
PolyBus::begin(_busPtr, _iType);
146+
}
147+
144148
void cleanup() {
145149
//Serial.println("Digital Cleanup");
146150
PolyBus::cleanup(_busPtr, _iType);

0 commit comments

Comments
 (0)