Backup RFP Infinity controller state before Resolume changes
Some checks failed
WLED CI / wled_build (push) Has been cancelled
Deploy Nightly / wled_build (push) Has been cancelled
Deploy Nightly / Deploy nightly (push) Has been cancelled

This commit is contained in:
jan
2026-05-14 12:31:13 +02:00
parent ebc4498d89
commit 4bc4e1257e
33 changed files with 3482 additions and 695 deletions

View File

@@ -335,6 +335,7 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
}
// end fix
if (getVal(elem["fx"], &fx, 0, last)) { //load effect ('r' random, '~' inc/dec, 0-255 exact value, 5~10r pick random between 5 & 10)
fx = rfpEffectSanitize(fx);
if (!presetId && currentPlaylist>=0) unloadPlaylist();
bool doLoadDefault = elem[F("fxdef")] == true;
if (fx == FX_MODE_IMAGE) doLoadDefault = true; // WLEDMM quick fix: when called from PixelForge, images were always shown with blur
@@ -1495,29 +1496,49 @@ void serializeNodes(JsonObject root)
}
// deserializes mode data string into JsonArray
void serializeModeData(JsonArray fxdata)
void serializeModeData(JsonVariant root)
{
char lineBuffer[192] = { 0 };
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
JsonObject fxdata = root.to<JsonObject>();
#else
JsonArray fxdata = root.to<JsonArray>();
#endif
for (size_t i = 0; i < strip.getModeCount(); i++) {
if (!rfpEffectIsAllowed(i)) continue;
strncpy_P(lineBuffer, strip.getModeData(i), sizeof(lineBuffer)-1);
if (lineBuffer[0] != 0) {
char* dataPtr = strchr(lineBuffer,'@');
if (dataPtr) fxdata.add(dataPtr+1);
else fxdata.add("");
const char* value = dataPtr ? dataPtr+1 : "";
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
fxdata[String(i)] = value;
#else
fxdata.add(value);
#endif
}
}
}
// deserializes mode names string into JsonArray
// also removes effect data extensions (@...) from deserialized names
void serializeModeNames(JsonArray arr) {
void serializeModeNames(JsonVariant root) {
char lineBuffer[192] = { 0 };
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
JsonObject arr = root.to<JsonObject>();
#else
JsonArray arr = root.to<JsonArray>();
#endif
for (size_t i = 0; i < strip.getModeCount(); i++) {
if (!rfpEffectIsAllowed(i)) continue;
strncpy_P(lineBuffer, strip.getModeData(i), sizeof(lineBuffer)-1);
if (lineBuffer[0] != 0) {
char* dataPtr = strchr(lineBuffer,'@');
if (dataPtr) *dataPtr = 0; // terminate mode data after name
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
arr[String(i)] = lineBuffer;
#else
arr.add(lineBuffer);
#endif
}
}
}
@@ -1567,8 +1588,12 @@ void serveJson(AsyncWebServerRequest* request)
else if (url.indexOf(F("eff")) > 0) {
// this serves just effect names without FX data extensions in names
if (requestJSONBufferLock(19)) {
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
AsyncJsonResponse* response = new AsyncJsonResponse(&doc, false); // RFP uses id-keyed objects
#else
AsyncJsonResponse* response = new AsyncJsonResponse(&doc, true); // array document
JsonArray lDoc = response->getRoot();
#endif
JsonVariant lDoc = response->getRoot();
serializeModeNames(lDoc); // remove WLED-SR extensions from effect names
response->setLength();
request->send(response);
@@ -1596,7 +1621,11 @@ void serveJson(AsyncWebServerRequest* request)
}
// releaseJSONBufferLock() will be called when "response" is destroyed (from AsyncWebServer)
// make sure you delete "response" if no "request->send(response);" is made
LockedJsonResponse *response = new LockedJsonResponse(&doc, subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS); // will clear and convert JsonDocument into JsonArray if necessary
bool responseIsArray = subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS;
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
if (subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS) responseIsArray = false;
#endif
LockedJsonResponse *response = new LockedJsonResponse(&doc, responseIsArray); // will clear and convert JsonDocument into JsonArray if necessary
JsonVariant lDoc = response->getRoot();
@@ -1614,7 +1643,7 @@ void serveJson(AsyncWebServerRequest* request)
case JSON_PATH_EFFECTS:
serializeModeNames(lDoc); break;
case JSON_PATH_FXDATA:
serializeModeData(lDoc.as<JsonArray>()); break;
serializeModeData(lDoc); break;
case JSON_PATH_NETWORKS:
serializeNetworks(lDoc); break;
default: //all
@@ -1624,7 +1653,11 @@ void serveJson(AsyncWebServerRequest* request)
serializeInfo(info);
if (subJson != JSON_PATH_STATE_INFO)
{
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
JsonObject effects = lDoc.createNestedObject(F("effects"));
#else
JsonArray effects = lDoc.createNestedArray(F("effects"));
#endif
serializeModeNames(effects); // remove WLED-SR extensions from effect names
lDoc[F("palettes")] = serialized((const __FlashStringHelper*)JSON_palette_names);
}