#pragma once #ifdef WITH_MQTT #include #include #include "INetworkManager.h" // WiFi connection states (legacy, maps to NetworkState) enum class WiFiState { DISCONNECTED, CONNECTING, CONNECTED, AP_MODE }; // Configuration for WiFi manager struct WiFiConfig { char ssid[33]; char password[65]; char ap_ssid[33]; // Fallback AP SSID char ap_password[65]; // Fallback AP password (min 8 chars or empty for open) uint32_t connect_timeout_ms; uint32_t reconnect_interval_ms; uint8_t max_retries; }; class WiFiManager : public INetworkManager { public: WiFiManager(); // Initialize WiFi with configuration void begin(const WiFiConfig& config); // INetworkManager interface void loop() override; void end() override; NetworkState getState() const override; bool isConnected() const override { return _state == WiFiState::CONNECTED; } IPAddress getLocalIP() const override; String getMacAddress() const override; int32_t getRSSI() const override; const char* getConnectionName() const override; void reconnect() override; uint32_t getConnectionUptime() const override; const char* getNetworkType() const override { return "WiFi"; } // WiFi-specific methods WiFiState getWiFiState() const { return _state; } bool isAPMode() const { return _state == WiFiState::AP_MODE; } const char* getSSID() const; void startAPMode(); void startStationMode(); uint8_t getRetryCount() const { return _retry_count; } private: WiFiConfig _config; WiFiState _state; unsigned long _connect_start_time; unsigned long _last_connect_attempt; unsigned long _connected_since; uint8_t _retry_count; bool _initialized; void attemptConnection(); void checkConnection(); String generateAPSSID(); }; #endif // WITH_MQTT