From a4d01ea36061502884b009eae15efc48671d3a28 Mon Sep 17 00:00:00 2001 From: DashyFox Date: Wed, 11 Dec 2024 13:45:56 +0300 Subject: [PATCH] fix state --- src/EthernetOverride/TCP.cpp | 78 +++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/src/EthernetOverride/TCP.cpp b/src/EthernetOverride/TCP.cpp index 5fc221e..ef859ab 100644 --- a/src/EthernetOverride/TCP.cpp +++ b/src/EthernetOverride/TCP.cpp @@ -151,48 +151,51 @@ void EthernetMaketClient::tick_(){ } //todo [] Пересмотреть стейт машину перевести на нативные статусы + SWITCHLOOP: switch (connectStatus) { case CONNECT_START: - Serial.println("CONNECT_START"); - startConnectionTime = millis(); - connectStatus = CONNECT_CONNECTING; - close(); - Serial.println("CONNECT_CONNECTING..."); { - for (int i = 0; i < MAX_SOCK_NUM; i++) { - uint8_t s = w5500.readSnSR(i); - String state = ""; - switch (s) { - case 0x00: state = "CLOSED"; break; - case 0x13: state = "INIT"; break; - case 0x14: state = "LISTEN"; break; - case 0x15: state = "SYNSENT"; break; - case 0x16: state = "SYNRECV"; break; - case 0x17: state = "ESTABLISHED"; break; - case 0x18: state = "FIN_WAIT"; break; - case 0x1A: state = "CLOSING"; break; - case 0x1B: state = "TIME_WAIT"; break; - case 0x1C: state = "CLOSE_WAIT"; break; - case 0x1D: state = "LAST_ACK"; break; - case 0x22: state = "UDP"; break; - case 0x32: state = "IPRAW"; break; - case 0x42: state = "MACRAW"; break; - case 0x5F: state = "PPPOE"; break; - default: state = "UNKNOWN"; break; + Serial.println("CONNECT_START"); + startConnectionTime = millis(); + connectStatus = CONNECT_CONNECTING; + close(); + Serial.println("CONNECT_CONNECTING..."); + for (int i = 0; i < MAX_SOCK_NUM; i++) { + uint8_t s = w5500.readSnSR(i); + String state = ""; + switch (s) { + case 0x00: state = "CLOSED"; break; + case 0x13: state = "INIT"; break; + case 0x14: state = "LISTEN"; break; + case 0x15: state = "SYNSENT"; break; + case 0x16: state = "SYNRECV"; break; + case 0x17: state = "ESTABLISHED"; break; + case 0x18: state = "FIN_WAIT"; break; + case 0x1A: state = "CLOSING"; break; + case 0x1B: state = "TIME_WAIT"; break; + case 0x1C: state = "CLOSE_WAIT"; break; + case 0x1D: state = "LAST_ACK"; break; + case 0x22: state = "UDP"; break; + case 0x32: state = "IPRAW"; break; + case 0x42: state = "MACRAW"; break; + case 0x5F: state = "PPPOE"; break; + default: state = "UNKNOWN"; break; + } + + Serial.print("SOCK <- "); + Serial.print(i); + Serial.print(" State: "); + Serial.println(state); + } + goto SWITCHLOOP; } - - Serial.print("SOCK <- "); - Serial.print(i); - Serial.print(" State: "); - Serial.println(state); - } - } break; case CONNECT_CONNECTING: if (millis() - startConnectionTime >= connectionTimeout) { connectStatus = CONNECT_FAIL; + goto SWITCHLOOP; break; } break; @@ -202,16 +205,15 @@ void EthernetMaketClient::tick_(){ Serial.println(isNonBlocking ? "non-blocking mode" : "blocking mode"); Serial.println("\n"); connectStatus = CONNECT_STOP_START; + goto SWITCHLOOP; break; case CONNECT_SUCCESS: Serial.println("CONNECT_SUCCESS"); Serial.print("Connected to server in "); Serial.println(isNonBlocking ? "non-blocking mode" : "blocking mode"); - lastActivityTime = millis(); + activityUpdate(); connectStatus = CONNECT_CONNECTED; - - lastActivityTime = millis(); // Обновляем время последней активности - + goto SWITCHLOOP; break; case CONNECT_CONNECTED: @@ -223,6 +225,7 @@ void EthernetMaketClient::tick_(){ { Serial.println("Client disconnected"); connectStatus = CONNECT_STOP_START; + goto SWITCHLOOP; } // Закрытие соединения по таймеру неактивности @@ -230,6 +233,7 @@ void EthernetMaketClient::tick_(){ { Serial.println("Connection closed due to inactivity"); connectStatus = CONNECT_STOP_START; + goto SWITCHLOOP; } break; @@ -241,6 +245,7 @@ void EthernetMaketClient::tick_(){ stopStartTime = millis(); connectStatus = CONNECT_STOP_WAITING; Serial.println("CONNECT_STOP_WAITING"); + goto SWITCHLOOP; break; case CONNECT_STOP_WAITING: @@ -257,6 +262,7 @@ void EthernetMaketClient::tick_(){ } if(connectStatus == CONNECT_IDLE) { Serial.println("CONNECT_IDLE\n\n"); + goto SWITCHLOOP; } break;