Skip to content

Commit

Permalink
Slightly more efficient buffer copy to busses
Browse files Browse the repository at this point in the history
  • Loading branch information
Aircoookie committed Jun 26, 2023
1 parent 61ba16b commit fa9b151
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 4 deletions.
1 change: 0 additions & 1 deletion wled00/FX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,6 @@ uint16_t mode_dynamic(void) {
if (!SEGENV.allocateData(SEGLEN)) return mode_static(); //allocation failed

if(SEGENV.call == 0) {
//SEGMENT.setUpLeds(); //lossless getPixelColor()
//SEGMENT.fill(BLACK);
for (int i = 0; i < SEGLEN; i++) SEGENV.data[i] = random8();
}
Expand Down
3 changes: 2 additions & 1 deletion wled00/FX_fcn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1263,7 +1263,8 @@ void WS2812FX::show(void) {
uint8_t busBrightness = estimateCurrentAndLimitBri();

if (_globalLedBuffer) { // copy data from buffer to bus
for (uint16_t i = 0; i < _length; i++) busses.setPixelColor(i, _globalLedBuffer[i]);
//for (uint16_t i = 0; i < _length; i++) busses.setPixelColor(i, _globalLedBuffer[i]);
busses.setColorsFromBuffer(_globalLedBuffer);
} else {
// if brightness changed since last show, must set everything again to update to new luminance
if (_renderBrightness != busBrightness) {
Expand Down
11 changes: 10 additions & 1 deletion wled00/bus_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ void BusManager::setStatusPixel(uint32_t c) {
}
}

void IRAM_ATTR BusManager::setPixelColor(uint16_t pix, uint32_t c, int16_t cct) {
void IRAM_ATTR BusManager::setPixelColor(uint16_t pix, uint32_t c) {
for (uint8_t i = 0; i < numBusses; i++) {
Bus* b = busses[i];
uint16_t bstart = b->getStart();
Expand All @@ -515,6 +515,15 @@ void IRAM_ATTR BusManager::setPixelColor(uint16_t pix, uint32_t c, int16_t cct)
}
}

void BusManager::setColorsFromBuffer(uint32_t* buf) {
for (uint8_t i = 0; i < numBusses; i++) {
Bus* b = busses[i];
uint16_t bstart = b->getStart();
for (uint16_t pix = 0; pix < b->getLength(); pix++)
busses[i]->setPixelColor(pix, buf[bstart + pix]);
}
}

void BusManager::setBrightness(uint8_t b) {
for (uint8_t i = 0; i < numBusses; i++) {
busses[i]->setBrightness(b);
Expand Down
4 changes: 3 additions & 1 deletion wled00/bus_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,9 @@ class BusManager {

void setStatusPixel(uint32_t c);

void setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1);
void setPixelColor(uint16_t pix, uint32_t c);

void setColorsFromBuffer(uint32_t* buf);

void setBrightness(uint8_t b);

Expand Down

0 comments on commit fa9b151

Please sign in to comment.