diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-10-06 17:21:13 +0200 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-10-06 17:21:13 +0200 | 
| commit | b6b840f6072e950f2ded719ae51badfba7566fa8 (patch) | |
| tree | 67fa420ad7de127290c85ffb84196ae2e3fe1c7a /src/DabMultiplexer.cpp | |
| parent | f34c15338bc07357f1a1665e2c6e8fc1eaca7eed (diff) | |
| download | dabmux-b6b840f6072e950f2ded719ae51badfba7566fa8.tar.gz dabmux-b6b840f6072e950f2ded719ae51badfba7566fa8.tar.bz2 dabmux-b6b840f6072e950f2ded719ae51badfba7566fa8.zip | |
Add frequency_information hot-reload
Diffstat (limited to 'src/DabMultiplexer.cpp')
| -rw-r--r-- | src/DabMultiplexer.cpp | 53 | 
1 files changed, 40 insertions, 13 deletions
| diff --git a/src/DabMultiplexer.cpp b/src/DabMultiplexer.cpp index 7a8ac97..d107b9a 100644 --- a/src/DabMultiplexer.cpp +++ b/src/DabMultiplexer.cpp @@ -163,7 +163,7 @@ DabMultiplexer::DabMultiplexer(DabMultiplexerConfig& config) :  {      RC_ADD_PARAMETER(frames, "Show number of frames generated [read-only]");      RC_ADD_PARAMETER(tist_offset, "Configured tist-offset"); -    RC_ADD_PARAMETER(reload_linkagesets, "Write 1 to this parameter to trigger a reload of the linkage sets from the config [write-only]"); +    RC_ADD_PARAMETER(reload_linking, "Write 1 to this parameter to trigger a reload of the linkage sets, frequency info and other-services from the config [write-only]");      rcs.enrol(&m_clock_tai);  } @@ -462,24 +462,51 @@ void DabMultiplexer::prepare_data_inputs()      }  } -void DabMultiplexer::reload_linkagesets() +void DabMultiplexer::reload_linking()  {      try {          DabMultiplexerConfig new_conf;          new_conf.read(m_config.config_file());          if (new_conf.valid()) { -            const auto pt_linking = new_conf.pt.get_child_optional("linking"); + +            bool linkage_sets_valid = false;              std::vector<std::shared_ptr<LinkageSet> > linkagesets; -            parse_linkage(pt_linking, linkagesets); -            etiLog.level(info) << "Validating " << linkagesets.size() << " new linkage sets."; +            try { +                const auto pt_linking = new_conf.pt.get_child_optional("linking"); +                parse_linkage(pt_linking, linkagesets); + +                etiLog.level(info) << "Validating " << linkagesets.size() << " new linkage sets."; + +                linkage_sets_valid = ensemble->validate_linkage_sets( +                        ensemble->services, linkagesets); +                if (not linkage_sets_valid) { +                    etiLog.level(warn) << "New linkage set validation failed"; +                } +            } +            catch (const std::runtime_error& e) +            { +                etiLog.level(warn) << "Failed to validate new linkage sets: " << e.what(); +            } + + +            bool freq_info_valid = false; +            std::vector<FrequencyInformation> frequency_information; -            if (ensemble->validate_linkage_sets(ensemble->services, linkagesets)) { -                ensemble->linkagesets = linkagesets; -                etiLog.level(info) << "Loaded new linkage sets."; +            try { +                const auto pt_frequency_information = new_conf.pt.get_child_optional( +                        "frequency_information"); +                parse_freq_info(pt_frequency_information, frequency_information); +                freq_info_valid = true;              } -            else { -                etiLog.level(warn) << "New linkage set validation failed"; +            catch (const std::runtime_error& e) +            { +                etiLog.level(warn) << "Failed to validate new frequency info: " << e.what(); +            } + +            if (linkage_sets_valid and freq_info_valid) { +                ensemble->set_linking_config(linkagesets, frequency_information); +                etiLog.level(info) << "Loaded new linkage sets and frequency info.";              }          }      } @@ -897,8 +924,8 @@ void DabMultiplexer::set_parameter(const std::string& parameter,      else if (parameter == "tist_offset") {          m_time.set_tist_offset(std::stod(value));      } -    else if (parameter == "reload_linkagesets") { -        reload_linkagesets(); +    else if (parameter == "reload_linking") { +        reload_linking();      }      else {          stringstream ss; @@ -918,7 +945,7 @@ const std::string DabMultiplexer::get_parameter(const std::string& parameter) co      else if (parameter == "tist_offset") {          ss << m_time.tist_offset();      } -    else if (parameter == "reload_linkagesets") { +    else if (parameter == "reload_linking") {          ss << "Parameter '" << parameter <<              "' is not write-only in controllable " << get_rc_name();          throw ParameterError(ss.str()); | 
