-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWiFiTask.h
More file actions
130 lines (117 loc) · 2.53 KB
/
WiFiTask.h
File metadata and controls
130 lines (117 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef __wifitask_h__
#define __wifitask_h__
#include <ESP8266WiFi.h>
#include "common.h"
#include "config.h"
#include "task.h"
namespace wifitask_detail
{
class WiFiImpl : public TaskImpl {
public:
void configure(const char *ssid, const char *key)
{
if(is_configured())
{
logw() << "WiFi is aready configured, ignore configure request";
return;
}
if (key)
WiFi.begin(ssid, key);
else
WiFi.begin(ssid);
WiFi.setAutoConnect(true);
logi() << "Connect to " << ssid;
wifi_restart();
}
bool is_configured()
{
#ifndef CONF_WIFI_SSID
return WiFi.getAutoConnect();
#else
return true;
#endif
}
void configure_reset()
{
#ifndef CONF_WIFI_SSID
WiFi.setAutoConnect(false);
wifi_restart();
#endif
}
protected:
void on_start() override
{
#ifdef CONF_WIFI_SSID
WiFi.mode(WIFI_STA);
#ifdef CONF_WIFI_KEY
WiFi.begin(CONF_WIFI_SSID, CONF_WIFI_KEY);
#else
WiFi.begin(CONF_WIFI_SSID);
#endif
logi() << "Connect to " << CONF_WIFI_SSID;
#else
wifi_restart();
#endif
mConnected = false;
}
void on_loop() override
{
bool connected = WiFi.isConnected();
if (mConnected != connected)
{
mConnected = connected;
if (connected)
{
logi() << "WiFi connected";
logi() << " SSID: " << WiFi.SSID();
logi() << " IP: " << WiFi.localIP();
logi() << " GW: " << WiFi.gatewayIP();
logi() << " MASK: " << WiFi.subnetMask();
}
else
{
logi() << "WiFi disconnected";
}
}
}
void on_stop() override
{
WiFi.mode(WIFI_OFF);
}
const char* get_name() const override
{
return "WiFi";
}
private:
void wifi_restart()
{
if (is_configured())
{
logi() << "WiFi start as Station";
WiFi.mode(WIFI_STA);
}
else
{
logi() << "WiFi start as Access Point";
WiFi.mode(WIFI_AP);
}
}
bool mConnected;
};
}
class WiFiTask : public Task {
public:
void configure(const char *ssid, const char *key)
{
m_impl.configure(ssid, key);
}
void configure_reset()
{
m_impl.configure_reset();
}
WiFiTask() : Task(&m_impl)
{}
private:
wifitask_detail::WiFiImpl m_impl;
};
#endif