Various fixes
Fixed ESP32 crash on Colortwinkles brightness change Fixed setting picker to black resetting hue and saturation Fixed auto white mode not saved to config
This commit is contained in:
parent
cadda12371
commit
46ec504743
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
### Builds after release 0.12.0
|
### Builds after release 0.12.0
|
||||||
|
|
||||||
|
#### Build 2112030
|
||||||
|
|
||||||
|
- Fixed ESP32 crash on Colortwinkles brightness change
|
||||||
|
- Fixed setting picker to black resetting hue and saturation
|
||||||
|
- Fixed auto white mode not saved to config
|
||||||
|
|
||||||
#### Build 2111300
|
#### Build 2111300
|
||||||
|
|
||||||
- Added CCT and white balance correction support (PR #2285)
|
- Added CCT and white balance correction support (PR #2285)
|
||||||
|
@ -444,14 +444,14 @@ void WS2812FX::setBrightness(uint8_t b) {
|
|||||||
if (gammaCorrectBri) b = gamma8(b);
|
if (gammaCorrectBri) b = gamma8(b);
|
||||||
if (_brightness == b) return;
|
if (_brightness == b) return;
|
||||||
_brightness = b;
|
_brightness = b;
|
||||||
_segment_index = 0;
|
|
||||||
if (_brightness == 0) { //unfreeze all segments on power off
|
if (_brightness == 0) { //unfreeze all segments on power off
|
||||||
for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
||||||
{
|
{
|
||||||
_segments[i].setOption(SEG_OPTION_FREEZE, false);
|
_segments[i].setOption(SEG_OPTION_FREEZE, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SEGENV.next_time > millis() + 22 && millis() - _lastShow > MIN_SHOW_DELAY) show();//apply brightness change immediately if no refresh soon
|
unsigned long t = millis();
|
||||||
|
if (_segment_runtimes[0].next_time > t + 22 && t - _lastShow > MIN_SHOW_DELAY) show(); //apply brightness change immediately if no refresh soon
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t WS2812FX::getMode(void) {
|
uint8_t WS2812FX::getMode(void) {
|
||||||
@ -703,14 +703,35 @@ bool WS2812FX::checkSegmentAlignment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//After this function is called, setPixelColor() will use that segment (offsets, grouping, ... will apply)
|
//After this function is called, setPixelColor() will use that segment (offsets, grouping, ... will apply)
|
||||||
|
//Note: If called in an interrupt (e.g. JSON API), it must be reset with "setPixelColor(255)",
|
||||||
|
//otherwise it can lead to a crash on ESP32 because _segment_index is modified while in use by the main thread
|
||||||
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
uint8_t _segment_index_prev = 0;
|
||||||
|
uint16_t _virtualSegmentLength_prev = 0;
|
||||||
|
bool _ps_set = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
void WS2812FX::setPixelSegment(uint8_t n)
|
void WS2812FX::setPixelSegment(uint8_t n)
|
||||||
{
|
{
|
||||||
if (n < MAX_NUM_SEGMENTS) {
|
if (n < MAX_NUM_SEGMENTS) {
|
||||||
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
if (!_ps_set) {
|
||||||
|
_segment_index_prev = _segment_index;
|
||||||
|
_virtualSegmentLength_prev = _virtualSegmentLength;
|
||||||
|
_ps_set = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
_segment_index = n;
|
_segment_index = n;
|
||||||
_virtualSegmentLength = SEGMENT.length();
|
_virtualSegmentLength = SEGMENT.virtualLength();
|
||||||
} else {
|
} else {
|
||||||
_segment_index = 0;
|
_virtualSegmentLength = 0;
|
||||||
_virtualSegmentLength = 0;
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
if (_ps_set) {
|
||||||
|
_segment_index = _segment_index_prev;
|
||||||
|
_virtualSegmentLength = _virtualSegmentLength_prev;
|
||||||
|
_ps_set = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -737,13 +758,13 @@ void WS2812FX::setTransition(uint16_t t)
|
|||||||
|
|
||||||
void WS2812FX::setTransitionMode(bool t)
|
void WS2812FX::setTransitionMode(bool t)
|
||||||
{
|
{
|
||||||
unsigned long waitMax = millis() + 20; //refresh after 20 ms if transition enabled
|
unsigned long waitMax = millis() + 20; //refresh after 20 ms if transition enabled
|
||||||
for (uint16_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
for (uint16_t i = 0; i < MAX_NUM_SEGMENTS; i++)
|
||||||
{
|
{
|
||||||
_segment_index = i;
|
_segments[i].setOption(SEG_OPTION_TRANSITIONAL, t);
|
||||||
SEGMENT.setOption(SEG_OPTION_TRANSITIONAL, t);
|
|
||||||
|
|
||||||
if (t && SEGMENT.mode == FX_MODE_STATIC && SEGENV.next_time > waitMax) SEGENV.next_time = waitMax;
|
if (t && _segments[i].mode == FX_MODE_STATIC && _segment_runtimes[i].next_time > waitMax)
|
||||||
|
_segment_runtimes[i].next_time = waitMax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,6 +527,7 @@ void serializeConfig() {
|
|||||||
hw_led["cct"] = correctWB;
|
hw_led["cct"] = correctWB;
|
||||||
hw_led[F("cr")] = cctFromRgb;
|
hw_led[F("cr")] = cctFromRgb;
|
||||||
hw_led[F("cb")] = strip.cctBlending;
|
hw_led[F("cb")] = strip.cctBlending;
|
||||||
|
hw_led[F("rgbwm")] = Bus::getAutoWhiteMode();
|
||||||
|
|
||||||
JsonArray hw_led_ins = hw_led.createNestedArray("ins");
|
JsonArray hw_led_ins = hw_led.createNestedArray("ins");
|
||||||
|
|
||||||
@ -546,7 +547,6 @@ void serializeConfig() {
|
|||||||
ins["type"] = bus->getType() & 0x7F;
|
ins["type"] = bus->getType() & 0x7F;
|
||||||
ins["ref"] = bus->isOffRefreshRequired();
|
ins["ref"] = bus->isOffRefreshRequired();
|
||||||
ins[F("rgbw")] = bus->isRgbw();
|
ins[F("rgbw")] = bus->isRgbw();
|
||||||
ins[F("rgbwm")] = bus->getAutoWhiteMode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// button(s)
|
// button(s)
|
||||||
|
@ -1703,14 +1703,15 @@ function selectSlot(b) {
|
|||||||
cd[csel].style.border="5px solid white";
|
cd[csel].style.border="5px solid white";
|
||||||
cd[csel].style.margin="2px";
|
cd[csel].style.margin="2px";
|
||||||
cd[csel].style.width="50px";
|
cd[csel].style.width="50px";
|
||||||
cpick.color.set(cd[csel].style.backgroundColor);
|
setPicker(cd[csel].style.backgroundColor);
|
||||||
//force slider update on initial load (picker "color:change" not fired if black)
|
//force slider update on initial load (picker "color:change" not fired if black)
|
||||||
if (cd[csel].style.backgroundColor == 'rgb(0, 0, 0)') updatePSliders();
|
if (cpick.color.value == 0) updatePSliders();
|
||||||
d.getElementById('sliderW').value = whites[csel];
|
d.getElementById('sliderW').value = whites[csel];
|
||||||
updateTrail(d.getElementById('sliderW'));
|
updateTrail(d.getElementById('sliderW'));
|
||||||
redrawPalPrev();
|
redrawPalPrev();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//set the color from a hex string. Used by quick color selectors
|
||||||
var lasth = 0;
|
var lasth = 0;
|
||||||
function pC(col)
|
function pC(col)
|
||||||
{
|
{
|
||||||
@ -1723,7 +1724,7 @@ function pC(col)
|
|||||||
} while (Math.abs(col.h - lasth) < 50);
|
} while (Math.abs(col.h - lasth) < 50);
|
||||||
lasth = col.h;
|
lasth = col.h;
|
||||||
}
|
}
|
||||||
cpick.color.set(col);
|
setPicker(col);
|
||||||
setColor(0);
|
setColor(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1768,14 +1769,20 @@ function fromHex()
|
|||||||
var str = d.getElementById('hexc').value;
|
var str = d.getElementById('hexc').value;
|
||||||
whites[csel] = parseInt(str.substring(6), 16);
|
whites[csel] = parseInt(str.substring(6), 16);
|
||||||
try {
|
try {
|
||||||
cpick.color.set("#" + str.substring(0,6));
|
setPicker("#" + str.substring(0,6));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
cpick.color.set("#ffaa00");
|
setPicker("#ffaa00");
|
||||||
}
|
}
|
||||||
if (isNaN(whites[csel])) whites[csel] = 0;
|
if (isNaN(whites[csel])) whites[csel] = 0;
|
||||||
setColor(2);
|
setColor(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setPicker(rgb) {
|
||||||
|
var c = new iro.Color(rgb);
|
||||||
|
if (c.value > 0) cpick.color.set(c);
|
||||||
|
else cpick.color.setChannel('hsv', 'v', 0);
|
||||||
|
}
|
||||||
|
|
||||||
function fromV()
|
function fromV()
|
||||||
{
|
{
|
||||||
cpick.color.setChannel('hsv', 'v', d.getElementById('sliderV').value);
|
cpick.color.setChannel('hsv', 'v', d.getElementById('sliderV').value);
|
||||||
@ -1791,13 +1798,13 @@ function fromRgb()
|
|||||||
var r = d.getElementById('sliderR').value;
|
var r = d.getElementById('sliderR').value;
|
||||||
var g = d.getElementById('sliderG').value;
|
var g = d.getElementById('sliderG').value;
|
||||||
var b = d.getElementById('sliderB').value;
|
var b = d.getElementById('sliderB').value;
|
||||||
cpick.color.set(`rgb(${r},${g},${b})`);
|
setPicker(`rgb(${r},${g},${b})`);
|
||||||
}
|
}
|
||||||
|
|
||||||
//sr 0: from RGB sliders, 1: from picker, 2: from hex
|
//sr 0: from RGB sliders, 1: from picker, 2: from hex
|
||||||
function setColor(sr) {
|
function setColor(sr) {
|
||||||
var cd = d.getElementById('csl').children;
|
var cd = d.getElementById('csl').children;
|
||||||
if (sr == 1 && cd[csel].style.backgroundColor == 'rgb(0, 0, 0)') cpick.color.setChannel('hsv', 'v', 100);
|
if (sr == 1 && cd[csel].style.backgroundColor == "rgb(0, 0, 0)") cpick.color.setChannel('hsv', 'v', 100);
|
||||||
cd[csel].style.backgroundColor = cpick.color.rgbString;
|
cd[csel].style.backgroundColor = cpick.color.rgbString;
|
||||||
if (sr != 2) whites[csel] = parseInt(d.getElementById('sliderW').value);
|
if (sr != 2) whites[csel] = parseInt(d.getElementById('sliderW').value);
|
||||||
var col = cpick.color.rgb;
|
var col = cpick.color.rgb;
|
||||||
|
1587
wled00/html_ui.h
1587
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2112010
|
#define VERSION 2112030
|
||||||
|
|
||||||
//uncomment this if you have a "my_config.h" file you'd like to use
|
//uncomment this if you have a "my_config.h" file you'd like to use
|
||||||
//#define WLED_USE_MY_CONFIG
|
//#define WLED_USE_MY_CONFIG
|
||||||
|
Loading…
Reference in New Issue
Block a user