0.13.0-b3
This commit is contained in:
parent
f2043dc181
commit
96422de031
@ -2,11 +2,18 @@
|
|||||||
|
|
||||||
### Builds after release 0.12.0
|
### Builds after release 0.12.0
|
||||||
|
|
||||||
#### Build 2109200
|
#### Build 2109220
|
||||||
|
|
||||||
|
- Version bump to 0.13.0-b3 "Toki"
|
||||||
- Added segment names (PR #2184)
|
- Added segment names (PR #2184)
|
||||||
- Improved Police and other effects (PR #2184)
|
- Improved Police and other effects (PR #2184)
|
||||||
- Reverted PR #1902 (Live color correction - will be implemented as usermod) (PR #2175)
|
- Reverted PR #1902 (Live color correction - will be implemented as usermod) (PR #2175)
|
||||||
|
- Added transitions for segment on/off
|
||||||
|
- Improved number of sparks/stars in Fireworks effect with low number of segments
|
||||||
|
- Fixed segment name edit pencil disappearing with request
|
||||||
|
- Fixed color transition active even if the segment is off
|
||||||
|
- Disallowed file upload with OTA lock active
|
||||||
|
- Fixed analog invert option missing (PR #2219)
|
||||||
|
|
||||||
#### Build 2109100
|
#### Build 2109100
|
||||||
|
|
||||||
|
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.13.0-b2",
|
"version": "0.13.0-b3",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.13.0-b2",
|
"version": "0.13.0-b3",
|
||||||
"description": "Tools for WLED project",
|
"description": "Tools for WLED project",
|
||||||
"main": "tools/cdata.js",
|
"main": "tools/cdata.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
26
wled00/FX.h
26
wled00/FX.h
@ -279,20 +279,22 @@ class WS2812FX {
|
|||||||
void setOption(uint8_t n, bool val, uint8_t segn = 255)
|
void setOption(uint8_t n, bool val, uint8_t segn = 255)
|
||||||
{
|
{
|
||||||
bool prevOn = false;
|
bool prevOn = false;
|
||||||
if (n == SEG_OPTION_ON) prevOn = getOption(SEG_OPTION_ON);
|
if (n == SEG_OPTION_ON) {
|
||||||
|
prevOn = getOption(SEG_OPTION_ON);
|
||||||
|
if (!val && prevOn) { //fade off
|
||||||
|
ColorTransition::startTransition(opacity, colors[0], instance->_transitionDur, segn, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (val) {
|
if (val) {
|
||||||
options |= 0x01 << n;
|
options |= 0x01 << n;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
options &= ~(0x01 << n);
|
options &= ~(0x01 << n);
|
||||||
}
|
}
|
||||||
//transitions on segment on/off don't work correctly at this point
|
|
||||||
if (n == SEG_OPTION_ON && segn < MAX_NUM_SEGMENTS && val != prevOn) {
|
if (n == SEG_OPTION_ON && val && !prevOn) { //fade on
|
||||||
if (val) {
|
ColorTransition::startTransition(0, colors[0], instance->_transitionDur, segn, 0);
|
||||||
ColorTransition::startTransition(0, colors[0], instance->_transitionDur, segn, 0);
|
|
||||||
} else {
|
|
||||||
ColorTransition::startTransition(opacity, colors[0], instance->_transitionDur, segn, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool getOption(uint8_t n)
|
bool getOption(uint8_t n)
|
||||||
@ -413,6 +415,7 @@ class WS2812FX {
|
|||||||
static void startTransition(uint8_t oldBri, uint32_t oldCol, uint16_t dur, uint8_t segn, uint8_t slot) {
|
static void startTransition(uint8_t oldBri, uint32_t oldCol, uint16_t dur, uint8_t segn, uint8_t slot) {
|
||||||
if (segn >= MAX_NUM_SEGMENTS || slot >= NUM_COLORS || dur == 0) return;
|
if (segn >= MAX_NUM_SEGMENTS || slot >= NUM_COLORS || dur == 0) return;
|
||||||
if (instance->_brightness == 0) return; //do not need transitions if master bri is off
|
if (instance->_brightness == 0) return; //do not need transitions if master bri is off
|
||||||
|
if (!instance->_segments[segn].getOption(SEG_OPTION_ON)) return; //not if segment is off either
|
||||||
uint8_t tIndex = 0xFF; //none found
|
uint8_t tIndex = 0xFF; //none found
|
||||||
uint16_t tProgression = 0;
|
uint16_t tProgression = 0;
|
||||||
uint8_t s = segn + (slot << 6); //merge slot and segment into one byte
|
uint8_t s = segn + (slot << 6); //merge slot and segment into one byte
|
||||||
@ -441,7 +444,8 @@ class WS2812FX {
|
|||||||
ColorTransition& t = instance->transitions[tIndex];
|
ColorTransition& t = instance->transitions[tIndex];
|
||||||
if (t.segment == s) //this is an active transition on the same segment+color
|
if (t.segment == s) //this is an active transition on the same segment+color
|
||||||
{
|
{
|
||||||
t.briOld = t.currentBri();
|
bool wasTurningOff = (oldBri == 0);
|
||||||
|
t.briOld = t.currentBri(wasTurningOff);
|
||||||
t.colorOld = t.currentColor(oldCol);
|
t.colorOld = t.currentColor(oldCol);
|
||||||
} else {
|
} else {
|
||||||
t.briOld = oldBri;
|
t.briOld = oldBri;
|
||||||
@ -473,11 +477,11 @@ class WS2812FX {
|
|||||||
uint32_t currentColor(uint32_t colorNew) {
|
uint32_t currentColor(uint32_t colorNew) {
|
||||||
return instance->color_blend(colorOld, colorNew, progress(true), true);
|
return instance->color_blend(colorOld, colorNew, progress(true), true);
|
||||||
}
|
}
|
||||||
uint8_t currentBri() {
|
uint8_t currentBri(bool turningOff = false) {
|
||||||
uint8_t segn = segment & 0x3F;
|
uint8_t segn = segment & 0x3F;
|
||||||
if (segn >= MAX_NUM_SEGMENTS) return 0;
|
if (segn >= MAX_NUM_SEGMENTS) return 0;
|
||||||
uint8_t briNew = instance->_segments[segn].opacity;
|
uint8_t briNew = instance->_segments[segn].opacity;
|
||||||
if (!instance->_segments[segn].getOption(SEG_OPTION_ON)) briNew = 0; //NEW
|
if (!instance->_segments[segn].getOption(SEG_OPTION_ON) || turningOff) briNew = 0;
|
||||||
uint32_t prog = progress() + 1;
|
uint32_t prog = progress() + 1;
|
||||||
return ((briNew * prog) + (briOld * (0x10000 - prog))) >> 16;
|
return ((briNew * prog) + (briOld * (0x10000 - prog))) >> 16;
|
||||||
}
|
}
|
||||||
|
@ -580,7 +580,7 @@ function populateSegments(s)
|
|||||||
</label>
|
</label>
|
||||||
<div class="segname">
|
<div class="segname">
|
||||||
<div class="segntxt" onclick="selSegEx(${i})">${inst.n ? inst.n : "Segment "+i}</div>
|
<div class="segntxt" onclick="selSegEx(${i})">${inst.n ? inst.n : "Segment "+i}</div>
|
||||||
<i class="icons edit-icon" id="seg${i}nedit" onclick="tglSegn(${i})"></i>
|
<i class="icons edit-icon ${expanded[i] ? "expanded":""}" id="seg${i}nedit" onclick="tglSegn(${i})"></i>
|
||||||
</div>
|
</div>
|
||||||
<i class="icons e-icon flr ${expanded[i] ? "exp":""}" id="sege${i}" onclick="expand(${i})"></i>
|
<i class="icons e-icon flr ${expanded[i] ? "exp":""}" id="sege${i}" onclick="expand(${i})"></i>
|
||||||
<div class="segin ${expanded[i] ? "expanded":""}" id="seg${i}">
|
<div class="segin ${expanded[i] ? "expanded":""}" id="seg${i}">
|
||||||
@ -1260,7 +1260,7 @@ function makeSeg() {
|
|||||||
var cn = `<div class="seg">
|
var cn = `<div class="seg">
|
||||||
<div class="segname newseg">
|
<div class="segname newseg">
|
||||||
New segment ${lowestUnused}
|
New segment ${lowestUnused}
|
||||||
<i class="icons edit-icon" style="display: inline;" onclick="tglSegn(${lowestUnused})"></i>
|
<i class="icons edit-icon expanded" onclick="tglSegn(${lowestUnused})"></i>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
<div class="segin expanded">
|
<div class="segin expanded">
|
||||||
|
@ -308,7 +308,7 @@ Color Order:
|
|||||||
}
|
}
|
||||||
function uploadFile(name) {
|
function uploadFile(name) {
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
req.addEventListener('load', function(){showToast(this.responseText)});
|
req.addEventListener('load', function(){showToast(this.responseText,this.status >= 400)});
|
||||||
req.addEventListener('error', function(e){showToast(e.stack,true);});
|
req.addEventListener('error', function(e){showToast(e.stack,true);});
|
||||||
req.open("POST", "/upload");
|
req.open("POST", "/upload");
|
||||||
var formData = new FormData();
|
var formData = new FormData();
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
}
|
}
|
||||||
function uploadFile(fO,name) {
|
function uploadFile(fO,name) {
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
req.addEventListener('load', function(){showToast(this.responseText)});
|
req.addEventListener('load', function(){showToast(this.responseText,this.status >= 400)});
|
||||||
req.addEventListener('error', function(e){showToast(e.stack,true);});
|
req.addEventListener('error', function(e){showToast(e.stack,true);});
|
||||||
req.open("POST", "/upload");
|
req.open("POST", "/upload");
|
||||||
var formData = new FormData();
|
var formData = new FormData();
|
||||||
|
@ -193,7 +193,7 @@
|
|||||||
}
|
}
|
||||||
function uploadFile(fO,name) {
|
function uploadFile(fO,name) {
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
req.addEventListener('load', function(){showToast(this.responseText)});
|
req.addEventListener('load', function(){showToast(this.responseText,this.status >= 400)});
|
||||||
req.addEventListener('error', function(e){showToast(e.stack,true);});
|
req.addEventListener('error', function(e){showToast(e.stack,true);});
|
||||||
req.open("POST", "/upload");
|
req.open("POST", "/upload");
|
||||||
var formData = new FormData();
|
var formData = new FormData();
|
||||||
|
@ -42,7 +42,7 @@ function B(){window.history.back()}function U(){document.getElementById("uf").st
|
|||||||
.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%}#msg{display:none}
|
.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%}#msg{display:none}
|
||||||
</style></head><body><h2>WLED Software Update</h2><form method="POST"
|
</style></head><body><h2>WLED Software Update</h2><form method="POST"
|
||||||
action="/update" id="uf" enctype="multipart/form-data" onsubmit="U()">
|
action="/update" id="uf" enctype="multipart/form-data" onsubmit="U()">
|
||||||
Installed version: 0.13.0-b2<br>Download the latest binary: <a
|
Installed version: 0.13.0-b3<br>Download the latest binary: <a
|
||||||
href="https://github.com/Aircoookie/WLED/releases" target="_blank"><img
|
href="https://github.com/Aircoookie/WLED/releases" target="_blank"><img
|
||||||
src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square">
|
src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square">
|
||||||
</a><br><input type="file" class="bt" name="update" required><br><input
|
</a><br><input type="file" class="bt" name="update" required><br><input
|
||||||
|
File diff suppressed because one or more lines are too long
1540
wled00/html_ui.h
1540
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@ -3,12 +3,12 @@
|
|||||||
/*
|
/*
|
||||||
Main sketch, global variable declarations
|
Main sketch, global variable declarations
|
||||||
@title WLED project sketch
|
@title WLED project sketch
|
||||||
@version 0.13.0-b2
|
@version 0.13.0-b3
|
||||||
@author Christian Schwinne
|
@author Christian Schwinne
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2109200
|
#define VERSION 2109220
|
||||||
|
|
||||||
//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
|
||||||
|
@ -16,6 +16,10 @@ bool isIp(String str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void handleUpload(AsyncWebServerRequest *request, const String& filename, size_t index, uint8_t *data, size_t len, bool final){
|
void handleUpload(AsyncWebServerRequest *request, const String& filename, size_t index, uint8_t *data, size_t len, bool final){
|
||||||
|
if (otaLock) {
|
||||||
|
if (final) request->send(500, "text/plain", F("Please unlock OTA in security settings!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(!index){
|
if(!index){
|
||||||
request->_tempFile = WLED_FS.open(filename, "w");
|
request->_tempFile = WLED_FS.open(filename, "w");
|
||||||
DEBUG_PRINT("Uploading ");
|
DEBUG_PRINT("Uploading ");
|
||||||
|
Loading…
Reference in New Issue
Block a user