Skip to content

Commit

Permalink
feat: Fix AsyncWebServer dependency (#85)
Browse files Browse the repository at this point in the history
* Fix AsyncWebServer dependency

* Add -DARDUINO_USB_CDC_ON_BOOT=1 to wroom boards to fix wifi provisioning over serial
  • Loading branch information
lorow authored Jan 28, 2025
1 parent ebecc61 commit 42c3311
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 66 deletions.
8 changes: 6 additions & 2 deletions ESP/ini/boards.ini
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ build_type = debug
build_flags = ${env.build_flags}
-DCORE_DEBUG_LEVEL=4
-DDEBUG_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1
-DSERIAL_MANAGER_USE_HIGHER_FREQUENCY
${pinoutsESPS3WROVER.build_flags}
upload_flags = --no-stub
Expand All @@ -114,6 +115,7 @@ build_type = release
build_flags = ${env.build_flags}
-DDEBUG_MODE=0
-DCORE_DEBUG_LEVEL=1
-DARDUINO_USB_CDC_ON_BOOT=1
-DSERIAL_MANAGER_USE_HIGHER_FREQUENCY
${pinoutsESPS3WROVER.build_flags}
upload_flags = --no-stub
Expand Down Expand Up @@ -150,6 +152,7 @@ build_type = debug
build_flags = ${env.build_flags}
-DCORE_DEBUG_LEVEL=4
-DDEBUG_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1
-DSERIAL_MANAGER_USE_HIGHER_FREQUENCY
${pinoutsESPS3WROOM.build_flags}

Expand All @@ -159,6 +162,7 @@ build_type = release
build_flags = ${env.build_flags}
-DDEBUG_MODE=0
-DCORE_DEBUG_LEVEL=1
-DARDUINO_USB_CDC_ON_BOOT=1
-DSERIAL_MANAGER_USE_HIGHER_FREQUENCY
${pinoutsESPS3WROOM.build_flags}

Expand Down Expand Up @@ -199,6 +203,7 @@ build_type = debug
build_flags = ${env.build_flags}
-DCORE_DEBUG_LEVEL=4
-DDEBUG_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1
-DSERIAL_MANAGER_USE_HIGHER_FREQUENCY
${pinoutSWROOMBABBLES3.build_flags}
upload_flags = --no-stub
Expand All @@ -214,6 +219,7 @@ build_type = debug
build_flags = ${env.build_flags}
-DCORE_DEBUG_LEVEL=1
-DDEBUG_MODE=0
-DARDUINO_USB_CDC_ON_BOOT=1
-DSERIAL_MANAGER_USE_HIGHER_FREQUENCY
${pinoutSWROOMBABBLES3.build_flags}
upload_flags = --no-stub
Expand Down Expand Up @@ -261,8 +267,6 @@ build_type = debug
build_flags = ${env.build_flags}
-DCORE_DEBUG_LEVEL=4
-DDEBUG_MODE=1
#-DARDUINO_USB_MODE=1
#-DARDUINO_USB_CDC_ON_BOOT=1
-DSERIAL_MANAGER_USE_HIGHER_FREQUENCY
${pinoutsESPS3XIAOSENSE.build_flags}

Expand Down
4 changes: 2 additions & 2 deletions ESP/ini/dev_config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ monitor_filters =
esp32_exception_decoder
board_build.partitions = min_spiffs.csv
;build_unflags = -Os ; disable optimization for size
lib_compat_mode = strict
lib_ldf_mode = deep+
;115200 is used for compatability - if you are on windows and want the code to flash faster use 921600
upload_speed = 921600
lib_deps =
# https://github.com/espressif/esp32-camera
esp32-camera
https://github.com/me-no-dev/ESPAsyncWebServer.git
https://github.com/me-no-dev/AsyncTCP.git
ESP32Async/ESPAsyncWebServer @ 3.6.0
https://github.com/bblanchon/ArduinoJson.git
extra_scripts =
pre:tools/customname.py
Expand Down
31 changes: 6 additions & 25 deletions ESP/lib/src/network/api/baseAPI/baseAPI.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
#include "baseAPI.hpp"

//! These have to be called before the constructor of the class because they are
//! static C++ 11 does not have inline variables, sadly. So we have to do this.
// const char *BaseAPI::MIMETYPE_HTML{"text/html"};
// const char *BaseAPI::MIMETYPE_CSS{"text/css"};
// const char *BaseAPI::MIMETYPE_JS{"application/javascript"};
// const char *BaseAPI::MIMETYPE_PNG{"image/png"};
// const char *BaseAPI::MIMETYPE_JPG{"image/jpeg"};
// const char *BaseAPI::MIMETYPE_ICO{"image/x-icon"};
const char* BaseAPI::MIMETYPE_JSON{"application/json"};

BaseAPI::BaseAPI(ProjectConfig& projectConfig,
Expand Down Expand Up @@ -79,7 +71,7 @@ void BaseAPI::setWiFi(AsyncWebServerRequest* request) {

log_d("Number of Params: %d", params);
for (int i = 0; i < params; i++) {
AsyncWebParameter* param = request->getParam(i);
const AsyncWebParameter* param = request->getParam(i);
if (param->name() == "networkName") {
networkName.assign(param->value().c_str());
} else if (param->name() == "ssid") {
Expand All @@ -102,17 +94,6 @@ void BaseAPI::setWiFi(AsyncWebServerRequest* request) {
projectConfig.setWifiConfig(networkName, ssid, password, channel, power,
adhoc, true);

/* if (WiFiStateManager->getCurrentState() ==
WiFiState_e::WiFiState_ADHOC)
{
projectConfig.setAPWifiConfig(ssid, password, &channel, adhoc,
true);
}
else
{
} */

request->send(200, MIMETYPE_JSON,
"{\"msg\":\"Done. Wifi Creds have been set.\"}");
break;
Expand Down Expand Up @@ -178,7 +159,7 @@ void BaseAPI::setDeviceConfig(AsyncWebServerRequest* request) {
int ota_port;

for (int i = 0; i < params; i++) {
AsyncWebParameter* param = request->getParam(i);
const AsyncWebParameter* param = request->getParam(i);
if (param->name() == "hostname") {
std::string result = param->value().c_str();

Expand Down Expand Up @@ -216,7 +197,7 @@ void BaseAPI::setWiFiTXPower(AsyncWebServerRequest* request) {
uint8_t txPower = 0;

for (int i = 0; i < params; i++) {
AsyncWebParameter* param = request->getParam(i);
const AsyncWebParameter* param = request->getParam(i);
if (param->name() == "txpower" || param->name() == "txPower") {
txPower = atoi(param->value().c_str());
}
Expand Down Expand Up @@ -275,7 +256,7 @@ void BaseAPI::setCamera(AsyncWebServerRequest* request) {
//! be set in a specific order This means the order of the URL params does
//! not matter
for (int i = 0; i < params; i++) {
AsyncWebParameter* param = request->getParam(i);
const AsyncWebParameter* param = request->getParam(i);
if (param->name() == "framesize") {
temp_camera_framesize = (uint8_t)param->value().toInt();
} else if (param->name() == "vflip") {
Expand Down Expand Up @@ -392,7 +373,6 @@ void BaseAPI::beginOTA() {
"{\"id\": \"" + _id + "\", \"hardware\": \"ESP32\"}");
});

// Note: HTT_GET
server.on("/update", 0b00000001, [&](AsyncWebServerRequest* request) {
log_d("[DEBUG] Free Heap: %d", ESP.getFreeHeap());
checkAuthentication(request, login, password);
Expand All @@ -406,7 +386,8 @@ void BaseAPI::beginOTA() {
response->addHeader("Content-Encoding", "gzip");
request->send(response);
});
// Note: HTT_POST

// HTTP_POST
server.on(
"/update", 0b00000010,
[&](AsyncWebServerRequest* request) {
Expand Down
64 changes: 27 additions & 37 deletions ESP/lib/src/network/api/baseAPI/baseAPI.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,55 +3,44 @@

//! Warning do not format this file with clang-format or it will break the code

#include <unordered_map>
#include <string>
#include <unordered_map>

#include <stdlib_noniso.h>

#define WEBSERVER_H

/* #define XHTTP_GET 0b00000001;
#define XHTTP_POST 0b00000010;
#define XHTTP_DELETE 0b00000100;
#define XHTTP_PUT 0b00001000;
#define XHTTP_PATCH 0b00010000;
#define XHTTP_HEAD 0b00100000;
#define XHTTP_OPTIONS 0b01000000;
#define XHTTP_ANY 0b01111111; */
// hack, we have to include it JUST so the macro executes and defines HTTP_*
// methods cause it's beging included later in streamServer.hpp, but then the
// macro executes too late and tries to redefine the methods, failing. but if we
// don't include it here, then ESPAsyncWebServer fails to compile due to
// WEBSERVER_H which has to be set because if it isn't, ESPAsyncWebServer will
// define the methods and thus the circus continues
#include <http_parser.h>

// constexpr int HTTP_GET = 0b00000001;
constexpr int HTTP_ANY = 0b01111111;

#include <Update.h>
#include <esp_int_wdt.h>
#include <esp_task_wdt.h>

#include <AsyncTCP.h>

#include <ESPAsyncWebServer.h>
#include <FS.h>
#include "Hash.h"

#include "data/utilities/network_utilities.hpp"
#include "tasks/tasks.hpp"

#include "data/StateManager/StateManager.hpp"
#include "data/config/project_config.hpp"
#include "data/utilities/network_utilities.hpp"
#include "elegantWebpage.h"
#include "io/camera/cameraHandler.hpp"
#include "tasks/tasks.hpp"

class BaseAPI {
protected:
std::string api_url;
bool _authRequired;

static const char* MIMETYPE_HTML;
/* static const char *MIMETYPE_CSS; */
/* static const char *MIMETYPE_JS; */
/* static const char *MIMETYPE_PNG; */
/* static const char *MIMETYPE_JPG; */
/* static const char *MIMETYPE_ICO; */
static const char* MIMETYPE_JSON;

protected:
Expand Down Expand Up @@ -100,33 +89,34 @@ class BaseAPI {
typedef std::unordered_map<std::string, WebRequestMethodComposite>
networkMethodsMap_t;

ProjectConfig &projectConfig;
/// @brief Local instance of the AsyncWebServer - so that we dont need to use new and delete
AsyncWebServer server;
ProjectConfig& projectConfig;
/// @brief Local instance of the AsyncWebServer - so that we dont need to use
/// new and delete
AsyncWebServer server;
#ifndef SIM_ENABLED
CameraHandler &camera;
CameraHandler& camera;
#endif // SIM_ENABLED

public :
BaseAPI(ProjectConfig& projectConfig,
public:
BaseAPI(ProjectConfig& projectConfig,
#ifndef SIM_ENABLED
CameraHandler& camera,
CameraHandler& camera,
#endif // SIM_ENABLED
const std::string& api_url,
const std::string& api_url,
#ifndef SIM_ENABLED
int port = 81
int port = 81
#else
int port = 80
int port = 80
#endif
);

virtual ~BaseAPI();
virtual void begin();
void checkAuthentication(AsyncWebServerRequest* request,
const char* login,
const char* password);
void beginOTA();
void notFound(AsyncWebServerRequest* request) const;
virtual ~BaseAPI();
virtual void begin();
void checkAuthentication(AsyncWebServerRequest* request,
const char* login,
const char* password);
void beginOTA();
void notFound(AsyncWebServerRequest* request) const;
};

#endif // BASEAPI_HPP

0 comments on commit 42c3311

Please sign in to comment.