SPSP
Simple publish-subscribe protocol. Connects low power IoT clients to MQTT.
All Classes Files Functions Variables Typedefs Enumerations
wifi_station.hpp
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include <chrono>
13 #include <exception>
14 #include <future>
15 #include <mutex>
16 #include <string>
17 
18 #include "esp_event.h"
19 #include "esp_netif.h"
20 
21 #include "spsp/wifi_espnow_if.hpp"
22 #include "spsp/wifi_types.hpp"
23 
24 namespace SPSP::WiFi
25 {
31  {
32  // Connection
33  std::string ssid;
34  std::string password;
35  bool lockBssid = false;
36  uint8_t bssid[6];
37 
38  // WPA Enterprise
39  // Required fields depend on chosen EAP type.
40  bool enableWPAEnterprise = false;
41  bool enableWPA3EAP192bit = false;
42  std::string eapIdentity;
43  std::string eapCACrt;
44  std::string eapCrt;
45  std::string eapCrtKey;
46  std::string eapUsername;
47  std::string eapPassword;
48 
49  // Network
50  std::string hostnamePrefix = "spsp-";
51  std::string sntpServer = "pool.ntp.org";
52  bool enableIPv6 = false;
53 
54  // Signal
55  int maxTxPower = TX_POWER_DEFAULT;
56 
57  // Timing
58  std::chrono::milliseconds initTimeout = std::chrono::seconds(20);
59  std::chrono::milliseconds sntpTimeout = std::chrono::seconds(20);
60  };
61 
78  class Station : public IESPNOW
79  {
80  std::mutex m_mutex;
81  StationConfig m_config = {};
82  esp_netif_t* m_netIf = nullptr;
83  bool m_initialized = false;
84  std::promise<void> m_connectingPromise;
85 
86  public:
94  Station(const StationConfig& config);
95 
100  virtual ~Station();
101 
107  uint8_t getChannel();
108 
114  void setChannel(uint8_t ch);
115 
125 
132 
133  private:
139  void createIPv6LinkLocal();
140 
146  void initNVS();
147 
153  void initNetIf();
154 
160  void registerEventHandlers();
161 
167  void initWiFiConfig();
168 
177  static void eventHandlerWiFi(void* ctx, esp_event_base_t eventBase,
178  int32_t eventId, void* eventData);
179 
188  static void eventHandlerIP(void* ctx, esp_event_base_t eventBase,
189  int32_t eventId, void* eventData);
190  };
191 } // namespace SPSP::WiFi
wifi_espnow_if.hpp
WiFi interface for ESP-NOW.
SPSP::WiFi::Station::setChannel
void setChannel(uint8_t ch)
Sets current channel.
SPSP::WiFi::Station::getChannelRestrictions
const ChannelRestrictions getChannelRestrictions()
Get the Channel Restrictions object.
SPSP::WiFi::StationConfig::bssid
uint8_t bssid[6]
MAC address of AP.
Definition: wifi_station.hpp:36
SPSP::WiFi::StationConfig::eapCACrt
std::string eapCACrt
Certificate content, not filename.
Definition: wifi_station.hpp:43
SPSP::WiFi::Station::getChannel
uint8_t getChannel()
Gets current WiFi channel.
SPSP::WiFi::StationConfig::enableIPv6
bool enableIPv6
Whether to enable IPv6 addressing (waits for either IPv4 or global IPv6 address)
Definition: wifi_station.hpp:52
SPSP::WiFi::StationConfig::maxTxPower
int maxTxPower
Maximum transmit power (in dBm)
Definition: wifi_station.hpp:55
SPSP::WiFi::IESPNOW
Requirements of ESP-NOW from WiFi instance.
Definition: wifi_espnow_if.hpp:23
SPSP::WiFi::Station::Station
Station(const StationConfig &config)
Constructs new WiFi station object and initializes connection.
SPSP::WiFi::StationConfig::lockBssid
bool lockBssid
Whether to use only AP with MAC address bssid
Definition: wifi_station.hpp:35
SPSP::WiFi::StationConfig::sntpTimeout
std::chrono::milliseconds sntpTimeout
Timeout for initial time synchronization using SNTP server.
Definition: wifi_station.hpp:59
SPSP::WiFi::StationConfig::sntpServer
std::string sntpServer
SNTP server address.
Definition: wifi_station.hpp:51
SPSP::WiFi::StationConfig::hostnamePrefix
std::string hostnamePrefix
Hostname prefix (followed by MAC address)
Definition: wifi_station.hpp:50
SPSP::WiFi::StationConfig::ssid
std::string ssid
SSID.
Definition: wifi_station.hpp:33
SPSP::WiFi::Station
WiFi station for ESP platform.
Definition: wifi_station.hpp:78
SPSP::WiFi::StationConfig::initTimeout
std::chrono::milliseconds initTimeout
Timeout for connecting to AP.
Definition: wifi_station.hpp:58
SPSP::WiFi::StationConfig
WiFi station configuration.
Definition: wifi_station.hpp:30
SPSP::WiFi::StationConfig::enableWPA3EAP192bit
bool enableWPA3EAP192bit
Unavailable on some chips.
Definition: wifi_station.hpp:41
SPSP::WiFi::StationConfig::eapCrt
std::string eapCrt
Certificate content, not filename.
Definition: wifi_station.hpp:44
SPSP::WiFi::Station::setChannelRestrictions
void setChannelRestrictions(const ChannelRestrictions &rest)
Sets channel restrictions.
SPSP::WiFi::ChannelRestrictions
WiFi channel restrictions structure.
Definition: wifi_types.hpp:33
SPSP::WiFi::Station::~Station
virtual ~Station()
Disconnects from AP and destroys WiFi station.
SPSP::WiFi::StationConfig::eapCrtKey
std::string eapCrtKey
Certificate content, not filename.
Definition: wifi_station.hpp:45
SPSP::WiFi::StationConfig::password
std::string password
Password.
Definition: wifi_station.hpp:34
wifi_types.hpp
Common WiFi types (and some constants)