FQ quota and info

This commit is contained in:
cschwinne 2020-10-07 17:48:22 +02:00
parent 606cd18dc4
commit d2ffb3ca9d
8 changed files with 60 additions and 39 deletions

View File

@ -2732,7 +2732,7 @@ uint16_t WS2812FX::candle(bool multi)
//max. flicker range controlled by intensity
uint8_t valrange = SEGMENT.intensity;
uint8_t rndval = valrange >> 1;
uint8_t rndval = valrange >> 1; //max 127
//step (how much to move closer to target per frame) coarsely set by speed
uint8_t speedFactor = 4;
@ -2769,9 +2769,9 @@ uint16_t WS2812FX::candle(bool multi)
}
if (newTarget) {
s_target = random8(rndval) + random8(rndval);
s_target = random8(rndval) + random8(rndval); //between 0 and rndval*2 -2 = 252
if (s_target < (rndval >> 1)) s_target = (rndval >> 1) + random8(rndval);
uint8_t offset = (255 - valrange) >> 1;
uint8_t offset = (255 - valrange);
s_target += offset;
uint8_t dif = (s_target > s) ? s_target - s : s - s_target;

View File

@ -24,15 +24,16 @@ void handleDDPPacket(e131_packet_t* p) {
}
}
uint32_t offsetLeds = htonl(p->channelOffset) /3;
uint16_t packetLeds = htons(p->dataLen) /3;
uint32_t start = htonl(p->channelOffset) /3;
start += DMXAddress /3;
uint16_t stop = start + htons(p->dataLen) /3;
uint8_t* data = p->data;
uint16_t c = 0;
if (p->flags & DDP_TIMECODE_FLAG) c = 4; //packet has timecode flag, we do not support it, but data starts 4 bytes later
realtimeLock(realtimeTimeoutMs, REALTIME_MODE_DDP);
for (uint16_t i = offsetLeds; i < offsetLeds + packetLeds; i++) {
for (uint16_t i = start; i < stop; i++) {
setRealtimePixel(i, data[c++], data[c++], data[c++], 0);
}

View File

@ -52,6 +52,7 @@ bool writeObjectToFileUsingId(const char* file, uint16_t id, JsonDocument* conte
bool writeObjectToFile(const char* file, const char* key, JsonDocument* content);
bool readObjectFromFileUsingId(const char* file, uint16_t id, JsonDocument* dest);
bool readObjectFromFile(const char* file, const char* key, JsonDocument* dest);
void updateFSInfo();
//hue.cpp
void handleHue();

View File

@ -6,8 +6,15 @@
#ifndef WLED_DISABLE_FILESYSTEM
#ifdef ARDUINO_ARCH_ESP32
#include "esp_spiffs.h" //FS info bare IDF function until FS wrapper is available for ESP32
#endif
#define FS_BUFSIZE 256
//allow presets to be added until this percentage of FS space is used
#define FS_QUOTA 75
/*
* Structural requirements for files managed by writeObjectToFile() and readObjectFromFile() utilities:
* 1. File must be a string representation of a valid JSON object
@ -173,6 +180,14 @@ bool appendObjectToFile(File f, const char* key, JsonDocument* content, uint32_t
return true;
}
//not enough space, append at end
if ((fsBytesUsed*100)/fsBytesTotal > FS_QUOTA) { //permitted space for presets exceeded
errorFlag = ERR_FS_QUOTA;
f.close();
return false;
}
//check if last character in file is '}' (typical)
f.seek(1, SeekEnd);
if (f.read() == '}') pos = f.size() -1;
@ -203,13 +218,14 @@ bool appendObjectToFile(File f, const char* key, JsonDocument* content, uint32_t
f.close();
DEBUGFS_PRINTF("Appended, took %d ms (total %d)", millis() - s1, millis() - s);
return true;
}
bool writeObjectToFileUsingId(const char* file, uint16_t id, JsonDocument* content)
{
char objKey[10];
sprintf(objKey, "\"%d\":", id);
writeObjectToFile(file, objKey, content);
return writeObjectToFile(file, objKey, content);
}
bool writeObjectToFile(const char* file, const char* key, JsonDocument* content)
@ -266,7 +282,7 @@ bool readObjectFromFileUsingId(const char* file, uint16_t id, JsonDocument* dest
{
char objKey[10];
sprintf(objKey, "\"%d\":", id);
readObjectFromFile(file, objKey, dest);
return readObjectFromFile(file, objKey, dest);
}
bool readObjectFromFile(const char* file, const char* key, JsonDocument* dest)
@ -291,6 +307,17 @@ bool readObjectFromFile(const char* file, const char* key, JsonDocument* dest)
DEBUGFS_PRINTF("Read, took %d ms\n", millis() - s);
return true;
}
void updateFSInfo() {
#ifdef ARDUINO_ARCH_ESP32
esp_spiffs_info(nullptr, &fsBytesTotal, &fsBytesUsed);
#else
FSInfo fsi;
WLED_FS.info(fsi);
fsBytesUsed = fsi.usedBytes;
fsBytesTotal = fsi.totalBytes;
#endif
}
#endif
#if !defined WLED_DISABLE_FILESYSTEM && defined WLED_ENABLE_FS_SERVING
@ -316,6 +343,7 @@ String getContentType(AsyncWebServerRequest* request, String filename){
bool handleFileRead(AsyncWebServerRequest* request, String path){
DEBUG_PRINTLN("FileRead: " + path);
if(path.endsWith("/")) path += "index.htm";
if(path.indexOf("sec") > -1) return false;
String contentType = getContentType(request, path);
/*String pathWithGz = path + ".gz";
if(WLED_FS.exists(pathWithGz)){

View File

@ -1,9 +1,5 @@
#include "wled.h"
#ifdef ARDUINO_ARCH_ESP32
#include "esp_spiffs.h" //FS info bare IDF function until FS wrapper is available for ESP32
#endif
/*
* JSON API (De)serialization
*/
@ -152,14 +148,6 @@ bool deserializeState(JsonObject root)
strip.applyToAllSelected = false;
bool stateResponse = root[F("v")] | false;
//HTTP API commands
const char* httpwin = root[F("win")];
if (httpwin) {
String apireq = "win&";
apireq += httpwin;
handleSet(nullptr, apireq, false);
}
int ps = root[F("ps")] | -1;
if (ps >= 0) applyPreset(ps);
@ -263,6 +251,13 @@ bool deserializeState(JsonObject root)
if (ps > 0) {
deletePreset(ps);
}
//HTTP API commands
const char* httpwin = root["win"];
if (httpwin) {
String apireq = "win&";
apireq += httpwin;
handleSet(nullptr, apireq, false);
}
}
return stateResponse;
@ -435,23 +430,13 @@ void serializeInfo(JsonObject root)
JsonObject wifi_info = root.createNestedObject("wifi");
wifi_info[F("bssid")] = WiFi.BSSIDstr();
int qrssi = WiFi.RSSI();
wifi_info[F("rssi")] = qrssi;
wifi_info[F("signal")] = getSignalQuality(qrssi);
wifi_info[F("channel")] = WiFi.channel();
JsonObject fs_info = root.createNestedObject("fs");
#ifdef ARDUINO_ARCH_ESP32
size_t used, total;
esp_spiffs_info(nullptr, &total, &used);
fs_info["u"] = used;
fs_info["t"] = total;
#else
FSInfo fsi;
WLED_FS.info(fsi);
fs_info["u"] = fsi.usedBytes;
fs_info["t"] = fsi.totalBytes;
#endif
fs_info["u"] = fsBytesUsed / 1000;
fs_info["t"] = fsBytesTotal / 1000;
fs_info[F("pmt")] = presetsModifiedTime;
#ifdef ARDUINO_ARCH_ESP32

View File

@ -188,6 +188,7 @@ void WLED::setup()
DEBUGFS_PRINTLN(F("FS failed!"));
errorFlag = ERR_FS_BEGIN;
}
updateFSInfo();
#endif
DEBUG_PRINTLN(F("Load EEPROM"));

View File

@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2010020
#define VERSION 2010030
// ESP8266-01 (blue) got too little storage space to work with WLED. 0.10.2 is the last release supporting this unit.
@ -157,8 +157,8 @@
#endif
// Global Variable definitions
WLED_GLOBAL char versionString[] _INIT("0.10.2");
#define WLED_CODENAME "Fumikiri"
WLED_GLOBAL char versionString[] _INIT("0.11.0p");
#define WLED_CODENAME "Mirai"
// AP and OTA default passwords (for maximum security change them!)
WLED_GLOBAL char apPass[65] _INIT(DEFAULT_AP_PASS);
@ -472,13 +472,16 @@ WLED_GLOBAL uint16_t rolloverMillis _INIT(0);
WLED_GLOBAL char* obuf;
WLED_GLOBAL uint16_t olen _INIT(0);
// General filesystem
WLED_GLOBAL size_t fsBytesUsed _INIT(0);
WLED_GLOBAL size_t fsBytesTotal _INIT(0);
WLED_GLOBAL unsigned long presetsModifiedTime _INIT(0L);
// presets
WLED_GLOBAL uint16_t savedPresets _INIT(0);
WLED_GLOBAL int16_t currentPreset _INIT(-1);
WLED_GLOBAL bool isPreset _INIT(false);
WLED_GLOBAL unsigned long presetsModifiedTime _INIT(0L);
WLED_GLOBAL byte errorFlag _INIT(0);
WLED_GLOBAL String messageHead, messageSub;

View File

@ -702,9 +702,10 @@ void savePreset(byte index, bool persist, const char* pname, byte priority, Json
writeObjectToFileUsingId("/presets.json", index, &doc);
presetsModifiedTime = now(); //unix time
updateFSInfo();
return;
if (index > 16) return;
/*if (index > 16) return;
if (index < 1) {saveSettingsToEEPROM();return;}
uint16_t i = 380 + index*20;//min400
@ -737,13 +738,14 @@ void savePreset(byte index, bool persist, const char* pname, byte priority, Json
if (persist) commit();
savedToPresets();
currentPreset = index;
isPreset = true;
isPreset = true;*/
}
void deletePreset(byte index) {
StaticJsonDocument<24> empty;
writeObjectToFileUsingId("/presets.json", index, &empty);
presetsModifiedTime = now(); //unix time
updateFSInfo();
}