diff options
Diffstat (limited to 'src/fig/FIG0_21.cpp')
| -rw-r--r-- | src/fig/FIG0_21.cpp | 67 |
1 files changed, 34 insertions, 33 deletions
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; } |
