set DMX_LOST status from E111_DATA_LOSS_TIMEOUT

This commit is contained in:
Kevin Matz 2022-11-22 12:05:25 -05:00
parent 6be8dfbebd
commit 8a3eb928dd

View File

@ -88,12 +88,11 @@ double Universe::rxRate()
unsigned int Universe::rxAge() unsigned int Universe::rxAge()
{ {
rx_timeout_(); rx_timeout_();
if (!rx_times_.size()) if (rx_times_.empty())
return -1; return -1;
auto now = std::chrono::system_clock::now(); auto now = std::chrono::system_clock::now();
auto latest = rx_times_.back(); auto latest = rx_times_.back();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - latest); auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - latest);
return elapsed.count(); return elapsed.count();
@ -268,22 +267,22 @@ void Universe::doDataCallbacks()
void Universe::rx_timeout_(bool add_now) void Universe::rx_timeout_(bool add_now)
{ {
auto now = std::chrono::system_clock::now(); auto now = std::chrono::system_clock::now();
if (add_now)
rx_times_.push(now);
auto elapsed = [] (auto& a, auto& b) { auto elapsed = [] (auto& a, auto& b) {
return std::chrono::duration_cast<std::chrono::milliseconds>(a - b); return std::chrono::duration_cast<std::chrono::milliseconds>(a - b);
}; };
if (add_now) while (!rx_times_.empty())
rx_times_.push(now);
while (!rx_times_.empty() &&
elapsed(now, rx_times_.front()).count() > rx_timeout_period_)
{ {
auto age = elapsed(now, rx_times_.front()).count();
if (age < rx_timeout_period_)
break;
else
rx_times_.pop(); rx_times_.pop();
if (rx_times_.empty()) if (age >= E111_DATA_LOSS_TIMEOUT)
{ setStatus(Status::DMX_LOST);
status_ = Status::DMX_LOST;
doDataCallbacks();
}
} }
} }