diff --git a/.gitignore b/.gitignore
index 4b1a9776..cc6f8895 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,22 +1,14 @@
-.pio
.cache
+.clang-format
+.direnv
+.DS_Store
+.gitignore
+.idea
+.pio
.pioenvs
.piolibdeps
.vscode
-/wled00/Release
-/wled00/extLibs
-/platformio_override.ini
-/wled00/my_config.h
-/build_output
-.DS_Store
-.gitignore
-.clang-format
-node_modules
-.idea
-.direnv
-wled-update.sh
+
esp01-update.sh
-/wled00/LittleFS
+platformio_override.ini
replace_fs.py
-wled00/wled00.ino.cpp
-.vscode/extensions.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b53a7893..2af6bf16 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
## WLED changelog
+#### Build 2310010, build 2310130
+- Release of WLED version 0.14.0 "Hoshi"
+- Bugfixes for #3400, #3403, #3405
+- minor HTML optimizations
+- audioreactive: bugfix for UDP sound sync (partly initialized packets)
+
#### Build 2309240
- Release of WLED beta version 0.14.0-b6 "Hoshi"
- Effect bugfixes and improvements (Meteor, Meteor Smooth, Scrolling Text)
diff --git a/package-lock.json b/package-lock.json
index fb012a06..e775dc41 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "wled",
- "version": "0.14.0-b6",
+ "version": "0.14.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index bf74646f..3135c5f3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wled",
- "version": "0.14.0-b6",
+ "version": "0.14.0",
"description": "Tools for WLED project",
"main": "tools/cdata.js",
"directories": {
diff --git a/platformio.ini b/platformio.ini
index 9fbcb0a4..f3caa585 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -352,6 +352,7 @@ platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m128k}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_RELEASE_NAME=ESP01 -D WLED_DISABLE_OTA
+ ; -D WLED_USE_UNREAL_MATH ;; may cause wrong sunset/sunrise times, but saves 7064 bytes FLASH and 975 bytes RAM
lib_deps = ${esp8266.lib_deps}
[env:esp07]
@@ -605,6 +606,7 @@ build_flags = ${common.build_flags} ${esp32s2.build_flags} -D WLED_RELEASE_NAME=
-DARDUINO_USB_DFU_ON_BOOT=0
-DLOLIN_WIFI_FIX ; seems to work much better with this
-D WLED_USE_PSRAM
+ ; -D WLED_USE_UNREAL_MATH ;; may cause wrong sunset/sunrise times, but saves 6792 bytes FLASH
-D WLED_WATCHDOG_TIMEOUT=0
-D CONFIG_ASYNC_TCP_USE_WDT=0
-D LEDPIN=16
diff --git a/readme.md b/readme.md
index dda6634a..7b1ed771 100644
--- a/readme.md
+++ b/readme.md
@@ -3,7 +3,7 @@
-
+
@@ -66,7 +66,7 @@ Credits [here](https://kno.wled.ge/about/contributors/)!
Join the Discord server to discuss everything about WLED!
-
+
Check out the WLED [Discourse forum](https://wled.discourse.group)!
diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h
index 692714ec..215ec6e9 100644
--- a/usermods/audioreactive/audio_reactive.h
+++ b/usermods/audioreactive/audio_reactive.h
@@ -960,6 +960,8 @@ class AudioReactive : public Usermod {
//DEBUGSR_PRINTLN("Transmitting UDP Mic Packet");
audioSyncPacket transmitData;
+ memset(reinterpret_cast(&transmitData), 0, sizeof(transmitData)); // make sure that the packet - including "invisible" padding bytes added by the compiler - is fully initialized
+
strncpy_P(transmitData.header, PSTR(UDP_SYNC_HEADER), 6);
// transmit samples that were not modified by limitSampleDynamics()
transmitData.sampleRaw = (soundAgc) ? rawSampleAgc: sampleRaw;
diff --git a/wled00/FX.cpp b/wled00/FX.cpp
index eceba705..188022b0 100644
--- a/wled00/FX.cpp
+++ b/wled00/FX.cpp
@@ -2276,7 +2276,7 @@ uint16_t mode_meteor() {
}
// draw meteor
- for (int j = 0; j < meteorSize; j++) {
+ for (unsigned j = 0; j < meteorSize; j++) {
uint16_t index = in + j;
if (index >= SEGLEN) {
index -= SEGLEN;
@@ -2315,7 +2315,7 @@ uint16_t mode_meteor_smooth() {
}
// draw meteor
- for (int j = 0; j < meteorSize; j++) {
+ for (unsigned j = 0; j < meteorSize; j++) {
uint16_t index = in + j;
if (index >= SEGLEN) {
index -= SEGLEN;
diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp
index a3a20b8b..dc4f3211 100644
--- a/wled00/FX_fcn.cpp
+++ b/wled00/FX_fcn.cpp
@@ -1573,7 +1573,7 @@ void WS2812FX::purgeSegments(bool force) {
}
if (deleted) {
_segments.shrink_to_fit();
- if (_mainSegment >= _segments.size()) setMainSegmentId(0);
+ /*if (_mainSegment >= _segments.size())*/ setMainSegmentId(0);
}
}
diff --git a/wled00/data/index.css b/wled00/data/index.css
index 6270de17..3cab4653 100644
--- a/wled00/data/index.css
+++ b/wled00/data/index.css
@@ -1041,6 +1041,7 @@ textarea {
/*padding: 1px 0 1px 20px;*/
display: var(--sgp);
width: 100%;
+ position: relative;
}
.pname {
diff --git a/wled00/data/index.js b/wled00/data/index.js
index 6b0aa01d..8f60d983 100644
--- a/wled00/data/index.js
+++ b/wled00/data/index.js
@@ -833,7 +833,7 @@ function populateSegments(s)
}
if (segCount < 2) {
gId(`segd${lSeg}`).classList.add("hide");
- gId(`segp0`).classList.add("hide");
+ if (parseInt(gId("seg0bri").value)==255) gId(`segp0`).classList.add("hide");
}
if (!isM && !noNewSegs && (cfg.comp.seglen?parseInt(gId(`seg${lSeg}s`).value):0)+parseInt(gId(`seg${lSeg}e`).value) 1) ? "block":"none"; // rsbtn parent
diff --git a/wled00/data/settings.htm b/wled00/data/settings.htm
index 2d0c0401..b48918a5 100644
--- a/wled00/data/settings.htm
+++ b/wled00/data/settings.htm
@@ -2,7 +2,7 @@
-
+
WLED Settings