Merge pull request #1466 from pbolduc/feature/1461-know-if-strip-is-updating

Add utility function to expose if strip is being updated
pull/1478/head
Aircoookie 2020-12-10 12:08:36 +01:00 zatwierdzone przez GitHub
commit 564ad09b98
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
3 zmienionych plików z 38 dodań i 4 usunięć

Wyświetl plik

@ -480,7 +480,9 @@ class WS2812FX {
gammaCorrectCol = true, gammaCorrectCol = true,
applyToAllSelected = true, applyToAllSelected = true,
segmentsAreIdentical(Segment* a, Segment* b), segmentsAreIdentical(Segment* a, Segment* b),
setEffectConfig(uint8_t m, uint8_t s, uint8_t i, uint8_t p); setEffectConfig(uint8_t m, uint8_t s, uint8_t i, uint8_t p),
// return true if the strip is being sent pixel updates
isUpdating(void);
uint8_t uint8_t
mainSegment = 0, mainSegment = 0,

Wyświetl plik

@ -218,8 +218,11 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w)
//you can set it to 0 if the ESP is powered by USB and the LEDs by external //you can set it to 0 if the ESP is powered by USB and the LEDs by external
void WS2812FX::show(void) { void WS2812FX::show(void) {
if (_callback) _callback();
// avoid race condition, caputre _callback value
show_callback callback = _callback;
if (callback) callback();
//power limit calculation //power limit calculation
//each LED can draw up 195075 "power units" (approx. 53mA) //each LED can draw up 195075 "power units" (approx. 53mA)
//one PU is the power it takes to have 1 channel 1 step brighter per brightness step //one PU is the power it takes to have 1 channel 1 step brighter per brightness step
@ -291,10 +294,24 @@ void WS2812FX::show(void) {
bus->SetBrightness(_brightness); bus->SetBrightness(_brightness);
} }
// some buses send asynchronously and this method will return before
// all of the data has been sent.
// See https://github.com/Makuna/NeoPixelBus/wiki/ESP32-NeoMethods#neoesp32rmt-methods
bus->Show(); bus->Show();
_lastShow = millis(); _lastShow = millis();
} }
/**
* Returns a true value if any of the strips are still being updated.
* On some hardware (ESP32), strip updates are done asynchronously.
*/
bool WS2812FX::isUpdating() {
return !bus->CanShow();
}
/**
* Forces the next frame to be computed on all active segments.
*/
void WS2812FX::trigger() { void WS2812FX::trigger() {
_triggered = true; _triggered = true;
} }

Wyświetl plik

@ -296,7 +296,6 @@ public:
void Show() void Show()
{ {
byte b;
switch (_type) switch (_type)
{ {
case NeoPixelType_Grb: _pGrb->Show(); break; case NeoPixelType_Grb: _pGrb->Show(); break;
@ -304,6 +303,22 @@ public:
} }
} }
/**
* This will return true if enough time has passed since the last time Show() was called.
* This also means that calling Show() will not cause any undue waiting. If the method for
* the defined bus is hardware that sends asynchronously, then call CanShow() will let
* you know if it has finished sending the data from the last Show().
*/
bool CanShow()
{
switch (_type)
{
case NeoPixelType_Grb: return _pGrb->CanShow();
case NeoPixelType_Grbw: return _pGrbw->CanShow();
default: return true;
}
}
void SetPixelColor(uint16_t indexPixel, RgbwColor c) void SetPixelColor(uint16_t indexPixel, RgbwColor c)
{ {
RgbwColor col; RgbwColor col;