ESPixelStick Firmware
Firmware for the ESPixelStick
Loading...
Searching...
No Matches
WiFiDriver.hpp
Go to the documentation of this file.
1#pragma once
2/*
3* WiFiDriver.hpp - Output Management class
4*
5* Project: ESPixelStick - An ESP8266 / ESP32 and E1.31 based pixel driver
6* Copyright (c) 2021, 2025 Shelby Merrick
7* http://www.forkineye.com
8*
9* This program is provided free for you to use in any way that you wish,
10* subject to the laws and regulations where you are using it. Due diligence
11* is strongly suggested before using this code. Please give credit where due.
12*
13* The Author makes no warranty of any kind, express or implied, with regard
14* to this program or the documentation contained in this document. The
15* Author shall not be liable in any event for incidental or consequential
16* damages in connection with, or arising out of, the furnishing, performance
17* or use of these programs.
18*
19*/
20
21#include "ESPixelStick.h"
23
24#ifdef ARDUINO_ARCH_ESP8266
25# include <ESP8266WiFi.h>
26#else
27# include <WiFi.h>
28#endif // def ARDUINO_ARCH_ESP8266
29
30// forward declaration for the compiler
31class c_WiFiDriver;
32
33// forward declaration
34/*****************************************************************************/
36{
37protected:
39public:
41 virtual ~fsm_WiFi_state() {}
42
43 virtual void Poll (void) = 0;
44 virtual void Init (void) = 0;
45 virtual void GetStateName (String& sName) = 0;
46 virtual void OnConnect (void) = 0;
47 virtual void OnDisconnect (void) = 0;
48 void GetDriverName (String & Name) { Name = CN_WiFiDrv; }
49 void SetParent (c_WiFiDriver * parent) { pWiFiDriver = parent; }
50}; // fsm_WiFi_state
51
53{
54public:
55 c_WiFiDriver ();
56 virtual ~c_WiFiDriver ();
57
58 void Begin ();
59 void GetConfig (JsonObject & json);
60 void GetStatus (JsonObject & json);
61 bool SetConfig (JsonObject & json);
62
63 IPAddress getIpAddress () { return CurrentIpAddress; }
64 void setIpAddress (IPAddress NewAddress ) { CurrentIpAddress = NewAddress; }
65 IPAddress getIpSubNetMask () { return CurrentSubnetMask; }
66 void setIpSubNetMask (IPAddress NewAddress) { CurrentSubnetMask = NewAddress; }
67 void connectWifi (const String & ssid, const String & passphrase);
68 void reset ();
69 void Poll ();
70
71 void SetFsmState (fsm_WiFi_state* NewState);
72 void AnnounceState ();
73 FastTimer &GetFsmTimer (void) { return FsmTimer; }
75 void SetIsWiFiConnected (bool value) { ReportedIsWiFiConnected = value; }
76 void GetDriverName (String & Name) { Name = CN_WiFiDrv; }
77 uint32_t Get_sta_timeout () { return sta_timeout; }
78 uint32_t Get_ap_timeout () { return ap_timeout; }
82 String GetConfig_apssid () { return ap_ssid; }
83 void GetHostname (String& name);
84 void SetHostname (String & name);
85 void Disable ();
86 void Enable ();
87 String GetWiFiMacAddress() {return WiFi.macAddress ();}
88
89private:
90#define DEFAULT_SSID_NOT_SET "DEFAULT_SSID_NOT_SET"
91 int ValidateConfig ();
92
93#ifdef ARDUINO_ARCH_ESP8266
94 WiFiEventHandler wifiConnectHandler; // WiFi connect handler
95 WiFiEventHandler wifiDisconnectHandler; // WiFi disconnect handler
96#endif
97 // config_t *config = nullptr; // Current configuration
98 IPAddress CurrentIpAddress = IPAddress (0, 0, 0, 0);
99 IPAddress CurrentSubnetMask = IPAddress (0, 0, 0, 0);
101 uint32_t PollInterval = 1000;
103
104 char ap_ssid[65];
106 IPAddress ip = INADDR_NONE;
107 IPAddress netmask = INADDR_NONE;
108 IPAddress gateway = INADDR_NONE;
109 IPAddress primaryDns = INADDR_NONE;
110 IPAddress secondaryDns = INADDR_NONE;
111 bool UseDhcp = true;
112 uint8_t ap_channelNumber = 1;
116 bool StayInApMode = false;
117
118#ifdef SUPPORT_ETHERNET
119 bool RebootOnWiFiFailureToConnect = false;
120#else
122#endif // def SUPPORT_ETHERNET
123
124 void SetUpIp ();
125
126#ifdef ARDUINO_ARCH_ESP8266
127 void onWiFiConnect (const WiFiEventStationModeGotIP& event);
128 void onWiFiDisconnect (const WiFiEventStationModeDisconnected& event);
129#else
130 void onWiFiConnect (const WiFiEvent_t event, const WiFiEventInfo_t info);
131 void onWiFiDisconnect (const WiFiEvent_t event, const WiFiEventInfo_t info);
132
133 void onWiFiStaConn (const WiFiEvent_t event, const WiFiEventInfo_t info);
134 void onWiFiStaDisc (const WiFiEvent_t event, const WiFiEventInfo_t info);
135#endif
136
137protected:
146 friend class fsm_WiFi_state;
150
151}; // c_WiFiDriver
152
153
154/*****************************************************************************/
155/*
156* Generic fsm base class.
157*/
158/*****************************************************************************/
159/*****************************************************************************/
160// Wait for polling to start.
162{
163public:
166
167 virtual void Poll (void);
168 virtual void Init (void);
169 virtual void GetStateName (String& sName) { sName = F ("Boot"); }
170 virtual void OnConnect (void) { /* ignore */ }
171 virtual void OnDisconnect (void) { /* ignore */ }
172
173}; // fsm_WiFi_state_Boot
174
175/*****************************************************************************/
177{
178public:
181
182 virtual void Poll (void);
183 virtual void Init (void);
184 virtual void GetStateName (String& sName) { sName = F ("Connecting Using Config Credentials"); }
185 virtual void OnConnect (void);
186 virtual void OnDisconnect (void) {}
187
188}; // fsm_WiFi_state_ConnectingUsingConfig
189
190/*****************************************************************************/
192{
193public:
196
197 virtual void Poll (void);
198 virtual void Init (void);
199 virtual void GetStateName (String& sName) { sName = F ("Connecting Using Default Credentials"); }
200 virtual void OnConnect (void);
201 virtual void OnDisconnect (void) {}
202
203}; // fsm_WiFi_state_ConnectingUsingConfig
204
205/*****************************************************************************/
207{
208public:
211
212 virtual void Poll (void);
213 virtual void Init (void);
214 virtual void GetStateName (String& sName) { sName = F ("Connected To AP"); }
215 virtual void OnConnect (void) {}
216 virtual void OnDisconnect (void);
217
218}; // fsm_WiFi_state_ConnectedToAP
219
220/*****************************************************************************/
222{
223public:
226
227 virtual void Poll (void);
228 virtual void Init (void);
229 virtual void GetStateName (String& sName) { sName = F ("Connecting As AP"); }
230 virtual void OnConnect (void);
231 virtual void OnDisconnect (void) {}
232
233}; // fsm_WiFi_state_ConnectingAsAP
234
235/*****************************************************************************/
237{
238public:
241
242 virtual void Poll (void);
243 virtual void Init (void);
244 virtual void GetStateName (String& sName) { sName = F ("Connected To STA"); }
245 virtual void OnConnect (void) {}
246 virtual void OnDisconnect (void);
247
248}; // fsm_WiFi_state_ConnectedToSta
249
250/*****************************************************************************/
252{
253public:
256
257 virtual void Poll(void) {}
258 virtual void Init (void);
259 virtual void GetStateName (String& sName) { sName = F ("Connection Failed"); }
260 virtual void OnConnect (void) {}
261 virtual void OnDisconnect (void) {}
262
263}; // fsm_WiFi_state_Rebooting
264
265/*****************************************************************************/
267{
268public:
271
272 virtual void Poll (void) {}
273 virtual void Init (void);
274 virtual void GetStateName (String& sName) { sName = F ("Disabled"); }
275 virtual void OnConnect (void) {}
276 virtual void OnDisconnect (void) {}
277
278}; // fsm_WiFi_state_Disabled
const CN_PROGMEM char CN_WiFiDrv[]
Definition ConstNames.cpp:237
#define AP_TIMEOUT
In AP mode, wait 120 seconds for a connection or reboot.
Definition ESPixelStick.h:53
#define CLIENT_TIMEOUT
In station/client mode try to connection for 15 seconds.
Definition ESPixelStick.h:52
Definition FastTimer.hpp:24
Definition ApCredentials.hpp:24
Definition WiFiDriver.hpp:53
void onWiFiConnect(const WiFiEvent_t event, const WiFiEventInfo_t info)
Definition WiFiDriver.cpp:405
FastTimer NextPoll
Definition WiFiDriver.hpp:100
bool SetConfig(JsonObject &json)
Definition WiFiDriver.cpp:480
bool Get_ap_StayInApMode()
Definition WiFiDriver.hpp:80
bool IsWiFiConnected()
Definition WiFiDriver.hpp:74
uint32_t Get_ap_timeout()
Definition WiFiDriver.hpp:78
FastTimer & GetFsmTimer(void)
Definition WiFiDriver.hpp:73
char ap_ssid[65]
Definition WiFiDriver.hpp:104
void Begin()
< Start the module
Definition WiFiDriver.cpp:124
void GetDriverName(String &Name)
Definition WiFiDriver.hpp:76
uint32_t PollInterval
Definition WiFiDriver.hpp:101
void Enable()
Definition WiFiDriver.cpp:294
void Disable()
Definition WiFiDriver.cpp:277
void GetHostname(String &name)
Definition WiFiDriver.cpp:356
void Poll()
Definition WiFiDriver.cpp:434
void connectWifi(const String &ssid, const String &passphrase)
Definition WiFiDriver.cpp:205
uint32_t Get_sta_timeout()
Definition WiFiDriver.hpp:77
bool ReportedIsWiFiConnected
Definition WiFiDriver.hpp:102
uint8_t ap_channelNumber
Definition WiFiDriver.hpp:112
char ap_passphrase[65]
Definition WiFiDriver.hpp:105
void setIpAddress(IPAddress NewAddress)
Definition WiFiDriver.hpp:64
bool RebootOnWiFiFailureToConnect
Definition WiFiDriver.hpp:121
bool StayInApMode
Definition WiFiDriver.hpp:116
IPAddress secondaryDns
Definition WiFiDriver.hpp:110
IPAddress gateway
Definition WiFiDriver.hpp:108
fsm_WiFi_state * pCurrentFsmState
Definition WiFiDriver.hpp:147
virtual ~c_WiFiDriver()
< deallocate any resources and put the output channels into a safe state
Definition WiFiDriver.cpp:101
c_WiFiDriver()
< Start up the driver and put it into a safe mode
Definition WiFiDriver.cpp:85
int ValidateConfig()
Definition WiFiDriver.cpp:620
void reset()
Definition WiFiDriver.cpp:459
IPAddress netmask
Definition WiFiDriver.hpp:107
IPAddress primaryDns
Definition WiFiDriver.hpp:109
void GetConfig(JsonObject &json)
Definition WiFiDriver.cpp:314
void AnnounceState()
Definition WiFiDriver.cpp:110
String GetWiFiMacAddress()
Definition WiFiDriver.hpp:87
IPAddress getIpSubNetMask()
Definition WiFiDriver.hpp:65
String GetConfig_apssid()
Definition WiFiDriver.hpp:82
void onWiFiDisconnect(const WiFiEvent_t event, const WiFiEventInfo_t info)
WiFi Disconnect Handler.
Definition WiFiDriver.cpp:422
bool Get_RebootOnWiFiFailureToConnect()
Definition WiFiDriver.hpp:81
void GetStatus(JsonObject &json)
Definition WiFiDriver.cpp:367
bool UseDhcp
Definition WiFiDriver.hpp:111
void SetIsWiFiConnected(bool value)
Definition WiFiDriver.hpp:75
c_ApCredentials ApCredentials
Definition WiFiDriver.hpp:149
uint32_t ap_timeout
How long to wait in AP mode with no connection before rebooting.
Definition WiFiDriver.hpp:114
void SetFsmState(fsm_WiFi_state *NewState)
Definition WiFiDriver.cpp:546
bool ap_fallbackIsEnabled
Definition WiFiDriver.hpp:113
void SetHostname(String &name)
Definition WiFiDriver.cpp:558
FastTimer FsmTimer
Definition WiFiDriver.hpp:148
void SetUpIp()
Definition WiFiDriver.cpp:569
void onWiFiStaDisc(const WiFiEvent_t event, const WiFiEventInfo_t info)
void setIpSubNetMask(IPAddress NewAddress)
Definition WiFiDriver.hpp:66
IPAddress CurrentSubnetMask
Definition WiFiDriver.hpp:99
IPAddress ip
Definition WiFiDriver.hpp:106
uint32_t sta_timeout
Timeout when connection as client (station)
Definition WiFiDriver.hpp:115
bool Get_ap_fallbackIsEnabled()
Definition WiFiDriver.hpp:79
IPAddress CurrentIpAddress
Definition WiFiDriver.hpp:98
void onWiFiStaConn(const WiFiEvent_t event, const WiFiEventInfo_t info)
IPAddress getIpAddress()
Definition WiFiDriver.hpp:63
Definition WiFiDriver.hpp:162
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:171
virtual void OnConnect(void)
Definition WiFiDriver.hpp:170
virtual void Poll(void)
Definition WiFiDriver.cpp:651
virtual ~fsm_WiFi_state_Boot()
Definition WiFiDriver.hpp:165
fsm_WiFi_state_Boot()
Definition WiFiDriver.hpp:164
virtual void Init(void)
Definition WiFiDriver.cpp:666
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:169
Definition WiFiDriver.hpp:207
virtual void OnConnect(void)
Definition WiFiDriver.hpp:215
virtual void Poll(void)
Definition WiFiDriver.cpp:905
virtual void OnDisconnect(void)
Definition WiFiDriver.cpp:944
virtual void Init(void)
Definition WiFiDriver.cpp:921
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:214
virtual ~fsm_WiFi_state_ConnectedToAP()
Definition WiFiDriver.hpp:210
fsm_WiFi_state_ConnectedToAP()
Definition WiFiDriver.hpp:209
Definition WiFiDriver.hpp:237
virtual void Poll(void)
Definition WiFiDriver.cpp:958
virtual void Init(void)
Definition WiFiDriver.cpp:981
virtual ~fsm_WiFi_state_ConnectedToSta()
Definition WiFiDriver.hpp:240
virtual void OnDisconnect(void)
Definition WiFiDriver.cpp:1003
virtual void OnConnect(void)
Definition WiFiDriver.hpp:245
fsm_WiFi_state_ConnectedToSta()
Definition WiFiDriver.hpp:239
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:244
Definition WiFiDriver.hpp:222
virtual void Init(void)
Definition WiFiDriver.cpp:852
fsm_WiFi_state_ConnectingAsAP()
Definition WiFiDriver.hpp:224
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:231
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:229
virtual void OnConnect(void)
Definition WiFiDriver.cpp:892
virtual void Poll(void)
Definition WiFiDriver.cpp:827
virtual ~fsm_WiFi_state_ConnectingAsAP()
Definition WiFiDriver.hpp:225
Definition WiFiDriver.hpp:177
virtual void Poll(void)
Definition WiFiDriver.cpp:683
fsm_WiFi_state_ConnectingUsingConfig()
Definition WiFiDriver.hpp:179
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:186
virtual void Init(void)
Definition WiFiDriver.cpp:706
virtual void OnConnect(void)
Definition WiFiDriver.cpp:751
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:184
virtual ~fsm_WiFi_state_ConnectingUsingConfig()
Definition WiFiDriver.hpp:180
Definition WiFiDriver.hpp:192
virtual void OnConnect(void)
Definition WiFiDriver.cpp:813
virtual void Poll(void)
Definition WiFiDriver.cpp:764
virtual void Init(void)
Definition WiFiDriver.cpp:784
virtual ~fsm_WiFi_state_ConnectingUsingDefaults()
Definition WiFiDriver.hpp:195
fsm_WiFi_state_ConnectingUsingDefaults()
Definition WiFiDriver.hpp:194
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:199
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:201
Definition WiFiDriver.hpp:252
virtual void OnConnect(void)
Definition WiFiDriver.hpp:260
virtual void Init(void)
Definition WiFiDriver.cpp:1024
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:261
virtual ~fsm_WiFi_state_ConnectionFailed()
Definition WiFiDriver.hpp:255
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:259
fsm_WiFi_state_ConnectionFailed()
Definition WiFiDriver.hpp:254
virtual void Poll(void)
Definition WiFiDriver.hpp:257
Definition WiFiDriver.hpp:267
virtual void Poll(void)
Definition WiFiDriver.hpp:272
virtual void OnConnect(void)
Definition WiFiDriver.hpp:275
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:276
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:274
virtual ~fsm_WiFi_state_Disabled()
Definition WiFiDriver.hpp:270
fsm_WiFi_state_Disabled()
Definition WiFiDriver.hpp:269
virtual void Init(void)
Definition WiFiDriver.cpp:1057
Definition WiFiDriver.hpp:36
void SetParent(c_WiFiDriver *parent)
Definition WiFiDriver.hpp:49
virtual void GetStateName(String &sName)=0
fsm_WiFi_state()
Definition WiFiDriver.hpp:40
virtual void OnConnect(void)=0
virtual void OnDisconnect(void)=0
virtual void Poll(void)=0
void GetDriverName(String &Name)
Definition WiFiDriver.hpp:48
c_WiFiDriver * pWiFiDriver
Definition WiFiDriver.hpp:38
virtual void Init(void)=0
virtual ~fsm_WiFi_state()
Definition WiFiDriver.hpp:41