#pragma once #include "NodeContext.h" #include #include struct AccessPoint { String ssid; int32_t rssi; uint8_t encryptionType; uint8_t* bssid; int32_t channel; bool isHidden; }; class NetworkManager { public: NetworkManager(NodeContext& ctx); void setupWiFi(); void setHostnameFromMac(); // WiFi scanning methods void scanWifi(); void processAccessPoints(); std::vector getAccessPoints() const; // WiFi configuration methods void setWiFiConfig(const String& ssid, const String& password, uint32_t connect_timeout_ms = 10000, uint32_t retry_delay_ms = 500); // Network status methods bool isConnected() const { return WiFi.isConnected(); } String getSSID() const { return WiFi.SSID(); } IPAddress getLocalIP() const { return WiFi.localIP(); } String getMacAddress() const { return WiFi.macAddress(); } String getHostname() const { return WiFi.hostname(); } int32_t getRSSI() const { return WiFi.RSSI(); } WiFiMode_t getMode() const { return WiFi.getMode(); } // AP mode specific methods IPAddress getAPIP() const { return WiFi.softAPIP(); } String getAPMacAddress() const { return WiFi.softAPmacAddress(); } uint8_t getConnectedStations() const { return WiFi.softAPgetStationNum(); } private: NodeContext& ctx; std::vector accessPoints; bool isScanning = false; };