From 83cb66091567dbc4e7ae688e714432aa7ea575b8 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Wed, 28 Oct 2015 10:30:40 +1100 Subject: [PATCH 1/2] Add prototypes for existing softap_xxx_station_info SDK functions --- core/include/sdk_internal.h | 4 ++-- examples/access_point/access_point.c | 1 + include/espressif/esp_softap.h | 13 +++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/include/sdk_internal.h b/core/include/sdk_internal.h index 5a5aee5..94bac39 100644 --- a/core/include/sdk_internal.h +++ b/core/include/sdk_internal.h @@ -81,8 +81,8 @@ struct sdk_g_ic_volatile_st { void *_unknown180; void *_unknown184; - struct station_info *station_info_head; - struct station_info *station_info_tail; + struct sdk_station_info *station_info_head; + struct sdk_station_info *station_info_tail; uint32_t _unknown190; uint32_t _unknown194; diff --git a/examples/access_point/access_point.c b/examples/access_point/access_point.c index 7091207..7a95479 100644 --- a/examples/access_point/access_point.c +++ b/examples/access_point/access_point.c @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/include/espressif/esp_softap.h b/include/espressif/esp_softap.h index 8a81aef..4101a04 100644 --- a/include/espressif/esp_softap.h +++ b/include/espressif/esp_softap.h @@ -6,6 +6,10 @@ #ifndef __ESP_SOFTAP_H__ #define __ESP_SOFTAP_H__ +#include +#include "lwip/ip_addr.h" +#include "espressif/queue.h" + #ifdef __cplusplus extern "C" { #endif @@ -24,6 +28,15 @@ struct sdk_softap_config { bool sdk_wifi_softap_get_config(struct sdk_softap_config *config); bool sdk_wifi_softap_set_config(struct sdk_softap_config *config); +struct sdk_station_info { + STAILQ_ENTRY(sdk_station_info) next; + uint8_t bssid[6]; + struct ip_addr ip; +}; + +struct sdk_station_info* sdk_wifi_softap_get_station_info(); +bool sdk_wifi_softap_free_station_info(); + #ifdef __cplusplus } #endif From 384cae324f7c279d0d8db2498de59d47cf0ed279 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Wed, 28 Oct 2015 10:31:13 +1100 Subject: [PATCH 2/2] access_point example: Print parts of station_info output to telnet client See #51 for relevant discussions --- examples/access_point/access_point.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/examples/access_point/access_point.c b/examples/access_point/access_point.c index 7a95479..650b2ce 100644 --- a/examples/access_point/access_point.c +++ b/examples/access_point/access_point.c @@ -89,10 +89,36 @@ static void telnetTask(void *pvParameters) netconn_write(client, buf, strlen(buf), NETCONN_COPY); snprintf(buf, sizeof(buf), "Free heap %d bytes\r\n", (int)xPortGetFreeHeapSize()); netconn_write(client, buf, strlen(buf), NETCONN_COPY); - snprintf(buf, sizeof(buf), "Your address is %d.%d.%d.%d\r\n\r\n", + snprintf(buf, sizeof(buf), "Your address is %d.%d.%d.%d\n\n", ip4_addr1(&client_addr), ip4_addr2(&client_addr), ip4_addr3(&client_addr), ip4_addr4(&client_addr)); netconn_write(client, buf, strlen(buf), NETCONN_COPY); + + snprintf(buf, sizeof(buf), "Structures head %p tail %p \n", + sdk_g_ic.v.station_info_head, sdk_g_ic.v.station_info_tail); + netconn_write(client, buf, strlen(buf), NETCONN_COPY); + + if(sdk_g_ic.v.station_info_tail) { + snprintf(buf, sizeof(buf), "Tail BSSID %02x:%02x:%02x IP %d NEXT %p\n", + sdk_g_ic.v.station_info_tail->bssid[0], + sdk_g_ic.v.station_info_tail->bssid[1], + sdk_g_ic.v.station_info_tail->bssid[2], + ip4_addr1(&sdk_g_ic.v.station_info_tail->ip), + STAILQ_NEXT(sdk_g_ic.v.station_info_tail, next)); + netconn_write(client, buf, strlen(buf), NETCONN_COPY); + } + + struct sdk_station_info *station = sdk_wifi_softap_get_station_info(); + while(station) { + snprintf(buf, sizeof(buf), "Client %02x:%02x:%02x:%02x:%02x:%02x IP %d.%d.%d.%d\n", + station->bssid[0], station->bssid[1], station->bssid[2], + station->bssid[3], station->bssid[4], station->bssid[5], + ip4_addr1(&station->ip), ip4_addr2(&station->ip), + ip4_addr3(&station->ip), ip4_addr4(&station->ip)); + netconn_write(client, buf, strlen(buf), NETCONN_COPY); + station = STAILQ_NEXT(station, next); + } + netconn_delete(client); } }