Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions src/YoYoWiFiManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1395,7 +1395,6 @@ int YoYoWiFiManager::updateClientList() {
adapter_sta_list.num = count;

int n=0;
tcpip_adapter_sta_info_t station;
while (count > 0 && stat_info != NULL) {
memcpy(adapter_sta_list.sta[n].mac, stat_info->bssid, sizeof(stat_info->bssid[0])*6);
adapter_sta_list.sta[n].ip = stat_info->ip;
Expand All @@ -1406,8 +1405,24 @@ int YoYoWiFiManager::updateClientList() {
wifi_softap_free_station_info();

#elif defined(ESP32)
//tcpip_adapter_get_sta_list() was removed from current ESP-IDF - unlike the old single call,
//esp_wifi only gives MAC addresses (esp_wifi_ap_get_sta_list()); each station's IP has to be
//looked up separately from the AP's DHCP server lease table by MAC (esp_netif_dhcps_get_clients_by_mac()):
esp_wifi_ap_get_sta_list(&wifi_sta_list);
esp_netif_get_sta_list(&wifi_sta_list, &adapter_sta_list); //tcpip_adapter_get_sta_list() was removed from current ESP-IDF - this is its documented esp_netif replacement

esp_netif_pair_mac_ip_t mac_ip_pair[ESP_WIFI_MAX_CONN_NUM];
for (int n = 0; n < wifi_sta_list.num; n++) {
memcpy(mac_ip_pair[n].mac, wifi_sta_list.sta[n].mac, 6);
}

esp_netif_t *apNetif = esp_netif_get_handle_from_ifkey("WIFI_AP_DEF");
esp_netif_dhcps_get_clients_by_mac(apNetif, wifi_sta_list.num, mac_ip_pair);

adapter_sta_list.num = wifi_sta_list.num;
for (int n = 0; n < wifi_sta_list.num; n++) {
memcpy(adapter_sta_list.sta[n].mac, mac_ip_pair[n].mac, 6);
memcpy(&(adapter_sta_list.sta[n].ip), &(mac_ip_pair[n].ip), sizeof(adapter_sta_list.sta[n].ip));
}
count = adapter_sta_list.num;
#endif
}
Expand Down
8 changes: 3 additions & 5 deletions src/YoYoWiFiManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@
#include <ESP8266WiFiMulti.h>
#include <ESPAsyncTCP.h> //not currently available via Library Manager > https://github.com/me-no-dev/ESPAsyncTCP
#include <ESP8266HTTPClient.h>
#include "YoYoWiFiManager/wifi_sta.h"

#elif defined(ESP32)
#include <HTTPClient.h>
#include <HTTPUpdate.h>
#include <WiFiMulti.h>
#include <esp_wifi.h>
#include <esp_netif.h> //esp_netif_get_sta_list()/esp_netif_sta_list_t - replaces the removed tcpip_adapter_get_sta_list()/tcpip_adapter_sta_list_t
#include <esp_netif.h> //esp_netif_get_handle_from_ifkey()/esp_netif_dhcps_get_clients_by_mac() - used to resolve each AP station's IP, replacing the removed tcpip_adapter_get_sta_list()
#include <AsyncTCP.h>
#include <SPIFFS.h>
#endif
#include "YoYoWiFiManager/wifi_sta.h" //this library's own station-list type, used on both platforms - see #61
//#include <SdFat.h>
#include <SD.h> //https://www.arduino.cc/en/Reference/SD + https://github.com/arduino-libraries/SD
#include <SPI.h>
Expand Down Expand Up @@ -180,10 +180,8 @@ class YoYoWiFiManager : public AsyncWebHandler {

#if defined(ESP32)
wifi_sta_list_t wifi_sta_list;
esp_netif_sta_list_t adapter_sta_list;
#elif defined(ESP8266)
tcpip_adapter_sta_list_t adapter_sta_list;
#endif
YoYoStaList adapter_sta_list;

int POST(const char *server, const char *path, const char *payload, char *contentType, char *response = NULL);
int GET(const char *server, const char *path, char *response);
Expand Down
11 changes: 7 additions & 4 deletions src/YoYoWiFiManager/wifi_sta.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@

#define ESP_WIFI_MAX_CONN_NUM (10) //TODO: is this right? This is the max for ESP32

//This library's own station-list shape, used on both ESP8266 and ESP32 - deliberately
//not tied to any particular SDK struct, since ESP-IDF has already removed/renamed its
//own equivalent (tcpip_adapter_sta_list_t) once - see #61:
typedef struct {
uint8_t mac[6];
ip4_addr_t ip;
} tcpip_adapter_sta_info_t;
} YoYoStaInfo;

typedef struct {
tcpip_adapter_sta_info_t sta[ESP_WIFI_MAX_CONN_NUM];
YoYoStaInfo sta[ESP_WIFI_MAX_CONN_NUM];
int num;
} tcpip_adapter_sta_list_t;
} YoYoStaList;

#endif
#endif
Loading