mirror of
https://github.com/wled/WLED.git
synced 2025-07-29 13:46:39 +00:00
deEEP for presets
This commit is contained in:
parent
2513bcf2c6
commit
2525429070
@ -207,6 +207,7 @@ void deletePreset(byte index);
|
|||||||
void loadMacro(byte index, char* m);
|
void loadMacro(byte index, char* m);
|
||||||
void applyMacro(byte index);
|
void applyMacro(byte index);
|
||||||
void saveMacro(byte index, const String& mc, bool persist = true); //only commit on single save, not in settings
|
void saveMacro(byte index, const String& mc, bool persist = true); //only commit on single save, not in settings
|
||||||
|
void deEEP();
|
||||||
|
|
||||||
//wled_serial.cpp
|
//wled_serial.cpp
|
||||||
void handleSerial();
|
void handleSerial();
|
||||||
|
@ -263,8 +263,10 @@ bool deserializeState(JsonObject root)
|
|||||||
void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool forPreset, bool segmentBounds)
|
void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool forPreset, bool segmentBounds)
|
||||||
{
|
{
|
||||||
root[F("id")] = id;
|
root[F("id")] = id;
|
||||||
|
if (segmentBounds) {
|
||||||
root[F("start")] = seg.start;
|
root[F("start")] = seg.start;
|
||||||
root[F("stop")] = seg.stop;
|
root[F("stop")] = seg.stop;
|
||||||
|
}
|
||||||
if (!forPreset) root[F("len")] = seg.stop - seg.start;
|
if (!forPreset) root[F("len")] = seg.stop - seg.start;
|
||||||
root[F("grp")] = seg.grouping;
|
root[F("grp")] = seg.grouping;
|
||||||
root[F("spc")] = seg.spacing;
|
root[F("spc")] = seg.spacing;
|
||||||
|
@ -189,7 +189,7 @@ void WLED::setup()
|
|||||||
if (!fsinit) {
|
if (!fsinit) {
|
||||||
DEBUGFS_PRINTLN(F("FS failed!"));
|
DEBUGFS_PRINTLN(F("FS failed!"));
|
||||||
errorFlag = ERR_FS_BEGIN;
|
errorFlag = ERR_FS_BEGIN;
|
||||||
}
|
} else deEEP();
|
||||||
updateFSInfo();
|
updateFSInfo();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
//#define WLED_DEBUG
|
//#define WLED_DEBUG
|
||||||
|
|
||||||
// filesystem specific debugging
|
// filesystem specific debugging
|
||||||
#define WLED_DEBUG_FS
|
//#define WLED_DEBUG_FS
|
||||||
|
|
||||||
// Library inclusions.
|
// Library inclusions.
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
@ -541,7 +541,7 @@ WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager());
|
|||||||
#else
|
#else
|
||||||
#define DEBUGFS_PRINT(x)
|
#define DEBUGFS_PRINT(x)
|
||||||
#define DEBUGFS_PRINTLN(x)
|
#define DEBUGFS_PRINTLN(x)
|
||||||
#define DEBUGFS_PRINTF(x)
|
#define DEBUGFS_PRINTF(x...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// debug macro variable definitions
|
// debug macro variable definitions
|
||||||
|
@ -636,7 +636,7 @@ bool applyPreset(byte index)
|
|||||||
#endif
|
#endif
|
||||||
deserializeState(fileDoc->as<JsonObject>());
|
deserializeState(fileDoc->as<JsonObject>());
|
||||||
} else {
|
} else {
|
||||||
WLED_DEBUG_FS(F("Make read buf"));
|
DEBUGFS_PRINTLN(F("Make read buf"));
|
||||||
DynamicJsonDocument fDoc(JSON_BUFFER_SIZE);
|
DynamicJsonDocument fDoc(JSON_BUFFER_SIZE);
|
||||||
errorFlag = readObjectFromFileUsingId("/presets.json", index, &fDoc) ? ERR_NONE : ERR_FS_PLOAD;
|
errorFlag = readObjectFromFileUsingId("/presets.json", index, &fDoc) ? ERR_NONE : ERR_FS_PLOAD;
|
||||||
#ifdef WLED_DEBUG_FS
|
#ifdef WLED_DEBUG_FS
|
||||||
@ -726,41 +726,6 @@ void savePreset(byte index, bool persist, const char* pname, JsonObject saveobj)
|
|||||||
if (!docAlloc) delete fileDoc;
|
if (!docAlloc) delete fileDoc;
|
||||||
presetsModifiedTime = now(); //unix time
|
presetsModifiedTime = now(); //unix time
|
||||||
updateFSInfo();
|
updateFSInfo();
|
||||||
|
|
||||||
/*if (index > 16) return;
|
|
||||||
if (index < 1) {saveSettingsToEEPROM();return;}
|
|
||||||
uint16_t i = 380 + index*20;//min400
|
|
||||||
|
|
||||||
if (index < 16) {
|
|
||||||
EEPROM.write(i, 1);
|
|
||||||
EEPROM.write(i+1, bri);
|
|
||||||
for (uint16_t j=0; j<4; j++)
|
|
||||||
{
|
|
||||||
EEPROM.write(i+j+2, col[j]);
|
|
||||||
EEPROM.write(i+j+6, colSec[j]);
|
|
||||||
}
|
|
||||||
EEPROM.write(i+10, effectCurrent);
|
|
||||||
EEPROM.write(i+11, effectSpeed);
|
|
||||||
|
|
||||||
uint32_t colTer = strip.getSegment(strip.getMainSegmentId()).colors[2];
|
|
||||||
EEPROM.write(i+12, (colTer >> 16) & 0xFF);
|
|
||||||
EEPROM.write(i+13, (colTer >> 8) & 0xFF);
|
|
||||||
EEPROM.write(i+14, (colTer >> 0) & 0xFF);
|
|
||||||
EEPROM.write(i+15, (colTer >> 24) & 0xFF);
|
|
||||||
|
|
||||||
EEPROM.write(i+16, effectIntensity);
|
|
||||||
EEPROM.write(i+17, effectPalette);
|
|
||||||
} else { //segment 16 can save segments
|
|
||||||
EEPROM.write(i, 3);
|
|
||||||
EEPROM.write(i+1, bri);
|
|
||||||
WS2812FX::Segment* seg = strip.getSegments();
|
|
||||||
memcpy(EEPROM.getDataPtr() +i+2, seg, 240);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (persist) commit();
|
|
||||||
savedToPresets();
|
|
||||||
currentPreset = index;
|
|
||||||
isPreset = true;*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void deletePreset(byte index) {
|
void deletePreset(byte index) {
|
||||||
@ -811,3 +776,97 @@ void saveMacro(byte index, const String& mc, bool persist) //only commit on sing
|
|||||||
}
|
}
|
||||||
if (persist) commit();
|
if (persist) commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// De-EEPROM routine, upgrade from previous versions to v0.11
|
||||||
|
void deEEP() {
|
||||||
|
if (WLED_FS.exists("/presets.json")) return;
|
||||||
|
|
||||||
|
DEBUG_PRINTLN(F("Preset file not found, attempting to load from EEPROM"));
|
||||||
|
DEBUGFS_PRINTLN(F("Allocating saving buffer for dEEP"));
|
||||||
|
DynamicJsonDocument dDoc(JSON_BUFFER_SIZE);
|
||||||
|
JsonObject sObj = dDoc.to<JsonObject>();
|
||||||
|
sObj.createNestedObject("0");
|
||||||
|
|
||||||
|
//EEPROM.begin(EEPSIZE);
|
||||||
|
if (EEPROM.read(233) == 233) { //valid EEPROM save
|
||||||
|
for (uint16_t index = 1; index <= 16; index++) { //copy presets to presets.json
|
||||||
|
uint16_t i = 380 + index*20;
|
||||||
|
byte ver = EEPROM.read(i);
|
||||||
|
|
||||||
|
if ((index < 16 && ver != 1) || (index == 16 && (ver < 2 || ver > 3))) continue;
|
||||||
|
|
||||||
|
char nbuf[16];
|
||||||
|
sprintf(nbuf, "%d", index);
|
||||||
|
|
||||||
|
JsonObject pObj = sObj.createNestedObject(nbuf);
|
||||||
|
|
||||||
|
pObj["q"] = nbuf;
|
||||||
|
sprintf_P(nbuf, "Preset %d", index);
|
||||||
|
pObj["n"] = nbuf;
|
||||||
|
|
||||||
|
pObj["bri"] = EEPROM.read(i+1);
|
||||||
|
|
||||||
|
if (index < 16) {
|
||||||
|
JsonObject segObj = pObj.createNestedObject("seg");
|
||||||
|
|
||||||
|
JsonArray colarr = segObj.createNestedArray("col");
|
||||||
|
|
||||||
|
byte numChannels = (useRGBW)? 4:3;
|
||||||
|
|
||||||
|
for (uint8_t k = 0; k < 3; k++) //k=0 primary (i+2) k=1 secondary (i+6) k=2 tertiary color (i+12)
|
||||||
|
{
|
||||||
|
JsonArray colX = colarr.createNestedArray();
|
||||||
|
uint16_t memloc = i + 6*k;
|
||||||
|
if (k == 0) memloc += 2;
|
||||||
|
|
||||||
|
for (byte j = 0; j < numChannels; j++) colX.add(EEPROM.read(memloc + j));
|
||||||
|
}
|
||||||
|
|
||||||
|
segObj[F("fx")] = EEPROM.read(i+10);
|
||||||
|
segObj[F("sx")] = EEPROM.read(i+11);
|
||||||
|
segObj[F("ix")] = EEPROM.read(i+16);
|
||||||
|
segObj[F("pal")] = EEPROM.read(i+17);
|
||||||
|
} else {
|
||||||
|
WS2812FX::Segment* seg = strip.getSegments();
|
||||||
|
memcpy(seg, EEPROM.getDataPtr() +i+2, 240);
|
||||||
|
if (ver == 2) { //versions before 2004230 did not have opacity
|
||||||
|
for (byte j = 0; j < strip.getMaxSegments(); j++)
|
||||||
|
{
|
||||||
|
strip.getSegment(j).opacity = 255;
|
||||||
|
strip.getSegment(j).setOption(SEG_OPTION_ON, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
serializeState(pObj, true, false, true);
|
||||||
|
|
||||||
|
strip.resetSegments();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (uint16_t index = 1; index <= 16; index++) { //copy macros to presets.json
|
||||||
|
char m[65];
|
||||||
|
readStringFromEEPROM(1024+64*(index-1), m, 64);
|
||||||
|
if (m[0]) { //macro exists
|
||||||
|
char nbuf[16];
|
||||||
|
sprintf(nbuf, "%d", index + 16);
|
||||||
|
JsonObject pObj = sObj.createNestedObject(nbuf);
|
||||||
|
sprintf_P(nbuf, "ZMacro %d", index);
|
||||||
|
pObj["n"] = nbuf;
|
||||||
|
pObj["win"] = m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//EEPROM.end();
|
||||||
|
|
||||||
|
File f = WLED_FS.open("/presets.json", "w");
|
||||||
|
if (!f) {
|
||||||
|
errorFlag = ERR_FS_GENERAL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
serializeJson(dDoc, f);
|
||||||
|
f.close();
|
||||||
|
DEBUG_PRINTLN(F("deEEP complete!"));
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user