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, 2022 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"
22
23#ifdef ARDUINO_ARCH_ESP8266
24# include <ESP8266WiFi.h>
25#else
26# include <WiFi.h>
27#endif // def ARDUINO_ARCH_ESP8266
28
29// forward declaration for the compiler
30class c_WiFiDriver;
31
32// forward declaration
33/*****************************************************************************/
35{
36protected:
38public:
40 virtual ~fsm_WiFi_state() {}
41
42 virtual void Poll (void) = 0;
43 virtual void Init (void) = 0;
44 virtual void GetStateName (String& sName) = 0;
45 virtual void OnConnect (void) = 0;
46 virtual void OnDisconnect (void) = 0;
47 void GetDriverName (String & Name) { Name = CN_WiFiDrv; }
48 void SetParent (c_WiFiDriver * parent) { pWiFiDriver = parent; }
49}; // fsm_WiFi_state
50
52{
53public:
54 c_WiFiDriver ();
55 virtual ~c_WiFiDriver ();
56
57 void Begin ();
58 void GetConfig (JsonObject & json);
59 void GetStatus (JsonObject & json);
60 bool SetConfig (JsonObject & json);
61
62 IPAddress getIpAddress () { return CurrentIpAddress; }
63 void setIpAddress (IPAddress NewAddress ) { CurrentIpAddress = NewAddress; }
64 IPAddress getIpSubNetMask () { return CurrentSubnetMask; }
65 void setIpSubNetMask (IPAddress NewAddress) { CurrentSubnetMask = NewAddress; }
66 void connectWifi (const String & ssid, const String & passphrase);
67 void reset ();
68 void Poll ();
69
70 void SetFsmState (fsm_WiFi_state* NewState);
71 void AnnounceState ();
72 FastTimer &GetFsmTimer (void) { return FsmTimer; }
74 void SetIsWiFiConnected (bool value) { ReportedIsWiFiConnected = value; }
75 void GetDriverName (String & Name) { Name = CN_WiFiDrv; }
76 uint32_t Get_sta_timeout () { return sta_timeout; }
77 uint32_t Get_ap_timeout () { return ap_timeout; }
81 String GetConfig_ssid () { return ssid; }
82 String GetConfig_apssid () { return ap_ssid; }
83 String GetConfig_passphrase () { return passphrase; }
84 void GetHostname (String& name);
85 void SetHostname (String & name);
86 void Disable ();
87 void Enable ();
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 String ssid;
106 String ap_ssid;
108 IPAddress ip = INADDR_NONE;
109 IPAddress netmask = INADDR_NONE;
110 IPAddress gateway = INADDR_NONE;
111 IPAddress primaryDns = INADDR_NONE;
112 IPAddress secondaryDns = INADDR_NONE;
113 bool UseDhcp = true;
114 uint8_t ap_channelNumber = 1;
118 bool StayInApMode = false;
119
120#ifdef SUPPORT_ETHERNET
121 bool RebootOnWiFiFailureToConnect = false;
122#else
124#endif // def SUPPORT_ETHERNET
125
126 void SetUpIp ();
127
128#ifdef ARDUINO_ARCH_ESP8266
129 void onWiFiConnect (const WiFiEventStationModeGotIP& event);
130 void onWiFiDisconnect (const WiFiEventStationModeDisconnected& event);
131#else
132 void onWiFiConnect (const WiFiEvent_t event, const WiFiEventInfo_t info);
133 void onWiFiDisconnect (const WiFiEvent_t event, const WiFiEventInfo_t info);
134
135 void onWiFiStaConn (const WiFiEvent_t event, const WiFiEventInfo_t info);
136 void onWiFiStaDisc (const WiFiEvent_t event, const WiFiEventInfo_t info);
137#endif
138
139protected:
148 friend class fsm_WiFi_state;
151
152}; // c_WiFiDriver
153
154
155/*****************************************************************************/
156/*
157* Generic fsm base class.
158*/
159/*****************************************************************************/
160/*****************************************************************************/
161// Wait for polling to start.
163{
164public:
167
168 virtual void Poll (void);
169 virtual void Init (void);
170 virtual void GetStateName (String& sName) { sName = F ("Boot"); }
171 virtual void OnConnect (void) { /* ignore */ }
172 virtual void OnDisconnect (void) { /* ignore */ }
173
174}; // fsm_WiFi_state_Boot
175
176/*****************************************************************************/
178{
179public:
182
183 virtual void Poll (void);
184 virtual void Init (void);
185 virtual void GetStateName (String& sName) { sName = F ("Connecting Using Config Credentials"); }
186 virtual void OnConnect (void);
187 virtual void OnDisconnect (void) {}
188
189}; // fsm_WiFi_state_ConnectingUsingConfig
190
191/*****************************************************************************/
193{
194public:
197
198 virtual void Poll (void);
199 virtual void Init (void);
200 virtual void GetStateName (String& sName) { sName = F ("Connecting Using Default Credentials"); }
201 virtual void OnConnect (void);
202 virtual void OnDisconnect (void) {}
203
204}; // fsm_WiFi_state_ConnectingUsingConfig
205
206/*****************************************************************************/
208{
209public:
212
213 virtual void Poll (void);
214 virtual void Init (void);
215 virtual void GetStateName (String& sName) { sName = F ("Connected To AP"); }
216 virtual void OnConnect (void) {}
217 virtual void OnDisconnect (void);
218
219}; // fsm_WiFi_state_ConnectedToAP
220
221/*****************************************************************************/
223{
224public:
227
228 virtual void Poll (void);
229 virtual void Init (void);
230 virtual void GetStateName (String& sName) { sName = F ("Connecting As AP"); }
231 virtual void OnConnect (void);
232 virtual void OnDisconnect (void) {}
233
234}; // fsm_WiFi_state_ConnectingAsAP
235
236/*****************************************************************************/
238{
239public:
242
243 virtual void Poll (void);
244 virtual void Init (void);
245 virtual void GetStateName (String& sName) { sName = F ("Connected To STA"); }
246 virtual void OnConnect (void) {}
247 virtual void OnDisconnect (void);
248
249}; // fsm_WiFi_state_ConnectedToSta
250
251/*****************************************************************************/
253{
254public:
257
258 virtual void Poll(void) {}
259 virtual void Init (void);
260 virtual void GetStateName (String& sName) { sName = F ("Connection Failed"); }
261 virtual void OnConnect (void) {}
262 virtual void OnDisconnect (void) {}
263
264}; // fsm_WiFi_state_Rebooting
265
266/*****************************************************************************/
268{
269public:
272
273 virtual void Poll (void) {}
274 virtual void Init (void);
275 virtual void GetStateName (String& sName) { sName = F ("Disabled"); }
276 virtual void OnConnect (void) {}
277 virtual void OnDisconnect (void) {}
278
279}; // fsm_WiFi_state_Disabled
const CN_PROGMEM char CN_WiFiDrv[]
Definition ConstNames.cpp:234
#define AP_TIMEOUT
In AP mode, wait 120 seconds for a connection or reboot.
Definition ESPixelStick.h:49
#define CLIENT_TIMEOUT
In station/client mode try to connection for 15 seconds.
Definition ESPixelStick.h:48
Definition FastTimer.hpp:24
Definition WiFiDriver.hpp:52
void onWiFiConnect(const WiFiEvent_t event, const WiFiEventInfo_t info)
Definition WiFiDriver.cpp:401
FastTimer NextPoll
Definition WiFiDriver.hpp:100
bool SetConfig(JsonObject &json)
Definition WiFiDriver.cpp:476
bool Get_ap_StayInApMode()
Definition WiFiDriver.hpp:79
bool IsWiFiConnected()
Definition WiFiDriver.hpp:73
uint32_t Get_ap_timeout()
Definition WiFiDriver.hpp:77
FastTimer & GetFsmTimer(void)
Definition WiFiDriver.hpp:72
void Begin()
< Start the module
Definition WiFiDriver.cpp:124
void GetDriverName(String &Name)
Definition WiFiDriver.hpp:75
uint32_t PollInterval
Definition WiFiDriver.hpp:101
void Enable()
Definition WiFiDriver.cpp:291
void Disable()
Definition WiFiDriver.cpp:274
String GetConfig_ssid()
Definition WiFiDriver.hpp:81
void GetHostname(String &name)
Definition WiFiDriver.cpp:352
String ap_passphrase
Definition WiFiDriver.hpp:107
void Poll()
Definition WiFiDriver.cpp:430
void connectWifi(const String &ssid, const String &passphrase)
Definition WiFiDriver.cpp:202
uint32_t Get_sta_timeout()
Definition WiFiDriver.hpp:76
bool ReportedIsWiFiConnected
Definition WiFiDriver.hpp:102
uint8_t ap_channelNumber
Definition WiFiDriver.hpp:114
void setIpAddress(IPAddress NewAddress)
Definition WiFiDriver.hpp:63
bool RebootOnWiFiFailureToConnect
Definition WiFiDriver.hpp:123
bool StayInApMode
Definition WiFiDriver.hpp:118
IPAddress secondaryDns
Definition WiFiDriver.hpp:112
IPAddress gateway
Definition WiFiDriver.hpp:110
fsm_WiFi_state * pCurrentFsmState
Definition WiFiDriver.hpp:149
virtual ~c_WiFiDriver()
< deallocate any resources and put the output channels into a safe state
Definition WiFiDriver.cpp:101
String ssid
Definition WiFiDriver.hpp:104
c_WiFiDriver()
< Start up the driver and put it into a safe mode
Definition WiFiDriver.cpp:85
int ValidateConfig()
Definition WiFiDriver.cpp:622
void reset()
Definition WiFiDriver.cpp:455
IPAddress netmask
Definition WiFiDriver.hpp:109
IPAddress primaryDns
Definition WiFiDriver.hpp:111
void GetConfig(JsonObject &json)
Definition WiFiDriver.cpp:311
void AnnounceState()
Definition WiFiDriver.cpp:110
IPAddress getIpSubNetMask()
Definition WiFiDriver.hpp:64
String GetConfig_apssid()
Definition WiFiDriver.hpp:82
void onWiFiDisconnect(const WiFiEvent_t event, const WiFiEventInfo_t info)
WiFi Disconnect Handler.
Definition WiFiDriver.cpp:418
String passphrase
Definition WiFiDriver.hpp:105
bool Get_RebootOnWiFiFailureToConnect()
Definition WiFiDriver.hpp:80
void GetStatus(JsonObject &json)
Definition WiFiDriver.cpp:363
bool UseDhcp
Definition WiFiDriver.hpp:113
void SetIsWiFiConnected(bool value)
Definition WiFiDriver.hpp:74
uint32_t ap_timeout
How long to wait in AP mode with no connection before rebooting.
Definition WiFiDriver.hpp:116
String GetConfig_passphrase()
Definition WiFiDriver.hpp:83
void SetFsmState(fsm_WiFi_state *NewState)
Definition WiFiDriver.cpp:548
bool ap_fallbackIsEnabled
Definition WiFiDriver.hpp:115
void SetHostname(String &name)
Definition WiFiDriver.cpp:560
FastTimer FsmTimer
Definition WiFiDriver.hpp:150
String ap_ssid
Definition WiFiDriver.hpp:106
void SetUpIp()
Definition WiFiDriver.cpp:571
void onWiFiStaDisc(const WiFiEvent_t event, const WiFiEventInfo_t info)
void setIpSubNetMask(IPAddress NewAddress)
Definition WiFiDriver.hpp:65
IPAddress CurrentSubnetMask
Definition WiFiDriver.hpp:99
IPAddress ip
Definition WiFiDriver.hpp:108
uint32_t sta_timeout
Timeout when connection as client (station)
Definition WiFiDriver.hpp:117
bool Get_ap_fallbackIsEnabled()
Definition WiFiDriver.hpp:78
IPAddress CurrentIpAddress
Definition WiFiDriver.hpp:98
void onWiFiStaConn(const WiFiEvent_t event, const WiFiEventInfo_t info)
IPAddress getIpAddress()
Definition WiFiDriver.hpp:62
Definition WiFiDriver.hpp:163
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:172
virtual void OnConnect(void)
Definition WiFiDriver.hpp:171
virtual void Poll(void)
Definition WiFiDriver.cpp:667
virtual ~fsm_WiFi_state_Boot()
Definition WiFiDriver.hpp:166
fsm_WiFi_state_Boot()
Definition WiFiDriver.hpp:165
virtual void Init(void)
Definition WiFiDriver.cpp:681
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:170
Definition WiFiDriver.hpp:208
virtual void OnConnect(void)
Definition WiFiDriver.hpp:216
virtual void Poll(void)
Definition WiFiDriver.cpp:896
virtual void OnDisconnect(void)
Definition WiFiDriver.cpp:935
virtual void Init(void)
Definition WiFiDriver.cpp:912
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:215
virtual ~fsm_WiFi_state_ConnectedToAP()
Definition WiFiDriver.hpp:211
fsm_WiFi_state_ConnectedToAP()
Definition WiFiDriver.hpp:210
Definition WiFiDriver.hpp:238
virtual void Poll(void)
Definition WiFiDriver.cpp:949
virtual void Init(void)
Definition WiFiDriver.cpp:972
virtual ~fsm_WiFi_state_ConnectedToSta()
Definition WiFiDriver.hpp:241
virtual void OnDisconnect(void)
Definition WiFiDriver.cpp:994
virtual void OnConnect(void)
Definition WiFiDriver.hpp:246
fsm_WiFi_state_ConnectedToSta()
Definition WiFiDriver.hpp:240
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:245
Definition WiFiDriver.hpp:223
virtual void Init(void)
Definition WiFiDriver.cpp:844
fsm_WiFi_state_ConnectingAsAP()
Definition WiFiDriver.hpp:225
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:232
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:230
virtual void OnConnect(void)
Definition WiFiDriver.cpp:883
virtual void Poll(void)
Definition WiFiDriver.cpp:819
virtual ~fsm_WiFi_state_ConnectingAsAP()
Definition WiFiDriver.hpp:226
Definition WiFiDriver.hpp:178
virtual void Poll(void)
Definition WiFiDriver.cpp:698
fsm_WiFi_state_ConnectingUsingConfig()
Definition WiFiDriver.hpp:180
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:187
virtual void Init(void)
Definition WiFiDriver.cpp:719
virtual void OnConnect(void)
Definition WiFiDriver.cpp:747
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:185
virtual ~fsm_WiFi_state_ConnectingUsingConfig()
Definition WiFiDriver.hpp:181
Definition WiFiDriver.hpp:193
virtual void OnConnect(void)
Definition WiFiDriver.cpp:805
virtual void Poll(void)
Definition WiFiDriver.cpp:760
virtual void Init(void)
Definition WiFiDriver.cpp:780
virtual ~fsm_WiFi_state_ConnectingUsingDefaults()
Definition WiFiDriver.hpp:196
fsm_WiFi_state_ConnectingUsingDefaults()
Definition WiFiDriver.hpp:195
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:200
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:202
Definition WiFiDriver.hpp:253
virtual void OnConnect(void)
Definition WiFiDriver.hpp:261
virtual void Init(void)
Definition WiFiDriver.cpp:1015
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:262
virtual ~fsm_WiFi_state_ConnectionFailed()
Definition WiFiDriver.hpp:256
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:260
fsm_WiFi_state_ConnectionFailed()
Definition WiFiDriver.hpp:255
virtual void Poll(void)
Definition WiFiDriver.hpp:258
Definition WiFiDriver.hpp:268
virtual void Poll(void)
Definition WiFiDriver.hpp:273
virtual void OnConnect(void)
Definition WiFiDriver.hpp:276
virtual void OnDisconnect(void)
Definition WiFiDriver.hpp:277
virtual void GetStateName(String &sName)
Definition WiFiDriver.hpp:275
virtual ~fsm_WiFi_state_Disabled()
Definition WiFiDriver.hpp:271
fsm_WiFi_state_Disabled()
Definition WiFiDriver.hpp:270
virtual void Init(void)
Definition WiFiDriver.cpp:1048
Definition WiFiDriver.hpp:35
void SetParent(c_WiFiDriver *parent)
Definition WiFiDriver.hpp:48
virtual void GetStateName(String &sName)=0
fsm_WiFi_state()
Definition WiFiDriver.hpp:39
virtual void OnConnect(void)=0
virtual void OnDisconnect(void)=0
virtual void Poll(void)=0
void GetDriverName(String &Name)
Definition WiFiDriver.hpp:47
c_WiFiDriver * pWiFiDriver
Definition WiFiDriver.hpp:37
virtual void Init(void)=0
virtual ~fsm_WiFi_state()
Definition WiFiDriver.hpp:40