diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | doc/TIMESTAMPS.rst | 30 | ||||
-rw-r--r-- | src/DabMux.cpp | 2 |
4 files changed, 44 insertions, 2 deletions
@@ -1,6 +1,18 @@ This file contains information about the changes done to ODR-DabMux in this repository +2019-06-07: Matthias P. Braendli <matthias@mpb.li> + (v2.4.0): + Add timestamp offset setting, and fix bug due to UTCO offset + not being properly applied. See doc/TIMESTAMPS.rst for more + details. + Implement FIG2 labels. + Fix bug for DAB MP2 in EEP_A. + Fix FIG0/24 for DAB+ services. + ODR-ZMQ2EDI: fix MNSC endianness swap bug. + Pull some RC changes from ODR-DabMod. + Implement EDI-over-TCP output. + 2019-01-07: Matthias P. Braendli <matthias@mpb.li> (v2.3.1): Happy new year! diff --git a/configure.ac b/configure.ac index 21d7622..8c7c3b0 100644 --- a/configure.ac +++ b/configure.ac @@ -19,7 +19,7 @@ # along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. AC_PREREQ(2.69) -AC_INIT([ODR-DabMux], [2.3.1], [matthias.braendli@mpb.li]) +AC_INIT([ODR-DabMux], [2.4.0], [matthias.braendli@mpb.li]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_SYSTEM diff --git a/doc/TIMESTAMPS.rst b/doc/TIMESTAMPS.rst new file mode 100644 index 0000000..458f462 --- /dev/null +++ b/doc/TIMESTAMPS.rst @@ -0,0 +1,30 @@ +Some knowledge accumulated about timestamping +============================================= + +The meaning of the timestamps changed between v2.3.1 and v3.0.0, this document gives some guidance about the interaction between different settings. + +The following table tries to summarise the differences. + ++-----------------------------+----------------------------------------------+-------------------------------------+-----------------------------------------------+ +| ODR-DabMux version | Meaning of timestamp inside EDI | ODR-ZMQ2EDI wait time w | Offset that should be set in the mod | ++=============================+==============================================+=====================================+===============================================+ +| Up to and including v2.3.1 | t_frame = t_mux (No offset in mux available) | positive, meaning delay after t_mux | Something larger than w + mod processing time | +| Later than v2.3.1 | t_frame = t_tx = t_mux + tist_offset | negative, meaning delay before t_tx | Something larger than mod processing time | ++-----------------------------+----------------------------------------------+-------------------------------------+-----------------------------------------------+ + +For historical reasons, ODR-DabMod decodes absolute timestamp from MNSC, not from “EDI seconds”. +The edilib tool decodes both EDI timestamp and MNSC, and can be used to verify both are identical. + +Issues in ODR-DabMux v2.3.1 +--------------------------- + +Running ODR-DabMux against the absolute timestamp firmware has uncovered a few issues: + + * At startup, the UTCO was not properly applied to the EDI seconds. This offset was 5 seconds (TAI-UTC offset - 32s, see EDI spec); + * odr-zmq2edi did not compensate for UTCO, hiding the above issue; + * ODR-DabMux needs a configurable offset; + * (minor) MNSC and EDI timestamps did not use the same internal representation, making it difficult to prove that they encode the same value; + * (minor) odr-zmq2edi swapped endianness when regenerating EDI from ETI (minor because only ODR-DabMod considers MNSC, and usually isn't used with EDI); + +**Important** Do not combine odr-zmq2edi with odr-dabmux of a different version! + diff --git a/src/DabMux.cpp b/src/DabMux.cpp index e726fd3..578fc63 100644 --- a/src/DabMux.cpp +++ b/src/DabMux.cpp @@ -292,7 +292,7 @@ int main(int argc, char *argv[]) if (outputuid == "edi") { ptree pt_edi = pt_outputs.get_child("edi"); for (auto pt_edi_dest : pt_edi.get_child("destinations")) { - const auto proto = pt_edi_dest.second.get<string>("protocol"); + const auto proto = pt_edi_dest.second.get<string>("protocol", "udp"); if (proto == "udp") { auto dest = make_shared<edi::udp_destination_t>(); dest->dest_addr = pt_edi_dest.second.get<string>("destination"); |