diff --git a/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp b/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp index df1aae1c..87e8587a 100644 --- a/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp +++ b/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp @@ -71,9 +71,10 @@ void VeDirectFrameHandler::setPollInterval(uint32_t interval) void VeDirectFrameHandler::loop() { unsigned long now = millis(); + _frameEnd = false; if ((millis() - getLastUpdate()) > (_pollInterval * 1000)) { - while ( Serial2.available() && (getLastUpdate() < now)) { + while ( Serial2.available() && (!_frameEnd) && (millis() - now < 500)) { rxData(Serial2.read()); } } @@ -212,6 +213,7 @@ void VeDirectFrameHandler::frameEndEvent(bool valid) { setLastUpdate(); } frameIndex = 0; // reset frame + _frameEnd = true; } /* diff --git a/lib/VeDirectFrameHandler/VeDirectFrameHandler.h b/lib/VeDirectFrameHandler/VeDirectFrameHandler.h index 49f19772..0ded5b9d 100644 --- a/lib/VeDirectFrameHandler/VeDirectFrameHandler.h +++ b/lib/VeDirectFrameHandler/VeDirectFrameHandler.h @@ -76,6 +76,7 @@ private: bool hexRxEvent(uint8_t); uint32_t _pollInterval; uint32_t _lastPoll = 0; + bool _frameEnd = false; }; extern VeDirectFrameHandler VeDirect;