Files
UtilitechAS.amsreader-firmware/lib/ConnectionHandler/src/WiFiAccessPointConnectionHandler.cpp
2024-06-07 18:48:26 +02:00

122 lines
3.5 KiB
C++

/**
* @copyright Utilitech AS 2023
* License: Fair Source
*
*/
#include "WiFiAccessPointConnectionHandler.h"
#if defined(AMS_REMOTE_DEBUG)
WiFiAccessPointConnectionHandler::WiFiAccessPointConnectionHandler(RemoteDebug* debugger) {
#else
WiFiAccessPointConnectionHandler::WiFiAccessPointConnectionHandler(Stream* debugger) {
#endif
this->debugger = debugger;
this->mode = NETWORK_MODE_WIFI_AP;
}
bool WiFiAccessPointConnectionHandler::connect(NetworkConfig config, SystemConfig sys) {
//wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, 0); // Disable default gw
WiFi.mode(WIFI_AP);
WiFi.softAP(config.ssid, config.psk);
dnsServer.setErrorReplyCode(DNSReplyCode::NoError);
dnsServer.start(53, PSTR("*"), WiFi.softAPIP());
connected = true;
return true;
}
void WiFiAccessPointConnectionHandler::disconnect(unsigned long reconnectDelay) {
WiFi.disconnect(true);
WiFi.softAPdisconnect(true);
WiFi.enableAP(false);
WiFi.mode(WIFI_OFF);
yield();
}
bool WiFiAccessPointConnectionHandler::isConnected() {
return connected;
}
#if defined(ESP32)
void WiFiAccessPointConnectionHandler::eventHandler(WiFiEvent_t event, WiFiEventInfo_t info) {
uint8_t mac[6];
IPAddress stationIP;
switch(event) {
case ARDUINO_EVENT_WIFI_AP_START:
#if defined(AMS_REMOTE_DEBUG)
if (debugger->isActive(RemoteDebug::INFO))
#endif
debugger->printf_P(PSTR("WiFi access point started with SSID %s\n"), config.ssid);
break;
case ARDUINO_EVENT_WIFI_AP_STOP:
#if defined(AMS_REMOTE_DEBUG)
if (debugger->isActive(RemoteDebug::INFO))
#endif
debugger->printf_P(PSTR("WiFi access point stopped!\n"));
break;
case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
memcpy(mac, info.wifi_ap_staconnected.mac, 6);
#if defined(AMS_REMOTE_DEBUG)
if (debugger->isActive(RemoteDebug::INFO))
#endif
debugger->printf_P(PSTR("Client connected to AP, client MAC: %02x:%02x:%02x:%02x:%02x:%02x\n"), mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
break;
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
memcpy(mac, info.wifi_ap_staconnected.mac, 6);
#if defined(AMS_REMOTE_DEBUG)
if (debugger->isActive(RemoteDebug::INFO))
#endif
debugger->printf_P(PSTR("Client disconnected from AP, client MAC: %02x:%02x:%02x:%02x:%02x:%02x\n"), mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
break;
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
stationIP = info.wifi_ap_staipassigned.ip.addr;
#if defined(AMS_REMOTE_DEBUG)
if (debugger->isActive(RemoteDebug::INFO))
#endif
debugger->printf_P(PSTR("Client was assigned IP %s\n"), stationIP.toString().c_str());
break;
}
}
#endif
bool WiFiAccessPointConnectionHandler::isConfigChanged() {
return configChanged;
}
void WiFiAccessPointConnectionHandler::getCurrentConfig(NetworkConfig& networkConfig) {
networkConfig = this->config;
}
IPAddress WiFiAccessPointConnectionHandler::getIP() {
return WiFi.softAPIP();
}
IPAddress WiFiAccessPointConnectionHandler::getSubnetMask() {
#if defined(ESP32)
return WiFi.softAPSubnetMask();
#else
return IPAddress(255,255,255,0);
#endif
}
IPAddress WiFiAccessPointConnectionHandler::getGateway() {
return WiFi.softAPIP();
}
IPAddress WiFiAccessPointConnectionHandler::getDns(uint8_t idx) {
return WiFi.softAPIP();
}
#if defined(ESP32)
IPv6Address WiFiAccessPointConnectionHandler::getIPv6() {
return IPv6Address();
}
IPv6Address WiFiAccessPointConnectionHandler::getDNSv6(uint8_t idx) {
return IPv6Address();
}
#endif