mirror of
https://github.com/esphome/esphome.git
synced 2025-10-07 04:13:47 +01:00
always use idf webserver on esp32
This commit is contained in:
@@ -9,13 +9,12 @@
|
||||
namespace esphome {
|
||||
namespace web_server {
|
||||
|
||||
#ifdef USE_ARDUINO
|
||||
#ifdef USE_ESP32
|
||||
ListEntitiesIterator::ListEntitiesIterator(const WebServer *ws, AsyncEventSource *es) : web_server_(ws), events_(es) {}
|
||||
#elif USE_ARDUINO
|
||||
ListEntitiesIterator::ListEntitiesIterator(const WebServer *ws, DeferredUpdateEventSource *es)
|
||||
: web_server_(ws), events_(es) {}
|
||||
#endif
|
||||
#ifdef USE_ESP_IDF
|
||||
ListEntitiesIterator::ListEntitiesIterator(const WebServer *ws, AsyncEventSource *es) : web_server_(ws), events_(es) {}
|
||||
#endif
|
||||
ListEntitiesIterator::~ListEntitiesIterator() {}
|
||||
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
|
@@ -5,25 +5,24 @@
|
||||
#include "esphome/core/component.h"
|
||||
#include "esphome/core/component_iterator.h"
|
||||
namespace esphome {
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
namespace web_server_idf {
|
||||
class AsyncEventSource;
|
||||
}
|
||||
#endif
|
||||
namespace web_server {
|
||||
|
||||
#ifdef USE_ARDUINO
|
||||
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||
class DeferredUpdateEventSource;
|
||||
#endif
|
||||
class WebServer;
|
||||
|
||||
class ListEntitiesIterator : public ComponentIterator {
|
||||
public:
|
||||
#ifdef USE_ARDUINO
|
||||
ListEntitiesIterator(const WebServer *ws, DeferredUpdateEventSource *es);
|
||||
#endif
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
ListEntitiesIterator(const WebServer *ws, esphome::web_server_idf::AsyncEventSource *es);
|
||||
#elif defined(USE_ARDUINO)
|
||||
ListEntitiesIterator(const WebServer *ws, DeferredUpdateEventSource *es);
|
||||
#endif
|
||||
virtual ~ListEntitiesIterator();
|
||||
#ifdef USE_BINARY_SENSOR
|
||||
@@ -90,11 +89,10 @@ class ListEntitiesIterator : public ComponentIterator {
|
||||
|
||||
protected:
|
||||
const WebServer *web_server_;
|
||||
#ifdef USE_ARDUINO
|
||||
DeferredUpdateEventSource *events_;
|
||||
#endif
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
esphome::web_server_idf::AsyncEventSource *events_;
|
||||
#elif USE_ARDUINO
|
||||
DeferredUpdateEventSource *events_;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -29,5 +29,5 @@ async def to_code(config):
|
||||
await ota_to_code(var, config)
|
||||
await cg.register_component(var, config)
|
||||
cg.add_define("USE_WEBSERVER_OTA")
|
||||
if CORE.using_esp_idf:
|
||||
if CORE.is_esp32:
|
||||
add_idf_component(name="zorxx/multipart-parser", ref="1.0.1")
|
||||
|
@@ -17,6 +17,12 @@
|
||||
#endif
|
||||
#endif // USE_ARDUINO
|
||||
|
||||
#if USE_ESP32
|
||||
using PlatformString = std::string;
|
||||
#elif USE_ARDUINO
|
||||
using PlatformString = String;
|
||||
#endif
|
||||
|
||||
namespace esphome {
|
||||
namespace web_server {
|
||||
|
||||
@@ -26,8 +32,8 @@ class OTARequestHandler : public AsyncWebHandler {
|
||||
public:
|
||||
OTARequestHandler(WebServerOTAComponent *parent) : parent_(parent) {}
|
||||
void handleRequest(AsyncWebServerRequest *request) override;
|
||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
||||
bool final) override;
|
||||
void handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index, uint8_t *data,
|
||||
size_t len, bool final) override;
|
||||
bool canHandle(AsyncWebServerRequest *request) const override {
|
||||
// Check if this is an OTA update request
|
||||
bool is_ota_request = request->url() == "/update" && request->method() == HTTP_POST;
|
||||
@@ -100,7 +106,7 @@ void OTARequestHandler::ota_init_(const char *filename) {
|
||||
this->ota_success_ = false;
|
||||
}
|
||||
|
||||
void OTARequestHandler::handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index,
|
||||
void OTARequestHandler::handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index,
|
||||
uint8_t *data, size_t len, bool final) {
|
||||
ota::OTAResponseTypes error_code = ota::OTA_RESPONSE_OK;
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
#include "esphome/core/log.h"
|
||||
#include "esphome/core/util.h"
|
||||
|
||||
#ifdef USE_ARDUINO
|
||||
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||
#include "StreamString.h"
|
||||
#endif
|
||||
|
||||
@@ -103,7 +103,7 @@ static UrlMatch match_url(const char *url_ptr, size_t url_len, bool only_domain)
|
||||
return match;
|
||||
}
|
||||
|
||||
#ifdef USE_ARDUINO
|
||||
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||
// helper for allowing only unique entries in the queue
|
||||
void DeferredUpdateEventSource::deq_push_back_with_dedup_(void *source, message_generator_t *message_generator) {
|
||||
DeferredEvent item(source, message_generator);
|
||||
@@ -297,7 +297,7 @@ void WebServer::setup() {
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
this->base_->add_handler(&this->events_);
|
||||
#endif
|
||||
this->base_->add_handler(this);
|
||||
@@ -1770,15 +1770,15 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) const {
|
||||
|
||||
// Static URL checks
|
||||
static const char *const STATIC_URLS[] = {
|
||||
"/",
|
||||
#ifdef USE_ARDUINO
|
||||
"/events",
|
||||
"/",
|
||||
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||
"/events",
|
||||
#endif
|
||||
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||
"/0.css",
|
||||
"/0.css",
|
||||
#endif
|
||||
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||
"/0.js",
|
||||
"/0.js",
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -1899,7 +1899,7 @@ void WebServer::handleRequest(AsyncWebServerRequest *request) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef USE_ARDUINO
|
||||
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||
if (url == "/events") {
|
||||
this->events_.add_new_client(this, request);
|
||||
return;
|
||||
|
@@ -81,7 +81,7 @@ enum JsonDetail { DETAIL_ALL, DETAIL_STATE };
|
||||
implemented in a more straightforward way for ESP-IDF. Arduino platform will eventually go away and this workaround
|
||||
can be forgotten.
|
||||
*/
|
||||
#ifdef USE_ARDUINO
|
||||
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||
using message_generator_t = std::string(WebServer *, void *);
|
||||
|
||||
class DeferredUpdateEventSourceList;
|
||||
@@ -164,7 +164,7 @@ class DeferredUpdateEventSourceList : public std::list<DeferredUpdateEventSource
|
||||
* can be found under https://esphome.io/web-api/index.html.
|
||||
*/
|
||||
class WebServer : public Controller, public Component, public AsyncWebHandler {
|
||||
#ifdef USE_ARDUINO
|
||||
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||
friend class DeferredUpdateEventSourceList;
|
||||
#endif
|
||||
|
||||
@@ -559,11 +559,10 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
||||
}
|
||||
|
||||
web_server_base::WebServerBase *base_;
|
||||
#ifdef USE_ARDUINO
|
||||
DeferredUpdateEventSourceList events_;
|
||||
#endif
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
AsyncEventSource events_{"/events", this};
|
||||
#elif USE_ARDUINO
|
||||
DeferredUpdateEventSourceList events_;
|
||||
#endif
|
||||
|
||||
#if USE_WEBSERVER_VERSION == 1
|
||||
|
@@ -9,10 +9,10 @@ DEPENDENCIES = ["network"]
|
||||
|
||||
|
||||
def AUTO_LOAD():
|
||||
if CORE.is_esp32:
|
||||
return ["web_server_idf"]
|
||||
if CORE.using_arduino:
|
||||
return ["async_tcp"]
|
||||
if CORE.using_esp_idf:
|
||||
return ["web_server_idf"]
|
||||
return []
|
||||
|
||||
|
||||
@@ -33,6 +33,9 @@ async def to_code(config):
|
||||
await cg.register_component(var, config)
|
||||
cg.add(cg.RawExpression(f"{web_server_base_ns}::global_web_server_base = {var}"))
|
||||
|
||||
if CORE.is_esp32:
|
||||
return
|
||||
|
||||
if CORE.using_arduino:
|
||||
if CORE.is_esp32:
|
||||
cg.add_library("WiFi", None)
|
||||
|
@@ -7,11 +7,17 @@
|
||||
|
||||
#include "esphome/core/component.h"
|
||||
|
||||
#ifdef USE_ARDUINO
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#elif USE_ESP_IDF
|
||||
#if USE_ESP32
|
||||
#include "esphome/core/hal.h"
|
||||
#include "esphome/components/web_server_idf/web_server_idf.h"
|
||||
#elif USE_ARDUINO
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#endif
|
||||
|
||||
#if USE_ESP32
|
||||
using PlatformString = std::string;
|
||||
#elif USE_ARDUINO
|
||||
using PlatformString = String;
|
||||
#endif
|
||||
|
||||
namespace esphome {
|
||||
@@ -28,8 +34,8 @@ class MiddlewareHandler : public AsyncWebHandler {
|
||||
|
||||
bool canHandle(AsyncWebServerRequest *request) const override { return next_->canHandle(request); }
|
||||
void handleRequest(AsyncWebServerRequest *request) override { next_->handleRequest(request); }
|
||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
||||
bool final) override {
|
||||
void handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index, uint8_t *data,
|
||||
size_t len, bool final) override {
|
||||
next_->handleUpload(request, filename, index, data, len, final);
|
||||
}
|
||||
void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) override {
|
||||
@@ -65,8 +71,8 @@ class AuthMiddlewareHandler : public MiddlewareHandler {
|
||||
return;
|
||||
MiddlewareHandler::handleRequest(request);
|
||||
}
|
||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
||||
bool final) override {
|
||||
void handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index, uint8_t *data,
|
||||
size_t len, bool final) override {
|
||||
if (!check_auth(request))
|
||||
return;
|
||||
MiddlewareHandler::handleUpload(request, filename, index, data, len, final);
|
||||
|
@@ -5,7 +5,7 @@ CODEOWNERS = ["@dentra"]
|
||||
|
||||
CONFIG_SCHEMA = cv.All(
|
||||
cv.Schema({}),
|
||||
cv.only_with_esp_idf,
|
||||
cv.only_on_esp32,
|
||||
)
|
||||
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#include "esphome/core/defines.h"
|
||||
#if defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
||||
#if defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||
#include "multipart.h"
|
||||
#include "utils.h"
|
||||
#include "esphome/core/log.h"
|
||||
@@ -251,4 +251,4 @@ std::string str_trim(const std::string &str) {
|
||||
|
||||
} // namespace web_server_idf
|
||||
} // namespace esphome
|
||||
#endif // defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
||||
#endif // defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
#include "esphome/core/defines.h"
|
||||
#if defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
||||
#if defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
@@ -83,4 +83,4 @@ std::string str_trim(const std::string &str);
|
||||
|
||||
} // namespace web_server_idf
|
||||
} // namespace esphome
|
||||
#endif // defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
||||
#endif // defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
#include <memory>
|
||||
#include <cstring>
|
||||
#include <cctype>
|
||||
@@ -122,4 +122,4 @@ const char *stristr(const char *haystack, const char *needle) {
|
||||
|
||||
} // namespace web_server_idf
|
||||
} // namespace esphome
|
||||
#endif // USE_ESP_IDF
|
||||
#endif // USE_ESP32
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#pragma once
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
|
||||
#include <esp_http_server.h>
|
||||
#include <string>
|
||||
@@ -24,4 +24,4 @@ const char *stristr(const char *haystack, const char *needle);
|
||||
|
||||
} // namespace web_server_idf
|
||||
} // namespace esphome
|
||||
#endif // USE_ESP_IDF
|
||||
#endif // USE_ESP32
|
||||
|
@@ -1,4 +1,4 @@
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
|
||||
#include <cstdarg>
|
||||
#include <memory>
|
||||
@@ -670,4 +670,4 @@ esp_err_t AsyncWebServer::handle_multipart_upload_(httpd_req_t *r, const char *c
|
||||
} // namespace web_server_idf
|
||||
} // namespace esphome
|
||||
|
||||
#endif // !defined(USE_ESP_IDF)
|
||||
#endif // !defined(USE_ESP32)
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#pragma once
|
||||
#ifdef USE_ESP_IDF
|
||||
#ifdef USE_ESP32
|
||||
|
||||
#include "esphome/core/defines.h"
|
||||
#include <esp_http_server.h>
|
||||
@@ -22,11 +22,12 @@ class ListEntitiesIterator;
|
||||
#endif
|
||||
namespace web_server_idf {
|
||||
|
||||
#ifndef USE_ARDUINO
|
||||
using String = std::string;
|
||||
#define F(string_literal) (string_literal)
|
||||
#define PGM_P const char *
|
||||
#define strncpy_P strncpy
|
||||
|
||||
using String = std::string;
|
||||
#endif
|
||||
|
||||
class AsyncWebParameter {
|
||||
public:
|
||||
@@ -341,4 +342,4 @@ class DefaultHeaders {
|
||||
|
||||
using namespace esphome::web_server_idf; // NOLINT(google-global-names-in-headers)
|
||||
|
||||
#endif // !defined(USE_ESP_IDF)
|
||||
#endif // !defined(USE_ESP32)
|
||||
|
Reference in New Issue
Block a user