Add utility function to expose if strip is being updated
This commit is contained in:
parent
7a7f34746e
commit
135f6b0050
@ -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,
|
||||||
|
@ -218,7 +218,10 @@ 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)
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user