1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-17 22:23:10 +03:00

Rework of arduino compatibility in WiFiSTAClass::config (#4145)

This commit is contained in:
Develo
2018-01-17 15:30:24 -03:00
committed by GitHub
parent bb794f9e02
commit b08ff10269

View File

@ -214,26 +214,40 @@ swap(IPAddress &lhs, IPAddress &rhs)
* @param dns1 Static DNS server 1 * @param dns1 Static DNS server 1
* @param dns2 Static DNS server 2 * @param dns2 Static DNS server 2
*/ */
bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2) { bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress arg1, IPAddress arg2, IPAddress arg3, IPAddress dns2) {
if(!WiFi.enableSTA(true)) { if(!WiFi.enableSTA(true)) {
return false; return false;
} }
//Arduino has a different arg order: ip, dns, gateway, subnet. To allow compatibility, check first octet of 3rd arg. If 255, interpret as ESP order, otherwise Arduino order. //ESP argument order is: ip, gateway, subnet, dns1
//Arduino arg order is: ip, dns, gateway, subnet.
//first, check whether dhcp should be used, which is when ip == 0 && gateway == 0 && subnet == 0.
bool espOrderUseDHCP = (local_ip == 0U && arg1 == 0U && arg2 == 0U);
bool arduinoOrderUseDHCP = (local_ip == 0U && arg2 == 0U && arg3 == 0U);
if (espOrderUseDHCP || arduinoOrderUseDHCP) {
_useStaticIp = false;
wifi_station_dhcpc_start();
return true;
}
//To allow compatibility, check first octet of 3rd arg. If 255, interpret as ESP order, otherwise Arduino order.
IPAddress gateway = arg1;
IPAddress subnet = arg2;
IPAddress dns1 = arg3;
if(subnet[0] != 255) if(subnet[0] != 255)
{ {
//octet is not 255 => interpret as Arduino order //octet is not 255 => interpret as Arduino order
gateway = arg2;
if(dns1[0] == 0) subnet = arg3[0] == 0 ? IPAddress(255,255,255,0) : arg3; //arg order is arduino and 4th arg not given => assign it arduino default
{ dns1 = arg1;
//arg order is arduino and 4th arg not given => assign it arduino default
dns1 = IPAddress(255,255,255,0);
} }
//current order is arduino: ip-dns-gway-subnet //ip and gateway must be in the same subnet
swap(gateway, subnet); //after this, order is ip-gway-dns-subnet if((local_ip & subnet) != (gateway & subnet)) {
swap(subnet, dns1); //after this, order is ip-gway-subnet-dns (correct ESP order) return false;
} }
struct ip_info info; struct ip_info info;
@ -241,12 +255,6 @@ bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddres
info.gw.addr = static_cast<uint32_t>(gateway); info.gw.addr = static_cast<uint32_t>(gateway);
info.netmask.addr = static_cast<uint32_t>(subnet); info.netmask.addr = static_cast<uint32_t>(subnet);
if (local_ip == 0U && gateway == 0U && subnet == 0U) {
_useStaticIp = false;
wifi_station_dhcpc_start();
return true;
}
wifi_station_dhcpc_stop(); wifi_station_dhcpc_stop();
if(wifi_set_ip_info(STATION_IF, &info)) { if(wifi_set_ip_info(STATION_IF, &info)) {
_useStaticIp = true; _useStaticIp = true;