Skip to content

Commit

Permalink
Merge pull request #702 from SignalK/expiring_value
Browse files Browse the repository at this point in the history
Implement new ExpiringValue container class
  • Loading branch information
mairas authored Jun 16, 2024
2 parents 01d0db7 + c7e1969 commit 4020558
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
56 changes: 56 additions & 0 deletions src/sensesp/system/expiring_value.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#ifndef SENSESP_SRC_SENSESP_SYSTEM_EXPIRING_VALUE_H_
#define SENSESP_SRC_SENSESP_SYSTEM_EXPIRING_VALUE_H_

namespace sensesp {

/**
* @brief Value container that keeps track of its expiration time.
*
* The value is considered expired if the time since the last update is greater
* than the expiration duration. When expired, the value is replaced with an
* expiration placeholder value.
*
* @tparam T
*/
template <typename T>
class ExpiringValue {
public:
ExpiringValue()
: value_{},
expiration_duration_{1000},
last_update_{0},
expired_value_{T{}} {}

ExpiringValue(T value, unsigned long expiration_duration, T expired_value)
: value_{value},
expiration_duration_{expiration_duration},
expired_value_{expired_value},
last_update_{millis()} {}

void update(T value) {
value_ = value;
last_update_ = millis();
}

T get() const {
if (!is_expired()) {
return value_;
} else {
return expired_value_;
}
}

bool is_expired() const {
return millis() - last_update_ > expiration_duration_;
}

private:
T value_;
T expired_value_;
unsigned long expiration_duration_;
unsigned long last_update_;
};

} // namespace sensesp

#endif // SENSESP_SRC_SENSESP_SYSTEM_EXPIRING_VALUE_H_
16 changes: 16 additions & 0 deletions src/sensesp/system/serial_number.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef SENSESP_SRC_SENSESP_SYSTEM_SERIAL_NUMBER_H_
#define SENSESP_SRC_SENSESP_SYSTEM_SERIAL_NUMBER_H_

#include <esp_mac.h>

#include <cstdint>

uint64_t GetBoardSerialNumber() {
uint8_t chipid[6];
esp_efuse_mac_get_default(chipid);
return ((uint64_t)chipid[0] << 0) + ((uint64_t)chipid[1] << 8) +
((uint64_t)chipid[2] << 16) + ((uint64_t)chipid[3] << 24) +
((uint64_t)chipid[4] << 32) + ((uint64_t)chipid[5] << 40);
}

#endif // SENSESP_SRC_SENSESP_SYSTEM_SERIAL_NUMBER_H_

0 comments on commit 4020558

Please sign in to comment.