/* * settings.c * * Created on: May 6, 2021 * Author: maobuff */ #include #include #include "lwip/err.h" #include "lwip/sockets.h" #include "lwip/sys.h" #include "lwip/netdb.h" #include "cmsis_os.h" static char buffer[1024 * 10]; void settings_tcp_task(void *arg) { int sock; struct sockaddr_in dest; ssize_t bc; dest.sin_addr.s_addr = inet_addr("ipofserver"); dest.sin_family = AF_INET; dest.sin_port = htons(5005); sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if (sock == -1) { printf("Failed to create socket\n"); close(sock); return; } printf("Socket created\n"); int opt = 1; setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void* ) &opt, sizeof(opt)); if (connect(sock, (struct sockaddr *) &dest, sizeof(dest)) == -1) { printf("Failed to connect to server\n"); close(sock); return; } printf("Connected to server\n"); int file_size = 1024 * 1024 * 10; bc = send(sock, &file_size, sizeof(int), 0); if (bc <= 0) { printf("Failed to send file size\n"); close(sock); return; } printf("File size sent\n"); bc = recv(sock, buffer, sizeof(char), 0); if (bc <= 0) { printf("Failed receive ack\n"); close(sock); return; } printf("File transfer started\n"); while (1) { HAL_GPIO_WritePin(DEBUG_SEND_GPIO_Port, DEBUG_SEND_Pin, GPIO_PIN_SET); bc = send(sock, buffer, 1024, 0); if (bc <= 0) { printf("Failed to send file\n"); close(sock); return; } HAL_GPIO_WritePin(DEBUG_SEND_GPIO_Port, DEBUG_SEND_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(DEBUG_RECV_GPIO_Port, DEBUG_RECV_Pin, GPIO_PIN_SET); bc = recv(sock, buffer, sizeof(char), 0); if (bc <= 0) { printf("Failed receive ack\n"); close(sock); return; } HAL_GPIO_WritePin(DEBUG_RECV_GPIO_Port, DEBUG_RECV_Pin, GPIO_PIN_RESET); file_size -= 1024; if (file_size <= 0) { printf("Done!\n"); close(sock); return; } } }