Merge remote-tracking branch 'origin/ac_main' into mdev
This commit is contained in:
4
.gitpod.Dockerfile
vendored
4
.gitpod.Dockerfile
vendored
@@ -1,5 +1,3 @@
|
|||||||
FROM gitpod/workspace-full
|
FROM gitpod/workspace-full
|
||||||
|
|
||||||
USER gitpod
|
|
||||||
|
|
||||||
RUN pip3 install -U platformio
|
USER gitpod
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
tasks:
|
tasks:
|
||||||
- command: platformio run
|
- command: pip3 install -U platformio && platformio run
|
||||||
|
|
||||||
image:
|
image:
|
||||||
file: .gitpod.Dockerfile
|
file: .gitpod.Dockerfile
|
||||||
|
|
||||||
vscode:
|
vscode:
|
||||||
extensions:
|
extensions:
|
||||||
- ms-vscode.cpptools@0.26.3:u3GsZ5PK12Ddr79vh4TWgQ==
|
- Atishay-Jain.All-Autocomplete
|
||||||
- eamodio.gitlens@10.2.1:e0IYyp0efFqVsrZwsIe8CA==
|
- esbenp.prettier-vscode
|
||||||
- Atishay-Jain.All-Autocomplete@0.0.23:fbZNfSpnd8XkAHGfAPS2rA==
|
- shardulm94.trailing-spaces
|
||||||
- 2gua.rainbow-brackets@0.0.6:Tbu8dTz0i+/bgcKQTQ5b8g==
|
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.14.0.2.2",
|
"version": "0.14.0.3.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.14.0.2.2",
|
"version": "0.14.0.3.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"clean-css": "^4.2.3",
|
"clean-css": "^4.2.3",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.14.0.2.2",
|
"version": "0.14.0.3.0",
|
||||||
"description": "Tools for WLED project",
|
"description": "Tools for WLED project",
|
||||||
"main": "tools/cdata.js",
|
"main": "tools/cdata.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ private:
|
|||||||
// configuration (available in API and stored in flash)
|
// configuration (available in API and stored in flash)
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
Segment mainSegment;
|
Segment mainSegment;
|
||||||
|
bool hourMarksEnabled = true;
|
||||||
|
uint32_t hourMarkColor = 0xFF0000;
|
||||||
uint32_t hourColor = 0x0000FF;
|
uint32_t hourColor = 0x0000FF;
|
||||||
uint32_t minuteColor = 0x00FF00;
|
uint32_t minuteColor = 0x00FF00;
|
||||||
bool secondsEnabled = true;
|
bool secondsEnabled = true;
|
||||||
@@ -87,10 +89,9 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool hexStringToColor(String const& s, uint32_t& c, uint32_t def) {
|
bool hexStringToColor(String const& s, uint32_t& c, uint32_t def) {
|
||||||
errno = 0;
|
char *ep;
|
||||||
char* ep;
|
|
||||||
unsigned long long r = strtoull(s.c_str(), &ep, 16);
|
unsigned long long r = strtoull(s.c_str(), &ep, 16);
|
||||||
if (*ep == 0 && errno != ERANGE) {
|
if (*ep == 0) {
|
||||||
c = r;
|
c = r;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@@ -162,11 +163,18 @@ public:
|
|||||||
lastOverlayDraw = millis();
|
lastOverlayDraw = millis();
|
||||||
|
|
||||||
auto time = toki.getTime();
|
auto time = toki.getTime();
|
||||||
auto localSec = tz ? tz->toLocal(time.sec) : time.sec;
|
double secondP = second(localTime) / 60.0;
|
||||||
double secondP = second(localSec) / 60.0;
|
double minuteP = minute(localTime) / 60.0;
|
||||||
double minuteP = minute(localSec) / 60.0;
|
double hourP = (hour(localTime) % 12) / 12.0 + minuteP / 12.0;
|
||||||
double hourP = (hour(localSec) % 12) / 12.0 + minuteP / 12.0;
|
|
||||||
|
if (hourMarksEnabled) {
|
||||||
|
for (int Led = 0; Led <= 55; Led = Led + 5)
|
||||||
|
{
|
||||||
|
int16_t hourmarkled = adjustToSegment(Led / 60.0, mainSegment);
|
||||||
|
setPixelColor(hourmarkled, hourMarkColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (secondsEnabled) {
|
if (secondsEnabled) {
|
||||||
int16_t secondLed = adjustToSegment(secondP, secondsSegment);
|
int16_t secondLed = adjustToSegment(secondP, secondsSegment);
|
||||||
|
|
||||||
@@ -200,6 +208,8 @@ public:
|
|||||||
top["First LED (Main Ring)"] = mainSegment.firstLed;
|
top["First LED (Main Ring)"] = mainSegment.firstLed;
|
||||||
top["Last LED (Main Ring)"] = mainSegment.lastLed;
|
top["Last LED (Main Ring)"] = mainSegment.lastLed;
|
||||||
top["Center/12h LED (Main Ring)"] = mainSegment.centerLed;
|
top["Center/12h LED (Main Ring)"] = mainSegment.centerLed;
|
||||||
|
top["Hour Marks Enabled"] = hourMarksEnabled;
|
||||||
|
top["Hour Mark Color (RRGGBB)"] = colorToHexString(hourMarkColor);
|
||||||
top["Hour Color (RRGGBB)"] = colorToHexString(hourColor);
|
top["Hour Color (RRGGBB)"] = colorToHexString(hourColor);
|
||||||
top["Minute Color (RRGGBB)"] = colorToHexString(minuteColor);
|
top["Minute Color (RRGGBB)"] = colorToHexString(minuteColor);
|
||||||
top["Show Seconds"] = secondsEnabled;
|
top["Show Seconds"] = secondsEnabled;
|
||||||
@@ -221,6 +231,8 @@ public:
|
|||||||
configComplete &= getJsonValue(top["First LED (Main Ring)"], mainSegment.firstLed, 0);
|
configComplete &= getJsonValue(top["First LED (Main Ring)"], mainSegment.firstLed, 0);
|
||||||
configComplete &= getJsonValue(top["Last LED (Main Ring)"], mainSegment.lastLed, 59);
|
configComplete &= getJsonValue(top["Last LED (Main Ring)"], mainSegment.lastLed, 59);
|
||||||
configComplete &= getJsonValue(top["Center/12h LED (Main Ring)"], mainSegment.centerLed, 0);
|
configComplete &= getJsonValue(top["Center/12h LED (Main Ring)"], mainSegment.centerLed, 0);
|
||||||
|
configComplete &= getJsonValue(top["Hour marks Enabled"], hourMarksEnabled, false);
|
||||||
|
configComplete &= getJsonValue(top["Hour mark Color (RRGGBB)"], color, "FF0000") && hexStringToColor(color, hourMarkColor, 0x0000FF);
|
||||||
configComplete &= getJsonValue(top["Hour Color (RRGGBB)"], color, "0000FF") && hexStringToColor(color, hourColor, 0x0000FF);
|
configComplete &= getJsonValue(top["Hour Color (RRGGBB)"], color, "0000FF") && hexStringToColor(color, hourColor, 0x0000FF);
|
||||||
configComplete &= getJsonValue(top["Minute Color (RRGGBB)"], color, "00FF00") && hexStringToColor(color, minuteColor, 0x00FF00);
|
configComplete &= getJsonValue(top["Minute Color (RRGGBB)"], color, "00FF00") && hexStringToColor(color, minuteColor, 0x00FF00);
|
||||||
configComplete &= getJsonValue(top["Show Seconds"], secondsEnabled, true);
|
configComplete &= getJsonValue(top["Show Seconds"], secondsEnabled, true);
|
||||||
|
|||||||
34
usermods/sd_card/readme.md
Normal file
34
usermods/sd_card/readme.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# SD-card mod
|
||||||
|
|
||||||
|
## Build
|
||||||
|
- modify `platformio.ini` and add to the `build_flags` of your configuration the following
|
||||||
|
- choose the way your SD is connected
|
||||||
|
1. via `-D WLED_USE_SD_MMC` when connected via MMC
|
||||||
|
2. via `-D WLED_USE_SD_SPI` when connected via SPI (use usermod page to setup SPI pins)
|
||||||
|
|
||||||
|
### Test
|
||||||
|
- enable `-D SD_PRINT_HOME_DIR` and `-D WLED_DEBUG`
|
||||||
|
- this will print all files in `/` on boot via serial
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
### MMC
|
||||||
|
- The MMC port / pins needs no configuration as they are specified by Espressif
|
||||||
|
### SPI
|
||||||
|
- The SPI port / pins can be modified via the WLED web-UI: `Config → Usermod → SD Card`
|
||||||
|
| option | effect | default |
|
||||||
|
| ----------------- | ------------------------------------------------------------------------------------------------ | ------- |
|
||||||
|
| `pinSourceSelect` | GPIO that is connected to SD's `SS`(source select) / `CS`(chip select) | 16 |
|
||||||
|
| `pinSourceClock` | GPIO that is connected to SD's `SCLK` (source clock) / `CLK`(clock) | 14 |
|
||||||
|
| `pinPoci` | GPIO that is connected to SD's `POCI`<sup>☨</sup> (Peripheral-Out-Ctrl-In) / `MISO` (deprecated) | 36 |
|
||||||
|
| `pinPico` | GPIO that is connected to SD's `PICO`<sup>☨</sup> (Peripheral-In-Ctrl-Out) / `MOSI` (deprecated) | 14 |
|
||||||
|
| `sdEnable` | Enable to read data from the SD-card | true |
|
||||||
|
|
||||||
|
<sup>☨</sup><sub>Following new naming convention of [OSHWA](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/)</sub>
|
||||||
|
|
||||||
|
## Usage in other mods
|
||||||
|
- creates a macro `SD_ADAPTER` which is either mapped to `SD` or `SD_MMC` (see `SD_Test.ino` how to use SD / SD_MMC functions)
|
||||||
|
|
||||||
|
- checks if the specified file is available on the SD card
|
||||||
|
```cpp
|
||||||
|
bool file_onSD(const char *filepath) {...}
|
||||||
|
```
|
||||||
243
usermods/sd_card/usermod_sd_card.h
Normal file
243
usermods/sd_card/usermod_sd_card.h
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "wled.h"
|
||||||
|
|
||||||
|
// SD connected via MMC / SPI
|
||||||
|
#if defined(WLED_USE_SD_MMC)
|
||||||
|
#define USED_STORAGE_FILESYSTEMS "SD MMC, LittleFS"
|
||||||
|
#define SD_ADAPTER SD_MMC
|
||||||
|
#include "SD_MMC.h"
|
||||||
|
// SD connected via SPI (adjustable via usermod config)
|
||||||
|
#elif defined(WLED_USE_SD_SPI)
|
||||||
|
#define SD_ADAPTER SD
|
||||||
|
#define USED_STORAGE_FILESYSTEMS "SD SPI, LittleFS"
|
||||||
|
#include "SD.h"
|
||||||
|
#include "SPI.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLED_USE_SD_MMC
|
||||||
|
#elif defined(WLED_USE_SD_SPI)
|
||||||
|
SPIClass spiPort = SPIClass(VSPI);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void listDir( const char * dirname, uint8_t levels);
|
||||||
|
|
||||||
|
class UsermodSdCard : public Usermod {
|
||||||
|
private:
|
||||||
|
bool sdInitDone = false;
|
||||||
|
|
||||||
|
#ifdef WLED_USE_SD_SPI
|
||||||
|
int8_t configPinSourceSelect = 16;
|
||||||
|
int8_t configPinSourceClock = 14;
|
||||||
|
int8_t configPinPoci = 36; // confusing names? Then have a look :)
|
||||||
|
int8_t configPinPico = 15; // https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/
|
||||||
|
|
||||||
|
//acquired and initialize the SPI port
|
||||||
|
void init_SD_SPI()
|
||||||
|
{
|
||||||
|
if(!configSdEnabled) return;
|
||||||
|
if(sdInitDone) return;
|
||||||
|
|
||||||
|
PinManagerPinType pins[5] = {
|
||||||
|
{ configPinSourceSelect, true },
|
||||||
|
{ configPinSourceClock, true },
|
||||||
|
{ configPinPoci, false },
|
||||||
|
{ configPinPico, true }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!pinManager.allocateMultiplePins(pins, 4, PinOwner::UM_SdCard)) {
|
||||||
|
DEBUG_PRINTF("[%s] SD (SPI) pin allocation failed!\n", _name);
|
||||||
|
sdInitDone = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool returnOfInitSD = false;
|
||||||
|
|
||||||
|
#if defined(WLED_USE_SD_SPI)
|
||||||
|
spiPort.begin(configPinSourceClock, configPinPoci, configPinPico, configPinSourceSelect);
|
||||||
|
returnOfInitSD = SD_ADAPTER.begin(configPinSourceSelect, spiPort);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(!returnOfInitSD) {
|
||||||
|
DEBUG_PRINTF("[%s] SPI begin failed!\n", _name);
|
||||||
|
sdInitDone = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sdInitDone = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//deinitialize the acquired SPI port
|
||||||
|
void deinit_SD_SPI()
|
||||||
|
{
|
||||||
|
if(!sdInitDone) return;
|
||||||
|
|
||||||
|
SD_ADAPTER.end();
|
||||||
|
|
||||||
|
DEBUG_PRINTF("[%s] deallocate pins!\n", _name);
|
||||||
|
pinManager.deallocatePin(configPinSourceSelect, PinOwner::UM_SdCard);
|
||||||
|
pinManager.deallocatePin(configPinSourceClock, PinOwner::UM_SdCard);
|
||||||
|
pinManager.deallocatePin(configPinPoci, PinOwner::UM_SdCard);
|
||||||
|
pinManager.deallocatePin(configPinPico, PinOwner::UM_SdCard);
|
||||||
|
|
||||||
|
sdInitDone = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// some SPI pin was changed, while SPI was initialized, reinit to new port
|
||||||
|
void reinit_SD_SPI()
|
||||||
|
{
|
||||||
|
deinit_SD_SPI();
|
||||||
|
init_SD_SPI();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLED_USE_SD_MMC
|
||||||
|
void init_SD_MMC() {
|
||||||
|
if(sdInitDone) return;
|
||||||
|
bool returnOfInitSD = false;
|
||||||
|
returnOfInitSD = SD_ADAPTER.begin();
|
||||||
|
DEBUG_PRINTF("[%s] MMC begin\n", _name);
|
||||||
|
|
||||||
|
if(!returnOfInitSD) {
|
||||||
|
DEBUG_PRINTF("[%s] MMC begin failed!\n", _name);
|
||||||
|
sdInitDone = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sdInitDone = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public:
|
||||||
|
static bool configSdEnabled;
|
||||||
|
static const char _name[];
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
DEBUG_PRINTF("[%s] usermod loaded \n", _name);
|
||||||
|
#if defined(WLED_USE_SD_SPI)
|
||||||
|
init_SD_SPI();
|
||||||
|
#elif defined(WLED_USE_SD_MMC)
|
||||||
|
init_SD_MMC();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(SD_ADAPTER) && defined(SD_PRINT_HOME_DIR)
|
||||||
|
listDir("/", 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t getId()
|
||||||
|
{
|
||||||
|
return USERMOD_ID_SD_CARD;
|
||||||
|
}
|
||||||
|
|
||||||
|
void addToConfig(JsonObject& root)
|
||||||
|
{
|
||||||
|
#ifdef WLED_USE_SD_SPI
|
||||||
|
JsonObject top = root.createNestedObject(FPSTR(_name));
|
||||||
|
top["pinSourceSelect"] = configPinSourceSelect;
|
||||||
|
top["pinSourceClock"] = configPinSourceClock;
|
||||||
|
top["pinPoci"] = configPinPoci;
|
||||||
|
top["pinPico"] = configPinPico;
|
||||||
|
top["sdEnabled"] = configSdEnabled;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool readFromConfig(JsonObject &root)
|
||||||
|
{
|
||||||
|
#ifdef WLED_USE_SD_SPI
|
||||||
|
JsonObject top = root[FPSTR(_name)];
|
||||||
|
if (top.isNull()) {
|
||||||
|
DEBUG_PRINTF("[%s] No config found. (Using defaults.)\n", _name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t oldPinSourceSelect = configPinSourceSelect;
|
||||||
|
uint8_t oldPinSourceClock = configPinSourceClock;
|
||||||
|
uint8_t oldPinPoci = configPinPoci;
|
||||||
|
uint8_t oldPinPico = configPinPico;
|
||||||
|
bool oldSdEnabled = configSdEnabled;
|
||||||
|
|
||||||
|
getJsonValue(top["pinSourceSelect"], configPinSourceSelect);
|
||||||
|
getJsonValue(top["pinSourceClock"], configPinSourceClock);
|
||||||
|
getJsonValue(top["pinPoci"], configPinPoci);
|
||||||
|
getJsonValue(top["pinPico"], configPinPico);
|
||||||
|
getJsonValue(top["sdEnabled"], configSdEnabled);
|
||||||
|
|
||||||
|
if(configSdEnabled != oldSdEnabled) {
|
||||||
|
configSdEnabled ? init_SD_SPI() : deinit_SD_SPI();
|
||||||
|
DEBUG_PRINTF("[%s] SD card %s\n", _name, configSdEnabled ? "enabled" : "disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( configSdEnabled && (
|
||||||
|
oldPinSourceSelect != configPinSourceSelect ||
|
||||||
|
oldPinSourceClock != configPinSourceClock ||
|
||||||
|
oldPinPoci != configPinPoci ||
|
||||||
|
oldPinPico != configPinPico)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DEBUG_PRINTF("[%s] Init SD card based of config\n", _name);
|
||||||
|
DEBUG_PRINTF("[%s] Config changes \n - SS: %d -> %d\n - MI: %d -> %d\n - MO: %d -> %d\n - En: %d -> %d\n", _name, oldPinSourceSelect, configPinSourceSelect, oldPinSourceClock, configPinSourceClock, oldPinPoci, configPinPoci, oldPinPico, configPinPico);
|
||||||
|
reinit_SD_SPI();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const char UsermodSdCard::_name[] PROGMEM = "SD Card";
|
||||||
|
bool UsermodSdCard::configSdEnabled = true;
|
||||||
|
|
||||||
|
#ifdef SD_ADAPTER
|
||||||
|
//checks if the file is available on SD card
|
||||||
|
bool file_onSD(const char *filepath)
|
||||||
|
{
|
||||||
|
#ifdef WLED_USE_SD_SPI
|
||||||
|
if(!UsermodSdCard::configSdEnabled) return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t cardType = SD_ADAPTER.cardType();
|
||||||
|
if(cardType == CARD_NONE) {
|
||||||
|
DEBUG_PRINTF("[%s] not attached / cardType none\n", UsermodSdCard::_name);
|
||||||
|
return false; // no SD card attached
|
||||||
|
}
|
||||||
|
if(cardType == CARD_MMC || cardType == CARD_SD || cardType == CARD_SDHC)
|
||||||
|
{
|
||||||
|
return SD_ADAPTER.exists(filepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false; // unknown card type
|
||||||
|
}
|
||||||
|
|
||||||
|
void listDir( const char * dirname, uint8_t levels){
|
||||||
|
DEBUG_PRINTF("Listing directory: %s\n", dirname);
|
||||||
|
|
||||||
|
File root = SD_ADAPTER.open(dirname);
|
||||||
|
if(!root){
|
||||||
|
DEBUG_PRINTF("Failed to open directory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!root.isDirectory()){
|
||||||
|
DEBUG_PRINTF("Not a directory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = root.openNextFile();
|
||||||
|
while(file){
|
||||||
|
if(file.isDirectory()){
|
||||||
|
DEBUG_PRINTF(" DIR : %s\n",file.name());
|
||||||
|
if(levels){
|
||||||
|
listDir(file.name(), levels -1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DEBUG_PRINTF(" FILE: %s SIZE: %d\n",file.name(), file.size());
|
||||||
|
}
|
||||||
|
file = root.openNextFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
250
wled00/FX.cpp
250
wled00/FX.cpp
@@ -120,7 +120,7 @@ uint16_t blink(uint32_t color1, uint32_t color2, bool strobe, bool do_palette) {
|
|||||||
uint16_t mode_blink(void) {
|
uint16_t mode_blink(void) {
|
||||||
return blink(SEGCOLOR(0), SEGCOLOR(1), false, true);
|
return blink(SEGCOLOR(0), SEGCOLOR(1), false, true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_BLINK[] PROGMEM = "Blink@!,Duty cycle;!,!,;!;1d";
|
static const char _data_FX_MODE_BLINK[] PROGMEM = "Blink@!,Duty cycle;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -129,7 +129,7 @@ static const char _data_FX_MODE_BLINK[] PROGMEM = "Blink@!,Duty cycle;!,!,;!;1d"
|
|||||||
uint16_t mode_blink_rainbow(void) {
|
uint16_t mode_blink_rainbow(void) {
|
||||||
return blink(SEGMENT.color_wheel(SEGENV.call & 0xFF), SEGCOLOR(1), false, false);
|
return blink(SEGMENT.color_wheel(SEGENV.call & 0xFF), SEGCOLOR(1), false, false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_BLINK_RAINBOW[] PROGMEM = "Blink Rainbow@Frequency,Blink duration;!,!,;!;1d";
|
static const char _data_FX_MODE_BLINK_RAINBOW[] PROGMEM = "Blink Rainbow@Frequency,Blink duration;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -138,7 +138,7 @@ static const char _data_FX_MODE_BLINK_RAINBOW[] PROGMEM = "Blink Rainbow@Frequen
|
|||||||
uint16_t mode_strobe(void) {
|
uint16_t mode_strobe(void) {
|
||||||
return blink(SEGCOLOR(0), SEGCOLOR(1), true, true);
|
return blink(SEGCOLOR(0), SEGCOLOR(1), true, true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_STROBE[] PROGMEM = "Strobe@!,;!,!,;!;1d";
|
static const char _data_FX_MODE_STROBE[] PROGMEM = "Strobe@!;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -147,7 +147,7 @@ static const char _data_FX_MODE_STROBE[] PROGMEM = "Strobe@!,;!,!,;!;1d";
|
|||||||
uint16_t mode_strobe_rainbow(void) {
|
uint16_t mode_strobe_rainbow(void) {
|
||||||
return blink(SEGMENT.color_wheel(SEGENV.call & 0xFF), SEGCOLOR(1), true, false);
|
return blink(SEGMENT.color_wheel(SEGENV.call & 0xFF), SEGCOLOR(1), true, false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_STROBE_RAINBOW[] PROGMEM = "Strobe Rainbow@!,;,!,;!;1d";
|
static const char _data_FX_MODE_STROBE_RAINBOW[] PROGMEM = "Strobe Rainbow@!;,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -213,7 +213,7 @@ uint16_t color_wipe(bool rev, bool useRandomColors) {
|
|||||||
uint16_t mode_color_wipe(void) {
|
uint16_t mode_color_wipe(void) {
|
||||||
return color_wipe(false, false);
|
return color_wipe(false, false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_COLOR_WIPE[] PROGMEM = "Wipe@!,!;!,!,;!;1d";
|
static const char _data_FX_MODE_COLOR_WIPE[] PROGMEM = "Wipe@!,!;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -222,7 +222,7 @@ static const char _data_FX_MODE_COLOR_WIPE[] PROGMEM = "Wipe@!,!;!,!,;!;1d";
|
|||||||
uint16_t mode_color_sweep(void) {
|
uint16_t mode_color_sweep(void) {
|
||||||
return color_wipe(true, false);
|
return color_wipe(true, false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_COLOR_SWEEP[] PROGMEM = "Sweep@!,!;!,!,;!;1d";
|
static const char _data_FX_MODE_COLOR_SWEEP[] PROGMEM = "Sweep@!,!;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -232,7 +232,7 @@ static const char _data_FX_MODE_COLOR_SWEEP[] PROGMEM = "Sweep@!,!;!,!,;!;1d";
|
|||||||
uint16_t mode_color_wipe_random(void) {
|
uint16_t mode_color_wipe_random(void) {
|
||||||
return color_wipe(false, true);
|
return color_wipe(false, true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_COLOR_WIPE_RANDOM[] PROGMEM = "Wipe Random@!,;1,2,3;!;1d";
|
static const char _data_FX_MODE_COLOR_WIPE_RANDOM[] PROGMEM = "Wipe Random@!;1,2,3;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -348,7 +348,7 @@ uint16_t mode_breath(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_BREATH[] PROGMEM = "Breathe@!,;!,!;!;1d";
|
static const char _data_FX_MODE_BREATH[] PROGMEM = "Breathe@!;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -364,7 +364,7 @@ uint16_t mode_fade(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_FADE[] PROGMEM = "Fade@!,;!,!,;!;1d";
|
static const char _data_FX_MODE_FADE[] PROGMEM = "Fade@!;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -488,7 +488,7 @@ uint16_t running(uint32_t color1, uint32_t color2, bool theatre = false) {
|
|||||||
uint16_t mode_theater_chase(void) {
|
uint16_t mode_theater_chase(void) {
|
||||||
return running(SEGCOLOR(0), SEGCOLOR(1), true);
|
return running(SEGCOLOR(0), SEGCOLOR(1), true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_THEATER_CHASE[] PROGMEM = "Theater@!,Gap size;!,!,;!;1d";
|
static const char _data_FX_MODE_THEATER_CHASE[] PROGMEM = "Theater@!,Gap size;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -550,7 +550,7 @@ static const char _data_FX_MODE_RUNNING_DUAL[] PROGMEM = "Running Dual";
|
|||||||
uint16_t mode_running_lights(void) {
|
uint16_t mode_running_lights(void) {
|
||||||
return running_base(false);
|
return running_base(false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_RUNNING_LIGHTS[] PROGMEM = "Running@!,Wave width;!,!,;!;1d";
|
static const char _data_FX_MODE_RUNNING_LIGHTS[] PROGMEM = "Running@!,Wave width;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -559,7 +559,7 @@ static const char _data_FX_MODE_RUNNING_LIGHTS[] PROGMEM = "Running@!,Wave width
|
|||||||
uint16_t mode_saw(void) {
|
uint16_t mode_saw(void) {
|
||||||
return running_base(true);
|
return running_base(true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_SAW[] PROGMEM = "Saw@!,Width;!,!,;!;1d";
|
static const char _data_FX_MODE_SAW[] PROGMEM = "Saw@!,Width;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -596,7 +596,7 @@ uint16_t mode_twinkle(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_TWINKLE[] PROGMEM = "Twinkle@!,;!,!,;!;mp12=0,1d"; //pixels
|
static const char _data_FX_MODE_TWINKLE[] PROGMEM = "Twinkle@!;!,!;!;mp12=0,1d"; //pixels
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -642,7 +642,7 @@ uint16_t dissolve(uint32_t color) {
|
|||||||
uint16_t mode_dissolve(void) {
|
uint16_t mode_dissolve(void) {
|
||||||
return dissolve(SEGCOLOR(0));
|
return dissolve(SEGCOLOR(0));
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_DISSOLVE[] PROGMEM = "Dissolve@Repeat speed,Dissolve speed;!,!,;!;1d";
|
static const char _data_FX_MODE_DISSOLVE[] PROGMEM = "Dissolve@Repeat speed,Dissolve speed;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -651,7 +651,7 @@ static const char _data_FX_MODE_DISSOLVE[] PROGMEM = "Dissolve@Repeat speed,Diss
|
|||||||
uint16_t mode_dissolve_random(void) {
|
uint16_t mode_dissolve_random(void) {
|
||||||
return dissolve(SEGMENT.color_wheel(random8()));
|
return dissolve(SEGMENT.color_wheel(random8()));
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_DISSOLVE_RANDOM[] PROGMEM = "Dissolve Rnd@Repeat speed,Dissolve speed;,!,;!;1d";
|
static const char _data_FX_MODE_DISSOLVE_RANDOM[] PROGMEM = "Dissolve Rnd@Repeat speed,Dissolve speed;,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -673,7 +673,7 @@ uint16_t mode_sparkle(void) {
|
|||||||
SEGMENT.setPixelColor(SEGENV.aux0, SEGCOLOR(0));
|
SEGMENT.setPixelColor(SEGENV.aux0, SEGCOLOR(0));
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_SPARKLE[] PROGMEM = "Sparkle@!,;!,!,;!;mp12=0,1d";
|
static const char _data_FX_MODE_SPARKLE[] PROGMEM = "Sparkle@!;!,!;!;mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -694,7 +694,7 @@ uint16_t mode_flash_sparkle(void) {
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_FLASH_SPARKLE[] PROGMEM = "Sparkle Dark@!,!;Bg,Fx,;!;mp12=0,1d";
|
static const char _data_FX_MODE_FLASH_SPARKLE[] PROGMEM = "Sparkle Dark@!,!;Bg,Fx;!;mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -717,7 +717,7 @@ uint16_t mode_hyper_sparkle(void) {
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_HYPER_SPARKLE[] PROGMEM = "Sparkle+@!,!;Bg,Fx,;!;mp12=0,1d";
|
static const char _data_FX_MODE_HYPER_SPARKLE[] PROGMEM = "Sparkle+@!,!;Bg,Fx;!;mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -747,7 +747,7 @@ uint16_t mode_multi_strobe(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_MULTI_STROBE[] PROGMEM = "Strobe Mega@!,!;!,!,;!;1d";
|
static const char _data_FX_MODE_MULTI_STROBE[] PROGMEM = "Strobe Mega@!,!;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -799,7 +799,7 @@ uint16_t mode_android(void) {
|
|||||||
|
|
||||||
return 3 + ((8 * (uint32_t)(255 - SEGMENT.speed)) / SEGLEN);
|
return 3 + ((8 * (uint32_t)(255 - SEGMENT.speed)) / SEGLEN);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_ANDROID[] PROGMEM = "Android@!,Width;!,!,;!;mp12=1,1d"; //vertical
|
static const char _data_FX_MODE_ANDROID[] PROGMEM = "Android@!,Width;!,!;!;mp12=1,1d"; //vertical
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -903,7 +903,7 @@ uint16_t mode_chase_rainbow(void) {
|
|||||||
|
|
||||||
return chase(color, SEGCOLOR(0), SEGCOLOR(1), false);
|
return chase(color, SEGCOLOR(0), SEGCOLOR(1), false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_CHASE_RAINBOW[] PROGMEM = "Chase Rainbow@!,Width;!,!,;;1d";
|
static const char _data_FX_MODE_CHASE_RAINBOW[] PROGMEM = "Chase Rainbow@!,Width;!,!;;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -917,7 +917,7 @@ uint16_t mode_chase_rainbow_white(void) {
|
|||||||
|
|
||||||
return chase(SEGCOLOR(0), color2, color3, false);
|
return chase(SEGCOLOR(0), color2, color3, false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_CHASE_RAINBOW_WHITE[] PROGMEM = "Rainbow Runner@!,Size;Bg,,;;1d";
|
static const char _data_FX_MODE_CHASE_RAINBOW_WHITE[] PROGMEM = "Rainbow Runner@!,Size;Bg;;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -993,7 +993,7 @@ uint16_t mode_traffic_light(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_TRAFFIC_LIGHT[] PROGMEM = "Traffic Light@!,;,!,;!;1d";
|
static const char _data_FX_MODE_TRAFFIC_LIGHT[] PROGMEM = "Traffic Light@!;,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1023,7 +1023,7 @@ uint16_t mode_chase_flash(void) {
|
|||||||
}
|
}
|
||||||
return delay;
|
return delay;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_CHASE_FLASH[] PROGMEM = "Chase Flash@!,;Bg,Fx,!;!;1d";
|
static const char _data_FX_MODE_CHASE_FLASH[] PROGMEM = "Chase Flash@!;Bg,Fx,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1058,7 +1058,7 @@ uint16_t mode_chase_flash_random(void) {
|
|||||||
}
|
}
|
||||||
return delay;
|
return delay;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_CHASE_FLASH_RANDOM[] PROGMEM = "Chase Flash Rnd@!,;,Fx,;0;1d";
|
static const char _data_FX_MODE_CHASE_FLASH_RANDOM[] PROGMEM = "Chase Flash Rnd@!;,Fx;0;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1067,7 +1067,7 @@ static const char _data_FX_MODE_CHASE_FLASH_RANDOM[] PROGMEM = "Chase Flash Rnd@
|
|||||||
uint16_t mode_running_color(void) {
|
uint16_t mode_running_color(void) {
|
||||||
return running(SEGCOLOR(0), SEGCOLOR(1));
|
return running(SEGCOLOR(0), SEGCOLOR(1));
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_RUNNING_COLOR[] PROGMEM = "Chase 2@!,Width;!,!,;!;1d";
|
static const char _data_FX_MODE_RUNNING_COLOR[] PROGMEM = "Chase 2@!,Width;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1146,7 +1146,7 @@ uint16_t larson_scanner(bool dual) {
|
|||||||
uint16_t mode_larson_scanner(void){
|
uint16_t mode_larson_scanner(void){
|
||||||
return larson_scanner(false);
|
return larson_scanner(false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_LARSON_SCANNER[] PROGMEM = "Scanner@!,Fade rate;!,!,;!;mp12=0,1d";
|
static const char _data_FX_MODE_LARSON_SCANNER[] PROGMEM = "Scanner@!,Fade rate;!,!;!;mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1156,7 +1156,7 @@ static const char _data_FX_MODE_LARSON_SCANNER[] PROGMEM = "Scanner@!,Fade rate;
|
|||||||
uint16_t mode_dual_larson_scanner(void){
|
uint16_t mode_dual_larson_scanner(void){
|
||||||
return larson_scanner(true);
|
return larson_scanner(true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_DUAL_LARSON_SCANNER[] PROGMEM = "Scanner Dual@!,Fade rate;!,!,;!;mp12=0,1d";
|
static const char _data_FX_MODE_DUAL_LARSON_SCANNER[] PROGMEM = "Scanner Dual@!,Fade rate;!,!;!;mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1221,7 +1221,7 @@ uint16_t mode_fireworks() {
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_FIREWORKS[] PROGMEM = "Fireworks@,Frequency;!,!,;!;ix=192,pal=11,1d,2d";
|
static const char _data_FX_MODE_FIREWORKS[] PROGMEM = "Fireworks@,Frequency;!,!;!;ix=192,pal=11,1d,2d";
|
||||||
|
|
||||||
|
|
||||||
//Twinkling LEDs running. Inspired by https://github.com/kitesurfer1404/WS2812FX/blob/master/src/custom/Rain.h
|
//Twinkling LEDs running. Inspired by https://github.com/kitesurfer1404/WS2812FX/blob/master/src/custom/Rain.h
|
||||||
@@ -1256,7 +1256,7 @@ uint16_t mode_rain()
|
|||||||
}
|
}
|
||||||
return mode_fireworks();
|
return mode_fireworks();
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_RAIN[] PROGMEM = "Rain@!,Spawning rate;!,!,;;ix=128,pal=0,1d,2d";
|
static const char _data_FX_MODE_RAIN[] PROGMEM = "Rain@!,Spawning rate;!,!;;ix=128,pal=0,1d,2d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1285,7 +1285,7 @@ uint16_t mode_fire_flicker(void) {
|
|||||||
SEGENV.step = it;
|
SEGENV.step = it;
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_FIRE_FLICKER[] PROGMEM = "Fire Flicker@!,!;!,,;!;1d";
|
static const char _data_FX_MODE_FIRE_FLICKER[] PROGMEM = "Fire Flicker@!,!;!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1323,7 +1323,7 @@ uint16_t gradient_base(bool loading) {
|
|||||||
uint16_t mode_gradient(void) {
|
uint16_t mode_gradient(void) {
|
||||||
return gradient_base(false);
|
return gradient_base(false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_GRADIENT[] PROGMEM = "Gradient@!,Spread;!,!,;!;ix=16,1d";
|
static const char _data_FX_MODE_GRADIENT[] PROGMEM = "Gradient@!,Spread;!,!;!;ix=16,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1332,7 +1332,7 @@ static const char _data_FX_MODE_GRADIENT[] PROGMEM = "Gradient@!,Spread;!,!,;!;i
|
|||||||
uint16_t mode_loading(void) {
|
uint16_t mode_loading(void) {
|
||||||
return gradient_base(true);
|
return gradient_base(true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_LOADING[] PROGMEM = "Loading@!,Fade;!,!,;!;ix=16,1d";
|
static const char _data_FX_MODE_LOADING[] PROGMEM = "Loading@!,Fade;!,!;!;ix=16,1d";
|
||||||
|
|
||||||
|
|
||||||
//American Police Light with all LEDs Red and Blue
|
//American Police Light with all LEDs Red and Blue
|
||||||
@@ -1360,7 +1360,7 @@ uint16_t police_base(uint32_t color1, uint32_t color2)
|
|||||||
// SEGMENT.fill(SEGCOLOR(1));
|
// SEGMENT.fill(SEGCOLOR(1));
|
||||||
// return police_base(RED, BLUE);
|
// return police_base(RED, BLUE);
|
||||||
//}
|
//}
|
||||||
//static const char _data_FX_MODE_POLICE[] PROGMEM = "Police@!,Width;,Bg,;0";
|
//static const char _data_FX_MODE_POLICE[] PROGMEM = "Police@!,Width;,Bg;0";
|
||||||
|
|
||||||
|
|
||||||
//Police Lights with custom colors
|
//Police Lights with custom colors
|
||||||
@@ -1621,7 +1621,7 @@ uint16_t mode_tricolor_wipe(void)
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_TRICOLOR_WIPE[] PROGMEM = "Tri Wipe@!,;1,2,3;0;1d";
|
static const char _data_FX_MODE_TRICOLOR_WIPE[] PROGMEM = "Tri Wipe@!;1,2,3;0;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1894,7 +1894,7 @@ uint16_t mode_pride_2015(void)
|
|||||||
SEGENV.aux0 = sHue16;
|
SEGENV.aux0 = sHue16;
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!,;;;1d";
|
static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!;;;1d";
|
||||||
|
|
||||||
|
|
||||||
//eight colored dots, weaving in and out of sync with each other
|
//eight colored dots, weaving in and out of sync with each other
|
||||||
@@ -1911,7 +1911,7 @@ uint16_t mode_juggle(void){
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_JUGGLE[] PROGMEM = "Juggle@!,Trail;!,!,;!;sx=16,ix=240,1d";
|
static const char _data_FX_MODE_JUGGLE[] PROGMEM = "Juggle@!,Trail;!,!;!;sx=16,ix=240,1d";
|
||||||
|
|
||||||
|
|
||||||
uint16_t mode_palette()
|
uint16_t mode_palette()
|
||||||
@@ -1931,7 +1931,7 @@ uint16_t mode_palette()
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_PALETTE[] PROGMEM = "Palette@Cycle speed,;1,2,3;!;1d";
|
static const char _data_FX_MODE_PALETTE[] PROGMEM = "Palette@Cycle speed;1,2,3;!;1d";
|
||||||
|
|
||||||
|
|
||||||
// WLED limitation: Analog Clock overlay will NOT work when Fire2012 is active
|
// WLED limitation: Analog Clock overlay will NOT work when Fire2012 is active
|
||||||
@@ -2087,7 +2087,7 @@ uint16_t mode_bpm()
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_BPM[] PROGMEM = "Bpm@!,;1,2,3;!;sx=64,1d";
|
static const char _data_FX_MODE_BPM[] PROGMEM = "Bpm@!;1,2,3;!;sx=64,1d";
|
||||||
|
|
||||||
|
|
||||||
uint16_t mode_fillnoise8()
|
uint16_t mode_fillnoise8()
|
||||||
@@ -2269,7 +2269,7 @@ uint16_t mode_lake() {
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_LAKE[] PROGMEM = "Lake@!,;1,2,3;!;1d";
|
static const char _data_FX_MODE_LAKE[] PROGMEM = "Lake@!;1,2,3;!;1d";
|
||||||
|
|
||||||
|
|
||||||
// meteor effect
|
// meteor effect
|
||||||
@@ -2306,7 +2306,7 @@ uint16_t mode_meteor() {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_METEOR[] PROGMEM = "Meteor@!,Trail length;!,,;!;1d";
|
static const char _data_FX_MODE_METEOR[] PROGMEM = "Meteor@!,Trail length;!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
// smooth meteor effect
|
// smooth meteor effect
|
||||||
@@ -2345,7 +2345,7 @@ uint16_t mode_meteor_smooth() {
|
|||||||
SEGENV.step += SEGMENT.speed +1;
|
SEGENV.step += SEGMENT.speed +1;
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_METEOR_SMOOTH[] PROGMEM = "Meteor Smooth@!,Trail length;!,,;!;1d";
|
static const char _data_FX_MODE_METEOR_SMOOTH[] PROGMEM = "Meteor Smooth@!,Trail length;!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
//Railway Crossing / Christmas Fairy lights
|
//Railway Crossing / Christmas Fairy lights
|
||||||
@@ -2684,7 +2684,7 @@ uint16_t mode_halloween_eyes()
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_HALLOWEEN_EYES[] PROGMEM = "Halloween Eyes@Duration,Eye fade time;!,!,;!;1d,2d";
|
static const char _data_FX_MODE_HALLOWEEN_EYES[] PROGMEM = "Halloween Eyes@Duration,Eye fade time;!,!;!;1d,2d";
|
||||||
|
|
||||||
|
|
||||||
//Speed slider sets amount of LEDs lit, intensity sets unlit
|
//Speed slider sets amount of LEDs lit, intensity sets unlit
|
||||||
@@ -2706,7 +2706,7 @@ uint16_t mode_static_pattern()
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_STATIC_PATTERN[] PROGMEM = "Solid Pattern@Fg size,Bg size;Fg,Bg,;!;pal=0,1d";
|
static const char _data_FX_MODE_STATIC_PATTERN[] PROGMEM = "Solid Pattern@Fg size,Bg size;Fg,Bg;!;pal=0,1d";
|
||||||
|
|
||||||
|
|
||||||
uint16_t mode_tri_static_pattern()
|
uint16_t mode_tri_static_pattern()
|
||||||
@@ -2767,7 +2767,7 @@ uint16_t mode_spots()
|
|||||||
{
|
{
|
||||||
return spots_base((255 - SEGMENT.speed) << 8);
|
return spots_base((255 - SEGMENT.speed) << 8);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_SPOTS[] PROGMEM = "Spots@Spread,Width;!,!,;!;1d";
|
static const char _data_FX_MODE_SPOTS[] PROGMEM = "Spots@Spread,Width;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
//Intensity slider sets number of "lights", LEDs per light fade in and out
|
//Intensity slider sets number of "lights", LEDs per light fade in and out
|
||||||
@@ -2778,7 +2778,7 @@ uint16_t mode_spots_fade()
|
|||||||
uint16_t tr = (t >> 1) + (t >> 2);
|
uint16_t tr = (t >> 1) + (t >> 2);
|
||||||
return spots_base(tr);
|
return spots_base(tr);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_SPOTS_FADE[] PROGMEM = "Spots Fade@Spread,Width;!,!,;!;1d";
|
static const char _data_FX_MODE_SPOTS_FADE[] PROGMEM = "Spots Fade@Spread,Width;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
//each needs 12 bytes
|
//each needs 12 bytes
|
||||||
@@ -3087,14 +3087,14 @@ uint16_t mode_candle()
|
|||||||
{
|
{
|
||||||
return candle(false);
|
return candle(false);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_CANDLE[] PROGMEM = "Candle@Flicker rate,Flicker intensity;!,!,;;sx=96,ix=224,pal=0,1d";
|
static const char _data_FX_MODE_CANDLE[] PROGMEM = "Candle@Flicker rate,Flicker intensity;!,!;!;sx=96,ix=224,pal=0,1d";
|
||||||
|
|
||||||
|
|
||||||
uint16_t mode_candle_multi()
|
uint16_t mode_candle_multi()
|
||||||
{
|
{
|
||||||
return candle(true);
|
return candle(true);
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_CANDLE_MULTI[] PROGMEM = "Candle Multi@Flicker rate,Flicker intensity;!,!,;;sx=96,ix=224,pal=0,1d";
|
static const char _data_FX_MODE_CANDLE_MULTI[] PROGMEM = "Candle Multi@Flicker rate,Flicker intensity;!,!;!;sx=96,ix=224,pal=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3227,7 +3227,7 @@ uint16_t mode_starburst(void) {
|
|||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
#undef STARBURST_MAX_FRAG
|
#undef STARBURST_MAX_FRAG
|
||||||
static const char _data_FX_MODE_STARBURST[] PROGMEM = "Fireworks Starburst@Chance,Fragments;,!,;!;pal=11,mp12=0,1d";
|
static const char _data_FX_MODE_STARBURST[] PROGMEM = "Fireworks Starburst@Chance,Fragments;,!;!;pal=11,mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3363,7 +3363,7 @@ uint16_t mode_exploding_fireworks(void)
|
|||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
#undef MAX_SPARKS
|
#undef MAX_SPARKS
|
||||||
static const char _data_FX_MODE_EXPLODING_FIREWORKS[] PROGMEM = "Fireworks 1D@Gravity,Firing side;!,!,;!=11;ix=128,1d,2d";
|
static const char _data_FX_MODE_EXPLODING_FIREWORKS[] PROGMEM = "Fireworks 1D@Gravity,Firing side;!,!;!=11;ix=128,1d,2d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3566,7 +3566,7 @@ uint16_t mode_plasma(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_PLASMA[] PROGMEM = "Plasma@Phase,;1,2,3;!;1d";
|
static const char _data_FX_MODE_PLASMA[] PROGMEM = "Plasma@Phase;1,2,3;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3619,7 +3619,7 @@ uint16_t mode_percent(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_PERCENT[] PROGMEM = "Percent@,% of fill,,,,One color;!,!,;!;1d";
|
static const char _data_FX_MODE_PERCENT[] PROGMEM = "Percent@,% of fill,,,,One color;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3652,7 +3652,7 @@ uint16_t mode_heartbeat(void) {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_HEARTBEAT[] PROGMEM = "Heartbeat@!,!;!,!,;!;mp12=1,1d";
|
static const char _data_FX_MODE_HEARTBEAT[] PROGMEM = "Heartbeat@!,!;!,!;!;mp12=1,1d";
|
||||||
|
|
||||||
|
|
||||||
// "Pacifica"
|
// "Pacifica"
|
||||||
@@ -3784,7 +3784,7 @@ uint16_t mode_solid_glitter()
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_SOLID_GLITTER[] PROGMEM = "Solid Glitter@,!;!,,;0;mp12=0,1d";
|
static const char _data_FX_MODE_SOLID_GLITTER[] PROGMEM = "Solid Glitter@,!;!;0;mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3837,7 +3837,7 @@ uint16_t mode_sunrise() {
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_SUNRISE[] PROGMEM = "Sunrise@Time [min],;;!;sx=60,1d";
|
static const char _data_FX_MODE_SUNRISE[] PROGMEM = "Sunrise@Time [min];;!;sx=60,1d";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3893,7 +3893,7 @@ uint16_t mode_twinkleup(void) { // A very short twinkle routine
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_TWINKLEUP[] PROGMEM = "Twinkleup@!,Intensity;!,!,;!;mp12=0,1d";
|
static const char _data_FX_MODE_TWINKLEUP[] PROGMEM = "Twinkleup@!,Intensity;!,!;!;mp12=0,1d";
|
||||||
|
|
||||||
|
|
||||||
// Peaceful noise that's slow and with gradually changing palettes. Does not support WLED palettes or default colours or controls.
|
// Peaceful noise that's slow and with gradually changing palettes. Does not support WLED palettes or default colours or controls.
|
||||||
@@ -4018,7 +4018,7 @@ uint16_t mode_chunchun(void)
|
|||||||
}
|
}
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
static const char _data_FX_MODE_CHUNCHUN[] PROGMEM = "Chunchun@!,Gap size;!,!,;!;1d";
|
static const char _data_FX_MODE_CHUNCHUN[] PROGMEM = "Chunchun@!,Gap size;!,!;!;1d";
|
||||||
|
|
||||||
|
|
||||||
//13 bytes
|
//13 bytes
|
||||||
@@ -4930,7 +4930,7 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https:
|
|||||||
|
|
||||||
return FRAMETIME_FIXED * (128-(SEGMENT.speed>>1)); // update only when appropriate time passes (in 42 FPS slots)
|
return FRAMETIME_FIXED * (128-(SEGMENT.speed>>1)); // update only when appropriate time passes (in 42 FPS slots)
|
||||||
} // mode_2Dgameoflife()
|
} // mode_2Dgameoflife()
|
||||||
static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!,;!,!;!;2d";
|
static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!;!,!;!;2d";
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
@@ -5158,7 +5158,7 @@ uint16_t mode_2Dmatrix(void) { // Matrix2D. By Jeremy Williams.
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
} // mode_2Dmatrix()
|
} // mode_2Dmatrix()
|
||||||
static const char _data_FX_MODE_2DMATRIX[] PROGMEM = "Matrix@Falling speed,Spawning rate,Trail,,,Custom color,,;Spawn,Trail;;pal=0,2d";
|
static const char _data_FX_MODE_2DMATRIX[] PROGMEM = "Matrix@Falling speed,Spawning rate,Trail,,,Custom color;Spawn,Trail;;pal=0,2d";
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
@@ -5438,7 +5438,7 @@ uint16_t mode_2Dsquaredswirl(void) { // By: Mark Kriegsman. https://g
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
} // mode_2Dsquaredswirl()
|
} // mode_2Dsquaredswirl()
|
||||||
static const char _data_FX_MODE_2DSQUAREDSWIRL[] PROGMEM = "Squared Swirl@,,,,Blur;,,;!;2d";
|
static const char _data_FX_MODE_2DSQUAREDSWIRL[] PROGMEM = "Squared Swirl@,,,,Blur;;!;2d";
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
@@ -5832,7 +5832,7 @@ uint16_t mode_2Dfloatingblobs(void) {
|
|||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
}
|
}
|
||||||
#undef MAX_BLOBS
|
#undef MAX_BLOBS
|
||||||
static const char _data_FX_MODE_2DBLOBS[] PROGMEM = "Blobs@!,# blobs,Blur;!,!,;!;c1=8,2d";
|
static const char _data_FX_MODE_2DBLOBS[] PROGMEM = "Blobs@!,# blobs,Blur;!,!;!;c1=8,2d";
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
@@ -6050,7 +6050,7 @@ uint16_t mode_ripplepeak(void) { // * Ripple peak. By Andrew Tuli
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
} // mode_ripplepeak()
|
} // mode_ripplepeak()
|
||||||
static const char _data_FX_MODE_RIPPLEPEAK[] PROGMEM = "Ripple Peak@Fade rate,Max # of ripples,Select bin,Volume (minimum);!,!;!;c2=0,mp12=0,ssim=0,1d,vo"; // Pixel, Beatsin
|
static const char _data_FX_MODE_RIPPLEPEAK[] PROGMEM = "Ripple Peak@Fade rate,Max # of ripples,Select bin,Volume (min);!,!;!;c2=0,mp12=0,ssim=0,1d,vo"; // Pixel, Beatsin
|
||||||
|
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
@@ -6578,7 +6578,7 @@ uint16_t mode_puddlepeak(void) { // Puddlepeak. By Andrew Tuline.
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
} // mode_puddlepeak()
|
} // mode_puddlepeak()
|
||||||
static const char _data_FX_MODE_PUDDLEPEAK[] PROGMEM = "Puddlepeak@Fade rate,Puddle size,Select bin,Volume (minimum);!,!;!;c2=0,mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin
|
static const char _data_FX_MODE_PUDDLEPEAK[] PROGMEM = "Puddlepeak@Fade rate,Puddle size,Select bin,Volume (min);!,!;!;c2=0,mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin
|
||||||
|
|
||||||
|
|
||||||
//////////////////////
|
//////////////////////
|
||||||
@@ -7080,7 +7080,7 @@ uint16_t mode_waterfall(void) { // Waterfall. By: Andrew Tulin
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
} // mode_waterfall()
|
} // mode_waterfall()
|
||||||
static const char _data_FX_MODE_WATERFALL[] PROGMEM = "Waterfall@!,Adjust color,Select bin,Volume (minimum);!,!;!;c2=0,mp12=2,ssim=0,1d,fr"; // Circles, Beatsin
|
static const char _data_FX_MODE_WATERFALL[] PROGMEM = "Waterfall@!,Adjust color,Select bin,Volume (min);!,!;!;c2=0,mp12=2,ssim=0,1d,fr"; // Circles, Beatsin
|
||||||
|
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
@@ -7140,7 +7140,7 @@ uint16_t mode_2DGEQ(void) { // By Will Tatam. Code reduction by Ewoud Wijma.
|
|||||||
|
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
} // mode_2DGEQ()
|
} // mode_2DGEQ()
|
||||||
static const char _data_FX_MODE_2DGEQ[] PROGMEM = "GEQ@Fade speed,Ripple decay,# of bands,,,Color bars,,;!,,Peak Color;!;c1=255,c2=64,pal=11,ssim=0,2d,fr"; // Beatsin
|
static const char _data_FX_MODE_2DGEQ[] PROGMEM = "GEQ@Fade speed,Ripple decay,# of bands,,,Color bars;!,,Peak Color;!;c1=255,c2=64,pal=11,ssim=0,2d,fr"; // Beatsin
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
@@ -7339,6 +7339,7 @@ void WS2812FX::setupEffectData() {
|
|||||||
// now replace all pre-allocated effects
|
// now replace all pre-allocated effects
|
||||||
// --- 1D non-audio effects ---
|
// --- 1D non-audio effects ---
|
||||||
addEffect(FX_MODE_BLINK, &mode_blink, _data_FX_MODE_BLINK);
|
addEffect(FX_MODE_BLINK, &mode_blink, _data_FX_MODE_BLINK);
|
||||||
|
addEffect(FX_MODE_BREATH, &mode_breath, _data_FX_MODE_BREATH);
|
||||||
addEffect(FX_MODE_COLOR_WIPE, &mode_color_wipe, _data_FX_MODE_COLOR_WIPE);
|
addEffect(FX_MODE_COLOR_WIPE, &mode_color_wipe, _data_FX_MODE_COLOR_WIPE);
|
||||||
addEffect(FX_MODE_COLOR_WIPE_RANDOM, &mode_color_wipe_random, _data_FX_MODE_COLOR_WIPE_RANDOM);
|
addEffect(FX_MODE_COLOR_WIPE_RANDOM, &mode_color_wipe_random, _data_FX_MODE_COLOR_WIPE_RANDOM);
|
||||||
addEffect(FX_MODE_RANDOM_COLOR, &mode_random_color, _data_FX_MODE_RANDOM_COLOR);
|
addEffect(FX_MODE_RANDOM_COLOR, &mode_random_color, _data_FX_MODE_RANDOM_COLOR);
|
||||||
@@ -7351,6 +7352,7 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_FADE, &mode_fade, _data_FX_MODE_FADE);
|
addEffect(FX_MODE_FADE, &mode_fade, _data_FX_MODE_FADE);
|
||||||
addEffect(FX_MODE_THEATER_CHASE, &mode_theater_chase, _data_FX_MODE_THEATER_CHASE);
|
addEffect(FX_MODE_THEATER_CHASE, &mode_theater_chase, _data_FX_MODE_THEATER_CHASE);
|
||||||
addEffect(FX_MODE_THEATER_CHASE_RAINBOW, &mode_theater_chase_rainbow, _data_FX_MODE_THEATER_CHASE_RAINBOW);
|
addEffect(FX_MODE_THEATER_CHASE_RAINBOW, &mode_theater_chase_rainbow, _data_FX_MODE_THEATER_CHASE_RAINBOW);
|
||||||
|
addEffect(FX_MODE_RUNNING_LIGHTS, &mode_running_lights, _data_FX_MODE_RUNNING_LIGHTS);
|
||||||
addEffect(FX_MODE_SAW, &mode_saw, _data_FX_MODE_SAW);
|
addEffect(FX_MODE_SAW, &mode_saw, _data_FX_MODE_SAW);
|
||||||
addEffect(FX_MODE_TWINKLE, &mode_twinkle, _data_FX_MODE_TWINKLE);
|
addEffect(FX_MODE_TWINKLE, &mode_twinkle, _data_FX_MODE_TWINKLE);
|
||||||
addEffect(FX_MODE_DISSOLVE, &mode_dissolve, _data_FX_MODE_DISSOLVE);
|
addEffect(FX_MODE_DISSOLVE, &mode_dissolve, _data_FX_MODE_DISSOLVE);
|
||||||
@@ -7383,29 +7385,27 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_FIRE_FLICKER, &mode_fire_flicker, _data_FX_MODE_FIRE_FLICKER);
|
addEffect(FX_MODE_FIRE_FLICKER, &mode_fire_flicker, _data_FX_MODE_FIRE_FLICKER);
|
||||||
addEffect(FX_MODE_GRADIENT, &mode_gradient, _data_FX_MODE_GRADIENT);
|
addEffect(FX_MODE_GRADIENT, &mode_gradient, _data_FX_MODE_GRADIENT);
|
||||||
addEffect(FX_MODE_LOADING, &mode_loading, _data_FX_MODE_LOADING);
|
addEffect(FX_MODE_LOADING, &mode_loading, _data_FX_MODE_LOADING);
|
||||||
addEffect(FX_MODE_WAVESINS, &mode_wavesins, _data_FX_MODE_WAVESINS);
|
|
||||||
addEffect(FX_MODE_FAIRY, &mode_fairy, _data_FX_MODE_FAIRY);
|
addEffect(FX_MODE_FAIRY, &mode_fairy, _data_FX_MODE_FAIRY);
|
||||||
addEffect(FX_MODE_TWO_DOTS, &mode_two_dots, _data_FX_MODE_TWO_DOTS);
|
addEffect(FX_MODE_TWO_DOTS, &mode_two_dots, _data_FX_MODE_TWO_DOTS);
|
||||||
addEffect(FX_MODE_FAIRYTWINKLE, &mode_fairytwinkle, _data_FX_MODE_FAIRYTWINKLE);
|
addEffect(FX_MODE_FAIRYTWINKLE, &mode_fairytwinkle, _data_FX_MODE_FAIRYTWINKLE);
|
||||||
addEffect(FX_MODE_RUNNING_DUAL, &mode_running_dual, _data_FX_MODE_RUNNING_DUAL);
|
addEffect(FX_MODE_RUNNING_DUAL, &mode_running_dual, _data_FX_MODE_RUNNING_DUAL);
|
||||||
addEffect(FX_MODE_PERLINMOVE, &mode_perlinmove, _data_FX_MODE_PERLINMOVE);
|
|
||||||
addEffect(FX_MODE_TRICOLOR_CHASE, &mode_tricolor_chase, _data_FX_MODE_TRICOLOR_CHASE);
|
addEffect(FX_MODE_TRICOLOR_CHASE, &mode_tricolor_chase, _data_FX_MODE_TRICOLOR_CHASE);
|
||||||
addEffect(FX_MODE_TRICOLOR_WIPE, &mode_tricolor_wipe, _data_FX_MODE_TRICOLOR_WIPE);
|
addEffect(FX_MODE_TRICOLOR_WIPE, &mode_tricolor_wipe, _data_FX_MODE_TRICOLOR_WIPE);
|
||||||
addEffect(FX_MODE_TRICOLOR_FADE, &mode_tricolor_fade, _data_FX_MODE_TRICOLOR_FADE);
|
addEffect(FX_MODE_TRICOLOR_FADE, &mode_tricolor_fade, _data_FX_MODE_TRICOLOR_FADE);
|
||||||
addEffect(FX_MODE_BREATH, &mode_breath, _data_FX_MODE_BREATH);
|
|
||||||
addEffect(FX_MODE_RUNNING_LIGHTS, &mode_running_lights, _data_FX_MODE_RUNNING_LIGHTS);
|
|
||||||
addEffect(FX_MODE_LIGHTNING, &mode_lightning, _data_FX_MODE_LIGHTNING);
|
addEffect(FX_MODE_LIGHTNING, &mode_lightning, _data_FX_MODE_LIGHTNING);
|
||||||
addEffect(FX_MODE_ICU, &mode_icu, _data_FX_MODE_ICU);
|
addEffect(FX_MODE_ICU, &mode_icu, _data_FX_MODE_ICU);
|
||||||
addEffect(FX_MODE_MULTI_COMET, &mode_multi_comet, _data_FX_MODE_MULTI_COMET);
|
addEffect(FX_MODE_MULTI_COMET, &mode_multi_comet, _data_FX_MODE_MULTI_COMET);
|
||||||
addEffect(FX_MODE_DUAL_LARSON_SCANNER, &mode_dual_larson_scanner, _data_FX_MODE_DUAL_LARSON_SCANNER);
|
addEffect(FX_MODE_DUAL_LARSON_SCANNER, &mode_dual_larson_scanner, _data_FX_MODE_DUAL_LARSON_SCANNER);
|
||||||
addEffect(FX_MODE_RANDOM_CHASE, &mode_random_chase, _data_FX_MODE_RANDOM_CHASE);
|
addEffect(FX_MODE_RANDOM_CHASE, &mode_random_chase, _data_FX_MODE_RANDOM_CHASE);
|
||||||
addEffect(FX_MODE_OSCILLATE, &mode_oscillate, _data_FX_MODE_OSCILLATE);
|
addEffect(FX_MODE_OSCILLATE, &mode_oscillate, _data_FX_MODE_OSCILLATE);
|
||||||
addEffect(FX_MODE_FIRE_2012, &mode_fire_2012, _data_FX_MODE_FIRE_2012);
|
|
||||||
addEffect(FX_MODE_PRIDE_2015, &mode_pride_2015, _data_FX_MODE_PRIDE_2015);
|
addEffect(FX_MODE_PRIDE_2015, &mode_pride_2015, _data_FX_MODE_PRIDE_2015);
|
||||||
addEffect(FX_MODE_BPM, &mode_bpm, _data_FX_MODE_BPM);
|
|
||||||
addEffect(FX_MODE_JUGGLE, &mode_juggle, _data_FX_MODE_JUGGLE);
|
addEffect(FX_MODE_JUGGLE, &mode_juggle, _data_FX_MODE_JUGGLE);
|
||||||
addEffect(FX_MODE_PALETTE, &mode_palette, _data_FX_MODE_PALETTE);
|
addEffect(FX_MODE_PALETTE, &mode_palette, _data_FX_MODE_PALETTE);
|
||||||
|
addEffect(FX_MODE_FIRE_2012, &mode_fire_2012, _data_FX_MODE_FIRE_2012);
|
||||||
addEffect(FX_MODE_COLORWAVES, &mode_colorwaves, _data_FX_MODE_COLORWAVES);
|
addEffect(FX_MODE_COLORWAVES, &mode_colorwaves, _data_FX_MODE_COLORWAVES);
|
||||||
|
addEffect(FX_MODE_BPM, &mode_bpm, _data_FX_MODE_BPM);
|
||||||
addEffect(FX_MODE_FILLNOISE8, &mode_fillnoise8, _data_FX_MODE_FILLNOISE8);
|
addEffect(FX_MODE_FILLNOISE8, &mode_fillnoise8, _data_FX_MODE_FILLNOISE8);
|
||||||
addEffect(FX_MODE_NOISE16_1, &mode_noise16_1, _data_FX_MODE_NOISE16_1);
|
addEffect(FX_MODE_NOISE16_1, &mode_noise16_1, _data_FX_MODE_NOISE16_1);
|
||||||
addEffect(FX_MODE_NOISE16_2, &mode_noise16_2, _data_FX_MODE_NOISE16_2);
|
addEffect(FX_MODE_NOISE16_2, &mode_noise16_2, _data_FX_MODE_NOISE16_2);
|
||||||
@@ -7451,49 +7451,13 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_CHUNCHUN, &mode_chunchun, _data_FX_MODE_CHUNCHUN);
|
addEffect(FX_MODE_CHUNCHUN, &mode_chunchun, _data_FX_MODE_CHUNCHUN);
|
||||||
addEffect(FX_MODE_DANCING_SHADOWS, &mode_dancing_shadows, _data_FX_MODE_DANCING_SHADOWS);
|
addEffect(FX_MODE_DANCING_SHADOWS, &mode_dancing_shadows, _data_FX_MODE_DANCING_SHADOWS);
|
||||||
addEffect(FX_MODE_WASHING_MACHINE, &mode_washing_machine, _data_FX_MODE_WASHING_MACHINE);
|
addEffect(FX_MODE_WASHING_MACHINE, &mode_washing_machine, _data_FX_MODE_WASHING_MACHINE);
|
||||||
addEffect(FX_MODE_FLOWSTRIPE, &mode_FlowStripe, _data_FX_MODE_FLOWSTRIPE);
|
|
||||||
addEffect(FX_MODE_BLENDS, &mode_blends, _data_FX_MODE_BLENDS);
|
addEffect(FX_MODE_BLENDS, &mode_blends, _data_FX_MODE_BLENDS);
|
||||||
addEffect(FX_MODE_TV_SIMULATOR, &mode_tv_simulator, _data_FX_MODE_TV_SIMULATOR);
|
addEffect(FX_MODE_TV_SIMULATOR, &mode_tv_simulator, _data_FX_MODE_TV_SIMULATOR);
|
||||||
addEffect(FX_MODE_DYNAMIC_SMOOTH, &mode_dynamic_smooth, _data_FX_MODE_DYNAMIC_SMOOTH);
|
addEffect(FX_MODE_DYNAMIC_SMOOTH, &mode_dynamic_smooth, _data_FX_MODE_DYNAMIC_SMOOTH);
|
||||||
|
|
||||||
// --- 2D non-audio effects ---
|
|
||||||
#ifndef WLED_DISABLE_2D
|
|
||||||
addEffect(FX_MODE_2DSPACESHIPS, &mode_2Dspaceships, _data_FX_MODE_2DSPACESHIPS);
|
|
||||||
addEffect(FX_MODE_2DCRAZYBEES, &mode_2Dcrazybees, _data_FX_MODE_2DCRAZYBEES);
|
|
||||||
addEffect(FX_MODE_2DGHOSTRIDER, &mode_2Dghostrider, _data_FX_MODE_2DGHOSTRIDER);
|
|
||||||
addEffect(FX_MODE_2DBLOBS, &mode_2Dfloatingblobs, _data_FX_MODE_2DBLOBS);
|
|
||||||
addEffect(FX_MODE_2DSCROLLTEXT, &mode_2Dscrollingtext, _data_FX_MODE_2DSCROLLTEXT);
|
|
||||||
addEffect(FX_MODE_2DDRIFTROSE, &mode_2Ddriftrose, _data_FX_MODE_2DDRIFTROSE);
|
|
||||||
addEffect(FX_MODE_2DBLACKHOLE, &mode_2DBlackHole, _data_FX_MODE_2DBLACKHOLE);
|
|
||||||
addEffect(FX_MODE_2DDNASPIRAL, &mode_2DDNASpiral, _data_FX_MODE_2DDNASPIRAL);
|
|
||||||
addEffect(FX_MODE_2DHIPHOTIC, &mode_2DHiphotic, _data_FX_MODE_2DHIPHOTIC);
|
|
||||||
addEffect(FX_MODE_2DPLASMABALL, &mode_2DPlasmaball, _data_FX_MODE_2DPLASMABALL);
|
|
||||||
addEffect(FX_MODE_2DSINDOTS, &mode_2DSindots, _data_FX_MODE_2DSINDOTS);
|
|
||||||
addEffect(FX_MODE_2DFRIZZLES, &mode_2DFrizzles, _data_FX_MODE_2DFRIZZLES);
|
|
||||||
addEffect(FX_MODE_2DLISSAJOUS, &mode_2DLissajous, _data_FX_MODE_2DLISSAJOUS);
|
|
||||||
addEffect(FX_MODE_2DPOLARLIGHTS, &mode_2DPolarLights, _data_FX_MODE_2DPOLARLIGHTS);
|
|
||||||
addEffect(FX_MODE_2DTARTAN, &mode_2Dtartan, _data_FX_MODE_2DTARTAN);
|
|
||||||
addEffect(FX_MODE_2DGAMEOFLIFE, &mode_2Dgameoflife, _data_FX_MODE_2DGAMEOFLIFE);
|
|
||||||
addEffect(FX_MODE_2DJULIA, &mode_2DJulia, _data_FX_MODE_2DJULIA);
|
|
||||||
addEffect(FX_MODE_2DCOLOREDBURSTS, &mode_2DColoredBursts, _data_FX_MODE_2DCOLOREDBURSTS);
|
|
||||||
addEffect(FX_MODE_2DSUNRADIATION, &mode_2DSunradiation, _data_FX_MODE_2DSUNRADIATION);
|
|
||||||
addEffect(FX_MODE_2DNOISE, &mode_2Dnoise, _data_FX_MODE_2DNOISE);
|
|
||||||
addEffect(FX_MODE_2DFIRENOISE, &mode_2Dfirenoise, _data_FX_MODE_2DFIRENOISE);
|
|
||||||
addEffect(FX_MODE_2DSQUAREDSWIRL, &mode_2Dsquaredswirl, _data_FX_MODE_2DSQUAREDSWIRL);
|
|
||||||
addEffect(FX_MODE_2DDNA, &mode_2Ddna, _data_FX_MODE_2DDNA);
|
|
||||||
addEffect(FX_MODE_2DMATRIX, &mode_2Dmatrix, _data_FX_MODE_2DMATRIX);
|
|
||||||
addEffect(FX_MODE_2DMETABALLS, &mode_2Dmetaballs, _data_FX_MODE_2DMETABALLS);
|
|
||||||
addEffect(FX_MODE_2DPULSER, &mode_2DPulser, _data_FX_MODE_2DPULSER);
|
|
||||||
addEffect(FX_MODE_2DDRIFT, &mode_2DDrift, _data_FX_MODE_2DDRIFT);
|
|
||||||
// --- 2D audio effects ---
|
|
||||||
addEffect(FX_MODE_2DWAVERLY, &mode_2DWaverly, _data_FX_MODE_2DWAVERLY);
|
|
||||||
addEffect(FX_MODE_2DSWIRL, &mode_2DSwirl, _data_FX_MODE_2DSWIRL);
|
|
||||||
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI);
|
|
||||||
addEffect(FX_MODE_2DGEQ, &mode_2DGEQ, _data_FX_MODE_2DGEQ);
|
|
||||||
addEffect(FX_MODE_2DFUNKYPLANK, &mode_2DFunkyPlank, _data_FX_MODE_2DFUNKYPLANK);
|
|
||||||
#endif // WLED_DISABLE_2D
|
|
||||||
|
|
||||||
// --- 1D audio effects ---
|
// --- 1D audio effects ---
|
||||||
|
addEffect(FX_MODE_PIXELS, &mode_pixels, _data_FX_MODE_PIXELS);
|
||||||
addEffect(FX_MODE_PIXELWAVE, &mode_pixelwave, _data_FX_MODE_PIXELWAVE);
|
addEffect(FX_MODE_PIXELWAVE, &mode_pixelwave, _data_FX_MODE_PIXELWAVE);
|
||||||
addEffect(FX_MODE_JUGGLES, &mode_juggles, _data_FX_MODE_JUGGLES);
|
addEffect(FX_MODE_JUGGLES, &mode_juggles, _data_FX_MODE_JUGGLES);
|
||||||
addEffect(FX_MODE_MATRIPIX, &mode_matripix, _data_FX_MODE_MATRIPIX);
|
addEffect(FX_MODE_MATRIPIX, &mode_matripix, _data_FX_MODE_MATRIPIX);
|
||||||
@@ -7502,20 +7466,76 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_PUDDLES, &mode_puddles, _data_FX_MODE_PUDDLES);
|
addEffect(FX_MODE_PUDDLES, &mode_puddles, _data_FX_MODE_PUDDLES);
|
||||||
addEffect(FX_MODE_MIDNOISE, &mode_midnoise, _data_FX_MODE_MIDNOISE);
|
addEffect(FX_MODE_MIDNOISE, &mode_midnoise, _data_FX_MODE_MIDNOISE);
|
||||||
addEffect(FX_MODE_NOISEMETER, &mode_noisemeter, _data_FX_MODE_NOISEMETER);
|
addEffect(FX_MODE_NOISEMETER, &mode_noisemeter, _data_FX_MODE_NOISEMETER);
|
||||||
addEffect(FX_MODE_NOISEFIRE, &mode_noisefire, _data_FX_MODE_NOISEFIRE);
|
|
||||||
addEffect(FX_MODE_PUDDLEPEAK, &mode_puddlepeak, _data_FX_MODE_PUDDLEPEAK);
|
|
||||||
addEffect(FX_MODE_RIPPLEPEAK, &mode_ripplepeak, _data_FX_MODE_RIPPLEPEAK);
|
|
||||||
addEffect(FX_MODE_GRAVCENTER, &mode_gravcenter, _data_FX_MODE_GRAVCENTER);
|
|
||||||
addEffect(FX_MODE_GRAVCENTRIC, &mode_gravcentric, _data_FX_MODE_GRAVCENTRIC);
|
|
||||||
addEffect(FX_MODE_PIXELS, &mode_pixels, _data_FX_MODE_PIXELS);
|
|
||||||
addEffect(FX_MODE_FREQWAVE, &mode_freqwave, _data_FX_MODE_FREQWAVE);
|
addEffect(FX_MODE_FREQWAVE, &mode_freqwave, _data_FX_MODE_FREQWAVE);
|
||||||
addEffect(FX_MODE_FREQMATRIX, &mode_freqmatrix, _data_FX_MODE_FREQMATRIX);
|
addEffect(FX_MODE_FREQMATRIX, &mode_freqmatrix, _data_FX_MODE_FREQMATRIX);
|
||||||
|
|
||||||
addEffect(FX_MODE_WATERFALL, &mode_waterfall, _data_FX_MODE_WATERFALL);
|
addEffect(FX_MODE_WATERFALL, &mode_waterfall, _data_FX_MODE_WATERFALL);
|
||||||
addEffect(FX_MODE_FREQPIXELS, &mode_freqpixels, _data_FX_MODE_FREQPIXELS);
|
addEffect(FX_MODE_FREQPIXELS, &mode_freqpixels, _data_FX_MODE_FREQPIXELS);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_NOISEFIRE, &mode_noisefire, _data_FX_MODE_NOISEFIRE);
|
||||||
|
addEffect(FX_MODE_PUDDLEPEAK, &mode_puddlepeak, _data_FX_MODE_PUDDLEPEAK);
|
||||||
addEffect(FX_MODE_NOISEMOVE, &mode_noisemove, _data_FX_MODE_NOISEMOVE);
|
addEffect(FX_MODE_NOISEMOVE, &mode_noisemove, _data_FX_MODE_NOISEMOVE);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_PERLINMOVE, &mode_perlinmove, _data_FX_MODE_PERLINMOVE);
|
||||||
|
addEffect(FX_MODE_RIPPLEPEAK, &mode_ripplepeak, _data_FX_MODE_RIPPLEPEAK);
|
||||||
|
|
||||||
addEffect(FX_MODE_FREQMAP, &mode_freqmap, _data_FX_MODE_FREQMAP);
|
addEffect(FX_MODE_FREQMAP, &mode_freqmap, _data_FX_MODE_FREQMAP);
|
||||||
|
addEffect(FX_MODE_GRAVCENTER, &mode_gravcenter, _data_FX_MODE_GRAVCENTER);
|
||||||
|
addEffect(FX_MODE_GRAVCENTRIC, &mode_gravcentric, _data_FX_MODE_GRAVCENTRIC);
|
||||||
addEffect(FX_MODE_GRAVFREQ, &mode_gravfreq, _data_FX_MODE_GRAVFREQ);
|
addEffect(FX_MODE_GRAVFREQ, &mode_gravfreq, _data_FX_MODE_GRAVFREQ);
|
||||||
addEffect(FX_MODE_DJLIGHT, &mode_DJLight, _data_FX_MODE_DJLIGHT);
|
addEffect(FX_MODE_DJLIGHT, &mode_DJLight, _data_FX_MODE_DJLIGHT);
|
||||||
|
|
||||||
addEffect(FX_MODE_BLURZ, &mode_blurz, _data_FX_MODE_BLURZ);
|
addEffect(FX_MODE_BLURZ, &mode_blurz, _data_FX_MODE_BLURZ);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_FLOWSTRIPE, &mode_FlowStripe, _data_FX_MODE_FLOWSTRIPE);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_WAVESINS, &mode_wavesins, _data_FX_MODE_WAVESINS);
|
||||||
addEffect(FX_MODE_ROCKTAVES, &mode_rocktaves, _data_FX_MODE_ROCKTAVES);
|
addEffect(FX_MODE_ROCKTAVES, &mode_rocktaves, _data_FX_MODE_ROCKTAVES);
|
||||||
|
|
||||||
|
// --- 2D effects ---
|
||||||
|
#ifndef WLED_DISABLE_2D
|
||||||
|
addEffect(FX_MODE_2DSPACESHIPS, &mode_2Dspaceships, _data_FX_MODE_2DSPACESHIPS);
|
||||||
|
addEffect(FX_MODE_2DCRAZYBEES, &mode_2Dcrazybees, _data_FX_MODE_2DCRAZYBEES);
|
||||||
|
addEffect(FX_MODE_2DGHOSTRIDER, &mode_2Dghostrider, _data_FX_MODE_2DGHOSTRIDER);
|
||||||
|
addEffect(FX_MODE_2DBLOBS, &mode_2Dfloatingblobs, _data_FX_MODE_2DBLOBS);
|
||||||
|
addEffect(FX_MODE_2DSCROLLTEXT, &mode_2Dscrollingtext, _data_FX_MODE_2DSCROLLTEXT);
|
||||||
|
addEffect(FX_MODE_2DDRIFTROSE, &mode_2Ddriftrose, _data_FX_MODE_2DDRIFTROSE);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DGEQ, &mode_2DGEQ, _data_FX_MODE_2DGEQ); // audio
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DNOISE, &mode_2Dnoise, _data_FX_MODE_2DNOISE);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DFIRENOISE, &mode_2Dfirenoise, _data_FX_MODE_2DFIRENOISE);
|
||||||
|
addEffect(FX_MODE_2DSQUAREDSWIRL, &mode_2Dsquaredswirl, _data_FX_MODE_2DSQUAREDSWIRL);
|
||||||
|
|
||||||
|
//non audio
|
||||||
|
addEffect(FX_MODE_2DDNA, &mode_2Ddna, _data_FX_MODE_2DDNA);
|
||||||
|
addEffect(FX_MODE_2DMATRIX, &mode_2Dmatrix, _data_FX_MODE_2DMATRIX);
|
||||||
|
addEffect(FX_MODE_2DMETABALLS, &mode_2Dmetaballs, _data_FX_MODE_2DMETABALLS);
|
||||||
|
addEffect(FX_MODE_2DFUNKYPLANK, &mode_2DFunkyPlank, _data_FX_MODE_2DFUNKYPLANK); // audio
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DPULSER, &mode_2DPulser, _data_FX_MODE_2DPULSER);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DDRIFT, &mode_2DDrift, _data_FX_MODE_2DDRIFT);
|
||||||
|
addEffect(FX_MODE_2DWAVERLY, &mode_2DWaverly, _data_FX_MODE_2DWAVERLY); // audio
|
||||||
|
addEffect(FX_MODE_2DSUNRADIATION, &mode_2DSunradiation, _data_FX_MODE_2DSUNRADIATION);
|
||||||
|
addEffect(FX_MODE_2DCOLOREDBURSTS, &mode_2DColoredBursts, _data_FX_MODE_2DCOLOREDBURSTS);
|
||||||
|
addEffect(FX_MODE_2DJULIA, &mode_2DJulia, _data_FX_MODE_2DJULIA);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DGAMEOFLIFE, &mode_2Dgameoflife, _data_FX_MODE_2DGAMEOFLIFE);
|
||||||
|
addEffect(FX_MODE_2DTARTAN, &mode_2Dtartan, _data_FX_MODE_2DTARTAN);
|
||||||
|
addEffect(FX_MODE_2DPOLARLIGHTS, &mode_2DPolarLights, _data_FX_MODE_2DPOLARLIGHTS);
|
||||||
|
addEffect(FX_MODE_2DSWIRL, &mode_2DSwirl, _data_FX_MODE_2DSWIRL); // audio
|
||||||
|
addEffect(FX_MODE_2DLISSAJOUS, &mode_2DLissajous, _data_FX_MODE_2DLISSAJOUS);
|
||||||
|
addEffect(FX_MODE_2DFRIZZLES, &mode_2DFrizzles, _data_FX_MODE_2DFRIZZLES);
|
||||||
|
addEffect(FX_MODE_2DPLASMABALL, &mode_2DPlasmaball, _data_FX_MODE_2DPLASMABALL);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DHIPHOTIC, &mode_2DHiphotic, _data_FX_MODE_2DHIPHOTIC);
|
||||||
|
addEffect(FX_MODE_2DSINDOTS, &mode_2DSindots, _data_FX_MODE_2DSINDOTS);
|
||||||
|
addEffect(FX_MODE_2DDNASPIRAL, &mode_2DDNASpiral, _data_FX_MODE_2DDNASPIRAL);
|
||||||
|
addEffect(FX_MODE_2DBLACKHOLE, &mode_2DBlackHole, _data_FX_MODE_2DBLACKHOLE);
|
||||||
|
|
||||||
|
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI); // audio
|
||||||
|
#endif // WLED_DISABLE_2D
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
26
wled00/FX.h
26
wled00/FX.h
@@ -243,12 +243,6 @@
|
|||||||
#define FX_MODE_TV_SIMULATOR 116
|
#define FX_MODE_TV_SIMULATOR 116
|
||||||
#define FX_MODE_DYNAMIC_SMOOTH 117
|
#define FX_MODE_DYNAMIC_SMOOTH 117
|
||||||
|
|
||||||
//WLED SR READ THIS!:
|
|
||||||
//these id's should never change as they are saved in api commands of presets and used in sync
|
|
||||||
//118 to 127 was reserved for future AC effects in SR 0.13 and partly filled in 0.14
|
|
||||||
//numbering reflects the order in which they were added
|
|
||||||
//there are still gaps which can be filled by future effects
|
|
||||||
|
|
||||||
// new 0.14 2D effects
|
// new 0.14 2D effects
|
||||||
#define FX_MODE_2DSPACESHIPS 118 //gap fill
|
#define FX_MODE_2DSPACESHIPS 118 //gap fill
|
||||||
#define FX_MODE_2DCRAZYBEES 119 //gap fill
|
#define FX_MODE_2DCRAZYBEES 119 //gap fill
|
||||||
@@ -299,9 +293,9 @@
|
|||||||
#define FX_MODE_2DSUNRADIATION 166
|
#define FX_MODE_2DSUNRADIATION 166
|
||||||
#define FX_MODE_2DCOLOREDBURSTS 167
|
#define FX_MODE_2DCOLOREDBURSTS 167
|
||||||
#define FX_MODE_2DJULIA 168
|
#define FX_MODE_2DJULIA 168
|
||||||
#define FX_MODE_2DPOOLNOISE 169 //have been removed in WLED SR in the past because of low mem but should be added back
|
// #define FX_MODE_2DPOOLNOISE 169 //have been removed in WLED SR in the past because of low mem but should be added back
|
||||||
#define FX_MODE_2DTWISTER 170 //have been removed in WLED SR in the past because of low mem but should be added back
|
// #define FX_MODE_2DTWISTER 170 //have been removed in WLED SR in the past because of low mem but should be added back
|
||||||
#define FX_MODE_2DCAELEMENTATY 171 //have been removed in WLED SR in the past because of low mem but should be added back
|
// #define FX_MODE_2DCAELEMENTATY 171 //have been removed in WLED SR in the past because of low mem but should be added back
|
||||||
#define FX_MODE_2DGAMEOFLIFE 172
|
#define FX_MODE_2DGAMEOFLIFE 172
|
||||||
#define FX_MODE_2DTARTAN 173
|
#define FX_MODE_2DTARTAN 173
|
||||||
#define FX_MODE_2DPOLARLIGHTS 174
|
#define FX_MODE_2DPOLARLIGHTS 174
|
||||||
@@ -482,13 +476,13 @@ typedef struct Segment {
|
|||||||
Segment(Segment &&orig) noexcept; // move constructor
|
Segment(Segment &&orig) noexcept; // move constructor
|
||||||
|
|
||||||
~Segment() {
|
~Segment() {
|
||||||
#ifdef WLED_DEBUG
|
//#ifdef WLED_DEBUG
|
||||||
Serial.print(F("Destroying segment:"));
|
//Serial.print(F("Destroying segment:"));
|
||||||
if (name) Serial.printf(" %s (%p)", name, name);
|
//if (name) Serial.printf(" %s (%p)", name, name);
|
||||||
if (data) Serial.printf(" %d (%p)", (int)_dataLen, data);
|
//if (data) Serial.printf(" %d (%p)", (int)_dataLen, data);
|
||||||
if (leds) Serial.printf(" [%u]", length()*sizeof(CRGB));
|
//if (leds) Serial.printf(" [%u]", length()*sizeof(CRGB));
|
||||||
Serial.println();
|
//Serial.println();
|
||||||
#endif
|
//#endif
|
||||||
if (!Segment::_globalLeds && leds) free(leds);
|
if (!Segment::_globalLeds && leds) free(leds);
|
||||||
if (name) delete[] name;
|
if (name) delete[] name;
|
||||||
if (_t) delete _t;
|
if (_t) delete _t;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ CRGB *Segment::_globalLeds = nullptr;
|
|||||||
|
|
||||||
// copy constructor
|
// copy constructor
|
||||||
Segment::Segment(const Segment &orig) {
|
Segment::Segment(const Segment &orig) {
|
||||||
DEBUG_PRINTLN(F("-- Copy segment constructor --"));
|
//DEBUG_PRINTLN(F("-- Copy segment constructor --"));
|
||||||
memcpy(this, &orig, sizeof(Segment));
|
memcpy(this, &orig, sizeof(Segment));
|
||||||
name = nullptr;
|
name = nullptr;
|
||||||
data = nullptr;
|
data = nullptr;
|
||||||
@@ -94,7 +94,7 @@ Segment::Segment(const Segment &orig) {
|
|||||||
|
|
||||||
// move constructor
|
// move constructor
|
||||||
Segment::Segment(Segment &&orig) noexcept {
|
Segment::Segment(Segment &&orig) noexcept {
|
||||||
DEBUG_PRINTLN(F("-- Move segment constructor --"));
|
//DEBUG_PRINTLN(F("-- Move segment constructor --"));
|
||||||
memcpy(this, &orig, sizeof(Segment));
|
memcpy(this, &orig, sizeof(Segment));
|
||||||
orig.name = nullptr;
|
orig.name = nullptr;
|
||||||
orig.data = nullptr;
|
orig.data = nullptr;
|
||||||
@@ -106,7 +106,7 @@ Segment::Segment(Segment &&orig) noexcept {
|
|||||||
|
|
||||||
// copy assignment
|
// copy assignment
|
||||||
Segment& Segment::operator= (const Segment &orig) {
|
Segment& Segment::operator= (const Segment &orig) {
|
||||||
DEBUG_PRINTLN(F("-- Copying segment --"));
|
//DEBUG_PRINTLN(F("-- Copying segment --"));
|
||||||
if (this != &orig) {
|
if (this != &orig) {
|
||||||
// clean destination
|
// clean destination
|
||||||
if (name) delete[] name;
|
if (name) delete[] name;
|
||||||
@@ -133,7 +133,7 @@ Segment& Segment::operator= (const Segment &orig) {
|
|||||||
|
|
||||||
// move assignment
|
// move assignment
|
||||||
Segment& Segment::operator= (Segment &&orig) noexcept {
|
Segment& Segment::operator= (Segment &&orig) noexcept {
|
||||||
DEBUG_PRINTLN(F("-- Moving segment --"));
|
//DEBUG_PRINTLN(F("-- Moving segment --"));
|
||||||
if (this != &orig) {
|
if (this != &orig) {
|
||||||
if (name) delete[] name; // free old name
|
if (name) delete[] name; // free old name
|
||||||
deallocateData(); // free old runtime data
|
deallocateData(); // free old runtime data
|
||||||
@@ -330,11 +330,7 @@ uint8_t Segment::currentBri(uint8_t briNew, bool useCct) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Segment::currentMode(uint8_t newMode) {
|
uint8_t Segment::currentMode(uint8_t newMode) {
|
||||||
if (transitional && _t) {
|
return (progress()>32767U) ? newMode : _t->_modeP; // change effect in the middle of transition
|
||||||
return _t->_modeP;
|
|
||||||
} else {
|
|
||||||
return newMode;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Segment::currentColor(uint8_t slot, uint32_t colorNew) {
|
uint32_t Segment::currentColor(uint8_t slot, uint32_t colorNew) {
|
||||||
@@ -373,6 +369,7 @@ bool Segment::setColor(uint8_t slot, uint32_t c) { //returns true if changed
|
|||||||
if (slot >= NUM_COLORS || c == colors[slot]) return false;
|
if (slot >= NUM_COLORS || c == colors[slot]) return false;
|
||||||
if (fadeTransition) startTransition(strip.getTransition()); // start transition prior to change
|
if (fadeTransition) startTransition(strip.getTransition()); // start transition prior to change
|
||||||
colors[slot] = c;
|
colors[slot] = c;
|
||||||
|
stateChanged = true; // send UDP/WS broadcast
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -385,12 +382,14 @@ void Segment::setCCT(uint16_t k) {
|
|||||||
if (cct == k) return;
|
if (cct == k) return;
|
||||||
if (fadeTransition) startTransition(strip.getTransition()); // start transition prior to change
|
if (fadeTransition) startTransition(strip.getTransition()); // start transition prior to change
|
||||||
cct = k;
|
cct = k;
|
||||||
|
stateChanged = true; // send UDP/WS broadcast
|
||||||
}
|
}
|
||||||
|
|
||||||
void Segment::setOpacity(uint8_t o) {
|
void Segment::setOpacity(uint8_t o) {
|
||||||
if (opacity == o) return;
|
if (opacity == o) return;
|
||||||
if (fadeTransition) startTransition(strip.getTransition()); // start transition prior to change
|
if (fadeTransition) startTransition(strip.getTransition()); // start transition prior to change
|
||||||
opacity = o;
|
opacity = o;
|
||||||
|
stateChanged = true; // send UDP/WS broadcast
|
||||||
}
|
}
|
||||||
|
|
||||||
void Segment::setOption(uint8_t n, bool val) {
|
void Segment::setOption(uint8_t n, bool val) {
|
||||||
@@ -398,6 +397,7 @@ void Segment::setOption(uint8_t n, bool val) {
|
|||||||
if (fadeTransition && n == SEG_OPTION_ON && val != prevOn) startTransition(strip.getTransition()); // start transition prior to change
|
if (fadeTransition && n == SEG_OPTION_ON && val != prevOn) startTransition(strip.getTransition()); // start transition prior to change
|
||||||
if (val) options |= 0x01 << n;
|
if (val) options |= 0x01 << n;
|
||||||
else options &= ~(0x01 << n);
|
else options &= ~(0x01 << n);
|
||||||
|
if (!(n == SEG_OPTION_SELECTED || n == SEG_OPTION_RESET || n == SEG_OPTION_TRANSITIONAL)) stateChanged = true; // send UDP/WS broadcast
|
||||||
}
|
}
|
||||||
|
|
||||||
void Segment::setMode(uint8_t fx, bool loadDefaults) {
|
void Segment::setMode(uint8_t fx, bool loadDefaults) {
|
||||||
@@ -429,6 +429,7 @@ void Segment::setMode(uint8_t fx, bool loadDefaults) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stateChanged = true; // send UDP/WS broadcast
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -440,6 +441,7 @@ void Segment::setPalette(uint8_t pal) {
|
|||||||
palette = pal;
|
palette = pal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stateChanged = true; // send UDP/WS broadcast
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2D matrix
|
// 2D matrix
|
||||||
@@ -920,11 +922,10 @@ uint8_t Segment::differs(Segment& b) const {
|
|||||||
if (startY != b.startY) d |= SEG_DIFFERS_BOUNDS;
|
if (startY != b.startY) d |= SEG_DIFFERS_BOUNDS;
|
||||||
if (stopY != b.stopY) d |= SEG_DIFFERS_BOUNDS;
|
if (stopY != b.stopY) d |= SEG_DIFFERS_BOUNDS;
|
||||||
|
|
||||||
//bit pattern: msb first: [transposed mirrorY reverseY] transitional (tbd) paused needspixelstate mirrored on reverse selected
|
//bit pattern: (msb first) sound:3, mapping:3, transposed, mirrorY, reverseY, [transitional, reset,] paused, mirrored, on, reverse, [selected]
|
||||||
if ((options & 0b1111111110011110) != (b.options & 0b1111111110011110)) d |= SEG_DIFFERS_OPT;
|
if ((options & 0b1111111110011110U) != (b.options & 0b1111111110011110U)) d |= SEG_DIFFERS_OPT;
|
||||||
if ((options & 0x01) != (b.options & 0x01)) d |= SEG_DIFFERS_SEL;
|
if ((options & 0x0001U) != (b.options & 0x0001U)) d |= SEG_DIFFERS_SEL;
|
||||||
|
for (uint8_t i = 0; i < NUM_COLORS; i++) if (colors[i] != b.colors[i]) d |= SEG_DIFFERS_COL;
|
||||||
for (uint8_t i = 0; i < NUM_COLORS; i++) if (colors[i] != b.colors[i]) d |= SEG_DIFFERS_COL;
|
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
@@ -1117,8 +1118,8 @@ uint8_t Segment::get_random_wheel_index(uint8_t pos) {
|
|||||||
uint32_t Segment::color_from_palette(uint16_t i, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri)
|
uint32_t Segment::color_from_palette(uint16_t i, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri)
|
||||||
{
|
{
|
||||||
// default palette or no RGB support on segment
|
// default palette or no RGB support on segment
|
||||||
if ((palette == 0 && mcol < NUM_COLORS) || !(_capabilities & 0x01)) {
|
if ((palette == 0 && mcol < NUM_COLORS) || !_isRGB) {
|
||||||
uint32_t color = (transitional && _t) ? _t->_colorT[mcol] : colors[mcol];
|
uint32_t color = currentColor(mcol, colors[mcol]);
|
||||||
color = gamma32(color);
|
color = gamma32(color);
|
||||||
if (pbri == 255) return color;
|
if (pbri == 255) return color;
|
||||||
return RGBW32(scale8_video(R(color),pbri), scale8_video(G(color),pbri), scale8_video(B(color),pbri), scale8_video(W(color),pbri));
|
return RGBW32(scale8_video(R(color),pbri), scale8_video(G(color),pbri), scale8_video(B(color),pbri), scale8_video(W(color),pbri));
|
||||||
@@ -1835,7 +1836,7 @@ int16_t Bus::_cct = -1;
|
|||||||
uint8_t Bus::_cctBlend = 0;
|
uint8_t Bus::_cctBlend = 0;
|
||||||
uint8_t Bus::_gAWM = 255;
|
uint8_t Bus::_gAWM = 255;
|
||||||
|
|
||||||
const char JSON_mode_names[] PROGMEM = R"=====(["Mode names have moved"])=====";
|
const char JSON_mode_names[] PROGMEM = R"=====(["FX names moved"])=====";
|
||||||
const char JSON_palette_names[] PROGMEM = R"=====([
|
const char JSON_palette_names[] PROGMEM = R"=====([
|
||||||
"Default","* Random Cycle","* Color 1","* Colors 1&2","* Color Gradient","* Colors Only","Party","Cloud","Lava","Ocean",
|
"Default","* Random Cycle","* Color 1","* Colors 1&2","* Color Gradient","* Colors Only","Party","Cloud","Lava","Ocean",
|
||||||
"Forest","Rainbow","Rainbow Bands","Sunset","Rivendell","Breeze","Red & Blue","Yellowout","Analogous","Splash",
|
"Forest","Rainbow","Rainbow Bands","Sunset","Rivendell","Breeze","Red & Blue","Yellowout","Analogous","Splash",
|
||||||
|
|||||||
@@ -344,6 +344,7 @@ uint8_t gamma8_cal(uint8_t b, float gamma)
|
|||||||
return (int)(powf((float)b / 255.0f, gamma) * 255.0f + 0.5f);
|
return (int)(powf((float)b / 255.0f, gamma) * 255.0f + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// re-calculates & fills gamma table
|
||||||
void calcGammaTable(float gamma)
|
void calcGammaTable(float gamma)
|
||||||
{
|
{
|
||||||
for (uint16_t i = 0; i < 256; i++) {
|
for (uint16_t i = 0; i < 256; i++) {
|
||||||
@@ -351,11 +352,13 @@ void calcGammaTable(float gamma)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// used for individual channel or brightness gamma correction
|
||||||
uint8_t gamma8(uint8_t b)
|
uint8_t gamma8(uint8_t b)
|
||||||
{
|
{
|
||||||
return gammaT[b];
|
return gammaT[b];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// used for color gamma correction
|
||||||
uint32_t gamma32(uint32_t color)
|
uint32_t gamma32(uint32_t color)
|
||||||
{
|
{
|
||||||
if (!gammaCorrectCol) return color;
|
if (!gammaCorrectCol) return color;
|
||||||
|
|||||||
@@ -96,10 +96,11 @@
|
|||||||
#define USERMOD_ID_ANALOG_CLOCK 33 //Usermod "Analog_Clock.h"
|
#define USERMOD_ID_ANALOG_CLOCK 33 //Usermod "Analog_Clock.h"
|
||||||
#define USERMOD_ID_PING_PONG_CLOCK 34 //Usermod "usermod_v2_ping_pong_clock.h"
|
#define USERMOD_ID_PING_PONG_CLOCK 34 //Usermod "usermod_v2_ping_pong_clock.h"
|
||||||
#define USERMOD_ID_ADS1115 35 //Usermod "usermod_ads1115.h"
|
#define USERMOD_ID_ADS1115 35 //Usermod "usermod_ads1115.h"
|
||||||
|
#define USERMOD_ID_SD_CARD 37 //Usermod "usermod_sd_card.h"
|
||||||
//WLEDMM
|
//WLEDMM
|
||||||
#define USERMOD_ID_CUSTOMEFFECTS 36 //Usermod "usermod_v2_customeffects.h"
|
#define USERMOD_ID_CUSTOMEFFECTS 38 //Usermod "usermod_v2_customeffects.h"
|
||||||
#define USERMOD_ID_WEATHER 37 //Usermod "usermod_v2_weather.h"
|
#define USERMOD_ID_WEATHER 39 //Usermod "usermod_v2_weather.h"
|
||||||
#define USERMOD_ID_GAMES 38 //Usermod "usermod_v2_games.h"
|
#define USERMOD_ID_GAMES 40 //Usermod "usermod_v2_games.h"
|
||||||
|
|
||||||
//Access point behavior
|
//Access point behavior
|
||||||
#define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot
|
#define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot
|
||||||
@@ -255,13 +256,13 @@
|
|||||||
#define SEG_OPTION_TRANSPOSED 9
|
#define SEG_OPTION_TRANSPOSED 9
|
||||||
|
|
||||||
//Segment differs return byte
|
//Segment differs return byte
|
||||||
#define SEG_DIFFERS_BRI 0x01
|
#define SEG_DIFFERS_BRI 0x01 // opacity
|
||||||
#define SEG_DIFFERS_OPT 0x02
|
#define SEG_DIFFERS_OPT 0x02 // all segment options except: selected, reset & transitional
|
||||||
#define SEG_DIFFERS_COL 0x04
|
#define SEG_DIFFERS_COL 0x04 // colors
|
||||||
#define SEG_DIFFERS_FX 0x08
|
#define SEG_DIFFERS_FX 0x08 // effect/mode parameters
|
||||||
#define SEG_DIFFERS_BOUNDS 0x10
|
#define SEG_DIFFERS_BOUNDS 0x10 // segment start/stop ounds
|
||||||
#define SEG_DIFFERS_GSO 0x20
|
#define SEG_DIFFERS_GSO 0x20 // grouping, spacing & offset
|
||||||
#define SEG_DIFFERS_SEL 0x80
|
#define SEG_DIFFERS_SEL 0x80 // selected
|
||||||
|
|
||||||
//Playlist option byte
|
//Playlist option byte
|
||||||
#define PL_OPTION_SHUFFLE 0x01
|
#define PL_OPTION_SHUFFLE 0x01
|
||||||
|
|||||||
@@ -522,7 +522,7 @@ function loadFXData(callback = null)
|
|||||||
fxdata = json||[];
|
fxdata = json||[];
|
||||||
// add default value for Solid
|
// add default value for Solid
|
||||||
fxdata.shift()
|
fxdata.shift()
|
||||||
fxdata.unshift("@;!;0");
|
fxdata.unshift(";!;0");
|
||||||
})
|
})
|
||||||
.catch((e)=>{
|
.catch((e)=>{
|
||||||
fxdata = [];
|
fxdata = [];
|
||||||
@@ -658,7 +658,7 @@ function populateInfo(i)
|
|||||||
}
|
}
|
||||||
var vcn = "Kuuhaku";
|
var vcn = "Kuuhaku";
|
||||||
if (i.ver.startsWith("0.14.")) vcn = "Hoshi";
|
if (i.ver.startsWith("0.14.")) vcn = "Hoshi";
|
||||||
if (i.ver.includes("-bl")) vcn = "Supāku";
|
// if (i.ver.includes("-bl")) vcn = "Supāku";
|
||||||
if (i.cn) vcn = i.cn;
|
if (i.cn) vcn = i.cn;
|
||||||
|
|
||||||
//WLEDMM: add total heap and total PSRAM, and build number, add bin name
|
//WLEDMM: add total heap and total PSRAM, and build number, add bin name
|
||||||
@@ -667,6 +667,7 @@ function populateInfo(i)
|
|||||||
cn += `v${i.ver} <i>"${vcn}"</i><p>(WLEDMM_${i.ver}_${i.rel}.bin)</p><p><em>build ${i.vid}</em></p><table>
|
cn += `v${i.ver} <i>"${vcn}"</i><p>(WLEDMM_${i.ver}_${i.rel}.bin)</p><p><em>build ${i.vid}</em></p><table>
|
||||||
${urows}
|
${urows}
|
||||||
${urows===""?'':'<tr><td colspan=2><hr style="height:1px;border-width:0;color:gray;background-color:gray"></td></tr>'}
|
${urows===""?'':'<tr><td colspan=2><hr style="height:1px;border-width:0;color:gray;background-color:gray"></td></tr>'}
|
||||||
|
${i.opt&0x100?inforow("Debug","<button class=\"btn btn-xs\" onclick=\"requestJson({'debug':"+(i.opt&0x0080?"false":"true")+"});\"><i class=\"icons "+(i.opt&0x0080?"on":"off")+"\"></i></button>"):''}
|
||||||
${inforow("Build",i.vid)}
|
${inforow("Build",i.vid)}
|
||||||
${inforow("Signal strength",i.wifi.signal +"% ("+ i.wifi.rssi, " dBm)")}
|
${inforow("Signal strength",i.wifi.signal +"% ("+ i.wifi.rssi, " dBm)")}
|
||||||
${inforow("Uptime",getRuntimeStr(i.uptime))}
|
${inforow("Uptime",getRuntimeStr(i.uptime))}
|
||||||
@@ -861,7 +862,7 @@ function populateEffects()
|
|||||||
if (ef.name.indexOf("RSVD") < 0) {
|
if (ef.name.indexOf("RSVD") < 0) {
|
||||||
if (Array.isArray(fxdata) && fxdata.length>id) {
|
if (Array.isArray(fxdata) && fxdata.length>id) {
|
||||||
if (fxdata[id].length==0) fd = ";;!;1d"
|
if (fxdata[id].length==0) fd = ";;!;1d"
|
||||||
else fd = fxdata[id].substr(1);
|
else fd = fxdata[id];
|
||||||
let eP = (fd == '')?[]:fd.split(";"); // effect parameters
|
let eP = (fd == '')?[]:fd.split(";"); // effect parameters
|
||||||
let p = (eP.length<3 || eP[2]==='')?[]:eP[2].split(","); // palette data
|
let p = (eP.length<3 || eP[2]==='')?[]:eP[2].split(","); // palette data
|
||||||
if (p.length>0 && (p[0] !== "" && !isNumeric(p[0]))) nm += "🎨"; // effects using palette
|
if (p.length>0 && (p[0] !== "" && !isNumeric(p[0]))) nm += "🎨"; // effects using palette
|
||||||
@@ -1390,38 +1391,30 @@ function readState(s,command=false)
|
|||||||
function setEffectParameters(idx)
|
function setEffectParameters(idx)
|
||||||
{
|
{
|
||||||
if (!(Array.isArray(fxdata) && fxdata.length>idx)) return;
|
if (!(Array.isArray(fxdata) && fxdata.length>idx)) return;
|
||||||
var controlDefined = (fxdata[idx].substr(0,1) == "@");
|
var controlDefined = fxdata[idx].length;
|
||||||
var effectPar = fxdata[idx].substr(1);
|
var effectPar = fxdata[idx];
|
||||||
var effectPars = (effectPar == '')?[]:effectPar.split(";");
|
var effectPars = (effectPar == '')?[]:effectPar.split(";");
|
||||||
var slOnOff = (effectPars.length==0 || effectPars[0]=='')?[]:effectPars[0].split(",");
|
var slOnOff = (effectPars.length==0 || effectPars[0]=='')?[]:effectPars[0].split(",");
|
||||||
var coOnOff = (effectPars.length<2 || effectPars[1]=='')?[]:effectPars[1].split(",");
|
var coOnOff = (effectPars.length<2 || effectPars[1]=='')?[]:effectPars[1].split(",");
|
||||||
var paOnOff = (effectPars.length<3 || effectPars[2]=='')?[]:effectPars[2].split(",");
|
var paOnOff = (effectPars.length<3 || effectPars[2]=='')?[]:effectPars[2].split(",");
|
||||||
|
|
||||||
// set html slider items on/off
|
// set html slider items on/off
|
||||||
//var nSliders = Math.min(7,Math.floor(gId("sliders").children.length)); // div for each slider + filter + options
|
|
||||||
let nSliders = 5;
|
let nSliders = 5;
|
||||||
var sldCnt = 0;
|
|
||||||
for (let i=0; i<nSliders; i++) {
|
for (let i=0; i<nSliders; i++) {
|
||||||
var slider = gId("slider" + i);
|
var slider = gId("slider" + i);
|
||||||
var label = gId("sliderLabel" + i);
|
var label = gId("sliderLabel" + i);
|
||||||
// if (not controlDefined and for AC speed or intensity and for SR alle sliders) or slider has a value
|
// if (not controlDefined and for AC speed or intensity and for SR all sliders) or slider has a value
|
||||||
if ((!controlDefined && i < ((idx<128)?2:nSliders)) || (slOnOff.length>i && slOnOff[i] != "")) {
|
if ((!controlDefined && i < ((idx<128)?2:nSliders)) || (slOnOff.length>i && slOnOff[i] != "")) {
|
||||||
//if (slOnOff.length>i && slOnOff[i].indexOf("=")>0) {
|
|
||||||
// // embeded default values
|
|
||||||
// var dPos = slOnOff[i].indexOf("=");
|
|
||||||
// slOnOff[i] = slOnOff[i].substring(0,dPos);
|
|
||||||
//}
|
|
||||||
if (slOnOff.length>i && slOnOff[i]!="!") label.innerHTML = slOnOff[i];
|
if (slOnOff.length>i && slOnOff[i]!="!") label.innerHTML = slOnOff[i];
|
||||||
else if (i==0) label.innerHTML = "Effect speed";
|
else if (i==0) label.innerHTML = "Effect speed";
|
||||||
else if (i==1) label.innerHTML = "Effect intensity";
|
else if (i==1) label.innerHTML = "Effect intensity";
|
||||||
else label.innerHTML = "Custom" + (i-1);
|
else label.innerHTML = "Custom" + (i-1);
|
||||||
sldCnt++;
|
|
||||||
slider.classList.remove("hide");
|
slider.classList.remove("hide");
|
||||||
} else {
|
} else {
|
||||||
slider.classList.add("hide");
|
slider.classList.add("hide");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (slOnOff.length>5) {
|
if (slOnOff.length>5) { // up to 3 checkboxes
|
||||||
gId('fxopt').classList.remove('fade');
|
gId('fxopt').classList.remove('fade');
|
||||||
for (let i = 0; i<3; i++) {
|
for (let i = 0; i<3; i++) {
|
||||||
if (5+i<slOnOff.length && slOnOff[5+i]!=='') {
|
if (5+i<slOnOff.length && slOnOff[5+i]!=='') {
|
||||||
@@ -1465,7 +1458,7 @@ function setEffectParameters(idx)
|
|||||||
hide = false;
|
hide = false;
|
||||||
if (!cslCnt || oCsel==i) selectSlot(i); // select 1st displayed slot or old one
|
if (!cslCnt || oCsel==i) selectSlot(i); // select 1st displayed slot or old one
|
||||||
cslCnt++;
|
cslCnt++;
|
||||||
} else if (!controlDefined /*|| paOnOff.length>0*/) { // if no controls then all buttons should be shown for color 1..3
|
} else if (!controlDefined) { // if no controls then all buttons should be shown for color 1..3
|
||||||
btn.style.display = "inline";
|
btn.style.display = "inline";
|
||||||
btn.innerHTML = `${i+1}`;
|
btn.innerHTML = `${i+1}`;
|
||||||
hide = false;
|
hide = false;
|
||||||
@@ -1492,13 +1485,16 @@ function setEffectParameters(idx)
|
|||||||
if (paOnOff.length>0 && paOnOff[0] != "!") pall.innerHTML = paOnOff[0];
|
if (paOnOff.length>0 && paOnOff[0] != "!") pall.innerHTML = paOnOff[0];
|
||||||
else pall.innerHTML = '<i class="icons sel-icon" onclick="tglHex()"></i> Color palette';
|
else pall.innerHTML = '<i class="icons sel-icon" onclick="tglHex()"></i> Color palette';
|
||||||
} else {
|
} else {
|
||||||
// disable palett list
|
// disable palette list
|
||||||
pall.innerHTML = '<i class="icons sel-icon" onclick="tglHex()"></i> Color palette not used';
|
pall.innerHTML = '<i class="icons sel-icon" onclick="tglHex()"></i> Color palette not used';
|
||||||
palw.style.display = "none";
|
palw.style.display = "none";
|
||||||
}
|
}
|
||||||
// not all color selectors shown, hide palettes created from color selectors
|
// not all color selectors shown, hide palettes created from color selectors
|
||||||
for (let e of (gId('pallist').querySelectorAll('.lstI')||[])) {
|
for (let e of (gId('pallist').querySelectorAll('.lstI')||[])) {
|
||||||
if (cslCnt < 3 && e.querySelector('.lstIname').innerText.indexOf("* C")>=0) e.classList.add('hide'); else e.classList.remove('hide');
|
let fltr = "* C";
|
||||||
|
if (cslCnt==1 && csel==0) fltr = "* Colors";
|
||||||
|
else if (cslCnt==2) fltr = "* Colors Only";
|
||||||
|
if (cslCnt < 3 && e.querySelector('.lstIname').innerText.indexOf(fltr)>=0) e.classList.add('hide'); else e.classList.remove('hide');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,7 @@
|
|||||||
function addPanel(i=0) {
|
function addPanel(i=0) {
|
||||||
let p = gId("panels");
|
let p = gId("panels");
|
||||||
if (p.children.length >= maxPanels) return;
|
if (p.children.length >= maxPanels) return;
|
||||||
let b = `<div id="pnl${i}">${i===0?"":'<hr style="width:260px">'}Panel ${i}<br>1<sup>st</sup> LED: <select name="P${i}B">
|
let b = `<div id="pnl${i}">${i===0?"":'<hr class="sml">'}Panel ${i}<br>1<sup>st</sup> LED: <select name="P${i}B">
|
||||||
<option value="0">Top</option>
|
<option value="0">Top</option>
|
||||||
<option value="1">Bottom</option>
|
<option value="1">Bottom</option>
|
||||||
</select><select name="P${i}R">
|
</select><select name="P${i}R">
|
||||||
@@ -134,11 +134,11 @@ Serpentine: <input type="checkbox" name="P${i}S"></div>`;
|
|||||||
<option value="1">Vertical</option>
|
<option value="1">Vertical</option>
|
||||||
</select><br>
|
</select><br>
|
||||||
Serpentine: <input type="checkbox" name="PS">
|
Serpentine: <input type="checkbox" name="PS">
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<i>A matrix is made of 1 or more physical LED panels of the same dimensions.<br>
|
<i>A matrix is made of 1 or more physical LED panels of the same dimensions.<br>
|
||||||
Panels should be arranged from top-left to bottom-right order, starting with lower panel number on the left (or top if transposed).<br>
|
Panels should be arranged from top-left to bottom-right order, starting with lower panel number on the left (or top if transposed).<br>
|
||||||
Each panel can have different LED orientation and/or starting point and/or layout.</i><br>
|
Each panel can have different LED orientation and/or starting point and/or layout.</i><br>
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<h3>LED panel layout</h3>
|
<h3>LED panel layout</h3>
|
||||||
<div id="panels">
|
<div id="panels">
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -323,7 +323,7 @@
|
|||||||
if (n==1) {
|
if (n==1) {
|
||||||
// npm run build has trouble minimizing spaces inside string
|
// npm run build has trouble minimizing spaces inside string
|
||||||
var cn = `<div class="iST">
|
var cn = `<div class="iST">
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
${i+1}:
|
${i+1}:
|
||||||
<select name="LT${i}" onchange="UI(true)">
|
<select name="LT${i}" onchange="UI(true)">
|
||||||
<option value="22" selected>WS281x</option>
|
<option value="22" selected>WS281x</option>
|
||||||
@@ -389,7 +389,7 @@ ${i+1}:
|
|||||||
if (i >= 10) return;
|
if (i >= 10) return;
|
||||||
|
|
||||||
var b = `<div class="com_entry">
|
var b = `<div class="com_entry">
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
${i+1}: Start: <input type="number" name="XS${i}" id="xs${i}" class="l starts" min="0" max="65535" value="${start}" oninput="UI();" required="">
|
${i+1}: Start: <input type="number" name="XS${i}" id="xs${i}" class="l starts" min="0" max="65535" value="${start}" oninput="UI();" required="">
|
||||||
Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65535" value="${len}" required="" oninput="UI()">
|
Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65535" value="${len}" required="" oninput="UI()">
|
||||||
<div style="display:inline">Color Order:
|
<div style="display:inline">Color Order:
|
||||||
@@ -595,7 +595,7 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
|
|||||||
</div>
|
</div>
|
||||||
<h3>Hardware setup</h3>
|
<h3>Hardware setup</h3>
|
||||||
<div id="mLC">LED outputs:</div>
|
<div id="mLC">LED outputs:</div>
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<button type="button" id="+" onclick="addLEDs(1,false)">+</button>
|
<button type="button" id="+" onclick="addLEDs(1,false)">+</button>
|
||||||
<button type="button" id="-" onclick="addLEDs(-1,false)">-</button><br>
|
<button type="button" id="-" onclick="addLEDs(-1,false)">-</button><br>
|
||||||
LED Memory Usage: <span id="m0">0</span> / <span id="m1">?</span> B<br>
|
LED Memory Usage: <span id="m0">0</span> / <span id="m1">?</span> B<br>
|
||||||
@@ -604,19 +604,19 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
|
|||||||
⚠ You might run into stability or lag issues.<br>
|
⚠ You might run into stability or lag issues.<br>
|
||||||
Use less than <span id="wreason">800 LEDs per output</span> for the best experience!<br>
|
Use less than <span id="wreason">800 LEDs per output</span> for the best experience!<br>
|
||||||
</div>
|
</div>
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
Make a segment for each output: <input type="checkbox" name="MS"><br>
|
Make a segment for each output: <input type="checkbox" name="MS"><br>
|
||||||
Custom bus start indices: <input type="checkbox" onchange="tglSi(this.checked)" id="si"><br>
|
Custom bus start indices: <input type="checkbox" onchange="tglSi(this.checked)" id="si"><br>
|
||||||
Use global LED buffer: <input type="checkbox" name="LD"><br>
|
Use global LED buffer: <input type="checkbox" name="LD"><br>
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<div id="color_order_mapping">
|
<div id="color_order_mapping">
|
||||||
Color Order Override:
|
Color Order Override:
|
||||||
<div id="com_entries"></div>
|
<div id="com_entries"></div>
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<button type="button" id="com_add" onclick="addCOM()">+</button>
|
<button type="button" id="com_add" onclick="addCOM()">+</button>
|
||||||
<button type="button" id="com_rem" onclick="remCOM()">-</button><br>
|
<button type="button" id="com_rem" onclick="remCOM()">-</button><br>
|
||||||
</div>
|
</div>
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<div id="btns"></div>
|
<div id="btns"></div>
|
||||||
Touch threshold: <input type="number" class="s" min="0" max="100" name="TT" required><br>
|
Touch threshold: <input type="number" class="s" min="0" max="100" name="TT" required><br>
|
||||||
<div id="irOnOff2">
|
<div id="irOnOff2">
|
||||||
@@ -637,7 +637,7 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
|
|||||||
<div id="json" style="display:none;">JSON file: <input type="file" name="data" accept=".json"><button type="button" class="sml" onclick="uploadFile('/ir.json')">Upload</button><br></div>
|
<div id="json" style="display:none;">JSON file: <input type="file" name="data" accept=".json"><button type="button" class="sml" onclick="uploadFile('/ir.json')">Upload</button><br></div>
|
||||||
<a href="https://kno.wled.ge/interfaces/infrared/" target="_blank">IR info</a><br>
|
<a href="https://kno.wled.ge/interfaces/infrared/" target="_blank">IR info</a><br>
|
||||||
Relay GPIO: <input type="number" min="-1" max="48" name="RL" onchange="UI()" class="xs"> Invert <input type="checkbox" name="RM"><span style="cursor: pointer;" onclick="off('RL')"> ✕</span><br>
|
Relay GPIO: <input type="number" min="-1" max="48" name="RL" onchange="UI()" class="xs"> Invert <input type="checkbox" name="RM"><span style="cursor: pointer;" onclick="off('RL')"> ✕</span><br>
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<h3>Defaults</h3>
|
<h3>Defaults</h3>
|
||||||
Turn LEDs on after power up/reset: <input type="checkbox" name="BO"><br>
|
Turn LEDs on after power up/reset: <input type="checkbox" name="BO"><br>
|
||||||
Default brightness: <input name="CA" type="number" class="m" min="0" max="255" required> (0-255)<br><br>
|
Default brightness: <input name="CA" type="number" class="m" min="0" max="255" required> (0-255)<br><br>
|
||||||
@@ -683,7 +683,7 @@ Length: <input type="number" name="XC${i}" id="xc${i}" class="l" min="1" max="65
|
|||||||
<option value="3">None (not recommended)</option>
|
<option value="3">None (not recommended)</option>
|
||||||
</select><br>
|
</select><br>
|
||||||
Target refresh rate: <input type="number" class="s" min="1" max="120" name="FR" required> FPS
|
Target refresh rate: <input type="number" class="s" min="1" max="120" name="FR" required> FPS
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
<div id="cfg">Config template: <input type="file" name="data2" accept=".json"><button type="button" class="sml" onclick="loadCfg(d.Sf.data2)">Apply</button><br></div>
|
<div id="cfg">Config template: <input type="file" name="data2" accept=".json"><button type="button" class="sml" onclick="loadCfg(d.Sf.data2)">Apply</button><br></div>
|
||||||
<hr>
|
<hr>
|
||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
<button type="button" onclick="B()">Back</button><button type="submit">Save</button>
|
||||||
|
|||||||
@@ -7,22 +7,8 @@
|
|||||||
<title>Sync Settings</title>
|
<title>Sync Settings</title>
|
||||||
<script>var d=document;
|
<script>var d=document;
|
||||||
var loc = false, locip;
|
var loc = false, locip;
|
||||||
function gId(s)
|
function gId(s){return d.getElementById(s);}
|
||||||
{
|
function toggle(el){gId(el).classList.toggle("hide"); gId('No'+el).classList.toggle("hide");}
|
||||||
return d.getElementById(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideNoDMX(){gId("dmxOnOff2").style.display="none";}
|
|
||||||
function hideALEXA(){gId("aleOnOff").style.display="none";}
|
|
||||||
function hideNoALEXA(){gId("aleOnOff2").style.display="none";}
|
|
||||||
function hideBLYNK(){gId("blyOnOff").style.display="none";}
|
|
||||||
function hideNoBLYNK(){gId("blyOnOff2").style.display="none";}
|
|
||||||
function hideMQTT(){gId("mqtOnOff").style.display="none";}
|
|
||||||
function hideNoMQTT(){gId("mqtOnOff2").style.display="none";}
|
|
||||||
function hideHUE(){gId("hueOnOff").style.display="none";}
|
|
||||||
function hideNoHUE(){gId("hueOnOff2").style.display="none";}
|
|
||||||
function hideNoLOX(){gId("loxOnOff2").style.display="none";}
|
|
||||||
|
|
||||||
function H(){window.open("https://kno.wled.ge/interfaces/udp-notifier/");}
|
function H(){window.open("https://kno.wled.ge/interfaces/udp-notifier/");}
|
||||||
function B(){window.open("/settings","_self");}
|
function B(){window.open("/settings","_self");}
|
||||||
function adj(){if (d.Sf.DI.value == 6454) {if (d.Sf.EU.value == 1) d.Sf.EU.value = 0;}
|
function adj(){if (d.Sf.DI.value == 6454) {if (d.Sf.EU.value == 1) d.Sf.EU.value = 0;}
|
||||||
@@ -93,11 +79,11 @@
|
|||||||
<h2>Sync setup</h2>
|
<h2>Sync setup</h2>
|
||||||
<h3>WLED Broadcast</h3>
|
<h3>WLED Broadcast</h3>
|
||||||
UDP Port: <input name="UP" type="number" min="1" max="65535" class="d5" required><br>
|
UDP Port: <input name="UP" type="number" min="1" max="65535" class="d5" required><br>
|
||||||
2nd Port: <input name="U2" type="number" min="1" max="65535" class="d5" required><br><br>
|
2nd Port: <input name="U2" type="number" min="1" max="65535" class="d5" required><br>
|
||||||
<input name="GS" id="GS" type="number" style="display: none;"> <!-- hidden inputs for bitwise group checkboxes -->
|
<h3>Sync grups</h3>
|
||||||
|
<input name="GS" id="GS" type="number" style="display: none;"><!-- hidden inputs for bitwise group checkboxes -->
|
||||||
<input name="GR" id="GR" type="number" style="display: none;">
|
<input name="GR" id="GR" type="number" style="display: none;">
|
||||||
<table style="margin: 0 auto;">
|
<table style="margin: 0 auto;">
|
||||||
<tr><td colspan="9" style="text-align:center">Sync groups</td></tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>1</td>
|
<td>1</td>
|
||||||
@@ -141,9 +127,11 @@ Send Philips Hue change notifications: <input type="checkbox" name="SH"><br>
|
|||||||
Send Macro notifications: <input type="checkbox" name="SM"><br>
|
Send Macro notifications: <input type="checkbox" name="SM"><br>
|
||||||
UDP packet retransmissions: <input name="UR" type="number" min="0" max="30" class="d5" required><br><br>
|
UDP packet retransmissions: <input name="UR" type="number" min="0" max="30" class="d5" required><br><br>
|
||||||
<i>Reboot required to apply changes. </i>
|
<i>Reboot required to apply changes. </i>
|
||||||
|
<hr class="sml">
|
||||||
<h3>Instance List</h3>
|
<h3>Instance List</h3>
|
||||||
Enable instance list: <input type="checkbox" name="NL"><br>
|
Enable instance list: <input type="checkbox" name="NL"><br>
|
||||||
Make this instance discoverable: <input type="checkbox" name="NB">
|
Make this instance discoverable: <input type="checkbox" name="NB">
|
||||||
|
<hr class="sml">
|
||||||
<h3>Realtime</h3>
|
<h3>Realtime</h3>
|
||||||
Receive UDP realtime: <input type="checkbox" name="RD"><br>
|
Receive UDP realtime: <input type="checkbox" name="RD"><br>
|
||||||
Use main segment only: <input type="checkbox" name="MO"><br><br>
|
Use main segment only: <input type="checkbox" name="MO"><br><br>
|
||||||
@@ -175,37 +163,38 @@ Timeout: <input name="ET" type="number" min="1" max="65000" required> ms<br>
|
|||||||
Force max brightness: <input type="checkbox" name="FB"><br>
|
Force max brightness: <input type="checkbox" name="FB"><br>
|
||||||
Disable realtime gamma correction: <input type="checkbox" name="RG"><br>
|
Disable realtime gamma correction: <input type="checkbox" name="RG"><br>
|
||||||
Realtime LED offset: <input name="WO" type="number" min="-255" max="255" required>
|
Realtime LED offset: <input name="WO" type="number" min="-255" max="255" required>
|
||||||
<div id="dmxOnOff2">
|
<hr class="sml">
|
||||||
<br><em style="color:darkorange">This firmware build does not include DMX output support. <br></em>
|
|
||||||
</div>
|
|
||||||
<h3>Alexa Voice Assistant</h3>
|
<h3>Alexa Voice Assistant</h3>
|
||||||
<div id="aleOnOff2">
|
<div id="NoAlexa" class="hide">
|
||||||
<em style="color:darkorange">This firmware build does not include Alexa support. <br></em>
|
<em style="color:#fa0;">This firmware build does not include Alexa support.<br></em><br>
|
||||||
</div>
|
</div>
|
||||||
<div id="aleOnOff">
|
<div id="Alexa">
|
||||||
Emulate Alexa device: <input type="checkbox" name="AL"><br>
|
Emulate Alexa device: <input type="checkbox" name="AL"><br>
|
||||||
Alexa invocation name: <input type="text" name="AI" maxlength="32"><br>
|
Alexa invocation name: <input type="text" name="AI" maxlength="32"><br>
|
||||||
Also emulate devices to call the first <input name="AP" type="number" class="s" min="0" max="9" required> presets
|
Also emulate devices to call the first <input name="AP" type="number" class="s" min="0" max="9" required> presets<br><br>
|
||||||
</div>
|
</div>
|
||||||
<h3>Blynk</h3>
|
<hr class="sml">
|
||||||
<div id="blyOnOff2">
|
<div style="color: #fa0;">⚠ <b>Blynk, MQTT and Hue sync all connect to external hosts!<br>
|
||||||
<em style="color:darkorange">This firmware build does not include Blynk support. <br></em>
|
This may impact the responsiveness of WLED.</b><br>
|
||||||
</div>
|
</div>
|
||||||
<b>Blynk, MQTT and Hue sync all connect to external hosts!<br>
|
|
||||||
This may impact the responsiveness of the ESP8266.</b><br>
|
|
||||||
For best results, only use one of these services at a time.<br>
|
For best results, only use one of these services at a time.<br>
|
||||||
(alternatively, connect a second ESP to them and use the UDP sync)<br><br>
|
(alternatively, connect a second ESP to them and use the UDP sync)
|
||||||
<div id="blyOnOff">
|
<hr class="sml">
|
||||||
|
<h3>Blynk</h3>
|
||||||
|
<div id="NoBlynk" class="hide">
|
||||||
|
<em style="color:#fa0;">This firmware build does not include Blynk support.<br></em>
|
||||||
|
</div>
|
||||||
|
<div id="Blynk">
|
||||||
Host: <input type="text" name="BH" maxlength="32">
|
Host: <input type="text" name="BH" maxlength="32">
|
||||||
Port: <input name="BP" type="number" min="1" max="65535" value="80" class="d5"><br>
|
Port: <input name="BP" type="number" min="1" max="65535" value="80" class="d5"><br>
|
||||||
Device Auth token: <input name="BK" maxlength="33"><br>
|
Device Auth token: <input name="BK" maxlength="33"><br>
|
||||||
<i>Clear the token field to disable. </i><a href="https://kno.wled.ge/interfaces/blynk/" target="_blank">Setup info</a>
|
<i>Clear the token field to disable. </i><a href="https://kno.wled.ge/interfaces/blynk/" target="_blank">Setup info</a>
|
||||||
</div>
|
</div>
|
||||||
<h3>MQTT</h3>
|
<h3>MQTT</h3>
|
||||||
<div id="mqtOnOff2">
|
<div id="NoMQTT" class="hide">
|
||||||
<em style="color:darkorange">This firmware build does not include MQTT support. <br></em>
|
<em style="color:#fa0;">This firmware build does not include MQTT support.<br></em>
|
||||||
</div>
|
</div>
|
||||||
<div id="mqtOnOff">
|
<div id="MQTT">
|
||||||
Enable MQTT: <input type="checkbox" name="MQ"><br>
|
Enable MQTT: <input type="checkbox" name="MQ"><br>
|
||||||
Broker: <input type="text" name="MS" maxlength="32">
|
Broker: <input type="text" name="MS" maxlength="32">
|
||||||
Port: <input name="MQPORT" type="number" min="1" max="65535" class="d5"><br>
|
Port: <input name="MQPORT" type="number" min="1" max="65535" class="d5"><br>
|
||||||
@@ -220,10 +209,10 @@ Publish on button press: <input type="checkbox" name="BM"><br>
|
|||||||
<i>Reboot required to apply changes. </i><a href="https://kno.wled.ge/interfaces/mqtt/" target="_blank">MQTT info</a>
|
<i>Reboot required to apply changes. </i><a href="https://kno.wled.ge/interfaces/mqtt/" target="_blank">MQTT info</a>
|
||||||
</div>
|
</div>
|
||||||
<h3>Philips Hue</h3>
|
<h3>Philips Hue</h3>
|
||||||
<div id="hueOnOff2">
|
<div id="NoHue" class="hide">
|
||||||
<em style="color:darkorange">This firmware build does not include Philips Hue support. <br></em>
|
<em style="color:#fa0;">This firmware build does not include Philips Hue support.<br></em>
|
||||||
</div>
|
</div>
|
||||||
<div id="hueOnOff">
|
<div id="Hue">
|
||||||
<i>You can find the bridge IP and the light number in the 'About' section of the hue app.</i><br>
|
<i>You can find the bridge IP and the light number in the 'About' section of the hue app.</i><br>
|
||||||
Poll Hue light <input name="HL" type="number" min="1" max="99" > every <input name="HI" type="number" min="100" max="65000"> ms: <input type="checkbox" name="HP"><br>
|
Poll Hue light <input name="HL" type="number" min="1" max="99" > every <input name="HI" type="number" min="100" max="65000"> ms: <input type="checkbox" name="HP"><br>
|
||||||
Then, receive <input type="checkbox" name="HO"> On/Off, <input type="checkbox" name="HB"> Brightness, and <input type="checkbox" name="HC"> Color<br>
|
Then, receive <input type="checkbox" name="HO"> On/Off, <input type="checkbox" name="HB"> Brightness, and <input type="checkbox" name="HC"> Color<br>
|
||||||
@@ -236,8 +225,6 @@ Hue Bridge IP:<br>
|
|||||||
(when first connecting)<br>
|
(when first connecting)<br>
|
||||||
</div>
|
</div>
|
||||||
Hue status: <span class="sip"> Disabled in this build </span>
|
Hue status: <span class="sip"> Disabled in this build </span>
|
||||||
<div id="loxOnOff2">
|
|
||||||
<br><em style="color:darkorange">This firmware build does not include Loxone Lighting support. <br></em>
|
|
||||||
</div>
|
</div>
|
||||||
<h3>Serial</h3>
|
<h3>Serial</h3>
|
||||||
Baud rate:
|
Baud rate:
|
||||||
|
|||||||
@@ -106,7 +106,7 @@
|
|||||||
}
|
}
|
||||||
function addField(k,f,o,a=false) { //key, field, (sub)object, isArray
|
function addField(k,f,o,a=false) { //key, field, (sub)object, isArray
|
||||||
if (isO(o)) {
|
if (isO(o)) {
|
||||||
urows += '<hr style="width:260px">';
|
urows += '<hr class="sml">';
|
||||||
for (const [s,v] of Object.entries(o)) {
|
for (const [s,v] of Object.entries(o)) {
|
||||||
// possibility to nest objects (only 1 level)
|
// possibility to nest objects (only 1 level)
|
||||||
if (f!=='unknown' && !k.includes(":")) addField(k+":"+f,s,v);
|
if (f!=='unknown' && !k.includes(":")) addField(k+":"+f,s,v);
|
||||||
@@ -249,7 +249,7 @@
|
|||||||
<i style="color: orange;">(only changable on ESP32, change requires reboot!)</i><br>
|
<i style="color: orange;">(only changable on ESP32, change requires reboot!)</i><br>
|
||||||
SDA:<input type="number" min="-1" max="48" name="SDA" onchange="check(this,'if')" class="s" placeholder="SDA">
|
SDA:<input type="number" min="-1" max="48" name="SDA" onchange="check(this,'if')" class="s" placeholder="SDA">
|
||||||
SCL:<input type="number" min="-1" max="48" name="SCL" onchange="check(this,'if')" class="s" placeholder="SCL">
|
SCL:<input type="number" min="-1" max="48" name="SCL" onchange="check(this,'if')" class="s" placeholder="SCL">
|
||||||
<hr style="width:260px">
|
<hr class="sml">
|
||||||
Global SPI GPIOs (HW)<br>
|
Global SPI GPIOs (HW)<br>
|
||||||
<i style="color: orange;">(only changable on ESP32, change requires reboot!)</i><br>
|
<i style="color: orange;">(only changable on ESP32, change requires reboot!)</i><br>
|
||||||
MOSI:<input type="number" min="-1" max="48" name="MOSI" onchange="check(this,'if')" class="s" placeholder="MOSI">
|
MOSI:<input type="number" min="-1" max="48" name="MOSI" onchange="check(this,'if')" class="s" placeholder="MOSI">
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ body {
|
|||||||
hr {
|
hr {
|
||||||
border-color: #666;
|
border-color: #666;
|
||||||
}
|
}
|
||||||
|
hr.sml {
|
||||||
|
width: 260px;
|
||||||
|
}
|
||||||
a, a:hover {
|
a, a:hover {
|
||||||
color: #28f;
|
color: #28f;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@@ -52,6 +55,9 @@ button.sml {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
}
|
}
|
||||||
|
.hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
input {
|
input {
|
||||||
background: #333;
|
background: #333;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|||||||
@@ -41,46 +41,46 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Autogenerated from wled00/data/update.htm, do not edit!!
|
// Autogenerated from wled00/data/update.htm, do not edit!!
|
||||||
const uint16_t PAGE_update_length = 607;
|
const uint16_t PAGE_update_length = 606;
|
||||||
const uint8_t PAGE_update[] PROGMEM = {
|
const uint8_t PAGE_update[] PROGMEM = {
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x75, 0x53, 0xd1, 0x6e, 0xd3, 0x30,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x75, 0x53, 0xc1, 0x6e, 0xd4, 0x30,
|
||||||
0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0x66, 0x6f, 0x13, 0x2f, 0x8c, 0x24, 0x43, 0x65,
|
0x14, 0xbc, 0xe7, 0x2b, 0x8c, 0x4f, 0xbb, 0x12, 0xb5, 0x4b, 0xc5, 0x85, 0x92, 0xa4, 0x68, 0x69,
|
||||||
0x13, 0x42, 0x62, 0x5a, 0xa5, 0x6d, 0x20, 0x9e, 0x90, 0x13, 0xdf, 0x34, 0xa6, 0x8e, 0x9d, 0xd9,
|
0x85, 0x90, 0xa8, 0x5a, 0xa9, 0x2d, 0x88, 0x13, 0x72, 0xe2, 0x97, 0xc4, 0xac, 0x63, 0xa7, 0xf6,
|
||||||
0x37, 0xad, 0x22, 0xb4, 0x7f, 0xe7, 0xc6, 0x69, 0x07, 0xd2, 0xe0, 0x25, 0xaa, 0xe3, 0x73, 0x4f,
|
0xcb, 0xae, 0x22, 0xd4, 0x7f, 0xe7, 0xc5, 0xd9, 0x2d, 0x48, 0x85, 0x4b, 0xb4, 0x8e, 0xe7, 0xcd,
|
||||||
0xcf, 0x3d, 0xe7, 0x24, 0x3f, 0xb9, 0xbe, 0xfb, 0xf8, 0xf0, 0x7d, 0x7d, 0xc3, 0x5a, 0xec, 0x6c,
|
0xce, 0x9b, 0x99, 0xe4, 0xaf, 0x2e, 0x6f, 0x3e, 0xde, 0x7f, 0xbf, 0xbd, 0x62, 0x1d, 0xf6, 0xb6,
|
||||||
0x99, 0x1f, 0x9e, 0xa0, 0x74, 0x99, 0x77, 0x80, 0x8a, 0xd5, 0xde, 0x21, 0x38, 0x2c, 0xf8, 0xde,
|
0xcc, 0x0f, 0x4f, 0x50, 0xba, 0xcc, 0x7b, 0x40, 0xc5, 0x6a, 0xef, 0x10, 0x1c, 0x16, 0x7c, 0x6f,
|
||||||
0x68, 0x6c, 0x0b, 0x0d, 0x3b, 0x53, 0xc3, 0x69, 0x3a, 0x70, 0xe6, 0x54, 0x07, 0x05, 0xdf, 0x19,
|
0x34, 0x76, 0x85, 0x86, 0x9d, 0xa9, 0xe1, 0x24, 0x1d, 0x38, 0x73, 0xaa, 0x87, 0x82, 0xef, 0x0c,
|
||||||
0xd8, 0xf7, 0x3e, 0x20, 0x2f, 0xb3, 0x1c, 0x0d, 0x5a, 0x28, 0xbf, 0x7d, 0xb9, 0xb9, 0x66, 0x8f,
|
0xec, 0x07, 0x1f, 0x90, 0x97, 0x59, 0x8e, 0x06, 0x2d, 0x94, 0xdf, 0xbe, 0x5c, 0x5d, 0xb2, 0x87,
|
||||||
0xbd, 0x56, 0x08, 0xb9, 0x9c, 0x5f, 0xe5, 0xb1, 0x0e, 0xa6, 0xc7, 0x32, 0x6b, 0x06, 0x57, 0xa3,
|
0x41, 0x2b, 0x84, 0x5c, 0x2e, 0xaf, 0xf2, 0x58, 0x07, 0x33, 0x60, 0x99, 0x35, 0xa3, 0xab, 0xd1,
|
||||||
0xf1, 0x8e, 0xad, 0x16, 0xcb, 0x5f, 0x7b, 0xe3, 0xb4, 0xdf, 0x8b, 0xd6, 0x44, 0xf4, 0x61, 0x14,
|
0x78, 0xc7, 0x36, 0xab, 0xf5, 0xaf, 0xbd, 0x71, 0xda, 0xef, 0x45, 0x67, 0x22, 0xfa, 0x30, 0x89,
|
||||||
0x95, 0xaa, 0xb7, 0x8b, 0xe5, 0xf3, 0x0b, 0xe4, 0x91, 0x20, 0xda, 0xd7, 0x43, 0x47, 0x0a, 0xc4,
|
0x4a, 0xd5, 0xdb, 0xd5, 0xfa, 0xe9, 0x19, 0xf2, 0x40, 0x10, 0xed, 0xeb, 0xb1, 0x27, 0x05, 0xa2,
|
||||||
0x06, 0xf0, 0xc6, 0xc2, 0xf4, 0x73, 0x35, 0x7e, 0xd6, 0x0b, 0x3e, 0x34, 0x7c, 0x29, 0x22, 0x8e,
|
0x05, 0xbc, 0xb2, 0x30, 0xff, 0xdc, 0x4c, 0x9f, 0xf5, 0x8a, 0x8f, 0x0d, 0x5f, 0x8b, 0x88, 0x93,
|
||||||
0x16, 0x84, 0x36, 0xb1, 0xb7, 0x6a, 0x2c, 0xb8, 0xf3, 0x0e, 0xf8, 0x9b, 0xff, 0x8e, 0x74, 0x71,
|
0x05, 0xa1, 0x4d, 0x1c, 0xac, 0x9a, 0x0a, 0xee, 0xbc, 0x03, 0xfe, 0xfa, 0xbf, 0x23, 0x7d, 0x6c,
|
||||||
0xf3, 0x7a, 0xa6, 0xb2, 0xbe, 0xde, 0xf2, 0xe7, 0x2c, 0x97, 0x07, 0x89, 0x07, 0xa9, 0x2c, 0x86,
|
0x5f, 0xce, 0x54, 0xd6, 0xd7, 0x5b, 0xfe, 0x94, 0xe5, 0xf2, 0x20, 0xf1, 0x20, 0x95, 0xc5, 0x50,
|
||||||
0xba, 0xe0, 0x32, 0x02, 0xa2, 0x71, 0x9b, 0x28, 0xa3, 0xf8, 0x19, 0xaf, 0xfa, 0xe2, 0x1d, 0x2f,
|
0x17, 0x5c, 0x46, 0x40, 0x34, 0xae, 0x8d, 0x32, 0x8a, 0x9f, 0xf1, 0x62, 0x28, 0xde, 0xf1, 0xf2,
|
||||||
0xff, 0x42, 0x4e, 0x54, 0x65, 0xf6, 0xc1, 0x74, 0x93, 0x01, 0x6c, 0x08, 0x76, 0xc1, 0x67, 0xfa,
|
0x2f, 0xe4, 0x4c, 0x55, 0x66, 0x1f, 0x4c, 0x3f, 0x1b, 0xc0, 0xc6, 0x60, 0x57, 0x7c, 0xa1, 0xaf,
|
||||||
0x3a, 0x46, 0xbe, 0x7c, 0x4f, 0xc8, 0x84, 0xc8, 0xe5, 0x6c, 0x69, 0xe5, 0xf5, 0xc8, 0xbc, 0xb3,
|
0x63, 0xe4, 0xeb, 0xf7, 0x84, 0x4c, 0x88, 0x5c, 0x2e, 0x96, 0x56, 0x5e, 0x4f, 0xcc, 0x3b, 0xeb,
|
||||||
0x5e, 0xe9, 0x82, 0x7f, 0x02, 0xfc, 0xba, 0x58, 0x12, 0x5d, 0x7b, 0x51, 0x66, 0xb7, 0xde, 0xbb,
|
0x95, 0x2e, 0xf8, 0x27, 0xc0, 0xaf, 0xab, 0x35, 0xd1, 0x75, 0x67, 0x65, 0x76, 0xed, 0xbd, 0xbb,
|
||||||
0x5b, 0xaf, 0x59, 0xb2, 0xee, 0xde, 0x37, 0xb8, 0x57, 0x01, 0x5e, 0x3c, 0x24, 0x44, 0xde, 0xf8,
|
0xf6, 0x9a, 0x25, 0xeb, 0xee, 0x7c, 0x83, 0x7b, 0x15, 0xe0, 0xd9, 0x43, 0x42, 0xe4, 0x8d, 0x0f,
|
||||||
0xd0, 0x31, 0xca, 0xa4, 0xf5, 0x34, 0xbb, 0xbe, 0xbb, 0x7f, 0xe0, 0x4c, 0x25, 0x9b, 0x48, 0xe4,
|
0x3d, 0xa3, 0x4c, 0x3a, 0x4f, 0xb3, 0xb7, 0x37, 0x77, 0xf7, 0x9c, 0xa9, 0x64, 0x13, 0x89, 0x1c,
|
||||||
0x90, 0x70, 0x9c, 0x19, 0xba, 0x22, 0x5f, 0x58, 0x06, 0xe4, 0xe0, 0xd8, 0x53, 0x38, 0xdd, 0x60,
|
0x13, 0x8e, 0x33, 0x43, 0x57, 0xe4, 0x0b, 0xcb, 0x80, 0x1c, 0x9c, 0x06, 0x0a, 0xa7, 0x1f, 0x2d,
|
||||||
0xd1, 0xf4, 0x2a, 0xa0, 0x9c, 0xe6, 0x4f, 0x09, 0xa6, 0x38, 0x29, 0x88, 0x43, 0xd5, 0x19, 0x4a,
|
0x9a, 0x41, 0x05, 0x94, 0xf3, 0xfc, 0x09, 0xc1, 0x14, 0x27, 0x05, 0x71, 0xac, 0x7a, 0x43, 0xa9,
|
||||||
0xf5, 0x31, 0x09, 0x88, 0xbd, 0x72, 0xac, 0xb6, 0x2a, 0xc6, 0x82, 0x47, 0xd3, 0xf3, 0xf2, 0x4c,
|
0x3e, 0x24, 0x01, 0x71, 0x50, 0x8e, 0xd5, 0x56, 0xc5, 0x58, 0xf0, 0x68, 0x06, 0x5e, 0x9e, 0x8a,
|
||||||
0x9c, 0xbf, 0x15, 0x67, 0xe2, 0x42, 0x9c, 0xd3, 0x06, 0x74, 0x49, 0xc9, 0x56, 0xa1, 0xbc, 0xf6,
|
0x37, 0x6f, 0xc5, 0xa9, 0x38, 0x13, 0x67, 0xb4, 0x01, 0x5d, 0x52, 0xb2, 0x55, 0x28, 0x2f, 0xfd,
|
||||||
0xfb, 0x24, 0x9d, 0x61, 0x0b, 0xcc, 0xd2, 0x1f, 0x46, 0x64, 0x95, 0x71, 0x2a, 0x8c, 0x97, 0x2c,
|
0x3e, 0x49, 0x67, 0xd8, 0x01, 0xb3, 0xf4, 0x87, 0x11, 0x59, 0x65, 0x9c, 0x0a, 0xd3, 0x39, 0xcb,
|
||||||
0x57, 0x2c, 0x6b, 0x03, 0x34, 0x05, 0x6f, 0x11, 0xfb, 0x78, 0x29, 0xe5, 0xc6, 0x60, 0x3b, 0x54,
|
0x15, 0xcb, 0xba, 0x00, 0x4d, 0xc1, 0x3b, 0xc4, 0x21, 0x9e, 0x4b, 0xd9, 0x1a, 0xec, 0xc6, 0x4a,
|
||||||
0xa2, 0xf6, 0x9d, 0x3c, 0x2c, 0x37, 0x58, 0x88, 0x72, 0x5a, 0x50, 0x06, 0xb0, 0xa0, 0x22, 0x44,
|
0xd4, 0xbe, 0x97, 0x87, 0xe5, 0x46, 0x0b, 0x51, 0xce, 0x0b, 0xca, 0x00, 0x16, 0x54, 0x84, 0xc8,
|
||||||
0xce, 0x50, 0x05, 0x4a, 0xa9, 0xe0, 0x3f, 0x2a, 0xab, 0xdc, 0x96, 0xb4, 0x98, 0x6e, 0xc3, 0xb2,
|
0x19, 0xaa, 0x40, 0x29, 0x15, 0xfc, 0x47, 0x65, 0x95, 0xdb, 0x92, 0x16, 0xd3, 0xb7, 0x2c, 0x4b,
|
||||||
0x64, 0xfd, 0x91, 0x88, 0xde, 0x88, 0xd8, 0x1a, 0xb0, 0x3a, 0x0a, 0xe3, 0x0f, 0xbc, 0x47, 0x8a,
|
0xd6, 0x1f, 0x89, 0xe8, 0x8d, 0x88, 0x9d, 0x01, 0xab, 0xa3, 0x30, 0xfe, 0xc0, 0x7b, 0xa4, 0x78,
|
||||||
0x57, 0xdc, 0x22, 0xee, 0x36, 0x57, 0xc9, 0xf5, 0xa2, 0x21, 0x8d, 0xa7, 0xf1, 0x69, 0x20, 0x27,
|
0xc1, 0x2d, 0xe2, 0xae, 0xbd, 0x48, 0xae, 0x17, 0x0d, 0x69, 0x3c, 0x89, 0x8f, 0x23, 0x39, 0x39,
|
||||||
0xa7, 0x6e, 0x4a, 0x55, 0x4e, 0x5b, 0xe4, 0xc6, 0xf5, 0x03, 0xb2, 0xd9, 0x9e, 0xc6, 0x58, 0x38,
|
0x77, 0x53, 0xaa, 0x72, 0xde, 0x22, 0x37, 0x6e, 0x18, 0x91, 0x2d, 0xf6, 0x34, 0xc6, 0xc2, 0xb1,
|
||||||
0xf6, 0xf8, 0x68, 0x62, 0x80, 0xa7, 0xc1, 0x04, 0xd0, 0x33, 0xba, 0x1a, 0x10, 0xa9, 0x8a, 0x33,
|
0xc7, 0x47, 0x13, 0x03, 0x3c, 0x8e, 0x26, 0x80, 0x5e, 0xd0, 0xd5, 0x88, 0x48, 0x55, 0x5c, 0xe0,
|
||||||
0x7c, 0xb6, 0x8d, 0xc8, 0xe6, 0x60, 0x4e, 0x72, 0x39, 0x5f, 0xff, 0x03, 0x3a, 0x1f, 0x26, 0xaf,
|
0x8b, 0x6d, 0x44, 0xb6, 0x04, 0xf3, 0x2a, 0x97, 0xcb, 0xf5, 0x3f, 0xa0, 0xcb, 0x61, 0xf6, 0xba,
|
||||||
0x6b, 0x6b, 0xea, 0x6d, 0xc1, 0x57, 0x93, 0xd5, 0x2b, 0x6a, 0xf8, 0x9f, 0xa1, 0x94, 0x49, 0x99,
|
0xb6, 0xa6, 0xde, 0x16, 0x7c, 0x33, 0x5b, 0xbd, 0xa1, 0x86, 0xff, 0x19, 0x4a, 0x99, 0x94, 0xb9,
|
||||||
0x6b, 0xb3, 0xcb, 0x52, 0x74, 0x53, 0x3f, 0x89, 0xa6, 0x4c, 0xec, 0x54, 0x3a, 0x21, 0x04, 0x81,
|
0x36, 0xbb, 0x2c, 0x45, 0x37, 0xf7, 0x93, 0x68, 0xca, 0xc4, 0x4e, 0xa5, 0x13, 0x42, 0x10, 0x38,
|
||||||
0x13, 0xf9, 0x3a, 0x6d, 0xcb, 0xb4, 0x67, 0xce, 0x23, 0x65, 0xe5, 0xe9, 0xe0, 0x03, 0x69, 0x6d,
|
0x91, 0xdf, 0xa6, 0x6d, 0x99, 0xf6, 0xcc, 0x79, 0xa4, 0xac, 0x3c, 0x1d, 0x7c, 0x20, 0xad, 0x4d,
|
||||||
0x02, 0xc4, 0x36, 0x25, 0xd2, 0xab, 0x0d, 0xb0, 0xcb, 0x65, 0x2e, 0x89, 0x6f, 0x5a, 0x77, 0x2a,
|
0x80, 0xd8, 0xa5, 0x44, 0x06, 0xd5, 0x02, 0x3b, 0x5f, 0xe7, 0x92, 0xf8, 0xe6, 0x75, 0xe7, 0xb2,
|
||||||
0xdb, 0xd4, 0xbc, 0xe9, 0x93, 0xfe, 0x0d, 0xac, 0x45, 0xb0, 0xa5, 0xe8, 0x03, 0x00, 0x00
|
0xcd, 0xcd, 0x9b, 0x3f, 0xe9, 0xdf, 0x63, 0x59, 0x71, 0x12, 0xe8, 0x03, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
3968
wled00/html_ui.h
3968
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@@ -297,9 +297,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
}
|
}
|
||||||
strip.trigger();
|
strip.trigger();
|
||||||
}
|
}
|
||||||
// send UDP if not in preset and something changed that is not just selection
|
// send UDP/WS if segment options changed (except selection; will also deselect current preset)
|
||||||
// send UDP if something changed that is not just selection or segment power/opacity
|
if (seg.differs(prev) & 0x7F) stateChanged = true;
|
||||||
if ((seg.differs(prev) & 0x7E) && seg.on == prev.on) stateChanged = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// deserializes WLED state (fileDoc points to doc object if called from web server)
|
// deserializes WLED state (fileDoc points to doc object if called from web server)
|
||||||
@@ -308,6 +307,10 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
|||||||
{
|
{
|
||||||
bool stateResponse = root[F("v")] | false;
|
bool stateResponse = root[F("v")] | false;
|
||||||
|
|
||||||
|
#if defined(WLED_DEBUG) && defined(WLED_DEBUG_HOST)
|
||||||
|
netDebugEnabled = root[F("debug")] | netDebugEnabled;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool onBefore = bri;
|
bool onBefore = bri;
|
||||||
getVal(root["bri"], &bri);
|
getVal(root["bri"], &bri);
|
||||||
|
|
||||||
@@ -456,6 +459,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
|
|||||||
root.remove("v"); // may be added in UI call
|
root.remove("v"); // may be added in UI call
|
||||||
root.remove("time"); // may be added in UI call
|
root.remove("time"); // may be added in UI call
|
||||||
root.remove("ps");
|
root.remove("ps");
|
||||||
|
root.remove("on"); // some exetrnal calls add "on" to "ps" call
|
||||||
if (root.size() == 0) {
|
if (root.size() == 0) {
|
||||||
unloadPlaylist(); // we need to unload playlist
|
unloadPlaylist(); // we need to unload playlist
|
||||||
applyPreset(ps, callMode); // async load (only preset ID was specified)
|
applyPreset(ps, callMode); // async load (only preset ID was specified)
|
||||||
@@ -847,9 +851,13 @@ void serializeInfo(JsonObject root)
|
|||||||
|
|
||||||
usermods.addToJsonInfo(root);
|
usermods.addToJsonInfo(root);
|
||||||
|
|
||||||
byte os = 0;
|
uint16_t os = 0;
|
||||||
#ifdef WLED_DEBUG
|
#ifdef WLED_DEBUG
|
||||||
os = 0x80;
|
os = 0x80;
|
||||||
|
#ifdef WLED_DEBUG_HOST
|
||||||
|
os |= 0x0100;
|
||||||
|
if (!netDebugEnabled) os &= ~0x0080;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_DISABLE_ALEXA
|
#ifndef WLED_DISABLE_ALEXA
|
||||||
os += 0x40;
|
os += 0x40;
|
||||||
@@ -1050,6 +1058,7 @@ void serializeNodes(JsonObject root)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deserializes mode data string into JsonArray
|
||||||
void serializeModeData(JsonArray fxdata)
|
void serializeModeData(JsonArray fxdata)
|
||||||
{
|
{
|
||||||
char lineBuffer[128];
|
char lineBuffer[128];
|
||||||
@@ -1057,14 +1066,14 @@ void serializeModeData(JsonArray fxdata)
|
|||||||
strncpy_P(lineBuffer, strip.getModeData(i), 127);
|
strncpy_P(lineBuffer, strip.getModeData(i), 127);
|
||||||
if (lineBuffer[0] != 0) {
|
if (lineBuffer[0] != 0) {
|
||||||
char* dataPtr = strchr(lineBuffer,'@');
|
char* dataPtr = strchr(lineBuffer,'@');
|
||||||
if (dataPtr) fxdata.add(dataPtr);
|
if (dataPtr) fxdata.add(dataPtr+1);
|
||||||
else fxdata.add("");
|
else fxdata.add("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// deserializes mode names string into JsonArray
|
// deserializes mode names string into JsonArray
|
||||||
// also removes WLED-SR extensions (@...) from deserialised names
|
// also removes effect data extensions (@...) from deserialised names
|
||||||
void serializeModeNames(JsonArray arr) {
|
void serializeModeNames(JsonArray arr) {
|
||||||
char lineBuffer[128];
|
char lineBuffer[128];
|
||||||
for (size_t i = 0; i < strip.getModeCount(); i++) {
|
for (size_t i = 0; i < strip.getModeCount(); i++) {
|
||||||
|
|||||||
@@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
#ifdef WLED_DEBUG_HOST
|
#ifdef WLED_DEBUG_HOST
|
||||||
|
|
||||||
NetworkDebugPrinter NetDebug;
|
size_t NetworkDebugPrinter::write(uint8_t c) {
|
||||||
|
if (!WLED_CONNECTED) return 0;
|
||||||
void NetworkDebugPrinter::print(const char *s, bool newline) {
|
|
||||||
if (!WLED_CONNECTED || !udpConnected || s == nullptr) return;
|
|
||||||
|
|
||||||
if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) {
|
if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) {
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
@@ -19,57 +17,33 @@ void NetworkDebugPrinter::print(const char *s, bool newline) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
WiFiUDP debugUdp;
|
|
||||||
debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort);
|
debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort);
|
||||||
debugUdp.write(reinterpret_cast<const uint8_t *>(s), strlen(s));
|
debugUdp.write(c);
|
||||||
if (newline) debugUdp.write('\n');
|
|
||||||
debugUdp.endPacket();
|
debugUdp.endPacket();
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkDebugPrinter::print(const __FlashStringHelper* s, bool newline) {
|
size_t NetworkDebugPrinter::write(const uint8_t *buf, size_t size) {
|
||||||
char buf[512];
|
if (!WLED_CONNECTED || buf == nullptr) return 0;
|
||||||
strncpy_P(buf, (PGM_P)s, 512);
|
|
||||||
print(buf, newline);
|
if (!debugPrintHostIP && !debugPrintHostIP.fromString(netDebugPrintHost)) {
|
||||||
|
#ifdef ESP8266
|
||||||
|
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP, 750);
|
||||||
|
#else
|
||||||
|
#ifdef WLED_USE_ETHERNET
|
||||||
|
ETH.hostByName(netDebugPrintHost, debugPrintHostIP);
|
||||||
|
#else
|
||||||
|
WiFi.hostByName(netDebugPrintHost, debugPrintHostIP);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
debugUdp.beginPacket(debugPrintHostIP, netDebugPrintPort);
|
||||||
|
size = debugUdp.write(buf, size);
|
||||||
|
debugUdp.endPacket();
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkDebugPrinter::print(String s) {
|
NetworkDebugPrinter NetDebug;
|
||||||
print(s.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkDebugPrinter::print(unsigned int n, bool newline) {
|
|
||||||
char s[10];
|
|
||||||
snprintf_P(s, sizeof(s), PSTR("%d"), n);
|
|
||||||
s[9] = '\0';
|
|
||||||
print(s, newline);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkDebugPrinter::println() {
|
|
||||||
print("", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkDebugPrinter::println(const char *s) {
|
|
||||||
print(s, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkDebugPrinter::println(const __FlashStringHelper* s) {
|
|
||||||
print(s, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkDebugPrinter::println(String s) {
|
|
||||||
print(s.c_str(), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkDebugPrinter::println(unsigned int n) {
|
|
||||||
print(n, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkDebugPrinter::printf(const char *fmt...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, fmt);
|
|
||||||
char s[1024];
|
|
||||||
vsnprintf(s, sizeof(s), fmt, args);
|
|
||||||
va_end(args);
|
|
||||||
print(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -4,20 +4,13 @@
|
|||||||
#include <WString.h>
|
#include <WString.h>
|
||||||
#include <WiFiUdp.h>
|
#include <WiFiUdp.h>
|
||||||
|
|
||||||
class NetworkDebugPrinter {
|
class NetworkDebugPrinter : public Print {
|
||||||
private:
|
private:
|
||||||
|
WiFiUDP debugUdp; // needs to be here otherwise UDP messages get truncated upon destruction
|
||||||
IPAddress debugPrintHostIP;
|
IPAddress debugPrintHostIP;
|
||||||
public:
|
public:
|
||||||
void print(const char *s, bool newline = false);
|
virtual size_t write(uint8_t c);
|
||||||
void print(const __FlashStringHelper* s, bool newline = false);
|
virtual size_t write(const uint8_t *buf, size_t s);
|
||||||
void print(String s);
|
|
||||||
void print(unsigned int n, bool newline = false);
|
|
||||||
void println();
|
|
||||||
void println(const char *s);
|
|
||||||
void println(const __FlashStringHelper* s);
|
|
||||||
void println(String s);
|
|
||||||
void println(unsigned int n);
|
|
||||||
void printf(const char *fmt, ...);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NetworkDebugPrinter NetDebug;
|
extern NetworkDebugPrinter NetDebug;
|
||||||
|
|||||||
@@ -133,16 +133,16 @@ int getSignalQuality(int rssi)
|
|||||||
void WiFiEvent(WiFiEvent_t event)
|
void WiFiEvent(WiFiEvent_t event)
|
||||||
{
|
{
|
||||||
#ifdef WLED_USE_ETHERNET
|
#ifdef WLED_USE_ETHERNET
|
||||||
char hostname[25] = "wled-";
|
char hostname[25];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
|
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
|
||||||
case SYSTEM_EVENT_ETH_START:
|
case SYSTEM_EVENT_ETH_START:
|
||||||
DEBUG_PRINT(F("ETH Started"));
|
DEBUG_PRINTLN(F("ETH Started"));
|
||||||
break;
|
break;
|
||||||
case SYSTEM_EVENT_ETH_CONNECTED:
|
case SYSTEM_EVENT_ETH_CONNECTED:
|
||||||
DEBUG_PRINT(F("ETH Connected"));
|
DEBUG_PRINTLN(F("ETH Connected"));
|
||||||
if (!apActive) {
|
if (!apActive) {
|
||||||
WiFi.disconnect(true);
|
WiFi.disconnect(true);
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ void WiFiEvent(WiFiEvent_t event)
|
|||||||
showWelcomePage = false;
|
showWelcomePage = false;
|
||||||
break;
|
break;
|
||||||
case SYSTEM_EVENT_ETH_DISCONNECTED:
|
case SYSTEM_EVENT_ETH_DISCONNECTED:
|
||||||
DEBUG_PRINT(F("ETH Disconnected"));
|
DEBUG_PRINTLN(F("ETH Disconnected"));
|
||||||
// This doesn't really affect ethernet per se,
|
// This doesn't really affect ethernet per se,
|
||||||
// as it's only configured once. Rather, it
|
// as it's only configured once. Rather, it
|
||||||
// may be necessary to reconnect the WiFi when
|
// may be necessary to reconnect the WiFi when
|
||||||
|
|||||||
@@ -57,7 +57,8 @@ enum struct PinOwner : uint8_t {
|
|||||||
UM_QuinLEDAnPenta = USERMOD_ID_QUINLED_AN_PENTA, // 0x17 // Usermod "quinled-an-penta.h"
|
UM_QuinLEDAnPenta = USERMOD_ID_QUINLED_AN_PENTA, // 0x17 // Usermod "quinled-an-penta.h"
|
||||||
UM_BME280 = USERMOD_ID_BME280, // 0x18 // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins
|
UM_BME280 = USERMOD_ID_BME280, // 0x18 // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins
|
||||||
UM_BH1750 = USERMOD_ID_BH1750, // 0x19 // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins
|
UM_BH1750 = USERMOD_ID_BH1750, // 0x19 // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins
|
||||||
UM_Audioreactive = USERMOD_ID_AUDIOREACTIVE // 0x1E // Usermod "audio_reactive.h"
|
UM_Audioreactive = USERMOD_ID_AUDIOREACTIVE, // 0x1E // Usermod "audio_reactive.h"
|
||||||
|
UM_SdCard = USERMOD_ID_SD_CARD // 0x24 // Usermod "usermod_sd_card.h"
|
||||||
};
|
};
|
||||||
static_assert(0u == static_cast<uint8_t>(PinOwner::None), "PinOwner::None must be zero, so default array initialization works as expected");
|
static_assert(0u == static_cast<uint8_t>(PinOwner::None), "PinOwner::None must be zero, so default array initialization works as expected");
|
||||||
|
|
||||||
|
|||||||
@@ -697,13 +697,18 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
|
|||||||
byte speedIn = selseg.speed;
|
byte speedIn = selseg.speed;
|
||||||
byte intensityIn = selseg.intensity;
|
byte intensityIn = selseg.intensity;
|
||||||
byte paletteIn = selseg.palette;
|
byte paletteIn = selseg.palette;
|
||||||
|
byte custom1In = selseg.custom1;
|
||||||
uint16_t startI = selseg.start;
|
byte custom2In = selseg.custom2;
|
||||||
uint16_t stopI = selseg.stop;
|
byte custom3In = selseg.custom3;
|
||||||
uint16_t startY = selseg.startY;
|
byte check1In = selseg.check1;
|
||||||
uint16_t stopY = selseg.stopY;
|
byte check2In = selseg.check2;
|
||||||
uint8_t grpI = selseg.grouping;
|
byte check3In = selseg.check3;
|
||||||
uint16_t spcI = selseg.spacing;
|
uint16_t startI = selseg.start;
|
||||||
|
uint16_t stopI = selseg.stop;
|
||||||
|
uint16_t startY = selseg.startY;
|
||||||
|
uint16_t stopY = selseg.stopY;
|
||||||
|
uint8_t grpI = selseg.grouping;
|
||||||
|
uint16_t spcI = selseg.spacing;
|
||||||
pos = req.indexOf(F("&S=")); //segment start
|
pos = req.indexOf(F("&S=")); //segment start
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
startI = getNumVal(&req, pos);
|
startI = getNumVal(&req, pos);
|
||||||
@@ -838,7 +843,6 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
|
|||||||
colorFromDecOrHexString(tmpCol, (char*)req.substring(pos + 3).c_str());
|
colorFromDecOrHexString(tmpCol, (char*)req.substring(pos + 3).c_str());
|
||||||
uint32_t col2 = RGBW32(tmpCol[0], tmpCol[1], tmpCol[2], tmpCol[3]);
|
uint32_t col2 = RGBW32(tmpCol[0], tmpCol[1], tmpCol[2], tmpCol[3]);
|
||||||
selseg.setColor(2, col2); // defined above (SS= or main)
|
selseg.setColor(2, col2); // defined above (SS= or main)
|
||||||
stateChanged = true;
|
|
||||||
if (!singleSegment) strip.setColor(2, col2); // will set color to all active & selected segments
|
if (!singleSegment) strip.setColor(2, col2); // will set color to all active & selected segments
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -864,20 +868,19 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
|
|||||||
|
|
||||||
// apply colors to selected segment, and all selected segments if applicable
|
// apply colors to selected segment, and all selected segments if applicable
|
||||||
if (col0Changed) {
|
if (col0Changed) {
|
||||||
stateChanged = true;
|
|
||||||
uint32_t colIn0 = RGBW32(colIn[0], colIn[1], colIn[2], colIn[3]);
|
uint32_t colIn0 = RGBW32(colIn[0], colIn[1], colIn[2], colIn[3]);
|
||||||
selseg.setColor(0, colIn0);
|
selseg.setColor(0, colIn0);
|
||||||
if (!singleSegment) strip.setColor(0, colIn0); // will set color to all active & selected segments
|
if (!singleSegment) strip.setColor(0, colIn0); // will set color to all active & selected segments
|
||||||
}
|
}
|
||||||
|
|
||||||
if (col1Changed) {
|
if (col1Changed) {
|
||||||
stateChanged = true;
|
|
||||||
uint32_t colIn1 = RGBW32(colInSec[0], colInSec[1], colInSec[2], colInSec[3]);
|
uint32_t colIn1 = RGBW32(colInSec[0], colInSec[1], colInSec[2], colInSec[3]);
|
||||||
selseg.setColor(1, colIn1);
|
selseg.setColor(1, colIn1);
|
||||||
if (!singleSegment) strip.setColor(1, colIn1); // will set color to all active & selected segments
|
if (!singleSegment) strip.setColor(1, colIn1); // will set color to all active & selected segments
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fxModeChanged = false, speedChanged = false, intensityChanged = false, paletteChanged = false;
|
bool fxModeChanged = false, speedChanged = false, intensityChanged = false, paletteChanged = false;
|
||||||
|
bool custom1Changed = false, custom2Changed = false, custom3Changed = false, check1Changed = false, check2Changed = false, check3Changed = false;
|
||||||
// set effect parameters
|
// set effect parameters
|
||||||
if (updateVal(req.c_str(), "FX=", &effectIn, 0, strip.getModeCount()-1)) {
|
if (updateVal(req.c_str(), "FX=", &effectIn, 0, strip.getModeCount()-1)) {
|
||||||
if (request != nullptr) unloadPlaylist(); // unload playlist if changing FX using web request
|
if (request != nullptr) unloadPlaylist(); // unload playlist if changing FX using web request
|
||||||
@@ -886,8 +889,14 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
|
|||||||
speedChanged = updateVal(req.c_str(), "SX=", &speedIn);
|
speedChanged = updateVal(req.c_str(), "SX=", &speedIn);
|
||||||
intensityChanged = updateVal(req.c_str(), "IX=", &intensityIn);
|
intensityChanged = updateVal(req.c_str(), "IX=", &intensityIn);
|
||||||
paletteChanged = updateVal(req.c_str(), "FP=", &paletteIn, 0, strip.getPaletteCount()-1);
|
paletteChanged = updateVal(req.c_str(), "FP=", &paletteIn, 0, strip.getPaletteCount()-1);
|
||||||
|
custom1Changed = updateVal(req.c_str(), "X1=", &custom1In);
|
||||||
stateChanged |= (fxModeChanged || speedChanged || intensityChanged || paletteChanged);
|
custom2Changed = updateVal(req.c_str(), "X2=", &custom2In);
|
||||||
|
custom3Changed = updateVal(req.c_str(), "X3=", &custom3In);
|
||||||
|
check1Changed = updateVal(req.c_str(), "M1=", &check1In);
|
||||||
|
check2Changed = updateVal(req.c_str(), "M2=", &check2In);
|
||||||
|
check3Changed = updateVal(req.c_str(), "M3=", &check3In);
|
||||||
|
|
||||||
|
stateChanged |= (fxModeChanged || speedChanged || intensityChanged || paletteChanged || custom1Changed || custom2Changed || custom3Changed || check1Changed || check2Changed || check3Changed);
|
||||||
|
|
||||||
// apply to main and all selected segments to prevent #1618.
|
// apply to main and all selected segments to prevent #1618.
|
||||||
for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) {
|
for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) {
|
||||||
@@ -897,6 +906,12 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
|
|||||||
if (speedChanged) seg.speed = speedIn;
|
if (speedChanged) seg.speed = speedIn;
|
||||||
if (intensityChanged) seg.intensity = intensityIn;
|
if (intensityChanged) seg.intensity = intensityIn;
|
||||||
if (paletteChanged) seg.setPalette(paletteIn);
|
if (paletteChanged) seg.setPalette(paletteIn);
|
||||||
|
if (custom1Changed) seg.custom1 = custom1In;
|
||||||
|
if (custom2Changed) seg.custom2 = custom2In;
|
||||||
|
if (custom3Changed) seg.custom3 = custom3In;
|
||||||
|
if (check1Changed) seg.check1 = (bool)check1In;
|
||||||
|
if (check2Changed) seg.check2 = (bool)check2In;
|
||||||
|
if (check3Changed) seg.check3 = (bool)check3In;
|
||||||
}
|
}
|
||||||
|
|
||||||
//set advanced overlay
|
//set advanced overlay
|
||||||
|
|||||||
@@ -160,6 +160,18 @@
|
|||||||
#include "../usermods/ADS1115_v2/usermod_ads1115.h"
|
#include "../usermods/ADS1115_v2/usermod_ads1115.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI)
|
||||||
|
// This include of SD.h and SD_MMC.h must happen here, else they won't be
|
||||||
|
// resolved correctly (when included in mod's header only)
|
||||||
|
#ifdef WLED_USE_SD_MMC
|
||||||
|
#include "SD_MMC.h"
|
||||||
|
#elif defined(WLED_USE_SD_SPI)
|
||||||
|
#include "SD.h"
|
||||||
|
#include "SPI.h"
|
||||||
|
#endif
|
||||||
|
#include "../usermods/sd_card/usermod_sd_card.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
//WLEDMM Custom Effects
|
//WLEDMM Custom Effects
|
||||||
#ifdef USERMOD_CUSTOMEFFECTS
|
#ifdef USERMOD_CUSTOMEFFECTS
|
||||||
#include "../usermods/customeffects/usermod_v2_customeffects.h"
|
#include "../usermods/customeffects/usermod_v2_customeffects.h"
|
||||||
@@ -324,6 +336,10 @@ void registerUsermods()
|
|||||||
usermods.add(new ADS1115Usermod());
|
usermods.add(new ADS1115Usermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SD_ADAPTER
|
||||||
|
usermods.add(new UsermodSdCard());
|
||||||
|
#endif
|
||||||
|
|
||||||
//WLEDMM Custom Effects
|
//WLEDMM Custom Effects
|
||||||
#ifdef USERMOD_CUSTOMEFFECTS
|
#ifdef USERMOD_CUSTOMEFFECTS
|
||||||
usermods.add(new CustomEffectsUserMod());
|
usermods.add(new CustomEffectsUserMod());
|
||||||
|
|||||||
@@ -678,6 +678,7 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0);
|
|||||||
// On the host side, use netcat to receive the log statements: nc -l 7868 -u
|
// On the host side, use netcat to receive the log statements: nc -l 7868 -u
|
||||||
// use -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' or FQDN within quotes
|
// use -D WLED_DEBUG_HOST='"192.168.xxx.xxx"' or FQDN within quotes
|
||||||
#define DEBUGOUT NetDebug
|
#define DEBUGOUT NetDebug
|
||||||
|
WLED_GLOBAL bool netDebugEnabled _INIT(true);
|
||||||
WLED_GLOBAL char netDebugPrintHost[33] _INIT(WLED_DEBUG_HOST);
|
WLED_GLOBAL char netDebugPrintHost[33] _INIT(WLED_DEBUG_HOST);
|
||||||
#if defined(WLED_DEBUG_NET_PORT)
|
#if defined(WLED_DEBUG_NET_PORT)
|
||||||
WLED_GLOBAL int netDebugPrintPort _INIT(WLED_DEBUG_PORT);
|
WLED_GLOBAL int netDebugPrintPort _INIT(WLED_DEBUG_PORT);
|
||||||
|
|||||||
@@ -516,18 +516,15 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappends('s',SET_F("AI"),alexaInvocationName);
|
sappends('s',SET_F("AI"),alexaInvocationName);
|
||||||
sappend('c',SET_F("SA"),notifyAlexa);
|
sappend('c',SET_F("SA"),notifyAlexa);
|
||||||
sappend('v',SET_F("AP"),alexaNumPresets);
|
sappend('v',SET_F("AP"),alexaNumPresets);
|
||||||
#ifndef WLED_DISABLE_ALEXA
|
#ifdef WLED_DISABLE_ALEXA
|
||||||
oappend(SET_F("hideNoALEXA();")); // hide "not compiled in" message
|
oappend(SET_F("toggle('Alexa');")); // hide Alexa settings
|
||||||
#else
|
|
||||||
oappend(SET_F("hideALEXA();")); // hide Alexa settings if not compiled in
|
|
||||||
#endif
|
#endif
|
||||||
sappends('s',SET_F("BK"),(char*)((blynkEnabled)?SET_F("Hidden"):""));
|
sappends('s',SET_F("BK"),(char*)((blynkEnabled)?SET_F("Hidden"):""));
|
||||||
#ifndef WLED_DISABLE_BLYNK
|
#ifndef WLED_DISABLE_BLYNK
|
||||||
sappends('s',SET_F("BH"),blynkHost);
|
sappends('s',SET_F("BH"),blynkHost);
|
||||||
sappend('v',SET_F("BP"),blynkPort);
|
sappend('v',SET_F("BP"),blynkPort);
|
||||||
oappend(SET_F("hideNoBLYNK();")); // hide "not compiled in" message
|
|
||||||
#else
|
#else
|
||||||
oappend(SET_F("hideBLYNK();")); // hide BLYNK settings if not compiled in
|
oappend(SET_F("toggle('Blynk');")); // hide BLYNK settings
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLED_ENABLE_MQTT
|
#ifdef WLED_ENABLE_MQTT
|
||||||
@@ -544,9 +541,8 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappends('s',"MD",mqttDeviceTopic);
|
sappends('s',"MD",mqttDeviceTopic);
|
||||||
sappends('s',SET_F("MG"),mqttGroupTopic);
|
sappends('s',SET_F("MG"),mqttGroupTopic);
|
||||||
sappend('c',SET_F("BM"),buttonPublishMqtt);
|
sappend('c',SET_F("BM"),buttonPublishMqtt);
|
||||||
oappend(SET_F("hideNoMQTT();")); // hide "not compiled in" message
|
|
||||||
#else
|
#else
|
||||||
oappend(SET_F("hideMQTT();")); // hide MQTT settings if not compiled in
|
oappend(SET_F("toggle('MQTT');")); // hide MQTT settings
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_HUESYNC
|
#ifndef WLED_DISABLE_HUESYNC
|
||||||
@@ -574,9 +570,8 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sappends('m',SET_F("(\"sip\")[0]"),hueErrorString);
|
sappends('m',SET_F("(\"sip\")[0]"),hueErrorString);
|
||||||
oappend(SET_F("hideNoHUE();")); // hide "not compiled in" message
|
|
||||||
#else
|
#else
|
||||||
oappend(SET_F("hideHUE();")); // hide Hue Sync settings if not compiled in
|
oappend(SET_F("toggle('Hue');")); // hide Hue Sync settings
|
||||||
#endif
|
#endif
|
||||||
sappend('v',SET_F("BD"),serialBaud);
|
sappend('v',SET_F("BD"),serialBaud);
|
||||||
|
|
||||||
@@ -725,17 +720,17 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
oappend(versionString);
|
oappend(versionString);
|
||||||
oappend(SET_F("_"));
|
oappend(SET_F("_"));
|
||||||
oappend(releaseString);
|
oappend(releaseString);
|
||||||
oappend(SET_F(".bin"));
|
oappend(SET_F(".bin<br>("));
|
||||||
#if defined(CONFIG_IDF_TARGET_ESP32C3)
|
#if defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||||
oappend(SET_F("<br>(ESP32-C3"));
|
oappend(SET_F("ESP32-C3"));
|
||||||
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
|
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
oappend(SET_F("<br>(ESP32-S3"));
|
oappend(SET_F("ESP32-S3"));
|
||||||
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
|
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||||
oappend(SET_F("<br>(ESP32-S2"));
|
oappend(SET_F("ESP32-S2"));
|
||||||
#elif defined(ARDUINO_ARCH_ESP32)
|
#elif defined(ARDUINO_ARCH_ESP32)
|
||||||
oappend(SET_F("<br>(ESP32"));
|
oappend(ESP.getChipModel());
|
||||||
#else
|
#else
|
||||||
oappend(SET_F("<br>(ESP8266"));
|
oappend("esp8266");
|
||||||
#endif
|
#endif
|
||||||
oappend(SET_F(" build "));
|
oappend(SET_F(" build "));
|
||||||
oappendi(VERSION);
|
oappendi(VERSION);
|
||||||
|
|||||||
Reference in New Issue
Block a user