From 8a3eb928dd0c6dd21afbefa6580f9bbbfba45b8f Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Tue, 22 Nov 2022 12:05:25 -0500 Subject: [PATCH] set DMX_LOST status from E111_DATA_LOSS_TIMEOUT --- protocol/dmx/universe.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/protocol/dmx/universe.cpp b/protocol/dmx/universe.cpp index 61435f9..92244b1 100644 --- a/protocol/dmx/universe.cpp +++ b/protocol/dmx/universe.cpp @@ -88,12 +88,11 @@ double Universe::rxRate() unsigned int Universe::rxAge() { rx_timeout_(); - if (!rx_times_.size()) + if (rx_times_.empty()) return -1; auto now = std::chrono::system_clock::now(); auto latest = rx_times_.back(); - auto elapsed = std::chrono::duration_cast(now - latest); return elapsed.count(); @@ -268,22 +267,22 @@ void Universe::doDataCallbacks() void Universe::rx_timeout_(bool add_now) { auto now = std::chrono::system_clock::now(); + if (add_now) + rx_times_.push(now); + auto elapsed = [] (auto& a, auto& b) { return std::chrono::duration_cast(a - b); }; - if (add_now) - rx_times_.push(now); - - while (!rx_times_.empty() && - elapsed(now, rx_times_.front()).count() > rx_timeout_period_) + while (!rx_times_.empty()) { - rx_times_.pop(); - if (rx_times_.empty()) - { - status_ = Status::DMX_LOST; - doDataCallbacks(); - } + auto age = elapsed(now, rx_times_.front()).count(); + if (age < rx_timeout_period_) + break; + else + rx_times_.pop(); + if (age >= E111_DATA_LOSS_TIMEOUT) + setStatus(Status::DMX_LOST); } }