Accept hex color strings in individual LED API
Version bump to 0.13.0-b2 "Toki" Fixed transition property not applying unless power/bri/color changed next Moved transition field below segments (temporarily)
This commit is contained in:
parent
0862859f93
commit
6a8ed1192f
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.13.0-b1",
|
"version": "0.13.0-b2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.13.0-b1",
|
"version": "0.13.0-b2",
|
||||||
"description": "Tools for WLED project",
|
"description": "Tools for WLED project",
|
||||||
"main": "tools/cdata.js",
|
"main": "tools/cdata.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
@ -32,7 +32,7 @@ def bin_rename_copy(source, target, env):
|
|||||||
|
|
||||||
release_name = _get_cpp_define_value(env, "WLED_RELEASE_NAME")
|
release_name = _get_cpp_define_value(env, "WLED_RELEASE_NAME")
|
||||||
|
|
||||||
if release_name and os.getenv("WLED_RELEASE"):
|
if release_name:
|
||||||
_create_dirs(["release"])
|
_create_dirs(["release"])
|
||||||
version = _get_cpp_define_value(env, "WLED_VERSION")
|
version = _get_cpp_define_value(env, "WLED_VERSION")
|
||||||
release_file = "{}release{}WLED_{}_{}.bin".format(OUTPUT_DIR, os.path.sep, version, release_name)
|
release_file = "{}release{}WLED_{}_{}.bin".format(OUTPUT_DIR, os.path.sep, version, release_name)
|
||||||
|
@ -236,7 +236,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
JsonObject if_sync_recv = if_sync["recv"];
|
JsonObject if_sync_recv = if_sync["recv"];
|
||||||
CJSON(receiveNotificationBrightness, if_sync_recv["bri"]);
|
CJSON(receiveNotificationBrightness, if_sync_recv["bri"]);
|
||||||
CJSON(receiveNotificationColor, if_sync_recv["col"]);
|
CJSON(receiveNotificationColor, if_sync_recv["col"]);
|
||||||
CJSON(receiveNotificationEffects, if_sync_recv[F("fx")]);
|
CJSON(receiveNotificationEffects, if_sync_recv["fx"]);
|
||||||
//! following line might be a problem if called after boot
|
//! following line might be a problem if called after boot
|
||||||
receiveNotifications = (receiveNotificationBrightness || receiveNotificationColor || receiveNotificationEffects);
|
receiveNotifications = (receiveNotificationBrightness || receiveNotificationColor || receiveNotificationEffects);
|
||||||
|
|
||||||
|
@ -612,6 +612,9 @@ input[type=range]:active + .sliderbubble {
|
|||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
#tt {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
.cl {
|
.cl {
|
||||||
width: 42px;
|
width: 42px;
|
||||||
@ -653,7 +656,7 @@ input[type=number], input[type=text] {
|
|||||||
background: var(--c-3);
|
background: var(--c-3);
|
||||||
color: var(--c-f);
|
color: var(--c-f);
|
||||||
border: 0px solid white;
|
border: 0px solid white;
|
||||||
border-radius: 5px;
|
border-radius: 25px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
margin: 6px 6px 6px 0;
|
margin: 6px 6px 6px 0;
|
||||||
font-size: 19px;
|
font-size: 19px;
|
||||||
@ -683,7 +686,6 @@ textarea {
|
|||||||
|
|
||||||
input[type=text] {
|
input[type=text] {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
border-radius: 25px;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -706,7 +708,6 @@ input[type=number]::-webkit-outer-spin-button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.pln {
|
.pln {
|
||||||
border-radius: 25px !important;
|
|
||||||
width: 67px !important;
|
width: 67px !important;
|
||||||
margin: 0 2px 8px 0 !important;
|
margin: 0 2px 8px 0 !important;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@ -723,6 +724,7 @@ input[type=number]::-webkit-outer-spin-button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.segn {
|
.segn {
|
||||||
|
border-radius: 5px !important;
|
||||||
margin: 3px 0 6px 0 !important;
|
margin: 3px 0 6px 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,6 +153,7 @@
|
|||||||
<div id="segutil2">
|
<div id="segutil2">
|
||||||
<button class="btn btn-s" id="rsbtn" onclick="rSegs()">Reset segments</button>
|
<button class="btn btn-s" id="rsbtn" onclick="rSegs()">Reset segments</button>
|
||||||
</div>
|
</div>
|
||||||
|
<p>Transition: <input id="tt" class="noslide" type="number" min="0" max="65.5" step="0.1" value="0.7">s</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="Favorites" class="tabcontent">
|
<div id="Favorites" class="tabcontent">
|
||||||
@ -164,8 +165,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="pcont">
|
<div id="pcont">
|
||||||
Loading...
|
Loading...
|
||||||
</div><br>
|
</div>
|
||||||
Transition <input id="tt" class="noslide" type="number" min="0" max="65.5" step="0.1" value="0.7">s
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1062,6 +1062,11 @@ function requestJson(command, rinfo = true) {
|
|||||||
{
|
{
|
||||||
command.v = true; //get complete API response
|
command.v = true; //get complete API response
|
||||||
command.time = Math.floor(Date.now() / 1000);
|
command.time = Math.floor(Date.now() / 1000);
|
||||||
|
var t = d.getElementById('tt');
|
||||||
|
if (t.validity.valid) {
|
||||||
|
var tn = parseInt(t.value*10);
|
||||||
|
if (tn != tr) command.transition = tn;
|
||||||
|
}
|
||||||
req = JSON.stringify(command);
|
req = JSON.stringify(command);
|
||||||
if (req.length > 1000) useWs = false; //do not send very long requests over websocket
|
if (req.length > 1000) useWs = false; //do not send very long requests over websocket
|
||||||
}
|
}
|
||||||
@ -1156,7 +1161,6 @@ function requestJson(command, rinfo = true) {
|
|||||||
function togglePower() {
|
function togglePower() {
|
||||||
isOn = !isOn;
|
isOn = !isOn;
|
||||||
var obj = {"on": isOn};
|
var obj = {"on": isOn};
|
||||||
obj.transition = parseInt(d.getElementById('tt').value*10);
|
|
||||||
requestJson(obj);
|
requestJson(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1543,7 +1547,6 @@ function setPalette(paletteId = null)
|
|||||||
|
|
||||||
function setBri() {
|
function setBri() {
|
||||||
var obj = {"bri": parseInt(d.getElementById('sliderBri').value)};
|
var obj = {"bri": parseInt(d.getElementById('sliderBri').value)};
|
||||||
obj.transition = parseInt(d.getElementById('tt').value*10);
|
|
||||||
requestJson(obj);
|
requestJson(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1756,7 +1759,6 @@ function setColor(sr) {
|
|||||||
}
|
}
|
||||||
updateHex();
|
updateHex();
|
||||||
updateRgb();
|
updateRgb();
|
||||||
obj.transition = parseInt(d.getElementById('tt').value*10);
|
|
||||||
requestJson(obj);
|
requestJson(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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-b1<br>Download the latest binary: <a
|
Installed version: 0.13.0-b2<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
|
||||||
|
@ -383,7 +383,7 @@ HTTP traffic is unencrypted. An attacker in the same network can intercept form
|
|||||||
<h3>Software Update</h3><button type="button" onclick="U()">Manual OTA Update
|
<h3>Software Update</h3><button type="button" onclick="U()">Manual OTA Update
|
||||||
</button><br>Enable ArduinoOTA: <input type="checkbox" name="AO"><br><h3>About
|
</button><br>Enable ArduinoOTA: <input type="checkbox" name="AO"><br><h3>About
|
||||||
</h3><a href="https://github.com/Aircoookie/WLED/" target="_blank">WLED</a>
|
</h3><a href="https://github.com/Aircoookie/WLED/" target="_blank">WLED</a>
|
||||||
version 0.13.0-b1<br><br><a
|
version 0.13.0-b2<br><br><a
|
||||||
href="https://github.com/Aircoookie/WLED/wiki/Contributors-and-credits"
|
href="https://github.com/Aircoookie/WLED/wiki/Contributors-and-credits"
|
||||||
target="_blank">Contributors, dependencies and special thanks</a><br>
|
target="_blank">Contributors, dependencies and special thanks</a><br>
|
||||||
A huge thank you to everyone who helped me create WLED!<br><br>
|
A huge thank you to everyone who helped me create WLED!<br><br>
|
||||||
|
4365
wled00/html_ui.h
4365
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@ -110,13 +110,13 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
//temporary, strip object gets updated via colorUpdated()
|
//temporary, strip object gets updated via colorUpdated()
|
||||||
if (id == strip.getMainSegmentId()) {
|
if (id == strip.getMainSegmentId()) {
|
||||||
byte effectPrev = effectCurrent;
|
byte effectPrev = effectCurrent;
|
||||||
effectCurrent = elem[F("fx")] | effectCurrent;
|
effectCurrent = elem["fx"] | effectCurrent;
|
||||||
if (!presetId && effectCurrent != effectPrev) unloadPlaylist(); //stop playlist if active and FX changed manually
|
if (!presetId && effectCurrent != effectPrev) unloadPlaylist(); //stop playlist if active and FX changed manually
|
||||||
effectSpeed = elem[F("sx")] | effectSpeed;
|
effectSpeed = elem[F("sx")] | effectSpeed;
|
||||||
effectIntensity = elem[F("ix")] | effectIntensity;
|
effectIntensity = elem[F("ix")] | effectIntensity;
|
||||||
effectPalette = elem["pal"] | effectPalette;
|
effectPalette = elem["pal"] | effectPalette;
|
||||||
} else { //permanent
|
} else { //permanent
|
||||||
byte fx = elem[F("fx")] | seg.mode;
|
byte fx = elem["fx"] | seg.mode;
|
||||||
if (fx != seg.mode && fx < strip.getModeCount()) {
|
if (fx != seg.mode && fx < strip.getModeCount()) {
|
||||||
strip.setMode(id, fx);
|
strip.setMode(id, fx);
|
||||||
if (!presetId) unloadPlaylist(); //stop playlist if active and FX changed manually
|
if (!presetId) unloadPlaylist(); //stop playlist if active and FX changed manually
|
||||||
@ -148,15 +148,19 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
stop = iarr[i];
|
stop = iarr[i];
|
||||||
set = 2;
|
set = 2;
|
||||||
}
|
}
|
||||||
} else {
|
} else { //color
|
||||||
JsonArray icol = iarr[i];
|
|
||||||
if (icol.isNull()) break;
|
|
||||||
|
|
||||||
byte sz = icol.size();
|
|
||||||
if (sz == 0 || sz > 4) break;
|
|
||||||
|
|
||||||
int rgbw[] = {0,0,0,0};
|
int rgbw[] = {0,0,0,0};
|
||||||
copyArray(icol, rgbw);
|
JsonArray icol = iarr[i];
|
||||||
|
if (!icol.isNull()) { //array, e.g. [255,0,0]
|
||||||
|
byte sz = icol.size();
|
||||||
|
if (sz > 0 || sz < 5) copyArray(icol, rgbw);
|
||||||
|
} else { //hex string, e.g. "FF0000"
|
||||||
|
byte brgbw[] = {0,0,0,0};
|
||||||
|
const char* hexCol = iarr[i];
|
||||||
|
if (colorFromHexString(brgbw, hexCol)) {
|
||||||
|
for (uint8_t c = 0; c < 4; c++) rgbw[c] = brgbw[c];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (set < 2) stop = start + 1;
|
if (set < 2) stop = start + 1;
|
||||||
for (uint16_t i = start; i < stop; i++) {
|
for (uint16_t i = start; i < stop; i++) {
|
||||||
@ -171,7 +175,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
} else { //return to regular effect
|
} else { //return to regular effect
|
||||||
seg.setOption(SEG_OPTION_FREEZE, false);
|
seg.setOption(SEG_OPTION_FREEZE, false);
|
||||||
}
|
}
|
||||||
return; // seg.hasChanged(prev);
|
return; // seg.differs(prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
||||||
@ -214,6 +218,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
|||||||
nightlightDelayMins = nl[F("dur")] | nightlightDelayMins;
|
nightlightDelayMins = nl[F("dur")] | nightlightDelayMins;
|
||||||
nightlightMode = nl[F("mode")] | nightlightMode;
|
nightlightMode = nl[F("mode")] | nightlightMode;
|
||||||
nightlightTargetBri = nl[F("tbri")] | nightlightTargetBri;
|
nightlightTargetBri = nl[F("tbri")] | nightlightTargetBri;
|
||||||
|
getJsonValue(nl[F("tbri")], nightlightTargetBri);
|
||||||
|
|
||||||
JsonObject udpn = root["udpn"];
|
JsonObject udpn = root["udpn"];
|
||||||
notifyDirect = udpn["send"] | notifyDirect;
|
notifyDirect = udpn["send"] | notifyDirect;
|
||||||
@ -358,7 +363,7 @@ void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool fo
|
|||||||
strcat(colstr,"]");
|
strcat(colstr,"]");
|
||||||
root["col"] = serialized(colstr);
|
root["col"] = serialized(colstr);
|
||||||
|
|
||||||
root[F("fx")] = seg.mode;
|
root["fx"] = seg.mode;
|
||||||
root[F("sx")] = seg.speed;
|
root[F("sx")] = seg.speed;
|
||||||
root[F("ix")] = seg.intensity;
|
root[F("ix")] = seg.intensity;
|
||||||
root["pal"] = seg.palette;
|
root["pal"] = seg.palette;
|
||||||
|
@ -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-b1
|
@version 0.13.0-b2
|
||||||
@author Christian Schwinne
|
@author Christian Schwinne
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2107091
|
#define VERSION 2107100
|
||||||
|
|
||||||
//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
|
||||||
@ -503,7 +503,7 @@ WLED_GLOBAL bool blynkEnabled _INIT(false);
|
|||||||
|
|
||||||
//playlists
|
//playlists
|
||||||
WLED_GLOBAL unsigned long presetCycledTime _INIT(0);
|
WLED_GLOBAL unsigned long presetCycledTime _INIT(0);
|
||||||
WLED_GLOBAL int16_t currentPlaylist _INIT(0);
|
WLED_GLOBAL int16_t currentPlaylist _INIT(-1);
|
||||||
//still used for "PL=~" HTTP API command
|
//still used for "PL=~" HTTP API command
|
||||||
WLED_GLOBAL byte presetCycleMin _INIT(1), presetCycleMax _INIT(5);
|
WLED_GLOBAL byte presetCycleMin _INIT(1), presetCycleMax _INIT(5);
|
||||||
WLED_GLOBAL byte presetCycCurr _INIT(presetCycleMin);
|
WLED_GLOBAL byte presetCycCurr _INIT(presetCycleMin);
|
||||||
|
Loading…
Reference in New Issue
Block a user