diff --git a/src/EthernetOverride/TCP.cpp b/src/EthernetOverride/TCP.cpp index ef859ab..8f9084d 100644 --- a/src/EthernetOverride/TCP.cpp +++ b/src/EthernetOverride/TCP.cpp @@ -108,28 +108,30 @@ void EthernetMaketClient::close(){ } void EthernetMaketClient::tick_(){ + // todo Переделать на нативные статусы. Избавиться от костылей if(_sock != MAX_SOCK_NUM && connectStatus!=CONNECT_CONNECTED && connectStatus!=CONNECT_STOP_WAITING&&connectStatus!=CONNECT_CONNECTING){ Serial.print("tick_() sock = "); Serial.print(_sock); uint8_t s = w5500.readSnSR(_sock); String state = ""; switch (s) { - case 0x00: state = "CLOSED"; connectStatus = CONNECT_STOP_WAITING; 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"; connectStatus = CONNECT_CONNECTED; break; - case 0x18: state = "FIN_WAIT"; break; - case 0x1A: state = "CLOSING"; break; - case 0x1B: state = "TIME_WAIT"; break; - case 0x1C: state = "CLOSE_WAIT"; connectStatus = CONNECT_STOP_START; 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; + //! костыли ^~^ + case SnSR::CLOSED : state = "CLOSED"; connectStatus = CONNECT_STOP_WAITING; break; + case SnSR::INIT : state = "INIT"; break; + case SnSR::LISTEN : state = "LISTEN"; break; + case SnSR::SYNSENT : state = "SYNSENT"; break; + case SnSR::SYNRECV : state = "SYNRECV"; break; + case SnSR::ESTABLISHED : state = "ESTABLISHED"; connectStatus = CONNECT_CONNECTED; break; + case SnSR::FIN_WAIT : state = "FIN_WAIT"; /* goto STOP_START_LABEL; */ break; + case SnSR::CLOSING : state = "CLOSING"; break; + case SnSR::TIME_WAIT : state = "TIME_WAIT"; break; + case SnSR::CLOSE_WAIT : state = "CLOSE_WAIT"; connectStatus = CONNECT_STOP_START; break; + case SnSR::LAST_ACK : state = "LAST_ACK"; break; + case SnSR::UDP : state = "UDP"; break; + case SnSR::IPRAW : state = "IPRAW"; break; + case SnSR::MACRAW : state = "MACRAW"; break; + case SnSR::PPPOE : state = "PPPOE"; break; + default : state = "UNKNOWN"; break; } String connectStatusStr = ""; switch (connectStatus) { @@ -165,21 +167,21 @@ void EthernetMaketClient::tick_(){ 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; + case SnSR::CLOSED : state = "CLOSED"; break; + case SnSR::INIT : state = "INIT"; break; + case SnSR::LISTEN : state = "LISTEN"; break; + case SnSR::SYNSENT : state = "SYNSENT"; break; + case SnSR::SYNRECV : state = "SYNRECV"; break; + case SnSR::ESTABLISHED : state = "ESTABLISHED"; break; + case SnSR::FIN_WAIT : state = "FIN_WAIT"; break; + case SnSR::CLOSING : state = "CLOSING"; break; + case SnSR::TIME_WAIT : state = "TIME_WAIT"; break; + case SnSR::CLOSE_WAIT : state = "CLOSE_WAIT"; break; + case SnSR::LAST_ACK : state = "LAST_ACK"; break; + case SnSR::UDP : state = "UDP"; break; + case SnSR::IPRAW : state = "IPRAW"; break; + case SnSR::MACRAW : state = "MACRAW"; break; + case SnSR::PPPOE : state = "PPPOE"; break; default: state = "UNKNOWN"; break; } @@ -238,10 +240,11 @@ void EthernetMaketClient::tick_(){ break; case CONNECT_STOP_START: + disconnect(); + STOP_START_LABEL: Serial.println("CONNECT_STOP_START"); dstIP = IPAddress(0,0,0,0); dstPort = 0; - disconnect(); stopStartTime = millis(); connectStatus = CONNECT_STOP_WAITING; Serial.println("CONNECT_STOP_WAITING"); @@ -264,6 +267,8 @@ void EthernetMaketClient::tick_(){ Serial.println("CONNECT_IDLE\n\n"); goto SWITCHLOOP; } + // //! Костыль, блокирует на время ожидания стопа подобно while(millis() - stopStartTime < stopTimeout) + goto SWITCHLOOP; break; case CONNECT_IDLE: