mirror of https://github.com/lumapu/ahoy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.3 KiB
98 lines
3.3 KiB
//-----------------------------------------------------------------------------
|
|
// 2024 Ahoy, https://ahoydtu.de
|
|
// Creative Commons - https://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef __AHOY_WIFI_ESP32_H__
|
|
#define __AHOY_WIFI_ESP32_H__
|
|
|
|
#if defined(ESP32) && !defined(ETHERNET)
|
|
#include <functional>
|
|
#include <AsyncUDP.h>
|
|
#include "AhoyNetwork.h"
|
|
#include "ESPAsyncWebServer.h"
|
|
|
|
class AhoyWifi : public AhoyNetwork {
|
|
public:
|
|
void begin() override {
|
|
mAp.enable();
|
|
|
|
if(String(FB_WIFI_SSID) == mConfig->sys.stationSsid)
|
|
return; // no station wifi defined
|
|
|
|
WiFi.setHostname(mConfig->sys.deviceName);
|
|
#if !defined(AP_ONLY)
|
|
WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN);
|
|
WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL);
|
|
WiFi.begin(mConfig->sys.stationSsid, mConfig->sys.stationPwd, WIFI_ALL_CHANNEL_SCAN);
|
|
mWifiConnecting = true;
|
|
|
|
DBGPRINT(F("connect to network '"));
|
|
DBGPRINT(mConfig->sys.stationSsid);
|
|
DBGPRINTLN(F("'"));
|
|
#endif
|
|
}
|
|
|
|
void OnEvent(WiFiEvent_t event) override {
|
|
switch(event) {
|
|
case SYSTEM_EVENT_STA_CONNECTED:
|
|
if(NetworkState::CONNECTED != mStatus) {
|
|
mStatus = NetworkState::CONNECTED;
|
|
mWifiConnecting = false;
|
|
DPRINTLN(DBG_INFO, F("Network connected"));
|
|
setStaticIp();
|
|
}
|
|
break;
|
|
|
|
case SYSTEM_EVENT_STA_GOT_IP:
|
|
mStatus = NetworkState::GOT_IP;
|
|
if(mAp.isEnabled())
|
|
mAp.disable();
|
|
|
|
if(!mConnected) {
|
|
mConnected = true;
|
|
ah::welcome(WiFi.localIP().toString(), F("Station"));
|
|
MDNS.begin(mConfig->sys.deviceName);
|
|
mOnNetworkCB(true);
|
|
}
|
|
break;
|
|
|
|
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
|
[[fallthrough]];
|
|
case ARDUINO_EVENT_WIFI_STA_STOP:
|
|
[[fallthrough]];
|
|
case SYSTEM_EVENT_STA_DISCONNECTED:
|
|
mStatus = NetworkState::DISCONNECTED;
|
|
if(mConnected) {
|
|
mConnected = false;
|
|
mOnNetworkCB(false);
|
|
MDNS.end();
|
|
WiFi.disconnect();
|
|
begin();
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void tickNetworkLoop() override {
|
|
if(mAp.isEnabled())
|
|
mAp.tickLoop();
|
|
}
|
|
|
|
String getIp(void) override {
|
|
return WiFi.localIP().toString();
|
|
}
|
|
|
|
private:
|
|
void setStaticIp() override {
|
|
setupIp([this](IPAddress ip, IPAddress gateway, IPAddress mask, IPAddress dns1, IPAddress dns2) -> bool {
|
|
return WiFi.config(ip, gateway, mask, dns1, dns2);
|
|
});
|
|
}
|
|
};
|
|
|
|
#endif /*ESP32 & !ETHERNET*/
|
|
#endif /*__AHOY_WIFI_ESP32_H__*/
|
|
|