From b877907785fbeb40d8c8c413447b6fffc8e48c97 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 23 Dec 2015 04:27:25 +0100 Subject: [PATCH] BFM demod: RDS: really improve PSN decoding and display --- plugins/channel/bfm/bfmdemodgui.cpp | 2 +- plugins/channel/bfm/rdsparser.cpp | 9 +++++---- plugins/channel/bfm/rdsparser.h | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/channel/bfm/bfmdemodgui.cpp b/plugins/channel/bfm/bfmdemodgui.cpp index e62464066..c0c4f81b9 100644 --- a/plugins/channel/bfm/bfmdemodgui.cpp +++ b/plugins/channel/bfm/bfmdemodgui.cpp @@ -568,7 +568,7 @@ void BFMDemodGUI::rdsUpdate(bool force) ui->g00Label->setStyleSheet("QLabel { background-color : green; }"); ui->g00CountText->setNum((int) m_rdsParser.m_g0_count); - if (m_rdsParser.m_g0_psn_complete) { + if (m_rdsParser.m_g0_psn_bitmap == 0b1111) { ui->g00ProgServiceName->setText(QString(m_rdsParser.m_g0_program_service_name)); } diff --git a/plugins/channel/bfm/rdsparser.cpp b/plugins/channel/bfm/rdsparser.cpp index eead033f1..e18bc70e2 100644 --- a/plugins/channel/bfm/rdsparser.cpp +++ b/plugins/channel/bfm/rdsparser.cpp @@ -273,7 +273,7 @@ void RDSParser::clearAllFields() m_g0_count = 0; std::memset(m_g0_program_service_name, ' ', sizeof(m_g0_program_service_name)); m_g0_program_service_name[sizeof(m_g0_program_service_name) - 1] = '\0'; - m_g0_psn_complete = true; + m_g0_psn_bitmap = 0; m_g0_traffic_announcement = false; m_g0_music_speech = false; m_g0_mono_stereo = false; @@ -478,11 +478,12 @@ void RDSParser::decode_type0(unsigned int *group, bool B) { std::memset(m_g0_program_service_name, ' ', sizeof(m_g0_program_service_name)); m_g0_program_service_name[sizeof(m_g0_program_service_name) - 1] = '\0'; + m_g0_psn_bitmap = 0; } m_g0_program_service_name[segment_address * 2] = (group[3] >> 8) & 0xff; m_g0_program_service_name[segment_address * 2 + 1] = group[3] & 0xff; - m_g0_psn_complete = (segment_address == 3); + m_g0_psn_bitmap |= 1<second).insert(*sIt); updated |= retSet.second; @@ -1114,7 +1115,7 @@ void RDSParser::decode_type14(unsigned int *group, bool B) freqs_set_t::iterator sIt = m_g14_mapped_freq_set.begin(); const freqs_set_t::iterator sItEnd = m_g14_mapped_freq_set.end(); - for (sIt; sIt != sItEnd; ++sIt) + for (; sIt != sItEnd; ++sIt) { retSet = (mIt->second).insert(*sIt); updated |= retSet.second; diff --git a/plugins/channel/bfm/rdsparser.h b/plugins/channel/bfm/rdsparser.h index af52d6f4c..636ae2abc 100644 --- a/plugins/channel/bfm/rdsparser.h +++ b/plugins/channel/bfm/rdsparser.h @@ -56,7 +56,7 @@ public: bool m_g0_af_updated; unsigned int m_g0_count; char m_g0_program_service_name[8+1]; - bool m_g0_psn_complete; + unsigned char m_g0_psn_bitmap; bool m_g0_traffic_announcement; bool m_g0_music_speech; bool m_g0_mono_stereo;