aboutsummaryrefslogtreecommitdiffstats
path: root/src/fig
diff options
context:
space:
mode:
Diffstat (limited to 'src/fig')
-rw-r--r--src/fig/FIG.h10
-rw-r--r--src/fig/FIG0_10.cpp11
-rw-r--r--src/fig/FIG0_21.cpp67
-rw-r--r--src/fig/FIG0_21.h6
-rw-r--r--src/fig/FIG0_24.cpp31
-rw-r--r--src/fig/FIG0_24.h3
-rw-r--r--src/fig/FIG0_6.cpp2
-rw-r--r--src/fig/FIG0_6.h2
-rw-r--r--src/fig/FIG0structs.h18
-rw-r--r--src/fig/FIG1.h13
-rw-r--r--src/fig/FIG2.h14
-rw-r--r--src/fig/FIGCarousel.cpp7
-rw-r--r--src/fig/FIGCarousel.h4
13 files changed, 88 insertions, 100 deletions
diff --git a/src/fig/FIG.h b/src/fig/FIG.h
index 9752245..eda4671 100644
--- a/src/fig/FIG.h
+++ b/src/fig/FIG.h
@@ -35,11 +35,19 @@ namespace FIC {
class FIGRuntimeInformation {
public:
- FIGRuntimeInformation(std::shared_ptr<dabEnsemble>& e) :
+
+ using dab_time_t = std::pair<uint32_t /* milliseconds */, time_t>;
+ using get_time_func_t = std::function<dab_time_t()>;
+
+ FIGRuntimeInformation(
+ std::shared_ptr<dabEnsemble>& e,
+ get_time_func_t getTimeFunc) :
+ getTimeFunc(getTimeFunc),
currentFrame(0),
ensemble(e),
factumAnalyzer(false) {}
+ get_time_func_t getTimeFunc;
unsigned long currentFrame;
std::shared_ptr<dabEnsemble> ensemble;
bool factumAnalyzer;
diff --git a/src/fig/FIG0_10.cpp b/src/fig/FIG0_10.cpp
index 56ce9fb..240aa19 100644
--- a/src/fig/FIG0_10.cpp
+++ b/src/fig/FIG0_10.cpp
@@ -3,7 +3,7 @@
2011, 2012 Her Majesty the Queen in Right of Canada (Communications
Research Center Canada)
- Copyright (C) 2016
+ Copyright (C) 2025
Matthias P. Braendli, matthias.braendli@mpb.li
*/
/*
@@ -23,7 +23,6 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "fig/FIG0structs.h"
#include "fig/FIG0_10.h"
#include "utils.h"
@@ -89,7 +88,7 @@ FillStatus FIG0_10::fill(uint8_t *buf, size_t max_size)
return fs;
}
- //Time and country identifier
+ // Time and country identifier
auto fig0_10 = (FIGtype0_10_LongForm*)buf;
fig0_10->FIGtypeNumber = 0;
@@ -102,9 +101,9 @@ FillStatus FIG0_10::fill(uint8_t *buf, size_t max_size)
remaining -= 2;
struct tm timeData;
- time_t dab_time_seconds = 0;
- uint32_t dab_time_millis = 0;
- get_dab_time(&dab_time_seconds, &dab_time_millis);
+ const auto dab_time = m_rti->getTimeFunc();
+ time_t dab_time_seconds = dab_time.second;
+ uint32_t dab_time_millis = dab_time.first;
gmtime_r(&dab_time_seconds, &timeData);
fig0_10->RFU = 0;
diff --git a/src/fig/FIG0_21.cpp b/src/fig/FIG0_21.cpp
index 5855fb1..ea6ebfe 100644
--- a/src/fig/FIG0_21.cpp
+++ b/src/fig/FIG0_21.cpp
@@ -3,7 +3,7 @@
2011, 2012 Her Majesty the Queen in Right of Canada (Communications
Research Center Canada)
- Copyright (C) 2018
+ Copyright (C) 2025
Matthias P. Braendli, matthias.braendli@mpb.li
*/
/*
@@ -119,11 +119,12 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
auto ensemble = m_rti->ensemble;
if (not m_initialised) {
- freqInfoFIG0_21 = ensemble->frequency_information.begin();
+ m_freq_info = ensemble->get_frequency_information();
+ m_freq_info_it = m_freq_info.begin();
fi_frequency_index = 0;
- if (freqInfoFIG0_21 != ensemble->frequency_information.end()) {
- m_last_oe = freqInfoFIG0_21->other_ensemble;
+ if (m_freq_info_it != m_freq_info.end()) {
+ m_last_oe = m_freq_info_it->other_ensemble;
}
m_initialised = true;
}
@@ -131,13 +132,13 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
FIGtype0* fig0 = nullptr;
auto advance_loop = [&](void){
- if (fi_frequency_index == get_num_frequencies(freqInfoFIG0_21)) {
- ++freqInfoFIG0_21;
+ if (fi_frequency_index == get_num_frequencies(m_freq_info_it)) {
+ ++m_freq_info_it;
fi_frequency_index = 0;
}
};
- for (; freqInfoFIG0_21 != ensemble->frequency_information.end();
+ for (; m_freq_info_it != m_freq_info.end();
advance_loop()) {
/* For better usage of FIC capacity, we want to transmit
* frequency lists with
@@ -149,7 +150,7 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
// Check we have space for one frequency
size_t required_fi_size = 2; // RegionId + length of FI list
size_t list_entry_size = sizeof(struct FIGtype0_21_fi_list_header);
- switch (freqInfoFIG0_21->rm) {
+ switch (m_freq_info_it->rm) {
case RangeModulation::dab_ensemble:
list_entry_size += 3;
break;
@@ -170,12 +171,12 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
const size_t required_size =
sizeof(struct FIGtype0_21_header) + required_fi_size;
- if (m_last_oe != freqInfoFIG0_21->other_ensemble) {
+ if (m_last_oe != m_freq_info_it->other_ensemble) {
// Trigger resend of FIG0 when OE changes
fig0 = nullptr;
- m_last_oe = freqInfoFIG0_21->other_ensemble;
+ m_last_oe = m_freq_info_it->other_ensemble;
etiLog.level(FIG0_21_TRACE) << "FIG0_21::switch OE to " <<
- freqInfoFIG0_21->other_ensemble;
+ m_freq_info_it->other_ensemble;
}
if (fig0 == nullptr) {
@@ -188,7 +189,7 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
// Database start or continuation flag, EN 300 401 Clause 5.2.2.1 part b)
fig0->CN = (fi_frequency_index == 0 ? 0 : 1);
- fig0->OE = freqInfoFIG0_21->other_ensemble ? 1 : 0;
+ fig0->OE = m_freq_info_it->other_ensemble ? 1 : 0;
fig0->PD = false;
fig0->Extension = 21;
@@ -199,8 +200,8 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
break;
}
- etiLog.level(FIG0_21_TRACE) << "FIG0_21::loop " << freqInfoFIG0_21->uid << " " <<
- std::distance(ensemble->frequency_information.begin(), freqInfoFIG0_21) <<
+ etiLog.level(FIG0_21_TRACE) << "FIG0_21::loop " << m_freq_info_it->uid << " " <<
+ std::distance(m_freq_info.begin(), m_freq_info_it) <<
" freq entry " << fi_frequency_index;
auto *fig0_21_header = (FIGtype0_21_header*)buf;
@@ -217,26 +218,26 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
buf += sizeof(FIGtype0_21_fi_list_header);
remaining -= sizeof(FIGtype0_21_fi_list_header);
- fi_list_header->continuity = freqInfoFIG0_21->continuity;
+ fi_list_header->continuity = m_freq_info_it->continuity;
fi_list_header->length_freq_list = 0;
- fi_list_header->range_modulation = static_cast<uint8_t>(freqInfoFIG0_21->rm);
+ fi_list_header->range_modulation = static_cast<uint8_t>(m_freq_info_it->rm);
bool continue_loop = true;
- switch (freqInfoFIG0_21->rm) {
+ switch (m_freq_info_it->rm) {
case RangeModulation::dab_ensemble:
- fi_list_header->setId(freqInfoFIG0_21->fi_dab.eid);
+ fi_list_header->setId(m_freq_info_it->fi_dab.eid);
for (size_t num_inserted = 0, i = fi_frequency_index;
num_inserted < 2 and
- i < freqInfoFIG0_21->fi_dab.frequencies.size();
+ i < m_freq_info_it->fi_dab.frequencies.size();
num_inserted++, i++) {
if (remaining < 3) {
continue_loop = false;
break;
}
- const auto& freq = freqInfoFIG0_21->fi_dab.frequencies.at(i);
+ const auto& freq = m_freq_info_it->fi_dab.frequencies.at(i);
auto *field = (FIGtype0_21_fi_dab_entry*)buf;
field->control_field = static_cast<uint8_t>(freq.control_field);
@@ -254,18 +255,18 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
}
break;
case RangeModulation::fm_with_rds:
- fi_list_header->setId(freqInfoFIG0_21->fi_fm.pi_code);
+ fi_list_header->setId(m_freq_info_it->fi_fm.pi_code);
for (size_t num_inserted = 0, i = fi_frequency_index;
num_inserted < 7 and
- i < freqInfoFIG0_21->fi_fm.frequencies.size();
+ i < m_freq_info_it->fi_fm.frequencies.size();
num_inserted++, i++) {
if (remaining < 1) {
continue_loop = false;
break;
}
- const auto& freq = freqInfoFIG0_21->fi_fm.frequencies.at(i);
+ const auto& freq = m_freq_info_it->fi_fm.frequencies.at(i);
// RealFreq = 87.5 MHz + (F * 100kHz)
// => F = (RealFreq - 87.5 MHz) / 100kHz
// Do the whole calculation in kHz:
@@ -280,14 +281,14 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
}
break;
case RangeModulation::drm:
- fi_list_header->setId((freqInfoFIG0_21->fi_drm.drm_service_id) & 0xFFFF);
+ fi_list_header->setId((m_freq_info_it->fi_drm.drm_service_id) & 0xFFFF);
if (remaining < 3) {
throw logic_error("Incorrect DRM FI size calculation");
}
// Id field 2
- *buf = (freqInfoFIG0_21->fi_drm.drm_service_id >> 16) & 0xFF;
+ *buf = (m_freq_info_it->fi_drm.drm_service_id >> 16) & 0xFF;
fig0_21_header->length_fi += 1;
fi_list_header->addToLength(1);
@@ -297,14 +298,14 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
for (size_t num_inserted = 0, i = fi_frequency_index;
num_inserted < 3 and
- i < freqInfoFIG0_21->fi_drm.frequencies.size();
+ i < m_freq_info_it->fi_drm.frequencies.size();
num_inserted++, i++) {
if (remaining < 2) {
continue_loop = false;
break;
}
- const auto& freq = freqInfoFIG0_21->fi_drm.frequencies.at(i);
+ const auto& freq = m_freq_info_it->fi_drm.frequencies.at(i);
uint16_t freq_field = static_cast<uint16_t>(freq * 1000.0f);
buf[0] = freq_field >> 8;
buf[1] = freq_field & 0xFF;
@@ -318,14 +319,14 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
}
break;
case RangeModulation::amss:
- fi_list_header->setId((freqInfoFIG0_21->fi_amss.amss_service_id) & 0xFFFF);
+ fi_list_header->setId((m_freq_info_it->fi_amss.amss_service_id) & 0xFFFF);
if (remaining < 3) {
throw logic_error("Incorrect AMSS FI size calculation");
}
// Id field 2
- *buf = (freqInfoFIG0_21->fi_amss.amss_service_id >> 16) & 0xFF;
+ *buf = (m_freq_info_it->fi_amss.amss_service_id >> 16) & 0xFF;
fig0_21_header->length_fi += 1;
fi_list_header->addToLength(1);
@@ -335,14 +336,14 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
for (size_t num_inserted = 0, i = fi_frequency_index;
num_inserted < 3 and
- i < freqInfoFIG0_21->fi_amss.frequencies.size();
+ i < m_freq_info_it->fi_amss.frequencies.size();
num_inserted++, i++) {
if (remaining < 2) {
continue_loop = false;
break;
}
- const auto& freq = freqInfoFIG0_21->fi_amss.frequencies.at(i);
+ const auto& freq = m_freq_info_it->fi_amss.frequencies.at(i);
uint16_t freq_field = static_cast<uint16_t>(freq * 1000.0f);
buf[0] = freq_field >> 8;
buf[1] = freq_field & 0xFF;
@@ -370,10 +371,10 @@ FillStatus FIG0_21::fill(uint8_t *buf, size_t max_size)
}
} // for over FI
- if (freqInfoFIG0_21 == ensemble->frequency_information.end()) {
+ if (m_freq_info_it == m_freq_info.end()) {
fs.complete_fig_transmitted = true;
- freqInfoFIG0_21 = ensemble->frequency_information.begin();
+ m_freq_info_it = m_freq_info.begin();
fi_frequency_index = 0;
}
diff --git a/src/fig/FIG0_21.h b/src/fig/FIG0_21.h
index 706dead..4e56c8c 100644
--- a/src/fig/FIG0_21.h
+++ b/src/fig/FIG0_21.h
@@ -3,7 +3,7 @@
2011, 2012 Her Majesty the Queen in Right of Canada (Communications
Research Center Canada)
- Copyright (C) 2018
+ Copyright (C) 2025
Matthias P. Braendli, matthias.braendli@mpb.li
*/
/*
@@ -27,7 +27,6 @@
#include <cstdint>
#include <vector>
-#include <memory>
namespace FIC {
@@ -49,7 +48,8 @@ class FIG0_21 : public IFIG
bool m_initialised = false;
bool m_last_oe = false;
- std::vector<FrequencyInformation>::iterator freqInfoFIG0_21;
+ std::vector<FrequencyInformation> m_freq_info;
+ std::vector<FrequencyInformation>::iterator m_freq_info_it;
size_t fi_frequency_index = 0;
};
diff --git a/src/fig/FIG0_24.cpp b/src/fig/FIG0_24.cpp
index c48d8de..c254e63 100644
--- a/src/fig/FIG0_24.cpp
+++ b/src/fig/FIG0_24.cpp
@@ -73,21 +73,22 @@ FillStatus FIG0_24::fill(uint8_t *buf, size_t max_size)
" ********************************";
if (not m_initialised) {
- serviceFIG0_24 = ensemble->service_other_ensemble.begin();
+ m_services = ensemble->get_service_other_ensemble();
+ m_services_it = m_services.begin();
m_initialised = true;
}
- const auto last_service = ensemble->service_other_ensemble.end();
+ const auto last_service = m_services.end();
bool last_oe = false;
// Rotate through the subchannels until there is no more
// space
- for (; serviceFIG0_24 != last_service; ++serviceFIG0_24) {
+ for (; m_services_it != last_service; ++m_services_it) {
shared_ptr<DabService> service;
for (const auto& local_service : ensemble->services) {
- if (local_service->id == serviceFIG0_24->service_id) {
+ if (local_service->id == m_services_it->service_id) {
service = local_service;
break;
}
@@ -105,7 +106,7 @@ FillStatus FIG0_24::fill(uint8_t *buf, size_t max_size)
etiLog.log(FIG0_24_TRACE, "FIG0_24::fill loop OE=%d SId=%04x %s/%s",
oe,
- serviceFIG0_24->service_id,
+ m_services_it->service_id,
m_inserting_audio_not_data ? "AUDIO" : "DATA",
type == subchannel_type_t::DABAudio ? "Audio" :
type == subchannel_type_t::Packet ? "Packet" :
@@ -117,7 +118,7 @@ FillStatus FIG0_24::fill(uint8_t *buf, size_t max_size)
const ssize_t required_size =
(isProgramme ? 2 : 4) + 1 +
- serviceFIG0_24->other_ensembles.size() * 2;
+ m_services_it->other_ensembles.size() * 2;
if (fig0 == nullptr) {
@@ -132,7 +133,7 @@ FillStatus FIG0_24::fill(uint8_t *buf, size_t max_size)
fig0->FIGtypeNumber = 0;
fig0->Length = 1;
// CN according to ETSI TS 103 176, Clause 5.3.4.1
- bool isFirst = serviceFIG0_24 == ensemble->service_other_ensemble.begin();
+ bool isFirst = m_services_it == m_services.begin();
fig0->CN = (isFirst ? 0 : 1);
fig0->OE = oe;
fig0->PD = isProgramme ? 0 : 1;
@@ -149,33 +150,33 @@ FillStatus FIG0_24::fill(uint8_t *buf, size_t max_size)
if (isProgramme) {
auto fig0_24_audioservice = (FIGtype0_24_audioservice*)buf;
- fig0_24_audioservice->SId = htons(serviceFIG0_24->service_id);
+ fig0_24_audioservice->SId = htons(m_services_it->service_id);
fig0_24_audioservice->rfa = 0;
fig0_24_audioservice->CAId = 0;
- fig0_24_audioservice->Length = serviceFIG0_24->other_ensembles.size();
+ fig0_24_audioservice->Length = m_services_it->other_ensembles.size();
buf += 3;
fig0->Length += 3;
remaining -= 3;
etiLog.log(FIG0_24_TRACE, "FIG0_24::fill audio SId=%04x",
- serviceFIG0_24->service_id);
+ m_services_it->service_id);
}
else {
auto fig0_24_dataservice = (FIGtype0_24_dataservice*)buf;
- fig0_24_dataservice->SId = htonl(serviceFIG0_24->service_id);
+ fig0_24_dataservice->SId = htonl(m_services_it->service_id);
fig0_24_dataservice->rfa = 0;
fig0_24_dataservice->CAId = 0;
- fig0_24_dataservice->Length = serviceFIG0_24->other_ensembles.size();
+ fig0_24_dataservice->Length = m_services_it->other_ensembles.size();
buf += 4;
fig0->Length += 4;
remaining -= 4;
etiLog.log(FIG0_24_TRACE, "FIG0_24::fill data SId=%04x",
- serviceFIG0_24->service_id);
+ m_services_it->service_id);
}
- for (const uint16_t oe : serviceFIG0_24->other_ensembles) {
+ for (const uint16_t oe : m_services_it->other_ensembles) {
buf[0] = oe >> 8;
buf[1] = oe & 0xFF;
@@ -185,7 +186,7 @@ FillStatus FIG0_24::fill(uint8_t *buf, size_t max_size)
}
}
- if (serviceFIG0_24 == last_service) {
+ if (m_services_it == last_service) {
etiLog.log(FIG0_24_TRACE, "FIG0_24::loop reached last");
fs.complete_fig_transmitted = true;
m_initialised = false;
diff --git a/src/fig/FIG0_24.h b/src/fig/FIG0_24.h
index d1e7604..7677e16 100644
--- a/src/fig/FIG0_24.h
+++ b/src/fig/FIG0_24.h
@@ -47,7 +47,8 @@ class FIG0_24 : public IFIG
FIGRuntimeInformation *m_rti;
bool m_initialised;
bool m_inserting_audio_not_data;
- std::vector<ServiceOtherEnsembleInfo>::iterator serviceFIG0_24;
+ std::vector<ServiceOtherEnsembleInfo> m_services;
+ std::vector<ServiceOtherEnsembleInfo>::iterator m_services_it;
};
}
diff --git a/src/fig/FIG0_6.cpp b/src/fig/FIG0_6.cpp
index 61d950d..e9e6220 100644
--- a/src/fig/FIG0_6.cpp
+++ b/src/fig/FIG0_6.cpp
@@ -256,7 +256,7 @@ void FIG0_6::update()
// TODO check if AMSS and DRM have to be put into a single subset
- for (const auto& linkageset : m_rti->ensemble->linkagesets) {
+ for (const auto& linkageset : m_rti->ensemble->get_linkagesets()) {
const auto lsn = linkageset->lsn;
if (linkageset->keyservice.empty()) {
diff --git a/src/fig/FIG0_6.h b/src/fig/FIG0_6.h
index 770c4d5..96464d2 100644
--- a/src/fig/FIG0_6.h
+++ b/src/fig/FIG0_6.h
@@ -26,8 +26,6 @@
#pragma once
#include <cstdint>
-#include <vector>
-#include <memory>
namespace FIC {
diff --git a/src/fig/FIG0structs.h b/src/fig/FIG0structs.h
index 5f514b3..2e107e8 100644
--- a/src/fig/FIG0structs.h
+++ b/src/fig/FIG0structs.h
@@ -24,19 +24,17 @@
*/
#pragma once
-
#include <cstdint>
-
#include "fig/FIG.h"
-#define FIG0_13_APPTYPE_SLIDESHOW 0x2
-#define FIG0_13_APPTYPE_WEBSITE 0x3
-#define FIG0_13_APPTYPE_TPEG 0x4
-#define FIG0_13_APPTYPE_DGPS 0x5
-#define FIG0_13_APPTYPE_TMC 0x6
-#define FIG0_13_APPTYPE_SPI 0x7
-#define FIG0_13_APPTYPE_DABJAVA 0x8
-#define FIG0_13_APPTYPE_JOURNALINE 0x44a
+constexpr uint16_t FIG0_13_APPTYPE_SLIDESHOW = 0x2;
+constexpr uint16_t FIG0_13_APPTYPE_WEBSITE = 0x3;
+constexpr uint16_t FIG0_13_APPTYPE_TPEG = 0x4;
+constexpr uint16_t FIG0_13_APPTYPE_DGPS = 0x5;
+constexpr uint16_t FIG0_13_APPTYPE_TMC = 0x6;
+constexpr uint16_t FIG0_13_APPTYPE_SPI = 0x7;
+constexpr uint16_t FIG0_13_APPTYPE_DABJAVA = 0x8;
+constexpr uint16_t FIG0_13_APPTYPE_JOURNALINE = 0x44a;
struct FIGtype0 {
diff --git a/src/fig/FIG1.h b/src/fig/FIG1.h
index 0fedffe..fe36717 100644
--- a/src/fig/FIG1.h
+++ b/src/fig/FIG1.h
@@ -23,8 +23,7 @@
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __FIG1_H_
-#define __FIG1_H_
+#pragma once
#include <cstdint>
@@ -103,10 +102,6 @@ class FIG1_5 : public IFIG
vec_sp_service::iterator service;
};
-#ifdef _WIN32
-# pragma pack(push)
-#endif
-
struct FIGtype1_0 {
uint8_t Length:5;
uint8_t FIGtypeNumber:3;
@@ -165,11 +160,5 @@ struct FIGtype1_4_data {
} PACKED;
-#ifdef _WIN32
-# pragma pack(pop)
-#endif
-
} // namespace FIC
-#endif // __FIG1_H_
-
diff --git a/src/fig/FIG2.h b/src/fig/FIG2.h
index ee3fed9..e69c5db 100644
--- a/src/fig/FIG2.h
+++ b/src/fig/FIG2.h
@@ -22,9 +22,7 @@
You should have received a copy of the GNU General Public License
along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>.
*/
-
-#ifndef __FIG2_H_
-#define __FIG2_H_
+#pragma once
#include <cstdint>
#include <map>
@@ -117,10 +115,6 @@ class FIG2_4 : public IFIG
std::map<std::pair<uint32_t, uint8_t>, FIG2_Segments> segment_per_component;
};
-#ifdef _WIN32
-# pragma pack(push)
-#endif
-
struct FIGtype2 {
uint8_t Length:5;
uint8_t FIGtypeNumber:3;
@@ -159,11 +153,5 @@ struct FIG2_Extended_Label_WithTextControl {
uint8_t EncodingFlag:1;
} PACKED;
-#ifdef _WIN32
-# pragma pack(pop)
-#endif
-
} // namespace FIC
-#endif // __FIG2_H_
-
diff --git a/src/fig/FIGCarousel.cpp b/src/fig/FIGCarousel.cpp
index 9748dbf..ceda275 100644
--- a/src/fig/FIGCarousel.cpp
+++ b/src/fig/FIGCarousel.cpp
@@ -68,8 +68,11 @@ bool FIGCarouselElement::check_deadline()
/**************** FIGCarousel *****************/
-FIGCarousel::FIGCarousel(std::shared_ptr<dabEnsemble> ensemble) :
- m_rti(ensemble),
+FIGCarousel::FIGCarousel(
+ std::shared_ptr<dabEnsemble> ensemble,
+ FIGRuntimeInformation::get_time_func_t getTimeFunc
+ ) :
+ m_rti(ensemble, getTimeFunc),
m_fig0_0(&m_rti),
m_fig0_1(&m_rti),
m_fig0_2(&m_rti),
diff --git a/src/fig/FIGCarousel.h b/src/fig/FIGCarousel.h
index 1e33577..a2a8022 100644
--- a/src/fig/FIGCarousel.h
+++ b/src/fig/FIGCarousel.h
@@ -67,7 +67,9 @@ enum class FIBAllocation {
class FIGCarousel {
public:
- FIGCarousel(std::shared_ptr<dabEnsemble> ensemble);
+ FIGCarousel(
+ std::shared_ptr<dabEnsemble> ensemble,
+ FIGRuntimeInformation::get_time_func_t getTimeFunc);
/* Write all FIBs to the buffer, including correct padding and crc.
* Returns number of bytes written.