mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-03-01 09:41:19 +00:00
122 lines
3.5 KiB
C++
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
|