refactor: memory optimization for esp8266

This commit is contained in:
Yurii
2024-11-11 02:41:39 +03:00
parent 6a9bd9673a
commit fda18cdb13
17 changed files with 1044 additions and 788 deletions

View File

@@ -10,7 +10,8 @@ public:
free(this->buffer);
}
void send(int code, const char* contentType, const JsonVariantConst content, bool pretty = false) {
template <class T>
void send(int code, T contentType, const JsonVariantConst content, bool pretty = false) {
#ifdef ARDUINO_ARCH_ESP8266
if (!this->webServer->chunkedResponseModeStart(code, contentType)) {
this->webServer->send(505, F("text/html"), F("HTTP1.1 required"));

View File

@@ -110,7 +110,7 @@ public:
topic.concat(this->devicePrefix);
topic.concat(nameSeparator);
topic.concat(name);
topic.concat("/config");
topic.concat(F("/config"));
return topic;
}

View File

@@ -37,11 +37,13 @@ const char HA_DEVICE_CLASS[] PROGMEM = "device_class";
const char HA_UNIT_OF_MEASUREMENT[] PROGMEM = "unit_of_measurement";
const char HA_UNIT_OF_MEASUREMENT_C[] PROGMEM = "°C";
const char HA_UNIT_OF_MEASUREMENT_F[] PROGMEM = "°F";
const char HA_UNIT_OF_MEASUREMENT_PERCENT[] PROGMEM = "%";
const char HA_ICON[] PROGMEM = "icon";
const char HA_MIN[] PROGMEM = "min";
const char HA_MAX[] PROGMEM = "max";
const char HA_STEP[] PROGMEM = "step";
const char HA_MODE[] PROGMEM = "mode";
const char HA_MODE_BOX[] PROGMEM = "box";
const char HA_STATE_ON[] PROGMEM = "state_on";
const char HA_STATE_OFF[] PROGMEM = "state_off";
const char HA_PAYLOAD_ON[] PROGMEM = "payload_on";

View File

@@ -61,7 +61,7 @@ public:
}
if (this->cacheHeader != nullptr) {
server.sendHeader("Cache-Control", this->cacheHeader);
server.sendHeader(F("Cache-Control"), this->cacheHeader);
}
#ifdef ARDUINO_ARCH_ESP8266

View File

@@ -8,7 +8,8 @@ public:
typedef std::function<bool(HTTPMethod, const String&)> CanHandleCallback;
typedef std::function<bool()> BeforeSendCallback;
StaticPage(const char* uri, FS* fs, const char* path, const char* cacheHeader = nullptr) {
template <class T>
StaticPage(const char* uri, FS* fs, T path, const char* cacheHeader = nullptr) {
this->uri = uri;
this->fs = fs;
this->path = path;
@@ -55,7 +56,7 @@ public:
this->eTag = esp8266webserver::calcETag(*this->fs, this->path);
}
if (server.header("If-None-Match").equals(this->eTag.c_str())) {
if (server.header(F("If-None-Match")).equals(this->eTag.c_str())) {
server.send(304);
return true;
}
@@ -80,12 +81,12 @@ public:
}
if (this->cacheHeader != nullptr) {
server.sendHeader("Cache-Control", this->cacheHeader);
server.sendHeader(F("Cache-Control"), this->cacheHeader);
}
#if defined(ARDUINO_ARCH_ESP8266)
if (server._eTagEnabled && this->eTag.length() > 0) {
server.sendHeader("ETag", this->eTag);
server.sendHeader(F("ETag"), this->eTag);
}
server.streamFile(file, F("text/html"), method);

View File

@@ -93,10 +93,12 @@ public:
void upload(WebServer& server, const String& uri, HTTPUpload& upload) override {
UpgradeResult* result;
if (upload.name.equals("firmware")) {
if (upload.name.equals(F("firmware"))) {
result = &this->firmwareResult;
} else if (upload.name.equals("filesystem")) {
} else if (upload.name.equals(F("filesystem"))) {
result = &this->filesystemResult;
} else {
return;
}