diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index b2ae6a28a94..e3f033c0165 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -716,14 +716,23 @@ String WiFiSTAClass::psk() const * Return the current bssid / mac associated with the network if configured * @return bssid uint8_t * */ -uint8_t* WiFiSTAClass::BSSID(void) +uint8_t* WiFiSTAClass::BSSID(uint8_t* buff) { 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)) { + esp_err_t err = esp_wifi_sta_get_ap_info(&info); + if (buff != NULL) { + if(err) { + memset(buff, 0, 6); + } else { + memcpy(buff, info.bssid, 6); + } + return buff; + } + if(!err) { memcpy(bssid, info.bssid, 6); return reinterpret_cast(bssid); } diff --git a/libraries/WiFi/src/WiFiSTA.h b/libraries/WiFi/src/WiFiSTA.h index 0b8f9daf053..6f65f6ff7e1 100644 --- a/libraries/WiFi/src/WiFiSTA.h +++ b/libraries/WiFi/src/WiFiSTA.h @@ -98,7 +98,7 @@ class WiFiSTAClass String SSID() const; String psk() const; - uint8_t * BSSID(); + uint8_t * BSSID(uint8_t* bssid = NULL); String BSSIDstr(); int8_t RSSI(); diff --git a/libraries/WiFi/src/WiFiScan.cpp b/libraries/WiFi/src/WiFiScan.cpp index f4a32e49a6b..37e86a198df 100644 --- a/libraries/WiFi/src/WiFiScan.cpp +++ b/libraries/WiFi/src/WiFiScan.cpp @@ -243,11 +243,20 @@ int32_t WiFiScanClass::RSSI(uint8_t i) /** * return MAC / BSSID of scanned wifi * @param i specify from which network item want to get the information + * @param buff optional buffer for the result uint8_t array with length 6 * @return uint8_t * MAC / BSSID of scanned wifi */ -uint8_t * WiFiScanClass::BSSID(uint8_t i) +uint8_t * WiFiScanClass::BSSID(uint8_t i, uint8_t* buff) { wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + if(buff != NULL) { + if(!it) { + memset(buff, 0, 6); + } else { + memcpy(buff, it->bssid, 6); + } + return buff; + } if(!it) { return 0; } diff --git a/libraries/WiFi/src/WiFiScan.h b/libraries/WiFi/src/WiFiScan.h index b838dc17574..ec3ee155e7e 100644 --- a/libraries/WiFi/src/WiFiScan.h +++ b/libraries/WiFi/src/WiFiScan.h @@ -42,7 +42,7 @@ class WiFiScanClass String SSID(uint8_t networkItem); wifi_auth_mode_t encryptionType(uint8_t networkItem); int32_t RSSI(uint8_t networkItem); - uint8_t * BSSID(uint8_t networkItem); + uint8_t * BSSID(uint8_t networkItem, uint8_t* bssid = NULL); String BSSIDstr(uint8_t networkItem); int32_t channel(uint8_t networkItem); static void * getScanInfoByIndex(int i) { return _getScanInfoByIndex(i); };