Station.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * Station.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include <WString.h>
14 #include <WVector.h>
15 #include <IpAddress.h>
16 #include <MacAddress.h>
17 #include "BssInfo.h"
18 
37  eSCS_GotIP
38 };
39 
42  SCT_None = -1,
47 };
48 
56 };
57 
63  bool bssidSet = false;
65 };
66 
67 #define WPS_STATUS_MAP(XX) \
68  XX(Success) \
69  XX(Failed) \
70  XX(Timeout) \
71  XX(WEP)
72 
74 enum class WpsStatus {
75 #define XX(name) name,
77 #undef XX
78 };
79 
80 #define XX(name) constexpr WpsStatus eWPS_##name{WpsStatus::name};
82 #undef XX
83 
85 
89 using ScanCompletedDelegate = Delegate<void(bool success, BssList& list)>;
90 
98 
104 using WPSConfigDelegate = Delegate<bool(WpsStatus status)>;
105 
109 {
110 public:
114  struct Config {
118  bool autoConnectOnStartup = true;
119  bool save = true;
120  };
121 
122  virtual ~StationClass() = default;
123 
129  virtual void enable(bool enabled, bool save = false) = 0;
130 
134  virtual bool isEnabled() const = 0;
135 
142  virtual bool config(const Config& config) = 0;
143 
150  bool config(const String& ssid, const String& password, bool autoConnectOnStartup = true, bool save = true)
151  {
152  Config cfg{
153  .ssid = ssid,
154  .password = password,
155  .autoConnectOnStartup = autoConnectOnStartup,
156  .save = save,
157  };
158  return config(cfg);
159  }
160 
163  virtual bool connect() = 0;
164 
167  virtual bool disconnect() = 0;
168 
172  bool isConnected() const;
173 
177  bool isConnectionFailed() const;
178 
183 
188 
192  virtual bool isEnabledDHCP() const = 0;
193 
197  virtual void enableDHCP(bool enable) = 0;
198 
202  virtual void setHostname(const String& hostname) = 0;
203 
207  virtual String getHostname() const = 0;
208 
212  virtual IpAddress getIP() const = 0;
213 
217  virtual MacAddress getMacAddress() const = 0;
218 
223  String getMAC(char sep = '\0') const;
224 
237  virtual bool setMacAddress(const MacAddress& addr) const = 0;
238 
242  virtual IpAddress getNetworkMask() const = 0;
243 
247  virtual IpAddress getNetworkGateway() const = 0;
248 
252  virtual IpAddress getNetworkBroadcast() const = 0;
253 
259  bool isLocal(IpAddress address)
260  {
261  return address.compare(getIP(), getNetworkMask());
262  }
263 
268  bool setIP(IpAddress address);
269 
276  virtual bool setIP(IpAddress address, IpAddress netmask, IpAddress gateway) = 0;
277 
281  virtual String getSSID() const = 0;
282 
286  virtual MacAddress getBSSID() const = 0;
287 
291  virtual String getPassword() const = 0;
292 
296  virtual int8_t getRssi() const = 0;
297 
301  virtual uint8_t getChannel() const = 0;
302 
307  virtual bool startScan(ScanCompletedDelegate scanCompleted) = 0;
308 
309 #ifdef ENABLE_SMART_CONFIG
316  virtual bool smartConfigStart(SmartConfigType sctype, SmartConfigDelegate callback = nullptr) = 0;
317 
320  virtual void smartConfigStop() = 0;
321 #endif
322 
323 #ifdef ENABLE_WPS
327  virtual bool wpsConfigStart(WPSConfigDelegate callback = nullptr) = 0;
328 
331  virtual void wpsConfigStop() = 0;
332 #endif
333 
334 protected:
336 #ifdef ENABLE_SMART_CONFIG
337  SmartConfigDelegate smartConfigCallback = nullptr;
338 #endif
339 #ifdef ENABLE_WPS
340  WPSConfigDelegate wpsConfigCallback = nullptr;
341 #endif
342 };
343 
351 extern StationClass& WifiStation;
352 
A class to make it easier to handle and pass around IP addresses.
Definition: IpAddress.h:45
bool compare(const IpAddress &addr, const IpAddress &mask) const
Definition: IpAddress.h:147
A network hardware (MAC) address.
Definition: MacAddress.h:39
WiFi station class.
Definition: Station.h:109
virtual int8_t getRssi() const =0
Get WiFi signal strength.
virtual bool connect()=0
Connect WiFi station to network.
virtual void enable(bool enabled, bool save=false)=0
Enable / disable WiFi station.
virtual IpAddress getNetworkBroadcast() const =0
GetWiFi station broadcast address.
virtual bool isEnabledDHCP() const =0
Get WiFi station DHCP enabled status.
virtual bool isEnabled() const =0
Get WiFi station enable status.
String getConnectionStatusName() const
Get WiFi station connection status name.
virtual bool setMacAddress(const MacAddress &addr) const =0
Set WiFi station MAC address.
virtual void enableDHCP(bool enable)=0
Enable or disable WiFi station DHCP.
virtual MacAddress getBSSID() const =0
Get BSSID (Basic Service Set Identifier) for connected AP.
virtual bool config(const Config &config)=0
Configure WiFi station.
bool config(const String &ssid, const String &password, bool autoConnectOnStartup=true, bool save=true)
Configure WiFi station.
Definition: Station.h:150
virtual StationConnectionStatus getConnectionStatus() const =0
Get WiFi station connection status.
virtual String getSSID() const =0
Get WiFi station SSID (Service Set Identifier)
virtual bool disconnect()=0
Disconnect WiFi station from network.
virtual void setHostname(const String &hostname)=0
Set WiFi station DHCP hostname.
String getMAC(char sep='\0') const
Get WiFi station MAC address.
virtual String getPassword() const =0
Get WiFi station password.
bool isConnectionFailed() const
Get WiFi station connection failure status.
virtual MacAddress getMacAddress() const =0
Get WiFi station MAC address.
virtual uint8_t getChannel() const =0
Get active WiFi channel.
virtual String getHostname() const =0
Set WiFi station DHCP hostname.
bool isConnected() const
Get WiFi station connectoin status.
virtual bool startScan(ScanCompletedDelegate scanCompleted)=0
Start WiFi station network scan.
bool setIP(IpAddress address)
Set WiFi station IP address.
bool isLocal(IpAddress address)
Determine if the given address is on the same subnet.
Definition: Station.h:259
ScanCompletedDelegate scanCompletedCallback
Definition: Station.h:335
virtual IpAddress getNetworkGateway() const =0
Get WiFi station default gateway.
virtual ~StationClass()=default
virtual IpAddress getNetworkMask() const =0
Get WiFi station network mask.
virtual IpAddress getIP() const =0
Get WiFi station IP address.
virtual bool setIP(IpAddress address, IpAddress netmask, IpAddress gateway)=0
Set WiFi station IP parameters.
The String class.
Definition: WString.h:133
Vector class template.
Definition: WVector.h:32
#define XX(name)
Definition: Station.h:80
StationConnectionStatus
WiFi station connection states.
Definition: Station.h:31
SmartConfigType
Smart configuration type.
Definition: Station.h:41
String toString(WpsStatus status)
WpsStatus
WiFi WPS callback status.
Definition: Station.h:74
StationClass & WifiStation
Global instance of WiFi station object.
#define WPS_STATUS_MAP(XX)
Definition: Station.h:67
SmartConfigEvent
Smart configuration event.
Definition: Station.h:50
@ eSCS_ConnectionFailed
Connection failed.
Definition: Station.h:36
@ eSCS_Connecting
Connecting.
Definition: Station.h:33
@ eSCS_AccessPointNotFound
AP not found.
Definition: Station.h:35
@ eSCS_GotIP
Got IP address.
Definition: Station.h:37
@ eSCS_Idle
Connection idle.
Definition: Station.h:32
@ eSCS_WrongPassword
Wrong password.
Definition: Station.h:34
@ SCT_EspTouch
ESP Touch.
Definition: Station.h:43
@ SCT_AirKiss
Air Kiss.
Definition: Station.h:44
@ SCT_None
Definition: Station.h:42
@ SCT_EspTouch_V2
ESP Touch version 2.
Definition: Station.h:46
@ SCT_EspTouch_AirKiss
ESP Touch and Air Kiss.
Definition: Station.h:45
@ SCE_GettingSsid
Getting SSID & password.
Definition: Station.h:53
@ SCE_FindChannel
Find channel.
Definition: Station.h:52
@ SCE_Link
Link established.
Definition: Station.h:54
@ SCE_LinkOver
Link-over.
Definition: Station.h:55
@ SCE_Wait
Wait.
Definition: Station.h:51
@ success
Definition: Libraries/IOControl/include/IO/Error.h:71
Smart Config callback information.
Definition: Station.h:59
bool bssidSet
true if connection should match both SSID and BSSID
Definition: Station.h:63
String ssid
AP SSID.
Definition: Station.h:61
String password
AP Password.
Definition: Station.h:62
SmartConfigType type
Type of configuration underway.
Definition: Station.h:60
MacAddress bssid
AP BSSID.
Definition: Station.h:64
Station configuration passed to config method.
Definition: Station.h:114
MacAddress bssid
Set this to connect to a specific access point.
Definition: Station.h:117
String ssid
Service Set to connect to (may be advertised by multiple access points)
Definition: Station.h:115
bool autoConnectOnStartup
Auto connect to this AP on system restart.
Definition: Station.h:118
bool save
Store new settings in NV memory.
Definition: Station.h:119
String password
Password (if required)
Definition: Station.h:116