From 789b72a170160a4b68aef14dc18dc9a5b2b04f7c Mon Sep 17 00:00:00 2001 From: Asbelos Date: Wed, 14 Dec 2022 13:06:01 +0000 Subject: [PATCH] Withrottle connect improvements --- WiThrottle.cpp | 9 +++++---- WiThrottle.h | 3 ++- WifiInboundHandler.cpp | 22 +++++----------------- version.h | 5 ++++- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/WiThrottle.cpp b/WiThrottle.cpp index 6223fdf..a9c319c 100644 --- a/WiThrottle.cpp +++ b/WiThrottle.cpp @@ -131,7 +131,8 @@ void WiThrottle::parse(RingStream * stream, byte * cmdx) { else if (!heartrateSent) { heartrateSent=true; // allow heartbeat to slow down once all metadata sent - StringFormatter::send(stream,F("*%d\n"),HEARTBEAT_SECONDS); + StringFormatter::send(stream,F("*%d\nHMConnected\n"),HEARTBEAT_SECONDS); + } } @@ -187,7 +188,7 @@ void WiThrottle::parse(RingStream * stream, byte * cmdx) { } break; case 'N': // Heartbeat (2), only send if connection completed by 'HU' message - StringFormatter::send(stream, F("*%d\n"), heartrateSent ? HEARTBEAT_SECONDS : HEARTBEAT_SECONDS/2); // return timeout value + StringFormatter::send(stream, F("*%d\n"), heartrateSent ? HEARTBEAT_SECONDS : HEARTBEAT_PRELOAD); // return timeout value break; case 'M': // multithrottle multithrottle(stream, cmd); @@ -500,8 +501,8 @@ void WiThrottle::sendIntro(Print* stream) { StringFormatter::send(stream,F("HtDCC-EX v%S, %S, %S, %S\n"), F(VERSION), F(ARDUINO_TYPE), DCC::getMotorShieldName(), F(GITHUB_SHA)); StringFormatter::send(stream,F("PTT]\\[Turnouts}|{Turnout]\\[THROW}|{2]\\[CLOSE}|{4\n")); StringFormatter::send(stream,F("PPA%x\n"),TrackManager::getMainPower()==POWERMODE::ON); - // set heartbeat to 5 seconds because we need to sync the metadata (1 second is too short!) - StringFormatter::send(stream,F("*%d\n"), HEARTBEAT_SECONDS/2); + // set heartbeat to 2 seconds because we need to sync the metadata (1 second is too short!) + StringFormatter::send(stream,F("*%d\nHMConnecting..\n"), HEARTBEAT_PRELOAD); } void WiThrottle::sendTurnouts(Print* stream) { diff --git a/WiThrottle.h b/WiThrottle.h index 459a559..6756943 100644 --- a/WiThrottle.h +++ b/WiThrottle.h @@ -45,7 +45,8 @@ class WiThrottle { ~WiThrottle(); static const int MAX_MY_LOCO=10; // maximum number of locos assigned to a single client - static const int HEARTBEAT_SECONDS=10; // heartbeat at 4secs to provide messaging transport + static const int HEARTBEAT_SECONDS=10; // heartbeat at 10 secs to provide messaging transport + static const int HEARTBEAT_PRELOAD=2; // request fast callback when connecting multiple messages static const int ESTOP_SECONDS=20; // eStop if no incoming messages for more than 8secs static WiThrottle* firstThrottle; static int getInt(byte * cmd); diff --git a/WifiInboundHandler.cpp b/WifiInboundHandler.cpp index ce8d3cf..f302432 100644 --- a/WifiInboundHandler.cpp +++ b/WifiInboundHandler.cpp @@ -31,7 +31,6 @@ WifiInboundHandler * WifiInboundHandler::singleton; void WifiInboundHandler::setup(Stream * ESStream) { singleton=new WifiInboundHandler(ESStream); - // DIAG(F("WifiInbound Setup2 %P %P"), ESStream,singleton); } void WifiInboundHandler::loop() { @@ -45,7 +44,6 @@ WifiInboundHandler::WifiInboundHandler(Stream * ESStream) { inboundRing=new RingStream(INBOUND_RING); outboundRing=new RingStream(OUTBOUND_RING); pendingCipsend=false; - // DIAG(F("WifiInbound setup1 %P"), wifiStream); } @@ -53,20 +51,13 @@ WifiInboundHandler::WifiInboundHandler(Stream * ESStream) { // +IPD,x,lll:data is stored in streamer[x] // Other input returns void WifiInboundHandler::loop1() { - static bool XX=true; - if (XX) DIAG(F("Wifi 1")); - + // First handle all inbound traffic events because they will block the sending - if (loop2()!=INBOUND_IDLE) { - if (XX) DIAG(F("Wifi 2")); - return; - } -if (XX) DIAG(F("Wifi 3")); - + if (loop2()!=INBOUND_IDLE) return; + WiThrottle::loop(outboundRing); - if (XX) DIAG(F("Wifi 4")); - XX=false; - // if nothing is already CIPSEND pending, we can CIPSEND one reply + + // if nothing is already CIPSEND pending, we can CIPSEND one reply if (clientPendingCIPSEND<0) { clientPendingCIPSEND=outboundRing->read(); if (clientPendingCIPSEND>=0) { @@ -97,9 +88,6 @@ if (XX) DIAG(F("Wifi 3")); } } - - - // This is a Finite State Automation (FSA) handling the inbound bytes from an ES AT command processor WifiInboundHandler::INBOUND_STATE WifiInboundHandler::loop2() { diff --git a/version.h b/version.h index 7e3a73a..b7e7c4f 100644 --- a/version.h +++ b/version.h @@ -4,7 +4,10 @@ #include "StringFormatter.h" -#define VERSION "4.2.7a" +#define VERSION "4.2.9" +// 4.2.9 Withrottle connecting improvements +// 4.2.8 Report board type when provided +// 4.2.7 Cleanup wifi disconnect issues and highmem // 4.2.6 FIX: Remove RAM thief // FIX: ADC port 8-15 fix // 4.2.5 Make GETFLASHW code more universal