From bad53905e8e84664b968c29145924f978f9658a0 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Thu, 5 Jul 2018 12:28:15 +0200 Subject: [PATCH] Prevent exceptions in WiFi if not yet started --- libraries/WiFi/src/WiFiAP.cpp | 34 ++++++++++++++++++++++--- libraries/WiFi/src/WiFiSTA.cpp | 45 ++++++++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/libraries/WiFi/src/WiFiAP.cpp b/libraries/WiFi/src/WiFiAP.cpp index c0c84028..f4a2fa54 100644 --- a/libraries/WiFi/src/WiFiAP.cpp +++ b/libraries/WiFi/src/WiFiAP.cpp @@ -184,6 +184,11 @@ bool WiFiAPClass::softAPdisconnect(bool wifioff) { bool ret; wifi_config_t conf; + + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return ESP_ERR_INVALID_STATE; + } + *conf.ap.ssid = 0; *conf.ap.password = 0; conf.ap.authmode = WIFI_AUTH_OPEN; // auth must be open if pass=0 @@ -204,6 +209,9 @@ bool WiFiAPClass::softAPdisconnect(bool wifioff) uint8_t WiFiAPClass::softAPgetStationNum() { wifi_sta_list_t clients; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return 0; + } if(esp_wifi_ap_get_sta_list(&clients) == ESP_OK) { return clients.num; } @@ -217,6 +225,9 @@ uint8_t WiFiAPClass::softAPgetStationNum() IPAddress WiFiAPClass::softAPIP() { tcpip_adapter_ip_info_t ip; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return IPAddress(); + } tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip); return IPAddress(ip.ip.addr); } @@ -229,7 +240,9 @@ IPAddress WiFiAPClass::softAPIP() */ uint8_t* WiFiAPClass::softAPmacAddress(uint8_t* mac) { - esp_wifi_get_mac(WIFI_IF_AP, mac); + if(WiFiGenericClass::getMode() != WIFI_MODE_NULL){ + esp_wifi_get_mac(WIFI_IF_AP, mac); + } return mac; } @@ -241,6 +254,9 @@ String WiFiAPClass::softAPmacAddress(void) { uint8_t mac[6]; char macStr[18] = { 0 }; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return String(); + } esp_wifi_get_mac(WIFI_IF_AP, mac); sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); @@ -253,9 +269,12 @@ String WiFiAPClass::softAPmacAddress(void) */ const char * WiFiAPClass::softAPgetHostname() { - const char * hostname; + const char * hostname = NULL; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return hostname; + } if(tcpip_adapter_get_hostname(TCPIP_ADAPTER_IF_AP, &hostname)) { - return NULL; + return hostname; } return hostname; } @@ -267,6 +286,9 @@ const char * WiFiAPClass::softAPgetHostname() */ bool WiFiAPClass::softAPsetHostname(const char * hostname) { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return false; + } return tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_AP, hostname) == ESP_OK; } @@ -276,6 +298,9 @@ bool WiFiAPClass::softAPsetHostname(const char * hostname) */ bool WiFiAPClass::softAPenableIpV6() { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return false; + } return tcpip_adapter_create_ip6_linklocal(TCPIP_ADAPTER_IF_AP) == ESP_OK; } @@ -286,6 +311,9 @@ bool WiFiAPClass::softAPenableIpV6() IPv6Address WiFiAPClass::softAPIPv6() { static ip6_addr_t addr; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return IPv6Address(); + } if(tcpip_adapter_get_ip6_linklocal(TCPIP_ADAPTER_IF_AP, &addr)) { return IPv6Address(); } diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index 99024e10..f1ffa1f1 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -399,6 +399,9 @@ uint8_t WiFiSTAClass::waitForConnectResult() */ IPAddress WiFiSTAClass::localIP() { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return IPAddress(); + } tcpip_adapter_ip_info_t ip; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); return IPAddress(ip.ip.addr); @@ -412,7 +415,9 @@ IPAddress WiFiSTAClass::localIP() */ uint8_t* WiFiSTAClass::macAddress(uint8_t* mac) { - esp_wifi_get_mac(WIFI_IF_STA, mac); + if(WiFiGenericClass::getMode() != WIFI_MODE_NULL){ + esp_wifi_get_mac(WIFI_IF_STA, mac); + } return mac; } @@ -424,6 +429,9 @@ String WiFiSTAClass::macAddress(void) { uint8_t mac[6]; char macStr[18] = { 0 }; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return String(); + } esp_wifi_get_mac(WIFI_IF_STA, mac); sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); @@ -436,6 +444,9 @@ String WiFiSTAClass::macAddress(void) */ IPAddress WiFiSTAClass::subnetMask() { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return IPAddress(); + } tcpip_adapter_ip_info_t ip; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); return IPAddress(ip.netmask.addr); @@ -447,6 +458,9 @@ IPAddress WiFiSTAClass::subnetMask() */ IPAddress WiFiSTAClass::gatewayIP() { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return IPAddress(); + } tcpip_adapter_ip_info_t ip; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); return IPAddress(ip.gw.addr); @@ -459,6 +473,9 @@ IPAddress WiFiSTAClass::gatewayIP() */ IPAddress WiFiSTAClass::dnsIP(uint8_t dns_no) { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return IPAddress(); + } ip_addr_t dns_ip = dns_getserver(dns_no); return IPAddress(dns_ip.u_addr.ip4.addr); } @@ -469,6 +486,9 @@ IPAddress WiFiSTAClass::dnsIP(uint8_t dns_no) */ String WiFiSTAClass::SSID() const { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return String(); + } wifi_ap_record_t info; if(!esp_wifi_sta_get_ap_info(&info)) { return String(reinterpret_cast(info.ssid)); @@ -482,6 +502,9 @@ String WiFiSTAClass::SSID() const */ String WiFiSTAClass::psk() const { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return String(); + } wifi_config_t conf; esp_wifi_get_config(WIFI_IF_STA, &conf); return String(reinterpret_cast(conf.sta.password)); @@ -495,6 +518,9 @@ uint8_t* WiFiSTAClass::BSSID(void) { static uint8_t bssid[6]; wifi_ap_record_t info; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return NULL; + } if(!esp_wifi_sta_get_ap_info(&info)) { memcpy(bssid, info.bssid, 6); return reinterpret_cast(bssid); @@ -523,6 +549,9 @@ String WiFiSTAClass::BSSIDstr(void) */ int8_t WiFiSTAClass::RSSI(void) { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return 0; + } wifi_ap_record_t info; if(!esp_wifi_sta_get_ap_info(&info)) { return info.rssi; @@ -536,7 +565,10 @@ int8_t WiFiSTAClass::RSSI(void) */ const char * WiFiSTAClass::getHostname() { - const char * hostname; + const char * hostname = NULL; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return hostname; + } if(tcpip_adapter_get_hostname(TCPIP_ADAPTER_IF_STA, &hostname)){ return NULL; } @@ -550,6 +582,9 @@ const char * WiFiSTAClass::getHostname() */ bool WiFiSTAClass::setHostname(const char * hostname) { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return false; + } return tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, hostname) == 0; } @@ -559,6 +594,9 @@ bool WiFiSTAClass::setHostname(const char * hostname) */ bool WiFiSTAClass::enableIpV6() { + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return false; + } return tcpip_adapter_create_ip6_linklocal(TCPIP_ADAPTER_IF_STA) == 0; } @@ -569,6 +607,9 @@ bool WiFiSTAClass::enableIpV6() IPv6Address WiFiSTAClass::localIPv6() { static ip6_addr_t addr; + if(WiFiGenericClass::getMode() == WIFI_MODE_NULL){ + return IPv6Address(); + } if(tcpip_adapter_get_ip6_linklocal(TCPIP_ADAPTER_IF_STA, &addr)){ return IPv6Address(); }