diff --git a/wled00/const.h b/wled00/const.h index b8b54dc54..e50616271 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -215,6 +215,7 @@ #define ERR_FS_BEGIN 10 // Could not init filesystem (no partition?) #define ERR_FS_QUOTA 11 // The FS is full or the maximum file size is reached #define ERR_FS_PLOAD 12 // It was attempted to load a preset that does not exist +#define ERR_FS_IRLOAD 13 // It was attempted to load an IR JSON cmd, but the "ir.json" file does not exist #define ERR_FS_GENERAL 19 // A general unspecified filesystem error occured #define ERR_OVERTEMP 30 // An attached temperature sensor has measured above threshold temperature (not implemented) #define ERR_OVERCURRENT 31 // An attached current sensor has measured a current above the threshold (not implemented) diff --git a/wled00/ir.cpp b/wled00/ir.cpp index b1812caa2..ba22421d2 100644 --- a/wled00/ir.cpp +++ b/wled00/ir.cpp @@ -568,60 +568,62 @@ void decodeIRJson(uint32_t code) char objKey[10]; const char* cmd; String cmdStr; - byte irError; DynamicJsonDocument irDoc(JSON_BUFFER_SIZE); JsonObject fdo; JsonObject jsonCmdObj; sprintf(objKey, "\"0x%X\":", code); - irError = readObjectFromFile("/ir.json", objKey, &irDoc) ? ERR_NONE : ERR_FS_PLOAD; + readObjectFromFile("/ir.json", objKey, &irDoc); fdo = irDoc.as(); lastValidCode = 0; - if (!irError) + if (fdo.isNull()) { + //the received code does not exist + if (!WLED_FS.exists("/ir.json")) errorFlag = ERR_FS_IRLOAD; //warn if IR file itself doesn't exist + return; + } + + jsonCmdObj = fdo["cmd"]; + cmdStr = String(jsonCmdObj); + + if (!cmdStr.isEmpty()) { - cmd = fdo["cmd"]; - cmdStr = String(cmd); - jsonCmdObj = fdo["cmd"]; - if (!cmdStr.isEmpty()) - { - if (cmdStr.startsWith("!")) { - // call limited set of C functions - if (cmdStr.startsWith(F("!incBri"))) { - lastValidCode = code; - incBrightness(); - } else if (cmdStr.startsWith(F("!decBri"))) { - lastValidCode = code; - decBrightness(); - } else if (cmdStr.startsWith(F("!presetF"))) { //!presetFallback - uint8_t p1 = fdo["PL"] ? fdo["PL"] : 1; - uint8_t p2 = fdo["FX"] ? fdo["FX"] : random8(MODE_COUNT); - uint8_t p3 = fdo["FP"] ? fdo["FP"] : 0; - presetFallback(p1, p2, p3); - } - } else { - // HTTP API command - if (cmdStr.indexOf("~") || fdo["rpt"]) - { - // repeatable action - lastValidCode = code; - } - if (effectCurrent == 0 && cmdStr.indexOf("FP=") > -1) { - // setting palette but it wont show because effect is solid - effectCurrent = FX_MODE_GRADIENT; - } - if (!cmdStr.startsWith("win&")) { - cmdStr = "win&" + cmdStr; - } - handleSet(nullptr, cmdStr, false); - } - } else if (!jsonCmdObj.isNull()) { - // command is JSON object - //allow applyPreset() to reuse JSON buffer, or it would alloc. a second buffer and run out of mem. - fileDoc = &irDoc; - deserializeState(jsonCmdObj, CALL_MODE_BUTTON); - fileDoc = nullptr; - } + if (cmdStr.startsWith("!")) { + // call limited set of C functions + if (cmdStr.startsWith(F("!incBri"))) { + lastValidCode = code; + incBrightness(); + } else if (cmdStr.startsWith(F("!decBri"))) { + lastValidCode = code; + decBrightness(); + } else if (cmdStr.startsWith(F("!presetF"))) { //!presetFallback + uint8_t p1 = fdo["PL"] ? fdo["PL"] : 1; + uint8_t p2 = fdo["FX"] ? fdo["FX"] : random8(MODE_COUNT); + uint8_t p3 = fdo["FP"] ? fdo["FP"] : 0; + presetFallback(p1, p2, p3); + } + } else { + // HTTP API command + if (cmdStr.indexOf("~") || fdo["rpt"]) + { + // repeatable action + lastValidCode = code; + } + if (effectCurrent == 0 && cmdStr.indexOf("FP=") > -1) { + // setting palette but it wont show because effect is solid + effectCurrent = FX_MODE_GRADIENT; + } + if (!cmdStr.startsWith("win&")) { + cmdStr = "win&" + cmdStr; + } + handleSet(nullptr, cmdStr, false); + } + } else if (!jsonCmdObj.isNull()) { + // command is JSON object + //allow applyPreset() to reuse JSON buffer, or it would alloc. a second buffer and run out of mem. + fileDoc = &irDoc; + deserializeState(jsonCmdObj, CALL_MODE_BUTTON); + fileDoc = nullptr; } }