From 27e489a4b40a139ace3c679215e44f109f006127 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sat, 17 Jun 2017 07:50:31 +0200 Subject: Use enum for transmission mode --- doc/advanced.mux | 2 +- src/ConfigParser.cpp | 21 +++++++++++++++------ src/DabMultiplexer.cpp | 20 +++++++++++++++++--- src/MuxElements.h | 9 ++++++++- src/utils.cpp | 15 ++++++++++++++- 5 files changed, 55 insertions(+), 12 deletions(-) diff --git a/doc/advanced.mux b/doc/advanced.mux index 93a636f..74c1dd4 100644 --- a/doc/advanced.mux +++ b/doc/advanced.mux @@ -14,7 +14,7 @@ ; The general section defines global multiplex parameters. general { ; the DAB Transmission mode (values 1-4 accepted) - dabmode 2 + dabmode 1 ; the number of ETI frames to generate (set to 0 to get an unlimited number) nbframes 10 diff --git a/src/ConfigParser.cpp b/src/ConfigParser.cpp index 3f977ad..8eed560 100644 --- a/src/ConfigParser.cpp +++ b/src/ConfigParser.cpp @@ -345,12 +345,21 @@ void parse_ptree( ptree pt_general = pt.get_child("general"); /* Dab mode logic */ - ensemble->mode = pt_general.get("dabmode", 2); - if ((ensemble->mode < 1) || (ensemble->mode > 4)) { - throw runtime_error("Mode must be between 1-4"); - } - if (ensemble->mode == 4) { - ensemble->mode = 0; + switch (pt_general.get("dabmode", 1)) { + case 1: + ensemble->transmission_mode = TransmissionMode_e::TM_I; + break; + case 2: + ensemble->transmission_mode = TransmissionMode_e::TM_II; + break; + case 3: + ensemble->transmission_mode = TransmissionMode_e::TM_III; + break; + case 4: + ensemble->transmission_mode = TransmissionMode_e::TM_IV; + break; + default: + throw runtime_error("Mode must be between 1-4"); } /******************** READ ENSEMBLE PARAMETERS *************/ diff --git a/src/DabMultiplexer.cpp b/src/DabMultiplexer.cpp index a86a1c7..3421338 100644 --- a/src/DabMultiplexer.cpp +++ b/src/DabMultiplexer.cpp @@ -374,7 +374,8 @@ void DabMultiplexer::mux_frame(std::vector >& outputs vector::iterator subchannel; // FIC Length, DAB Mode I, II, IV -> FICL = 24, DAB Mode III -> FICL = 32 - unsigned FICL = (ensemble->mode == 3 ? 32 : 24); + unsigned FICL = + (ensemble->transmission_mode == TransmissionMode_e::TM_III ? 32 : 24); // For EDI, save ETI(LI) Management data into a TAG Item DETI edi::TagDETI edi_tagDETI; @@ -437,7 +438,20 @@ void DabMultiplexer::mux_frame(std::vector >& outputs //****** MID ******// //Mode Identity, 2 bits, 01 ModeI, 10 modeII, 11 ModeIII, 00 ModeIV - fc->MID = edi_tagDETI.mid = ensemble->mode; //mode 2 needs 3 FIB, 3*32octets = 96octets + switch (ensemble->transmission_mode) { + case TransmissionMode_e::TM_I: + fc->MID = edi_tagDETI.mid = 1; + break; + case TransmissionMode_e::TM_II: + fc->MID = edi_tagDETI.mid = 2; + break; + case TransmissionMode_e::TM_III: + fc->MID = edi_tagDETI.mid = 3; + break; + case TransmissionMode_e::TM_IV: + fc->MID = edi_tagDETI.mid = 0; + break; + } //****** FL ******// /* Frame Length, 11 bits, nb of words(4 bytes) in STC, EOH and MST @@ -563,7 +577,7 @@ void DabMultiplexer::mux_frame(std::vector >& outputs // Insert all FIBs fig_carousel.update(currentFrame); - const bool fib3_present = ensemble->mode == 3; + const bool fib3_present = (ensemble->transmission_mode == TransmissionMode_e::TM_III); index += fig_carousel.write_fibs(&etiFrame[index], currentFrame % 4, fib3_present); /********************************************************************** diff --git a/src/MuxElements.h b/src/MuxElements.h index 6a1ca74..c5a8faa 100644 --- a/src/MuxElements.h +++ b/src/MuxElements.h @@ -193,6 +193,13 @@ class DabSubchannel; class LinkageSet; struct FrequencyInformation; +enum class TransmissionMode_e { + TM_I, + TM_II, + TM_III, + TM_IV +}; + class dabEnsemble : public RemoteControllable { public: dabEnsemble() @@ -213,7 +220,7 @@ class dabEnsemble : public RemoteControllable { uint16_t id = 0; uint8_t ecc = 0; DabLabel label; - uint8_t mode = 0; + TransmissionMode_e transmission_mode = TransmissionMode_e::TM_I; /* Use the local time to calculate the lto */ bool lto_auto = true; diff --git a/src/utils.cpp b/src/utils.cpp index cfbe13b..8b4de67 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -494,7 +494,20 @@ void printEnsemble(const shared_ptr& ensemble) ensemble->label.short_label(); etiLog.log(info, " (0x%x)", ensemble->label.flag()); - etiLog.log(info, " mode: %u", ensemble->mode); + switch (ensemble->transmission_mode) { + case TransmissionMode_e::TM_I: + etiLog.log(info, " mode: TM I"); + break; + case TransmissionMode_e::TM_II: + etiLog.log(info, " mode: TM II"); + break; + case TransmissionMode_e::TM_III: + etiLog.log(info, " mode: TM III"); + break; + case TransmissionMode_e::TM_IV: + etiLog.log(info, " mode: TM IV"); + break; + } if (ensemble->lto_auto) { time_t now = time(nullptr); -- cgit v1.2.3