diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-01-13 16:15:57 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-01-13 16:15:57 +0100 |
commit | 7c8ae25ba83fc658dfbe4cd468bb1bdfd3513c74 (patch) | |
tree | 642bf09c71e44271245d077442c3f8fd620fd18f /src/EtiReader.cpp | |
parent | ea5594186bafa5489d6086a26d71b8f3d1ccf9cd (diff) | |
download | dabmod-7c8ae25ba83fc658dfbe4cd468bb1bdfd3513c74.tar.gz dabmod-7c8ae25ba83fc658dfbe4cd468bb1bdfd3513c74.tar.bz2 dabmod-7c8ae25ba83fc658dfbe4cd468bb1bdfd3513c74.zip |
Integrate timestampdecoder into EDI input
Diffstat (limited to 'src/EtiReader.cpp')
-rw-r--r-- | src/EtiReader.cpp | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/src/EtiReader.cpp b/src/EtiReader.cpp index a1053c6..f0a1793 100644 --- a/src/EtiReader.cpp +++ b/src/EtiReader.cpp @@ -304,6 +304,13 @@ uint32_t EtiReader::getPPSOffset() return timestamp; } +EdiReader::EdiReader( + double& tist_offset_s, + unsigned tist_delay_stages) : + m_timestamp_decoder(tist_offset_s, tist_delay_stages) +{ + rcs.enrol(&m_timestamp_decoder); +} unsigned EdiReader::getMode() { @@ -339,6 +346,19 @@ const std::vector<std::shared_ptr<SubchannelSource> > EdiReader::getSubchannels( return sources; } +bool EdiReader::sourceContainsTimestamp() +{ + if (not (m_frameReady and m_fc_valid)) { + throw std::runtime_error("Trying to get timestamp before it is ready"); + } + + return m_fc.tsta != 0xFFFFFF; +} + +void EdiReader::calculateTimestamp(struct frame_timestamp& ts) +{ +} + bool EdiReader::isFrameReady() { return m_frameReady; @@ -493,13 +513,20 @@ void EdiReader::assemble() // Accept zero subchannels, because of an edge-case that can happen // during reconfiguration. See ETS 300 799 Clause 5.3.3 - // TODO check time validity + if (m_utco == 0 and m_seconds == 0) { + // We don't support relative-only timestamps + m_fc.tsta = 0xFFFFFF; // disable TSTA + } + + /* According to Annex F + * EDI = UTC + UTCO + * We need UTC = EDI - UTCO + */ + auto utc_ts = m_seconds - m_utco; + + m_timestamp_decoder.updateTimestampEdi( + utc_ts, m_fc.tsta, m_fc.fct()); - /* TODO timestamp - myTimestampDecoder.updateTimestampEti( - eti_fc.FP & 0x3, - eti_eoh.MNSC, getPPSOffset(), eti_fc.FCT); - */ m_frameReady = true; } |