aboutsummaryrefslogtreecommitdiffstats
path: root/src/DabMultiplexer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DabMultiplexer.cpp')
-rw-r--r--src/DabMultiplexer.cpp53
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());