Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement new ExpiringValue container class #702

Merged
merged 2 commits into from
Jun 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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_
Loading