mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-05-21 00:56:38 +08:00

1. memory optimize; 2. add irom version libm.a: libmirom.a; 3. more apis are supported in libcirom.a, such as sscanf, sprintf, etc; 4. add c++ support in Makefile; 5. put functions to iRAM default, don't need ICACHE_FLASH_ATTR anymore; 6. remove -O2 in Makefile; 7. fix some fatal exception bugs; 8. update smartconfig to version 2.4.7; 9. update some open source files and header files; 10.use os_printf can save memory; 11.add new apis: os_random and os_get_random; 12.bug fix in lwip/net80211/wpa modules; 13.other minor changes;
173 lines
5.2 KiB
C
173 lines
5.2 KiB
C
/******************************************************************************
|
|
* Copyright 2013-2014 Espressif Systems (Wuxi)
|
|
*
|
|
* FileName: user_main.c
|
|
*
|
|
* Description: entry file of user application
|
|
*
|
|
* Modification history:
|
|
* 2014/12/1, v1.0 create this file.
|
|
*******************************************************************************/
|
|
#include "esp_common.h"
|
|
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
|
|
#include "lwip/sockets.h"
|
|
#include "lwip/dns.h"
|
|
#include "lwip/netdb.h"
|
|
|
|
#define server_ip "192.168.101.142"
|
|
#define server_port 9669
|
|
|
|
void task2(void *pvParameters)
|
|
{
|
|
printf("Hello, welcome to client!\r\n");
|
|
|
|
while (1) {
|
|
int recbytes;
|
|
int sin_size;
|
|
int str_len;
|
|
int sta_socket;
|
|
|
|
struct sockaddr_in local_ip;
|
|
struct sockaddr_in remote_ip;
|
|
|
|
sta_socket = socket(PF_INET, SOCK_STREAM, 0);
|
|
|
|
if (-1 == sta_socket) {
|
|
close(sta_socket);
|
|
printf("C > socket fail!\n");
|
|
continue;
|
|
}
|
|
|
|
printf("C > socket ok!\n");
|
|
bzero(&remote_ip, sizeof(struct sockaddr_in));
|
|
remote_ip.sin_family = AF_INET;
|
|
remote_ip.sin_addr.s_addr = inet_addr(server_ip);
|
|
remote_ip.sin_port = htons(server_port);
|
|
|
|
if (0 != connect(sta_socket, (struct sockaddr *)(&remote_ip), sizeof(struct sockaddr))) {
|
|
close(sta_socket);
|
|
printf("C > connect fail!\n");
|
|
vTaskDelay(4000 / portTICK_RATE_MS);
|
|
continue;
|
|
}
|
|
|
|
printf("C > connect ok!\n");
|
|
char *pbuf = (char *)zalloc(1024);
|
|
sprintf(pbuf, "%s\n", "client_send info");
|
|
|
|
if (write(sta_socket, pbuf, strlen(pbuf) + 1) < 0) {
|
|
printf("C > send fail\n");
|
|
}
|
|
|
|
printf("C > send success\n");
|
|
free(pbuf);
|
|
|
|
char *recv_buf = (char *)zalloc(128);
|
|
while ((recbytes = read(sta_socket , recv_buf, 128)) > 0) {
|
|
recv_buf[recbytes] = 0;
|
|
printf("C > read data success %d!\nC > %s\n", recbytes, recv_buf);
|
|
}
|
|
free(recv_buf);
|
|
|
|
if (recbytes <= 0) {
|
|
close(sta_socket);
|
|
printf("C > read data fail!\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
void task3(void *pvParameters)
|
|
{
|
|
while (1) {
|
|
struct sockaddr_in server_addr, client_addr;
|
|
int server_sock, client_sock;
|
|
socklen_t sin_size;
|
|
bzero(&server_addr, sizeof(struct sockaddr_in));
|
|
server_addr.sin_family = AF_INET;
|
|
server_addr.sin_addr.s_addr = INADDR_ANY;
|
|
server_addr.sin_port = htons(80);
|
|
|
|
int recbytes;
|
|
|
|
do {
|
|
if (-1 == (server_sock = socket(AF_INET, SOCK_STREAM, 0))) {
|
|
printf("S > socket error\n");
|
|
break;
|
|
}
|
|
|
|
printf("S > create socket: %d\n", server_sock);
|
|
|
|
if (-1 == bind(server_sock, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr))) {
|
|
printf("S > bind fail\n");
|
|
break;
|
|
}
|
|
|
|
printf("S > bind port: %d\n", ntohs(server_addr.sin_port));
|
|
|
|
if (-1 == listen(server_sock, 5)) {
|
|
printf("S > listen fail\n");
|
|
break;
|
|
}
|
|
|
|
printf("S > listen ok\n");
|
|
|
|
sin_size = sizeof(client_addr);
|
|
|
|
for (;;) {
|
|
printf("S > wait client\n");
|
|
|
|
if ((client_sock = accept(server_sock, (struct sockaddr *) &client_addr, &sin_size)) < 0) {
|
|
printf("S > accept fail\n");
|
|
continue;
|
|
}
|
|
|
|
printf("S > Client from %s %d\n", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port));
|
|
|
|
char *recv_buf = (char *)zalloc(128);
|
|
while ((recbytes = read(client_sock , recv_buf, 128)) > 0) {
|
|
recv_buf[recbytes] = 0;
|
|
printf("S > read data success %d!\nS > %s\n", recbytes, recv_buf);
|
|
}
|
|
free(recv_buf);
|
|
|
|
if (recbytes <= 0) {
|
|
printf("S > read data fail!\n");
|
|
close(client_sock);
|
|
}
|
|
}
|
|
} while (0);
|
|
}
|
|
}
|
|
|
|
/******************************************************************************
|
|
* FunctionName : user_init
|
|
* Description : entry of user application, init user function here
|
|
* Parameters : none
|
|
* Returns : none
|
|
*******************************************************************************/
|
|
void user_init(void)
|
|
{
|
|
printf("SDK version:%s\n", system_get_sdk_version());
|
|
|
|
/* need to set opmode before you set config */
|
|
wifi_set_opmode(STATIONAP_MODE);
|
|
|
|
{
|
|
struct station_config *config = (struct station_config *)zalloc(sizeof(struct station_config));
|
|
sprintf(config->ssid, "ZTE_5560");
|
|
sprintf(config->password, "espressif");
|
|
|
|
/* need to sure that you are in station mode first,
|
|
* otherwise it will be failed. */
|
|
wifi_station_set_config(config);
|
|
free(config);
|
|
}
|
|
|
|
xTaskCreate(task2, "tsk2", 256, NULL, 2, NULL);
|
|
xTaskCreate(task3, "tsk3", 256, NULL, 2, NULL);
|
|
}
|
|
|