You can set esp32 as AP/STA, client/sever, sender/recever in menuconfig.
You can set whether to display delay time info in menuconfig.
Now you can transfer data between esp and esp.
# Wifi Performance Examples\r
\r
Some simple codes help to test the wifi performance.\r
+\r
Including TCP/UDP TX/RX throughput.\r
-You may need a TCP/UDP client on PC.\r
+\r
+#tcp_perf\r
+\r
+Using tcp.\r
+\r
+This example is used to test tcp throughput and delay time.\r
+\r
+First you should set menuconfig.\r
+\r
+You can set esp32 will be use as AP/STA, client/sever, sender/receiver in menuconfig. Also some config such as SSID, PASSWORD, SEVER_IP can be set in menuconfig.\r
+\r
+Open AP, then open STA, when they make a connect, they will send/receive data.You will see the calc result in com output. Make sure that your set can let them connect.\r
+\r
+Explaining more in [main.c](tcp_perf/main/main.c).\r
+\r
+\r
+\r
\r
See the [README.md](../README.md) file in the upper level [examples](../) directory for more information about examples.\r
+++ /dev/null
-menu "Example Configuration"
-
-config WIFI_SSID
- string "WiFi SSID"
- default "tp_wifi_test1"
- help
- SSID (network name) for the example to connect to.
-
-config WIFI_PASSWORD
- string "WiFi Password"
- default "1234567890"
- help
- WiFi password (WPA or WPA2) for the example to use.
-
-config SEVER_PORT
- int "tcp sever port"
- default 4567
- help
- which will the tcp sever use.
-
-config BUFF_SIZE
- int "buff size"
- default 1024
- help
- the data send&recv buff size.
-
-choice
- prompt "test mode"
- default PERFORMANCE_MODE
- help
- This option performance mode.
-
- - for "tcp receive" setting,it will receive data by tcp.
-
- - for "tcp send" setting, it will send data by tcp.
-
-# - for "udp receive" setting,it will receive data by udp.
-
-# - for "udp send" setting,it will send data by udp.
-
-config MODE_TCP_RECV
- bool "tcp receive"
-config MODE_TCP_SEND
- bool "tcp send"
-#config MODE_UDP_RECV
-# bool "udp receive"
-#config MODE_UDP_SEND
-# bool "udp send"
-endchoice
-
-endmenu
+++ /dev/null
-\r
-/*\r
-TCP_recv example\r
-This example use esp32 as station and TCP sever,\r
-when esp32 start,it will connect to an AP and will create a TCP socket as a sever,\r
-use a TCP client connect to esp32,\r
-then it will send/receive data,(set work mode in menuconfig)\r
-And calculate the speed of sending/receiving data.\r
-*/\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include "freertos/FreeRTOS.h"\r
-#include "freertos/task.h"\r
-#include "freertos/event_groups.h"\r
-#include "esp_wifi.h"\r
-#include "esp_event_loop.h"\r
-#include "esp_system.h"\r
-#include "nvs_flash.h"\r
-#include <sys/socket.h> \r
-#include <netinet/in.h> \r
-#include "driver/uart.h"\r
-#include "soc/uart_struct.h"\r
-\r
-/*AP info and tcp_sever info*/\r
-#define DEFAULTSSID CONFIG_WIFI_SSID\r
-#define DEFAULTPWD CONFIG_WIFI_PASSWORD\r
-#define DEFAULTPORT CONFIG_SEVER_PORT\r
-#define BUFFSIZE CONFIG_BUFF_SIZE\r
-\r
-static int totle_data=0;\r
-\r
-/* FreeRTOS event group to signal when we are connected & ready to make a request */\r
-static EventGroupHandle_t wifi_event_group;\r
-\r
-/**/\r
-static int connectedflag = 0;\r
-static int sever_socket;\r
-static struct sockaddr_in sever_addr;\r
-static struct sockaddr_in client_addr;\r
-static unsigned int socklen = sizeof(client_addr);\r
-static int connect_soc;\r
-\r
-static esp_err_t event_handler(void *ctx, system_event_t *event)\r
-{\r
- switch(event->event_id) {\r
- case SYSTEM_EVENT_STA_START:\r
- esp_wifi_connect();\r
- //printf("event_handler:SYSTEM_EVENT_STA_START\n");\r
- break;\r
- case SYSTEM_EVENT_STA_DISCONNECTED:\r
- //printf("event_handler:SYSTEM_EVENT_STA_DISCONNECTED\n");\r
- esp_wifi_connect();\r
- break;\r
- case SYSTEM_EVENT_STA_CONNECTED:\r
- //printf("event_handler:SYSTEM_EVENT_STA_CONNECTED!\n");\r
- break;\r
- case SYSTEM_EVENT_STA_GOT_IP:\r
- printf("event_handler:SYSTEM_EVENT_STA_GOT_IP!\n");\r
- printf("ip:%s\n",ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));\r
- connectedflag=1;\r
- break;\r
- default:\r
- break;\r
- }\r
- return ESP_OK;\r
-}\r
-//wifi_init\r
-static void wifi_init()\r
-{\r
- tcpip_adapter_init();\r
- wifi_event_group = xEventGroupCreate();\r
- ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );\r
-\r
- wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();\r
- ESP_ERROR_CHECK(esp_wifi_init(&cfg));\r
- wifi_config_t wifi_config = {\r
- .sta = {\r
- .ssid = DEFAULTSSID,\r
- .password = DEFAULTPWD\r
- },\r
- };\r
-\r
- ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );\r
- ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );\r
- ESP_ERROR_CHECK( esp_wifi_start() );\r
- esp_wifi_connect();\r
- \r
- printf("wifi_init over.\n");\r
-}\r
-\r
-static void data_count(void *pvParameters)\r
-{\r
- int len=0;\r
- char databuff[BUFFSIZE];\r
-#ifdef CONFIG_MODE_TCP_SEND\r
- memset(databuff,97,BUFFSIZE);\r
-#endif\r
- while(1)\r
- {\r
-#ifdef CONFIG_MODE_TCP_SEND\r
- len=send(connect_soc, databuff, BUFFSIZE, 0);\r
-#else\r
- len=recv(connect_soc, databuff, BUFFSIZE, 0);\r
-#endif\r
- if(len>0)\r
- {\r
- totle_data+=len;\r
- }\r
- else\r
- {\r
- /*for faster send&receive,don't show error code.\r
- *if it can't work as expectations,unnote the two lines here\r
- **/\r
- //perror("data_count error");\r
- //vTaskDelay(500/portTICK_RATE_MS);\r
- }\r
- } \r
-}\r
-\r
-//this task establish a TCP connection and receive data from TCP\r
-static void tcp_client(void *pvParameters)\r
-{\r
- do\r
- {\r
- vTaskDelay(100);\r
- }\r
- while(!connectedflag);\r
- //wating for connecting to AP \r
- \r
- printf("socket....port=%d\n",DEFAULTPORT);\r
- sever_socket = socket(AF_INET, SOCK_STREAM, 0);\r
- if(sever_socket < 0) \r
- {\r
- perror("socket() error:");\r
- vTaskDelete(NULL);\r
- }\r
- sever_addr.sin_family = AF_INET;\r
- sever_addr.sin_port = htons(DEFAULTPORT);\r
- sever_addr.sin_addr.s_addr = htonl(INADDR_ANY);\r
- if(bind(sever_socket,(struct sockaddr*)&sever_addr,sizeof(sever_addr))<0)\r
- {\r
- perror("bind() error");\r
- close(sever_socket);\r
- vTaskDelete(NULL);\r
- }\r
- if(listen(sever_socket,5)<0)\r
- {\r
- perror("listen() error");\r
- close(sever_socket);\r
- vTaskDelete(NULL);\r
- }\r
- connect_soc = accept(sever_socket,(struct sockaddr*)&client_addr,&socklen);\r
- if(connect_soc<0)\r
- {\r
- perror("accept() error");\r
- close(sever_socket);\r
- vTaskDelete(NULL);\r
- }\r
- /*connection established,now can send/recv*/\r
- printf("connection established!");\r
- TaskHandle_t tasksend;\r
- xTaskCreate(&data_count,"data_count",4096,NULL,5,&tasksend);\r
-\r
- int pps;\r
- while(1)\r
- {\r
- totle_data=0;\r
- //calc every 3s \r
- vTaskDelay(3000/ portTICK_RATE_MS);\r
- pps=totle_data/3;\r
-#ifdef CONFIG_MODE_TCP_SEND\r
- printf("tcp send %d byte per sec!\n",pps);\r
-#else\r
- printf("tcp recv %d byte per sec!\n",pps);\r
-#endif\r
- } \r
- vTaskDelete(tasksend);\r
- close(connect_soc);\r
- close(sever_socket);\r
- vTaskDelete(NULL);\r
-}\r
-\r
-\r
-void app_main(void)\r
-{\r
- nvs_flash_init();\r
- wifi_init();\r
- xTaskCreate(&tcp_client,"tcp_client",4096,NULL,5,NULL);\r
-}\r
# project subdirectory.
#
-PROJECT_NAME := tcp_esp2ap
+PROJECT_NAME := tcp_perf
include $(IDF_PATH)/make/project.mk
--- /dev/null
+menu "Example Configuration"
+
+choice
+ prompt "TCP_PERF_MODE "
+ default MODE_TCP_SHIELDBOX
+ help
+ This option performance mode.
+
+ - for "Performance in shieldbox" setting,it will receive data by tcp.
+
+ - for "Performance in air" setting, it will send data by tcp.
+
+ - for "Performance in long distance" setting, it will send data by tcp.
+
+
+config MODE_TCP_SHIELDBOX
+ bool "Performance in shieldbox"
+config MODE_TCP_AIR
+ bool "Performance in air"
+config MODE_TCP_LONG_DISTANCE
+ bool "Performance in long distance"
+endchoice
+
+config TCP_PERF_WIFI_MODE_AP
+ bool "softap mode enable"
+ default n
+ help
+ yes:ESP32 is softap. no:ESP32 is station.
+
+config TCP_PERF_SEVER
+ bool "TCP performance sever enable"
+ default n
+ help
+ yes:ESP32 is TCP sever. no:ESP32 is TCP client.
+
+ We suggest to make this config be same with "Station mode".
+
+config TCP_PERF_TX
+ bool "TCP performance TX test enable"
+ default n
+ help
+ yes:TCP TX test. no:TCP RX test.
+
+config TCP_PERF_DELAY_DEBUG
+ bool "TCP performance delay info enable"
+ default n
+ help
+ Show TCP performance delay info.
+
+ Ignore in TCP RX.
+
+config TCP_PERF_WIFI_SSID
+ string "WiFi SSID"
+ default "tp_wifi_test1"
+ help
+ SSID (network name) for the example to connect to.
+
+config TCP_PERF_WIFI_PASSWORD
+ string "WiFi Password"
+ default "1234567890"
+ help
+ WiFi password (WPA or WPA2) for the example to use.
+
+config TCP_PERF_SEVER_PORT
+ int "TCP sever port"
+ default 4567
+ help
+ Which will the tcp sever use.
+
+config TCP_PERF_SERVER_IP
+ string "TCP server ip"
+ default "192.168.4.1"
+ help
+ IP of TCP server.
+
+ Ignore in TCP sever.
+
+config TCP_PERF_PKT_SIZE
+ int "Size of TCP packet"
+ default 1460
+ help
+ the data send&recv packet size.
+
+endmenu
--- /dev/null
+
+
+/*
+tcp_perf example
+
+Using this example to test tcp throughput performance.
+esp<->esp or esp<->ap
+
+step1:
+ init wifi as AP/STA using config SSID/PASSWORD.
+
+step2:
+ creat a tcp sever/client socket using config PORT/(IP).
+ if sever: wating for connect.
+ if client connect to sever.
+
+step3:
+ send/receive data to/from each other.
+ if the tcp connect established. esp will send or receive data.
+ you can see the info in com port output.
+
+*/
+
+#include "tcp_perf.h"
+
+int connectedflag = 0;
+int totle_data=0;
+
+#if ESP_TCP_PERF_TX && ESP_TCP_DELAY_INFO
+
+int totle_pack=0;
+int send_success=0;
+int send_fail=0;
+int delay_classify[5]={0};
+
+#endif
+
+//this task establish a TCP connection and receive data from TCP
+static void tcp_conn(void *pvParameters)
+{
+ ESP_LOGI(TAG, "task tcp_conn start.");
+ //wating for connecting to AP
+ do
+ {
+ vTaskDelay(100);
+ }
+ while(!connectedflag);
+ ESP_LOGI(TAG, "sta has connected to ap.");
+
+ //create tcp socket
+ int socret;
+#if ESP_TCP_MODE_SEVER
+ ESP_LOGI(TAG, "creat_tcp_sever.");
+ socret=creat_tcp_sever();
+#else
+ ESP_LOGI(TAG, "creat_tcp_client.");
+ socret=creat_tcp_client();
+#endif
+ if(-1==socret)
+ {
+ ESP_LOGI(TAG, "creat tcp socket error,stop.");
+ vTaskDelete(NULL);
+ }
+
+
+ //create a task to tx/rx data
+ TaskHandle_t tx_rx_task;
+#if ESP_TCP_PERF_TX
+ xTaskCreate(&send_data,"send_data",4096,NULL,4,&tx_rx_task);
+#else
+ xTaskCreate(&recv_data,"recv_data",4096,NULL,4,&tx_rx_task);
+#endif
+ int pps;
+ while(1)
+ {
+ totle_data=0;
+ //calc every 3s
+ vTaskDelay(3000/ portTICK_RATE_MS);
+ pps=totle_data/3;
+#if ESP_TCP_PERF_TX
+ ESP_LOGI(TAG, "tcp send %d byte per sec!",pps);
+#if ESP_TCP_DELAY_INFO
+ ESP_LOGI(TAG, "tcp send packet totle:%d succeed:%d failed:%d\n0-30:%d 30-100:%d 100-300:%d 300-1000:%d 1000+:%d\n",
+ totle_pack,send_success,send_fail,delay_classify[0],delay_classify[1],delay_classify[2],delay_classify[3],delay_classify[
+4]);
+#endif
+#else
+ ESP_LOGI(TAG, "tcp recv %d byte per sec!\n",pps);
+#endif
+ }
+ close_socket();
+ vTaskDelete(tx_rx_task);
+ vTaskDelete(NULL);
+}
+
+
+
+void app_main(void)
+{
+ nvs_flash_init();
+#if ESP_WIFI_MODE_AP
+ ESP_LOGI(TAG, "ESP_WIFI_MODE_AP\n");
+ wifi_init_softap();
+#else
+ ESP_LOGI(TAG, "ESP_WIFI_MODE_STA\n");
+ wifi_init_sta();
+#endif
+ xTaskCreate(&tcp_conn,"tcp_conn",4096,NULL,5,NULL);
+}
--- /dev/null
+\r
+#include "tcp_perf.h"\r
+\r
+extern int connectedflag;\r
+extern int totle_data;\r
+\r
+#if ESP_TCP_PERF_TX && ESP_TCP_DELAY_INFO\r
+\r
+extern int totle_pack;\r
+extern int send_success;\r
+extern int send_fail;\r
+extern int delay_classify[5];\r
+\r
+#endif\r
+\r
+/* FreeRTOS event group to signal when we are connected & ready to make a request */\r
+static EventGroupHandle_t wifi_event_group;\r
+/*socket*/\r
+static int sever_socket;\r
+static struct sockaddr_in sever_addr;\r
+static struct sockaddr_in client_addr;\r
+static unsigned int socklen = sizeof(client_addr);\r
+static int connect_soc;\r
+\r
+static esp_err_t event_handler(void *ctx, system_event_t *event)\r
+{\r
+ switch(event->event_id) {\r
+ case SYSTEM_EVENT_STA_START:\r
+ esp_wifi_connect();\r
+ break;\r
+ case SYSTEM_EVENT_STA_DISCONNECTED:\r
+ esp_wifi_connect();\r
+ break;\r
+ case SYSTEM_EVENT_STA_CONNECTED:\r
+ break;\r
+ case SYSTEM_EVENT_STA_GOT_IP:\r
+ ESP_LOGI(TAG, "event_handler:SYSTEM_EVENT_STA_GOT_IP!\n");\r
+ ESP_LOGI(TAG, "ip:%s\n",ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));\r
+ connectedflag=1;\r
+ break;\r
+ case SYSTEM_EVENT_AP_STACONNECTED:\r
+ ESP_LOGI(TAG, "station:"MACSTR" join,AID=%d\n",\r
+ MAC2STR(event->event_info.sta_connected.mac),\r
+ event->event_info.sta_connected.aid);\r
+ connectedflag=1;\r
+ break;\r
+ case SYSTEM_EVENT_AP_STADISCONNECTED:\r
+ ESP_LOGI(TAG, "station:"MACSTR"leave,AID=%d\n",\r
+ MAC2STR(event->event_info.sta_disconnected.mac),\r
+ event->event_info.sta_disconnected.aid);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ return ESP_OK;\r
+}\r
+\r
+//send data\r
+void send_data(void *pvParameters)\r
+{\r
+ int len=0;\r
+ char databuff[DEFAULT_PKTSIZE];\r
+ memset(databuff,97,DEFAULT_PKTSIZE);\r
+ vTaskDelay(100/portTICK_RATE_MS);\r
+ ESP_LOGI(TAG,"start sending...");\r
+ while(1)\r
+ {\r
+#if ESP_TCP_PERF_TX && ESP_TCP_DELAY_INFO\r
+ //delaytime\r
+ struct timeval tv_start;\r
+ struct timeval tv_finish;\r
+ unsigned int send_delay_ms;\r
+\r
+ totle_pack++;\r
+ gettimeofday(&tv_start,NULL);\r
+#endif\r
+\r
+ len=send(connect_soc, databuff, DEFAULT_PKTSIZE, 0);\r
+\r
+#if ESP_TCP_PERF_TX && ESP_TCP_DELAY_INFO\r
+ gettimeofday(&tv_finish,NULL);\r
+#endif\r
+ if(len>0)\r
+ {\r
+ totle_data+=len;\r
+#if ESP_TCP_PERF_TX && ESP_TCP_DELAY_INFO\r
+ send_success++;\r
+ send_delay_ms=(tv_finish.tv_sec-tv_start.tv_sec)*1000\r
+ +(tv_finish.tv_usec-tv_start.tv_usec)/1000;\r
+ //ESP_LOGI(TAG, "send_delay_ms=%d",send_delay_ms);\r
+ if(send_delay_ms<30)\r
+ delay_classify[0]++;\r
+ else if(send_delay_ms<100)\r
+ delay_classify[1]++;\r
+ else if(send_delay_ms<300)\r
+ delay_classify[2]++;\r
+ else if(send_delay_ms<1000)\r
+ delay_classify[3]++;\r
+ else\r
+ delay_classify[4]++;\r
+#endif\r
+ }\r
+ else\r
+ {\r
+#if ESP_TCP_PERF_TX && ESP_TCP_DELAY_INFO\r
+ send_fail++;\r
+#endif\r
+ /*for faster send&receive,don't show error code.\r
+ *if it can't work as expectations,unnote the two lines here\r
+ **/\r
+ //perror("data_count error");\r
+ //vTaskDelay(500/portTICK_RATE_MS);\r
+ }\r
+ } \r
+}\r
+//send data\r
+void recv_data(void *pvParameters)\r
+{\r
+ int len=0;\r
+ char databuff[DEFAULT_PKTSIZE];\r
+ while(1)\r
+ {\r
+ len=recv(connect_soc, databuff, DEFAULT_PKTSIZE, 0);\r
+ if(len>0)\r
+ {\r
+ totle_data+=len;\r
+ }\r
+ else\r
+ {\r
+ perror("data_count error");\r
+ vTaskDelay(500/portTICK_RATE_MS);\r
+ }\r
+ }\r
+}\r
+\r
+//use this esp32 as a tcp sever. return 0:success -1:error\r
+int creat_tcp_sever()\r
+{\r
+ ESP_LOGI(TAG, "sever socket....port=%d\n",DEFAULTPORT);\r
+ sever_socket = socket(AF_INET, SOCK_STREAM, 0);\r
+ if(sever_socket < 0)\r
+ {\r
+ perror("socket() error:");\r
+ return -1;\r
+ }\r
+ sever_addr.sin_family = AF_INET;\r
+ sever_addr.sin_port = htons(DEFAULTPORT);\r
+ sever_addr.sin_addr.s_addr = htonl(INADDR_ANY);\r
+ if(bind(sever_socket,(struct sockaddr*)&sever_addr,sizeof(sever_addr))<0)\r
+ {\r
+ perror("bind() error");\r
+ close(sever_socket);\r
+ return -1;\r
+ }\r
+ if(listen(sever_socket,5)<0)\r
+ {\r
+ perror("listen() error");\r
+ close(sever_socket);\r
+ return -1;\r
+ }\r
+ connect_soc = accept(sever_socket,(struct sockaddr*)&client_addr,&socklen);\r
+ if(connect_soc<0)\r
+ {\r
+ perror("accept() error");\r
+ close(sever_socket);\r
+ return -1;\r
+ }\r
+ /*connection established,now can send/recv*/\r
+ ESP_LOGI(TAG, "tcp connection established!");\r
+ return 0;\r
+}\r
+//use this esp32 as a tcp client. return 0:success -1:error\r
+int creat_tcp_client()\r
+{\r
+ ESP_LOGI(TAG, "client socket....severip:port=%s:%d\n",DEFAULTSEVERIP,DEFAULTPORT);\r
+ connect_soc = socket(AF_INET, SOCK_STREAM, 0);\r
+ if(connect_soc < 0)\r
+ {\r
+ perror("socket failed!");\r
+ return -1;\r
+ }\r
+ sever_addr.sin_family = AF_INET;\r
+ sever_addr.sin_port = htons(DEFAULTPORT);\r
+ sever_addr.sin_addr.s_addr = inet_addr(DEFAULTSEVERIP);\r
+ printf("connecting to sever...");\r
+ if(connect(connect_soc, (struct sockaddr *)&sever_addr, sizeof(sever_addr)) < 0)\r
+ {\r
+ perror("connect to sever error!");\r
+ return -1;\r
+ }\r
+ ESP_LOGI(TAG,"connect to sever success!");\r
+ return 0;\r
+}\r
+\r
+//wifi_init_sta\r
+void wifi_init_sta()\r
+{\r
+ tcpip_adapter_init();\r
+ wifi_event_group = xEventGroupCreate();\r
+ ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );\r
+\r
+ wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();\r
+ ESP_ERROR_CHECK(esp_wifi_init(&cfg));\r
+ wifi_config_t wifi_config = {\r
+ .sta = {\r
+ .ssid = DEFAULTSSID,\r
+ .password = DEFAULTPWD\r
+ },\r
+ };\r
+\r
+ ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );\r
+ ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );\r
+ ESP_ERROR_CHECK( esp_wifi_start() );\r
+\r
+ ESP_LOGI(TAG, "wifi_init_sta finished.");\r
+ ESP_LOGI(TAG, "connect to ap SSID:%s password:%s \n",DEFAULTSSID,DEFAULTPWD);\r
+}\r
+//wifi_init_softap\r
+void wifi_init_softap()\r
+{\r
+ tcpip_adapter_init();\r
+ wifi_event_group = xEventGroupCreate();\r
+ ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );\r
+\r
+ wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();\r
+ ESP_ERROR_CHECK(esp_wifi_init(&cfg));\r
+ wifi_config_t wifi_config = {\r
+ .ap = {\r
+ .ssid = DEFAULTSSID,\r
+ .ssid_len=0,\r
+ .max_connection=MAXSTACONN,\r
+ .password = DEFAULTPWD,\r
+ .authmode=WIFI_AUTH_WPA_WPA2_PSK\r
+ },\r
+ };\r
+\r
+ ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_AP) );\r
+ ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config) );\r
+ ESP_ERROR_CHECK( esp_wifi_start() );\r
+\r
+ ESP_LOGI(TAG, "wifi_init_softap finished.SSID:%s password:%s \n",DEFAULTSSID,DEFAULTPWD);\r
+}\r
+\r
+void close_socket()\r
+{\r
+ close(connect_soc);\r
+ close(sever_socket);\r
+}\r
+\r
+\r
+\r
--- /dev/null
+#ifndef __TCP_PERF_H__
+#define __TCP_PERF_H__
+
+#include <stdio.h>
+#include <string.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/event_groups.h"
+#include "esp_wifi.h"
+#include "esp_event_loop.h"
+#include "esp_system.h"
+#include "nvs_flash.h"
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include "driver/uart.h"
+#include "soc/uart_struct.h"
+#include "esp_log.h"
+
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*AP info and tcp_sever info*/
+#define DEFAULTSSID CONFIG_TCP_PERF_WIFI_SSID
+#define DEFAULTPWD CONFIG_TCP_PERF_WIFI_PASSWORD
+#define DEFAULTPORT CONFIG_TCP_PERF_SEVER_PORT
+#define DEFAULTSEVERIP CONFIG_TCP_PERF_SERVER_IP
+#define DEFAULT_PKTSIZE CONFIG_TCP_PERF_PKT_SIZE
+#define MAXSTACONN 1 //how many sta can be connected(AP mode)
+/*test options*/
+#define ESP_WIFI_MODE_AP CONFIG_TCP_PERF_WIFI_MODE_AP //TRUE:AP FALSE:STA
+#define ESP_TCP_MODE_SEVER CONFIG_TCP_PERF_SEVER //TRUE:sever FALSE:client
+#define ESP_TCP_PERF_TX CONFIG_TCP_PERF_TX //TRUE:send FALSE:receive
+#define ESP_TCP_DELAY_INFO CONFIG_TCP_PERF_DELAY_DEBUG //TRUE:show delay time info
+
+
+#define TAG "tcp_perf:"
+
+
+
+//using esp as station
+void wifi_init_sta();
+//using esp as softap
+void wifi_init_softap();
+
+//creat a tcp sever socket. return 0:success -1:error
+int creat_tcp_sever();
+//creat a tcp client socket. return 0:success -1:error
+int creat_tcp_client();
+
+//send data task
+void send_data(void *pvParameters);
+//receive data task
+void recv_data(void *pvParameters);
+
+//close all socket
+void close_socket();
+
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+