mirror of
https://github.com/wled/WLED.git
synced 2025-07-09 11:56:35 +00:00
Auto segment creation bugfix
- additional debug - minor optimisation
This commit is contained in:
parent
77ca2ec0e9
commit
13bfda56ef
@ -1339,7 +1339,7 @@ void WS2812FX::service() {
|
|||||||
#endif
|
#endif
|
||||||
if (doShow) {
|
if (doShow) {
|
||||||
yield();
|
yield();
|
||||||
Segment::handleRandomPalette(); // slowly transtion random palette; move it into for loop when each segment has individual random palette
|
Segment::handleRandomPalette(); // slowly transition random palette; move it into for loop when each segment has individual random palette
|
||||||
show();
|
show();
|
||||||
}
|
}
|
||||||
#ifdef WLED_DEBUG
|
#ifdef WLED_DEBUG
|
||||||
@ -1593,7 +1593,7 @@ void WS2812FX::makeAutoSegments(bool forceReset) {
|
|||||||
segStops[s] = segStarts[s] + b->getLength();
|
segStops[s] = segStarts[s] + b->getLength();
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
if (isMatrix && segStops[s] < Segment::maxWidth*Segment::maxHeight) continue; // ignore buses comprising matrix
|
if (isMatrix && segStops[s] <= Segment::maxWidth*Segment::maxHeight) continue; // ignore buses comprising matrix
|
||||||
if (isMatrix && segStarts[s] < Segment::maxWidth*Segment::maxHeight) segStarts[s] = Segment::maxWidth*Segment::maxHeight;
|
if (isMatrix && segStarts[s] < Segment::maxWidth*Segment::maxHeight) segStarts[s] = Segment::maxWidth*Segment::maxHeight;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1621,6 +1621,7 @@ void WS2812FX::makeAutoSegments(bool forceReset) {
|
|||||||
for (size_t i = 1; i < s; i++) {
|
for (size_t i = 1; i < s; i++) {
|
||||||
_segments.push_back(Segment(segStarts[i], segStops[i]));
|
_segments.push_back(Segment(segStarts[i], segStops[i]));
|
||||||
}
|
}
|
||||||
|
DEBUG_PRINTF_P(PSTR("%d auto segments created.\n"), _segments.size());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -1666,6 +1667,8 @@ void WS2812FX::fixInvalidSegments() {
|
|||||||
if (_segments[i].stop > _length) _segments[i].stop = _length;
|
if (_segments[i].stop > _length) _segments[i].stop = _length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if any segments were deleted free memory
|
||||||
|
purgeSegments();
|
||||||
// this is always called as the last step after finalizeInit(), update covered bus types
|
// this is always called as the last step after finalizeInit(), update covered bus types
|
||||||
for (segment &seg : _segments)
|
for (segment &seg : _segments)
|
||||||
seg.refreshLightCapabilities();
|
seg.refreshLightCapabilities();
|
||||||
@ -1696,7 +1699,8 @@ void WS2812FX::setRange(uint16_t i, uint16_t i2, uint32_t col) {
|
|||||||
void WS2812FX::printSize() {
|
void WS2812FX::printSize() {
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
for (const Segment &seg : _segments) size += seg.getSize();
|
for (const Segment &seg : _segments) size += seg.getSize();
|
||||||
DEBUG_PRINTF_P(PSTR("Segments: %d -> %uB\n"), _segments.size(), size);
|
DEBUG_PRINTF_P(PSTR("Segments: %d -> %u/%dB\n"), _segments.size(), size, Segment::getUsedSegmentData());
|
||||||
|
for (const Segment &seg : _segments) DEBUG_PRINTF_P(PSTR(" Seg: %d,%d [A=%d, 2D=%d, RGB=%d, W=%d, CCT=%d]\n"), seg.width(), seg.height(), seg.isActive(), seg.is2D(), seg.hasRGB(), seg.hasWhite(), seg.isCCT());
|
||||||
DEBUG_PRINTF_P(PSTR("Modes: %d*%d=%uB\n"), sizeof(mode_ptr), _mode.size(), (_mode.capacity()*sizeof(mode_ptr)));
|
DEBUG_PRINTF_P(PSTR("Modes: %d*%d=%uB\n"), sizeof(mode_ptr), _mode.size(), (_mode.capacity()*sizeof(mode_ptr)));
|
||||||
DEBUG_PRINTF_P(PSTR("Data: %d*%d=%uB\n"), sizeof(const char *), _modeData.size(), (_modeData.capacity()*sizeof(const char *)));
|
DEBUG_PRINTF_P(PSTR("Data: %d*%d=%uB\n"), sizeof(const char *), _modeData.size(), (_modeData.capacity()*sizeof(const char *)));
|
||||||
DEBUG_PRINTF_P(PSTR("Map: %d*%d=%uB\n"), sizeof(uint16_t), (int)customMappingSize, customMappingSize*sizeof(uint16_t));
|
DEBUG_PRINTF_P(PSTR("Map: %d*%d=%uB\n"), sizeof(uint16_t), (int)customMappingSize, customMappingSize*sizeof(uint16_t));
|
||||||
|
@ -425,6 +425,7 @@ BusPwm::BusPwm(BusConfig &bc)
|
|||||||
}
|
}
|
||||||
_data = _pwmdata; // avoid malloc() and use stack
|
_data = _pwmdata; // avoid malloc() and use stack
|
||||||
_valid = true;
|
_valid = true;
|
||||||
|
DEBUG_PRINTF_P(PSTR("%successfully inited PWM strip with type %u and pins %u,%u,%u,%u,%u\n"), _valid?"S":"Uns", bc.type, _pins[0], _pins[1], _pins[2], _pins[3], _pins[4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BusPwm::setPixelColor(uint16_t pix, uint32_t c) {
|
void BusPwm::setPixelColor(uint16_t pix, uint32_t c) {
|
||||||
@ -575,6 +576,7 @@ BusOnOff::BusOnOff(BusConfig &bc)
|
|||||||
pinMode(_pin, OUTPUT);
|
pinMode(_pin, OUTPUT);
|
||||||
_data = &_onoffdata; // avoid malloc() and use stack
|
_data = &_onoffdata; // avoid malloc() and use stack
|
||||||
_valid = true;
|
_valid = true;
|
||||||
|
DEBUG_PRINTF_P(PSTR("%successfully inited On/Off strip with pin %u\n"), _valid?"S":"Uns", _pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BusOnOff::setPixelColor(uint16_t pix, uint32_t c) {
|
void BusOnOff::setPixelColor(uint16_t pix, uint32_t c) {
|
||||||
@ -629,6 +631,7 @@ BusNetwork::BusNetwork(BusConfig &bc)
|
|||||||
_UDPchannels = _rgbw ? 4 : 3;
|
_UDPchannels = _rgbw ? 4 : 3;
|
||||||
_client = IPAddress(bc.pins[0],bc.pins[1],bc.pins[2],bc.pins[3]);
|
_client = IPAddress(bc.pins[0],bc.pins[1],bc.pins[2],bc.pins[3]);
|
||||||
_valid = (allocData(_len * _UDPchannels) != nullptr);
|
_valid = (allocData(_len * _UDPchannels) != nullptr);
|
||||||
|
DEBUG_PRINTF_P(PSTR("%successfully inited virtual strip with type %u and IP %u.%u.%u.%u\n"), _valid?"S":"Uns", bc.type, bc.pins[0], bc.pins[1], bc.pins[2], bc.pins[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BusNetwork::setPixelColor(uint16_t pix, uint32_t c) {
|
void BusNetwork::setPixelColor(uint16_t pix, uint32_t c) {
|
||||||
@ -729,9 +732,8 @@ void BusManager::setStatusPixel(uint32_t c) {
|
|||||||
|
|
||||||
void IRAM_ATTR BusManager::setPixelColor(uint16_t pix, uint32_t c) {
|
void IRAM_ATTR BusManager::setPixelColor(uint16_t pix, uint32_t c) {
|
||||||
for (unsigned i = 0; i < numBusses; i++) {
|
for (unsigned i = 0; i < numBusses; i++) {
|
||||||
Bus* b = busses[i];
|
unsigned bstart = busses[i]->getStart();
|
||||||
uint16_t bstart = b->getStart();
|
if (pix < bstart || pix >= bstart + busses[i]->getLength()) continue;
|
||||||
if (pix < bstart || pix >= bstart + b->getLength()) continue;
|
|
||||||
busses[i]->setPixelColor(pix - bstart, c);
|
busses[i]->setPixelColor(pix - bstart, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -753,10 +755,9 @@ void BusManager::setSegmentCCT(int16_t cct, bool allowWBCorrection) {
|
|||||||
|
|
||||||
uint32_t BusManager::getPixelColor(uint16_t pix) {
|
uint32_t BusManager::getPixelColor(uint16_t pix) {
|
||||||
for (unsigned i = 0; i < numBusses; i++) {
|
for (unsigned i = 0; i < numBusses; i++) {
|
||||||
Bus* b = busses[i];
|
unsigned bstart = busses[i]->getStart();
|
||||||
uint16_t bstart = b->getStart();
|
if (pix < bstart || pix >= bstart + busses[i]->getLength()) continue;
|
||||||
if (pix < bstart || pix >= bstart + b->getLength()) continue;
|
return busses[i]->getPixelColor(pix - bstart);
|
||||||
return b->getPixelColor(pix - bstart);
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -416,7 +416,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
|||||||
//bool didSet = false;
|
//bool didSet = false;
|
||||||
for (size_t s = 0; s < strip.getSegmentsNum(); s++) {
|
for (size_t s = 0; s < strip.getSegmentsNum(); s++) {
|
||||||
Segment &sg = strip.getSegment(s);
|
Segment &sg = strip.getSegment(s);
|
||||||
if (sg.isSelected()) {
|
if (sg.isActive() && sg.isSelected()) {
|
||||||
deserializeSegment(segVar, s, presetId);
|
deserializeSegment(segVar, s, presetId);
|
||||||
//didSet = true;
|
//didSet = true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user