From e3cfdd5ac15de41a62c26edc9517d2290bca4525 Mon Sep 17 00:00:00 2001 From: dtworth <36244729+dtworth@users.noreply.github.com> Date: Wed, 11 Apr 2018 16:09:26 -0400 Subject: [PATCH 1/2] Added channel, ssid scan Overloaded scanNetworks so scan can occur on a single channel and/or for a particular ssid. --- libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp | 47 +++++++++++++++++++ libraries/ESP8266WiFi/src/ESP8266WiFiScan.h | 1 + 2 files changed, 48 insertions(+) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp index f83049c0bd..bcd1f80752 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp @@ -102,6 +102,53 @@ int8_t ESP8266WiFiScanClass::scanNetworks(bool async, bool show_hidden) { } +/** + * Start scan WiFi networks available + * @param async run in async mode + * @param show_hidden show hidden networks + * @param channel scan only this channel (0 for all channels) + * @param ssid* scan for only this ssid + + * @return Number of discovered networks + */ +int8_t ESP8266WiFiScanClass::scanNetworks(bool async, bool show_hidden, uint8 channel, uint8* ssid) { + if(ESP8266WiFiScanClass::_scanStarted) { + return WIFI_SCAN_RUNNING; + } + + ESP8266WiFiScanClass::_scanAsync = async; + + WiFi.enableSTA(true); + + int status = wifi_station_get_connect_status(); + if(status != STATION_GOT_IP && status != STATION_IDLE) { + wifi_station_disconnect(); + } + + scanDelete(); + + struct scan_config config; + memset(&config, 0, sizeof(config)); + config.ssid = ssid; + config.channel = channel; + config.show_hidden = show_hidden; + if(wifi_station_scan(&config, reinterpret_cast(&ESP8266WiFiScanClass::_scanDone))) { + ESP8266WiFiScanClass::_scanComplete = false; + ESP8266WiFiScanClass::_scanStarted = true; + + if(ESP8266WiFiScanClass::_scanAsync) { + delay(0); // time for the OS to trigger the scan + return WIFI_SCAN_RUNNING; + } + + esp_yield(); + return ESP8266WiFiScanClass::_scanCount; + } else { + return WIFI_SCAN_FAILED; + } + +} + /** * Starts scanning WiFi networks available in async mode * @param onComplete the event handler executed when the scan is done diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h index 742f742190..36a697a048 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h @@ -35,6 +35,7 @@ class ESP8266WiFiScanClass { public: int8_t scanNetworks(bool async = false, bool show_hidden = false); + int8_t scanNetworks(bool async, bool show_hidden, uint8 channel, uint8* ssid = NULL); void scanNetworksAsync(std::function onComplete, bool show_hidden = false); int8_t scanComplete(); From 72ffa6eafc4b73ba33493b0a385ed5fc1cba4ada Mon Sep 17 00:00:00 2001 From: dtworth <36244729+dtworth@users.noreply.github.com> Date: Thu, 12 Apr 2018 09:00:27 -0400 Subject: [PATCH 2/2] Added parameters to scanNetworks channel number and ssid have been added as optional parameters to the orginal scanNetworks() --- libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp | 45 +------------------ libraries/ESP8266WiFi/src/ESP8266WiFiScan.h | 3 +- 2 files changed, 2 insertions(+), 46 deletions(-) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp index bcd1f80752..6ce8d3d2c0 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp @@ -60,55 +60,12 @@ void* ESP8266WiFiScanClass::_scanResult = 0; std::function ESP8266WiFiScanClass::_onComplete; -/** - * Start scan WiFi networks available - * @param async run in async mode - * @param show_hidden show hidden networks - * @return Number of discovered networks - */ -int8_t ESP8266WiFiScanClass::scanNetworks(bool async, bool show_hidden) { - if(ESP8266WiFiScanClass::_scanStarted) { - return WIFI_SCAN_RUNNING; - } - - ESP8266WiFiScanClass::_scanAsync = async; - - WiFi.enableSTA(true); - - int status = wifi_station_get_connect_status(); - if(status != STATION_GOT_IP && status != STATION_IDLE) { - wifi_station_disconnect(); - } - - scanDelete(); - - struct scan_config config; - memset(&config, 0, sizeof(config)); - config.show_hidden = show_hidden; - if(wifi_station_scan(&config, reinterpret_cast(&ESP8266WiFiScanClass::_scanDone))) { - ESP8266WiFiScanClass::_scanComplete = false; - ESP8266WiFiScanClass::_scanStarted = true; - - if(ESP8266WiFiScanClass::_scanAsync) { - delay(0); // time for the OS to trigger the scan - return WIFI_SCAN_RUNNING; - } - - esp_yield(); - return ESP8266WiFiScanClass::_scanCount; - } else { - return WIFI_SCAN_FAILED; - } - -} - /** * Start scan WiFi networks available * @param async run in async mode * @param show_hidden show hidden networks * @param channel scan only this channel (0 for all channels) - * @param ssid* scan for only this ssid - + * @param ssid* scan for only this ssid (NULL for all ssid's) * @return Number of discovered networks */ int8_t ESP8266WiFiScanClass::scanNetworks(bool async, bool show_hidden, uint8 channel, uint8* ssid) { diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h index 36a697a048..e799c4bd7d 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h @@ -34,8 +34,7 @@ class ESP8266WiFiScanClass { public: - int8_t scanNetworks(bool async = false, bool show_hidden = false); - int8_t scanNetworks(bool async, bool show_hidden, uint8 channel, uint8* ssid = NULL); + int8_t scanNetworks(bool async = false, bool show_hidden = false, uint8 channel = 0, uint8* ssid = NULL); void scanNetworksAsync(std::function onComplete, bool show_hidden = false); int8_t scanComplete();