diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-03-29 16:49:34 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-03-29 16:49:34 +0200 |
commit | 630a8991a90b08d124222f7a853e2c838996deff (patch) | |
tree | 6de335a548024ba6e53e46d4942f253af0c43d2e /lib/edi | |
parent | 93e517110ee27a45bfb6827ffacb4ae27fdb64e1 (diff) | |
download | dabmod-630a8991a90b08d124222f7a853e2c838996deff.tar.gz dabmod-630a8991a90b08d124222f7a853e2c838996deff.tar.bz2 dabmod-630a8991a90b08d124222f7a853e2c838996deff.zip |
Common: log timestamps, socket changes and frame_timestamp_t
Diffstat (limited to 'lib/edi')
-rw-r--r-- | lib/edi/common.hpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/edi/common.hpp b/lib/edi/common.hpp index 5e31984..c3e6c40 100644 --- a/lib/edi/common.hpp +++ b/lib/edi/common.hpp @@ -35,7 +35,7 @@ namespace EdiDecoder { struct frame_timestamp_t { uint32_t seconds = 0; uint32_t utco = 0; - uint32_t tsta = 0; // According to EN 300 797 Annex B + uint32_t tsta = 0xFFFFFF; // According to EN 300 797 Annex B bool valid() const; std::string to_string() const; @@ -47,6 +47,33 @@ struct frame_timestamp_t { frame_timestamp_t& operator+=(const std::chrono::milliseconds& ms); static frame_timestamp_t from_unix_epoch(std::time_t time, uint32_t tai_utc_offset, uint32_t tsta); + + friend bool operator==(const frame_timestamp_t& l, const frame_timestamp_t& r) { + return (l.seconds - l.utco) == (r.seconds - r.utco) and l.tsta == r.tsta; + } + + friend bool operator!=(const frame_timestamp_t& l, const frame_timestamp_t& r) { + return not (l == r); + } + + friend bool operator< (const frame_timestamp_t& l, const frame_timestamp_t& r) { + if (l.seconds - l.utco == r.seconds - r.utco) { + return l.tsta < r.tsta; + } + return l.seconds - l.utco < r.seconds - r.utco; + } + + friend bool operator<= (const frame_timestamp_t& l, const frame_timestamp_t& r) { + return l < r or l == r; + } + + friend bool operator> (const frame_timestamp_t& l, const frame_timestamp_t& r) { + return r < l; + } + + friend bool operator>= (const frame_timestamp_t& l, const frame_timestamp_t& r) { + return l > r or l == r; + } }; using tag_name_t = std::array<uint8_t, 4>; |