diff options
Diffstat (limited to 'src/fig')
| -rw-r--r-- | src/fig/FIG.h | 10 | ||||
| -rw-r--r-- | src/fig/FIG0_10.cpp | 11 | ||||
| -rw-r--r-- | src/fig/FIG0_21.cpp | 67 | ||||
| -rw-r--r-- | src/fig/FIG0_21.h | 6 | ||||
| -rw-r--r-- | src/fig/FIG0_24.cpp | 31 | ||||
| -rw-r--r-- | src/fig/FIG0_24.h | 3 | ||||
| -rw-r--r-- | src/fig/FIG0_6.cpp | 2 | ||||
| -rw-r--r-- | src/fig/FIG0_6.h | 2 | ||||
| -rw-r--r-- | src/fig/FIG0structs.h | 18 | ||||
| -rw-r--r-- | src/fig/FIG1.h | 13 | ||||
| -rw-r--r-- | src/fig/FIG2.h | 14 | ||||
| -rw-r--r-- | src/fig/FIGCarousel.cpp | 7 | ||||
| -rw-r--r-- | src/fig/FIGCarousel.h | 4 |
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. |
