Merge branch 'feature/refractor_for_some_wifi_APIs' into 'master'

Feature/refractor for some wifi ap is

    1. Modify esp_wifi_get_station_list to esp_wifi_ap_get_sta_list
    2. Modify tcpip_adapter_get_station_list to tcpip_adapter_get_sta_list
    3. Remove esp_wifi_free_station_list
    4. Remove tcpip_adapter_free_station_list
    5. Modify related data struct accordingly
    6. Move soft watchdog from wifi lib to IDF

See merge request !152
This commit is contained in:
Wu Jian Gang 2016-10-27 10:08:32 +08:00
commit 8dcd78d52f
5 changed files with 37 additions and 69 deletions

View file

@ -191,14 +191,14 @@ esp_err_t esp_wifi_disconnect(void);
esp_err_t esp_wifi_clear_fast_connect(void); esp_err_t esp_wifi_clear_fast_connect(void);
/** /**
* @brief Kick the all station or associated id equals to aid * @brief deauthenticate all stations or associated id equals to aid
* *
* @param uint16_t aid : when aid is 0, kick all stations, otherwise kick station whose associated id is aid * @param uint16_t aid : when aid is 0, deauthenticate all stations, otherwise deauthenticate station whose associated id is aid
* *
* @return ESP_OK : succeed * @return ESP_OK : succeed
* @return others : fail * @return others : fail
*/ */
esp_err_t esp_wifi_kick_station(uint16_t aid); esp_err_t esp_wifi_deauth_sta(uint16_t aid);
/** /**
* @brief Scan all available APs. * @brief Scan all available APs.
@ -235,19 +235,19 @@ esp_err_t esp_wifi_scan_stop(void);
* @return ESP_OK : succeed * @return ESP_OK : succeed
* @return others : fail * @return others : fail
*/ */
esp_err_t esp_wifi_get_ap_num(uint16_t *number); esp_err_t esp_wifi_scan_get_ap_num(uint16_t *number);
/** /**
* @brief Get AP list found in last scan * @brief Get AP list found in last scan
* *
* @param uint16_t *number : as input param, it stores max AP number ap_list can hold, as output param, it store * @param uint16_t *number : as input param, it stores max AP number ap_records can hold, as output param, it store
the actual AP number this API returns the actual AP number this API returns
* @param wifi_ap_list_t *ap_list : a list to hold the found APs * @param wifi_ap_record_t *ap_records: an wifi_ap_record_t array to hold the found APs
* *
* @return ESP_OK : succeed * @return ESP_OK : succeed
* @return others : fail * @return others : fail
*/ */
esp_err_t esp_wifi_get_ap_list(uint16_t *number, wifi_ap_list_t *ap_list); esp_err_t esp_wifi_scan_get_ap_records(uint16_t *number, wifi_ap_record_t *ap_records);
/** /**
* @brief Set current power save type * @brief Set current power save type
@ -471,14 +471,13 @@ esp_err_t esp_wifi_get_config(wifi_interface_t ifx, wifi_config_t *conf);
* *
* @attention SSC only API * @attention SSC only API
* *
* @param struct station_info **station : station list * @param wifi_sta_list_t *sta: station list
* *
* @return ESP_OK : succeed * @return ESP_OK : succeed
* @return others : fail * @return others : fail
*/ */
esp_err_t esp_wifi_get_station_list(struct station_info **station); esp_err_t esp_wifi_ap_get_sta_list(wifi_sta_list_t *sta);
esp_err_t esp_wifi_free_station_list(void);
/** /**
* @brief Set the WiFi API configuration storage type * @brief Set the WiFi API configuration storage type

View file

@ -109,7 +109,7 @@ typedef struct {
wifi_second_chan_t second; /**< second channel of AP */ wifi_second_chan_t second; /**< second channel of AP */
int8_t rssi; /**< signal strength of AP */ int8_t rssi; /**< signal strength of AP */
wifi_auth_mode_t authmode; /**< authmode of AP */ wifi_auth_mode_t authmode; /**< authmode of AP */
} wifi_ap_list_t; } wifi_ap_record_t;
typedef enum { typedef enum {
WIFI_PS_NONE, /**< No power save */ WIFI_PS_NONE, /**< No power save */
@ -150,10 +150,15 @@ typedef union {
wifi_sta_config_t sta; /**< configuration of STA */ wifi_sta_config_t sta; /**< configuration of STA */
} wifi_config_t; } wifi_config_t;
struct station_info { typedef struct {
STAILQ_ENTRY(station_info) next; uint8_t mac[6]; /**< mac address of sta that associated with ESP32 soft-AP */
uint8_t bssid[6]; }wifi_sta_info_t;
};
#define ESP_WIFI_MAX_CONN_NUM (8+2) /**< max number of sta the eSP32 soft-AP can connect */
typedef struct {
wifi_sta_info_t sta[ESP_WIFI_MAX_CONN_NUM]; /**< station list */
uint8_t num; /**< number of station that associated with ESP32 soft-AP */
}wifi_sta_list_t;
typedef enum { typedef enum {
WIFI_STORAGE_FLASH, /**< all configuration will strore in both memory and flash */ WIFI_STORAGE_FLASH, /**< all configuration will strore in both memory and flash */

@ -1 +1 @@
Subproject commit d3920845c9501f6ebae178186c3f63a80fab1ed1 Subproject commit b9561aa5db15443d11f8bb5aefdfc5da540d8f2d

View file

@ -67,11 +67,15 @@ typedef struct {
typedef dhcps_lease_t tcpip_adapter_dhcps_lease_t; typedef dhcps_lease_t tcpip_adapter_dhcps_lease_t;
#if CONFIG_DHCP_STA_LIST #if CONFIG_DHCP_STA_LIST
struct station_list { typedef struct {
STAILQ_ENTRY(station_list) next;
uint8_t mac[6]; uint8_t mac[6];
ip4_addr_t ip; ip4_addr_t ip;
}; }tcpip_adapter_sta_info_t;
typedef struct {
tcpip_adapter_sta_info_t sta[ESP_WIFI_MAX_CONN_NUM+2];
uint8_t num;
}tcpip_adapter_sta_list_t;
#endif #endif
#endif #endif
@ -359,26 +363,14 @@ wifi_interface_t tcpip_adapter_get_wifi_if(void *dev);
/** /**
* @brief Get the station information list * @brief Get the station information list
* *
* @note This function should be called in AP mode and dhcp server started, and the list should * @param[in] wifi_sta_list_t *wifi_sta_list: station list info
* be by using tcpip_adapter_free_sta_list. * @param[out] tcpip_adapter_sta_list_t *tcpip_sta_list: station list info
*
* @param[in] sta_info: station information
* @param[out] sta_list: station information list
* *
* @return ESP_OK * @return ESP_OK
* ESP_ERR_TCPIP_ADAPTER_NO_MEM * ESP_ERR_TCPIP_ADAPTER_NO_MEM
* ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS
*/ */
esp_err_t tcpip_adapter_get_sta_list(struct station_info *sta_info, struct station_list **sta_list); esp_err_t tcpip_adapter_get_sta_list(wifi_sta_list_t *wifi_sta_list, tcpip_adapter_sta_list_t *tcpip_sta_list);
/**
* @brief Free the station information list's memory
*
* @param sta_list: station information list
*
* @return ESP_OK
*/
esp_err_t tcpip_adapter_free_sta_list(struct station_list *sta_list);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -590,45 +590,17 @@ wifi_interface_t tcpip_adapter_get_wifi_if(void *dev)
return WIFI_IF_MAX; return WIFI_IF_MAX;
} }
esp_err_t tcpip_adapter_get_sta_list(struct station_info *sta_info, struct station_list **sta_list) esp_err_t tcpip_adapter_get_sta_list(wifi_sta_list_t *wifi_sta_list, tcpip_adapter_sta_list_t *tcpip_sta_list)
{ {
struct station_info *info = sta_info; int i;
struct station_list *list;
STAILQ_HEAD(, station_list) list_head;
if (sta_list == NULL) if ((wifi_sta_list == NULL) || (tcpip_sta_list == NULL))
return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS; return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS;
STAILQ_INIT(&list_head); memset(tcpip_sta_list, 0, sizeof(tcpip_adapter_sta_list_t));
for (i=0; i<wifi_sta_list->num; i++){
while (info != NULL) { memcpy(tcpip_sta_list->sta[i].mac, wifi_sta_list->sta[i].mac, 6);
list = (struct station_list *)malloc(sizeof(struct station_list)); dhcp_search_ip_on_mac(tcpip_sta_list->sta[i].mac, &tcpip_sta_list->sta[i].ip);
memset(list, 0, sizeof (struct station_list));
if (list == NULL) {
return ESP_ERR_TCPIP_ADAPTER_NO_MEM;
}
memcpy(list->mac, info->bssid, 6);
dhcp_search_ip_on_mac(list->mac, &list->ip);
STAILQ_INSERT_TAIL(&list_head, list, next);
info = STAILQ_NEXT(info, next);
}
*sta_list = STAILQ_FIRST(&list_head);
return ESP_OK;
}
esp_err_t tcpip_adapter_free_sta_list(struct station_list *sta_list)
{
struct station_list *list = sta_list;
while (sta_list != NULL) {
list = sta_list;
sta_list = STAILQ_NEXT(sta_list, next);
free(list);
} }
return ESP_OK; return ESP_OK;