hold the last seen time separate from the list of valid times
This commit is contained in:
parent
24ba41a73f
commit
4a1c50cdf1
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue