@@ -41,17 +41,13 @@ static void setDNSServer(char *ip) {
41
41
}
42
42
*/
43
43
44
-
45
- }
46
- */
47
-
48
44
/* *
49
45
* @brief Creates and uses a default event handler
50
46
*/
51
47
WiFi::WiFi ()
52
- : ip(" " )
53
- , gw(" " )
54
- , netmask(" " )
48
+ : ip(0 )
49
+ , gw(0 )
50
+ , netmask(0 )
55
51
, wifiEventHandler(nullptr )
56
52
{
57
53
wifiEventHandler = new WiFiEventHandler ();
@@ -86,10 +82,14 @@ void WiFi::addDNSServer(const std::string& ip) {
86
82
} // addDNSServer
87
83
88
84
void WiFi::addDNSServer (const char * ip) {
89
- ip_addr_t dnsserver;
90
- ESP_LOGD (tag, " Setting DNS[%d] to %s" , m_dnsCount, ip);
91
- inet_pton (AF_INET, ip, &dnsserver);
92
- ::dns_setserver (m_dnsCount, &dnsserver);
85
+ ip_addr_t dns_server;
86
+ if (inet_pton (AF_INET, ip, &dns_server))
87
+ addDNSServer (ip);
88
+ } // addDNSServer
89
+
90
+ void WiFi::addDNSServer (ip_addr_t ip) {
91
+ ESP_LOGD (tag, " Setting DNS[%d] to %d.%d.%d.%d" , m_dnsCount, ((uint8_t *)(&ip))[0 ], ((uint8_t *)(&ip))[1 ], ((uint8_t *)(&ip))[2 ], ((uint8_t *)(&ip))[3 ]);
92
+ ::dns_setserver (m_dnsCount, &ip);
93
93
m_dnsCount++;
94
94
m_dnsCount %= 2 ;
95
95
} // addDNSServer
@@ -115,10 +115,14 @@ void WiFi::setDNSServer(int numdns, const std::string& ip) {
115
115
} // setDNSServer
116
116
117
117
void WiFi::setDNSServer (int numdns, const char * ip) {
118
- ip_addr_t dnsserver;
119
- ESP_LOGD (tag, " Setting DNS[%d] to %s" , numdns, ip);
120
8000
td>
- inet_pton (AF_INET, ip, &dnsserver);
121
- ::dns_setserver (numdns, &dnsserver);
118
+ ip_addr_t dns_server;
119
+ if (inet_pton (AF_INET, ip, &dns_server))
120
+ setDNSServer (numdns, dns_server);
121
+ } // setDNSServer
122
+
123
+ void WiFi::setDNSServer (int numdns, ip_addr_t ip) {
124
+ ESP_LOGD (tag, " Setting DNS[%d] to %d.%d.%d.%d" , m_dnsCount, ((uint8_t *)(&ip))[0 ], ((uint8_t *)(&ip))[1 ], ((uint8_t *)(&ip))[2 ], ((uint8_t *)(&ip))[3 ]);
125
+ ::dns_setserver (numdns, &ip);
122
126
} // setDNSServer
123
127
124
128
/* *
@@ -133,20 +137,19 @@ void WiFi::setDNSServer(int numdns, const char* ip) {
133
137
void WiFi::connectAP (const std::string& ssid, const std::string& password){
134
138
::nvs_flash_init ();
135
139
::tcpip_adapter_init ();
136
- if (ip. length () > 0 && gw. length () > 0 && netmask. length () > 0 ) {
140
+ if (ip != 0 && gw != 0 && netmask != 0 ) {
137
141
::tcpip_adapter_dhcpc_stop (TCPIP_ADAPTER_IF_STA); // Don't run a DHCP client
142
+
138
143
tcpip_adapter_ip_info_t ipInfo;
144
+ ipInfo.ip .addr = ip;
145
+ ipInfo.gw .addr = gw;
146
+ ipInfo.netmask .addr = netmask;
139
147
140
- inet_pton (AF_INET, ip.data (), &ipInfo.ip );
141
- inet_pton (AF_INET, gw.data (), &ipInfo.gw );
142
- inet_pton (AF_INET, netmask.data (), &ipInfo.netmask );
143
148
::tcpip_adapter_set_ip_info (TCPIP_ADAPTER_IF_STA, &ipInfo);
144
149
}
145
150
146
151
147
152
ESP_ERROR_CHECK ( esp_event_loop_init (wifiEventHandler->getEventHandler (), wifiEventHandler));
148
- wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT ();
149
- ESP_ERROR_CHECK (::esp_wifi_init (&cfg));
150
153
ESP_ERROR_CHECK (::esp_wifi_set_storage (WIFI_STORAGE_RAM));
151
154
ESP_ERROR_CHECK (::esp_wifi_set_mode (WIFI_MODE_STA));
152
155
wifi_config_t sta_config;
@@ -366,7 +369,8 @@ void WiFi::startAP(const std::string& ssid, const std::string& password) {
366
369
367
370
368
371
/* *
369
- * @brief Set the IP info used when connecting as a station to an external access point.
372
+ * @brief Set the IP info and enable DHCP if ip != 0. If called with ip == 0 then DHCP is enabled.
373
+ * If called with bad values it will do nothing.
370
374
*
371
375
* Do not call this method if we are being an access point ourselves.
372
376
*
@@ -382,17 +386,43 @@ void WiFi::startAP(const std::string& ssid, const std::string& password) {
382
386
* @return N/A.
383
387
*/
384
388
void WiFi::setIPInfo (const std::string& ip, const std::string& gw, const std::string& netmask) {
389
+ setIPInfo (ip.c_str (), gw.c_str (), netmask.c_str ());
390
+ } // setIPInfo
391
+
392
+ void WiFi::setIPInfo (const char * ip, const char * gw, const char * netmask) {
393
+ uint32_t new_ip;
394
+ uint32_t new_gw;
395
+ uint32_t new_netmask;
396
+
397
+ auto success = (bool )inet_pton (AF_INET, ip, &new_ip);
398
+ success = success && inet_pton (AF_INET, gw, &new_gw);
399
+ success = success && inet_pton (AF_INET, netmask, &new_netmask);
400
+
401
+ if (!success) {
402
+ return ;
403
+ }
404
+
405
+ setIPInfo (new_ip, new_gw, new_netmask);
406
+ } // setIPInfo
407
+
408
+ void WiFi::setIPInfo (uint32_t ip, uint32_t gw, uint32_t netmask) {
385
409
this ->ip = ip;
386
410
this ->gw = gw;
387
411
this ->netmask = netmask;
388
- } // setIPInfo
389
412
390
- void WiFi::setIPInfo (std::string&& ip, std::string && gw, std::string && netmask) {
391
- this -> ip = std::move (ip) ;
392
- this -> gw = std::move (gw) ;
393
- this -> netmask = std::move (netmask) ;
394
- } // setIPInfo
413
+ if (ip != 0 && gw != 0 && netmask != 0 ) {
414
+ tcpip_adapter_ip_info_t ipInfo ;
415
+ ipInfo. ip . addr = ip ;
416
+ ipInfo. gw . addr = gw ;
417
+ ipInfo. netmask . addr = netmask;
395
418
419
+ ::tcpip_adapter_dhcpc_stop (TCPIP_ADAPTER_IF_STA);
420
+ ::tcpip_adapter_set_ip_info (TCPIP_ADAPTER_IF_STA, &ipInfo);
421
+ } else {
422
+ ip = 0 ;
423
+ ::tcpip_adapter_dhcpc_start (TCPIP_ADAPTER_IF_STA);
424
+ }
425
+ }
396
426
397
427
/* *
398
428
* @brief Return a string representation of the WiFi access point record.
0 commit comments