23#if defined(FL_IS_ESP32)
39static esp_netif_t* s_ota_netif_ap =
nullptr;
40static bool s_ota_event_loop_initialized =
false;
41static bool s_ota_wifi_initialized =
false;
47static bool initOtaWifiAP() {
53 esp_err_t err = esp_netif_init();
54 if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
55 FL_WARN(
"[OTA] esp_netif_init failed: " << esp_err_to_name(err));
60 if (!s_ota_event_loop_initialized) {
61 err = esp_event_loop_create_default();
62 if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
63 FL_WARN(
"[OTA] esp_event_loop_create_default failed: " << esp_err_to_name(err));
66 s_ota_event_loop_initialized =
true;
70 if (!s_ota_netif_ap) {
71 s_ota_netif_ap = esp_netif_create_default_wifi_ap();
72 if (!s_ota_netif_ap) {
73 FL_WARN(
"[OTA] esp_netif_create_default_wifi_ap failed");
79 if (!s_ota_wifi_initialized) {
80 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
81 err = esp_wifi_init(&cfg);
82 if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
83 FL_WARN(
"[OTA] esp_wifi_init failed: " << esp_err_to_name(err));
86 s_ota_wifi_initialized =
true;
90 wifi_config_t wifi_config = {};
94 wifi_config.ap.max_connection = 4;
95 wifi_config.ap.authmode = WIFI_AUTH_WPA2_PSK;
96 wifi_config.ap.channel = 1;
98 err = esp_wifi_set_mode(WIFI_MODE_AP);
100 FL_WARN(
"[OTA] esp_wifi_set_mode failed: " << esp_err_to_name(err));
104 err = esp_wifi_set_config(WIFI_IF_AP, &wifi_config);
106 FL_WARN(
"[OTA] esp_wifi_set_config failed: " << esp_err_to_name(err));
110 err = esp_wifi_start();
112 FL_WARN(
"[OTA] esp_wifi_start failed: " << esp_err_to_name(err));
129 if (!initOtaWifiAP()) {
131 response.set(
"error",
"Failed to start WiFi AP for OTA");
139 response.set(
"error",
"Failed to start OTA server");
164 FL_WARN(
"[OTA] OTA server stopped");
171 FL_WARN(
"[OTA] WiFi AP stopped");
186 response.set(
"success",
false);
187 response.set(
"error",
"OTA autoresearch only supported on ESP32");
193 response.set(
"success",
true);
AutoResearchOtaState & getOtaState()
Get current OTA autoresearch state.
fl::json stopOta()
Stop OTA server and WiFi AP, release all resources.
static AutoResearchOtaState s_ota_state
fl::json startOta()
Start WiFi Soft AP and OTA HTTP server.
#define AUTORESEARCH_OTA_HOSTNAME
#define AUTORESEARCH_OTA_PASSWORD
#define AUTORESEARCH_OTA_SSID
#define AUTORESEARCH_OTA_AP_IP
#define AUTORESEARCH_OTA_PORT
#define AUTORESEARCH_OTA_OTA_PASSWORD
State for OTA autoresearch.
static json object() FL_NOEXCEPT
pointer get() const FL_NOEXCEPT
void reset(pointer p=nullptr) FL_NOEXCEPT
FastLED's Elegant JSON Library: fl::json
Centralized logging categories for FastLED hardware interfaces and subsystems.
void * memcpy(void *dest, const void *src, size_t n) FL_NOEXCEPT
size_t strlen(const char *s) FL_NOEXCEPT
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type make_unique(Args &&... args) FL_NOEXCEPT
Minimal, batteries-included OTA (Over-The-Air) update system for ESP32.