aboutsummaryrefslogtreecommitdiffstats
path: root/src/DabMultiplexer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/DabMultiplexer.h')
-rw-r--r--src/DabMultiplexer.h78
1 files changed, 46 insertions, 32 deletions
diff --git a/src/DabMultiplexer.h b/src/DabMultiplexer.h
index 9306eed..620e65d 100644
--- a/src/DabMultiplexer.h
+++ b/src/DabMultiplexer.h
@@ -45,47 +45,59 @@ constexpr uint32_t ETI_FSYNC1 = 0x49C5F8;
class MuxTime {
private:
- std::time_t m_edi_time = 0;
- uint32_t m_pps_offset_ms = 0;
- int64_t m_tist_offset_ms = 0;
+ std::time_t m_edi_time = 0;
+ uint32_t m_pps_offset_ms = 0;
+ int64_t m_tist_offset_ms = 0;
public:
- std::pair<uint32_t, std::time_t> get_tist_seconds();
- std::pair<uint32_t, std::time_t> get_milliseconds_seconds();
-
-
- /* Pre v3 odr-dabmux did the MNSC calculation differently,
- * which works with the easydabv2. The rework in odr-dabmux,
- * deriving MNSC time from EDI time broke this.
- *
- * That's why we're now tracking MNSC time in separate variables,
- * to get the same behaviour back.
- *
- * I'm not aware of any devices using MNSC time besides the
- * easydab. ODR-DabMod now considers EDI seconds or ZMQ metadata.
- */
- bool mnsc_increment_time = false;
- std::time_t mnsc_time = 0;
-
- /* Setup the time and return the initial currentFrame counter value */
- uint64_t init(uint32_t tist_at_fct0_ms, double tist_offset);
- void increment_timestamp();
- double tist_offset() const { return m_tist_offset_ms / 1000.0; }
- void set_tist_offset(double new_tist_offset);
+ std::pair<uint32_t, std::time_t> get_tist_seconds();
+ std::pair<uint32_t, std::time_t> get_milliseconds_seconds();
+
+
+ /* Pre v3 odr-dabmux did the MNSC calculation differently,
+ * which works with the easydabv2. The rework in odr-dabmux,
+ * deriving MNSC time from EDI time broke this.
+ *
+ * That's why we're now tracking MNSC time in separate variables,
+ * to get the same behaviour back.
+ *
+ * I'm not aware of any devices using MNSC time besides the
+ * easydab. ODR-DabMod now considers EDI seconds or ZMQ metadata.
+ */
+ bool mnsc_increment_time = false;
+ std::time_t mnsc_time = 0;
+
+ /* Setup the time and return the initial currentFrame counter value */
+ uint64_t init(uint32_t tist_at_fct0_ms, double tist_offset);
+ void increment_timestamp();
+ double tist_offset() const { return m_tist_offset_ms / 1000.0; }
+ void set_tist_offset(double new_tist_offset);
+};
+
+class DabMultiplexerConfig {
+ public:
+ boost::property_tree::ptree pt;
+
+ void read(const std::string& filename);
+ bool valid() const { return m_config_file != ""; }
+ std::string config_file() const { return m_config_file; }
+
+ private:
+ std::string m_config_file;
};
class DabMultiplexer : public RemoteControllable {
public:
- DabMultiplexer(boost::property_tree::ptree pt);
+ DabMultiplexer(DabMultiplexerConfig& config);
DabMultiplexer(const DabMultiplexer& other) = delete;
DabMultiplexer& operator=(const DabMultiplexer& other) = delete;
- ~DabMultiplexer();
+ virtual ~DabMultiplexer();
void prepare(bool require_tai_clock);
void mux_frame(std::vector<std::shared_ptr<DabOutput> >& outputs);
- void print_info(void);
+ void print_info();
void set_edi_config(const edi::configuration_t& new_edi_conf);
@@ -99,11 +111,13 @@ class DabMultiplexer : public RemoteControllable {
virtual const json::map_t get_all_values() const;
private:
- void prepare_subchannels(void);
- void prepare_services_components(void);
- void prepare_data_inputs(void);
+ void prepare_subchannels();
+ void prepare_services_components();
+ void prepare_data_inputs();
+
+ void reload_linkagesets();
- boost::property_tree::ptree m_pt;
+ DabMultiplexerConfig& m_config;
MuxTime m_time;
uint64_t currentFrame = 0;