1
0
Fork 0

hold the last seen time separate from the list of valid times

This commit is contained in:
Kevin Matz 2022-11-24 11:34:33 -05:00
parent 24ba41a73f
commit 4a1c50cdf1
2 changed files with 11 additions and 6 deletions

View File

@ -87,13 +87,11 @@ double Universe::rxRate()
*/
unsigned int Universe::rxAge()
{
rx_timeout_();
if (rx_times_.empty())
return -1;
if (!last_seen_.time_since_epoch().count())
return -1; // universe has never been seen
auto now = std::chrono::system_clock::now();
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 - last_seen_);
return elapsed.count();
}
@ -131,6 +129,7 @@ void Universe::setData(const std::vector<uint8_t>& data)
// notify callbacks
setStatus(Status::DMX_ACTIVE);
last_seen_ = std::chrono::system_clock::now();
doDataCallbacks();
}
@ -197,6 +196,7 @@ void Universe::setValue(const uint16_t address, const uint8_t value)
null_start_mutex.unlock();
setStatus(Status::DMX_ACTIVE);
last_seen_ = std::chrono::system_clock::now();
doDataCallbacks();
}
@ -220,6 +220,7 @@ void Universe::setValue(const uint16_t start, const uint16_t footprint,
null_start_mutex.unlock();
setStatus(Status::DMX_ACTIVE);
last_seen_ = std::chrono::system_clock::now();
doDataCallbacks();
}
@ -268,7 +269,10 @@ void Universe::rx_timeout_(bool add_now)
{
auto now = std::chrono::system_clock::now();
if (add_now)
rx_times_.push(now);
{
last_seen_ = now;
rx_times_.push(now);
}
auto elapsed = [] (auto& a, auto& b) {
return std::chrono::duration_cast<std::chrono::milliseconds>(a - b);

View File

@ -84,6 +84,7 @@ class Universe {
private:
std::chrono::system_clock::time_point last_seen_;
std::queue<std::chrono::time_point<std::chrono::system_clock>> rx_times_;
void rx_timeout_(bool add_now = false);