mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-27 02:16:51 +00:00
154 lines
5.1 KiB
C
154 lines
5.1 KiB
C
/* Wi-Fi iperf Example
|
|
|
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
|
|
|
Unless required by applicable law or agreed to in writing, this
|
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
CONDITIONS OF ANY KIND, either express or implied.
|
|
*/
|
|
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include "esp_wifi.h"
|
|
#include "esp_log.h"
|
|
#include "esp_err.h"
|
|
#include "nvs_flash.h"
|
|
#include "esp_console.h"
|
|
#include "cmd_system.h"
|
|
|
|
/* component manager */
|
|
#include "iperf.h"
|
|
#include "wifi_cmd.h"
|
|
#include "iperf_cmd.h"
|
|
#include "ping_cmd.h"
|
|
|
|
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS || CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS
|
|
#include "esp_wifi_he.h"
|
|
#endif
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS
|
|
extern int wifi_cmd_get_tx_statistics(int argc, char **argv);
|
|
extern int wifi_cmd_clr_tx_statistics(int argc, char **argv);
|
|
#endif
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS
|
|
extern int wifi_cmd_get_rx_statistics(int argc, char **argv);
|
|
extern int wifi_cmd_clr_rx_statistics(int argc, char **argv);
|
|
#endif
|
|
|
|
#if defined(CONFIG_ESP_EXT_CONN_ENABLE) && defined(CONFIG_ESP_HOST_WIFI_ENABLED)
|
|
#include "esp_extconn.h"
|
|
#endif
|
|
|
|
void iperf_hook_show_wifi_stats(iperf_traffic_type_t type, iperf_status_t status)
|
|
{
|
|
if (status == IPERF_STARTED) {
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS
|
|
if (type != IPERF_UDP_SERVER) {
|
|
wifi_cmd_clr_tx_statistics(0, NULL);
|
|
}
|
|
#endif
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS
|
|
if (type != IPERF_UDP_CLIENT) {
|
|
wifi_cmd_clr_rx_statistics(0, NULL);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
if (status == IPERF_STOPPED) {
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS
|
|
if (type != IPERF_UDP_SERVER) {
|
|
wifi_cmd_get_tx_statistics(0, NULL);
|
|
}
|
|
#endif
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS
|
|
if (type != IPERF_UDP_CLIENT) {
|
|
wifi_cmd_get_rx_statistics(0, NULL);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void app_main(void)
|
|
{
|
|
#if defined(CONFIG_ESP_EXT_CONN_ENABLE) && defined(CONFIG_ESP_HOST_WIFI_ENABLED)
|
|
esp_extconn_config_t ext_config = ESP_EXTCONN_CONFIG_DEFAULT();
|
|
esp_extconn_init(&ext_config);
|
|
#endif
|
|
|
|
esp_err_t ret = nvs_flash_init();
|
|
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
|
|
ESP_ERROR_CHECK(nvs_flash_erase());
|
|
ret = nvs_flash_init();
|
|
}
|
|
ESP_ERROR_CHECK( ret );
|
|
|
|
/*
|
|
NOTE(#15855): wifi_cmd_initialize_wifi is a basic function to start wifi, set handlers and set wifi-cmd status.
|
|
For advanced usage, please refer to wifi_cmd.h or the document of wifi-cmd component: https://components.espressif.com/components/esp-qa/wifi-cmd
|
|
|
|
example:
|
|
wifi_cmd_wifi_init();
|
|
my_function(); // <---- more configs before wifi start
|
|
wifi_cmd_wifi_start();
|
|
|
|
Please note that some wifi commands such as "wifi start/restart" may not work as expected if "wifi_cmd_initialize_wifi" was not used.
|
|
*/
|
|
/* initialise wifi and set wifi-cmd status */
|
|
wifi_cmd_initialize_wifi(NULL);
|
|
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE));
|
|
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_RX_MU_STATS
|
|
esp_wifi_enable_rx_statistics(true, true);
|
|
#else
|
|
esp_wifi_enable_rx_statistics(true, false);
|
|
#endif
|
|
#endif
|
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS
|
|
esp_wifi_enable_tx_statistics(ESP_WIFI_ACI_BE, true);
|
|
#endif
|
|
|
|
|
|
esp_console_repl_t *repl = NULL;
|
|
esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
|
|
repl_config.prompt = "iperf>";
|
|
|
|
// init console REPL environment
|
|
#if CONFIG_ESP_CONSOLE_UART
|
|
esp_console_dev_uart_config_t uart_config = ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();
|
|
ESP_ERROR_CHECK(esp_console_new_repl_uart(&uart_config, &repl_config, &repl));
|
|
#elif CONFIG_ESP_CONSOLE_USB_CDC
|
|
esp_console_dev_usb_cdc_config_t cdc_config = ESP_CONSOLE_DEV_CDC_CONFIG_DEFAULT();
|
|
ESP_ERROR_CHECK(esp_console_new_repl_usb_cdc(&cdc_config, &repl_config, &repl));
|
|
#elif CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG
|
|
esp_console_dev_usb_serial_jtag_config_t usbjtag_config = ESP_CONSOLE_DEV_USB_SERIAL_JTAG_CONFIG_DEFAULT();
|
|
ESP_ERROR_CHECK(esp_console_new_repl_usb_serial_jtag(&usbjtag_config, &repl_config, &repl));
|
|
#endif
|
|
|
|
/* Register commands */
|
|
register_system();
|
|
/* From wifi-cmd */
|
|
wifi_cmd_register_all();
|
|
/* From iperf-cmd */
|
|
app_register_iperf_commands();
|
|
app_register_iperf_hook_func(iperf_hook_show_wifi_stats);
|
|
/* From ping-cmd */
|
|
ping_cmd_register_ping();
|
|
|
|
|
|
printf("\n ==================================================\n");
|
|
printf(" | Steps to test WiFi throughput |\n");
|
|
printf(" | |\n");
|
|
printf(" | 1. Print 'help' to gain overview of commands |\n");
|
|
printf(" | 2. Configure device to station or soft-AP |\n");
|
|
printf(" | 3. Setup WiFi connection |\n");
|
|
printf(" | 4. Run iperf to test UDP/TCP RX/TX throughput |\n");
|
|
printf(" | |\n");
|
|
printf(" =================================================\n\n");
|
|
|
|
// start console REPL
|
|
ESP_ERROR_CHECK(esp_console_start_repl(repl));
|
|
}
|