mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 21:20:31 -05:00 
			
		
		
		
	BFM demod: RDS GUI part #8: group14 parsing into memebers implementation
This commit is contained in:
		
							parent
							
								
									4387136420
								
							
						
					
					
						commit
						9fe292f162
					
				@ -256,6 +256,7 @@ void RDSParser::clearUpdateFlags()
 | 
			
		||||
	m_g12_updated = false;
 | 
			
		||||
	m_g13_updated = false;
 | 
			
		||||
	m_g14_updated = false;
 | 
			
		||||
	m_g14_data_available = false;
 | 
			
		||||
	m_g15_updated = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -321,13 +322,25 @@ void RDSParser::clearAllFields()
 | 
			
		||||
	m_g8_label_index = -1;
 | 
			
		||||
	m_g8_content = 0;
 | 
			
		||||
 | 
			
		||||
	// Group 09..15 data
 | 
			
		||||
	// Group 09..13 data
 | 
			
		||||
	m_g9_count = 0;
 | 
			
		||||
	m_g10_count = 0;
 | 
			
		||||
	m_g11_count = 0;
 | 
			
		||||
	m_g12_count = 0;
 | 
			
		||||
	m_g13_count = 0;
 | 
			
		||||
 | 
			
		||||
	// Group 14
 | 
			
		||||
	m_g14_count = 0;
 | 
			
		||||
	m_g14_program_service_names.clear();
 | 
			
		||||
	m_g14_alt_freqs.clear();
 | 
			
		||||
	m_g14_mapped_freqs.clear();
 | 
			
		||||
	std::memset(m_g14_program_service_name, ' ', sizeof(m_g14_program_service_name));
 | 
			
		||||
	m_g14_alt_freq_set.clear();
 | 
			
		||||
	m_g14_mapped_freq_set.clear();
 | 
			
		||||
	m_g14_psn_updated = false;
 | 
			
		||||
	m_g14_data_available = false;
 | 
			
		||||
 | 
			
		||||
	// Group 15
 | 
			
		||||
	m_g15_count = 0;
 | 
			
		||||
 | 
			
		||||
	clearUpdateFlags();
 | 
			
		||||
@ -952,15 +965,18 @@ void RDSParser::decode_type14(unsigned int *group, bool B)
 | 
			
		||||
			case 2: // PS(ON)
 | 
			
		||||
			case 3: // PS(ON)
 | 
			
		||||
			{
 | 
			
		||||
				ps_on[variant_code * 2    ] = (information >> 8) & 0xff;
 | 
			
		||||
				ps_on[variant_code * 2 + 1] =  information       & 0xff;
 | 
			
		||||
				qDebug() << "RDSParser::decode_type14: PS(ON): \"" << std::string(ps_on, 8).c_str() << "\"";
 | 
			
		||||
				m_g14_program_service_name[variant_code * 2    ] = (information >> 8) & 0xff;
 | 
			
		||||
				m_g14_program_service_name[variant_code * 2 + 1] =  information       & 0xff;
 | 
			
		||||
				m_g14_psn_updated = true;
 | 
			
		||||
				qDebug() << "RDSParser::decode_type14: PS(ON): \"" << std::string(m_g14_program_service_name, 8).c_str() << "\"";
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case 4: // AF
 | 
			
		||||
			{
 | 
			
		||||
				af_1 = 100.0 * (((information >> 8) & 0xff) + 875);
 | 
			
		||||
				af_2 = 100.0 * ((information & 0xff) + 875);
 | 
			
		||||
				m_g14_alt_freq_set.insert(af_1/1000.0);
 | 
			
		||||
				m_g14_alt_freq_set.insert(af_2/1000.0);
 | 
			
		||||
				std::string s = str(boost::format("AF:%3.2fMHz %3.2fMHz") % (af_1/1000) % (af_2/1000));
 | 
			
		||||
				qDebug() << "RDSParser::decode_type14: " << s.c_str();
 | 
			
		||||
				break;
 | 
			
		||||
@ -972,6 +988,7 @@ void RDSParser::decode_type14(unsigned int *group, bool B)
 | 
			
		||||
			{
 | 
			
		||||
				af_1 = 100.0 * (((information >> 8) & 0xff) + 875);
 | 
			
		||||
				af_2 = 100.0 * ((information & 0xff) + 875);
 | 
			
		||||
				m_g14_mapped_freq_set.insert(af_2/1000.0);
 | 
			
		||||
				std::string s = str(boost::format("TN:%3.2fMHz - ON:%3.2fMHz") % (af_1/1000) % (af_2/1000));
 | 
			
		||||
				qDebug() << "RDSParser::decode_type14: " << s.c_str();
 | 
			
		||||
				break;
 | 
			
		||||
@ -980,6 +997,7 @@ void RDSParser::decode_type14(unsigned int *group, bool B)
 | 
			
		||||
			{
 | 
			
		||||
				af_1 = 100.0 * (((information >> 8) & 0xff) + 875);
 | 
			
		||||
				af_2 = 9.0 * ((information & 0xff) - 16) + 531;
 | 
			
		||||
				m_g14_mapped_freq_set.insert(af_2/1000.0);
 | 
			
		||||
				std::string s = str(boost::format("TN:%3.2fMHz - ON:%ikHz") % (af_1/1000) % int(af_2));
 | 
			
		||||
				qDebug() << "RDSParser::decode_type14: " << s.c_str();
 | 
			
		||||
				break;
 | 
			
		||||
@ -990,6 +1008,28 @@ void RDSParser::decode_type14(unsigned int *group, bool B)
 | 
			
		||||
				break;
 | 
			
		||||
			case 12: // linkage information
 | 
			
		||||
			{
 | 
			
		||||
				if (m_g14_psn_updated)
 | 
			
		||||
				{
 | 
			
		||||
					std::pair<psns_map_t::iterator, bool> ret = m_g14_program_service_names.insert(psns_map_kv_t(pi_on, std::string(m_g14_program_service_name)));
 | 
			
		||||
					std::memset(m_g14_program_service_name, ' ', sizeof(m_g14_program_service_name));
 | 
			
		||||
					m_g14_psn_updated = false;
 | 
			
		||||
					m_g14_data_available = ret.second;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (m_g14_alt_freq_set.size() > 0)
 | 
			
		||||
				{
 | 
			
		||||
					std::pair<freqs_map_t::iterator, bool> ret = m_g14_alt_freqs.insert(freqs_map_kv_t(pi_on, m_g14_alt_freq_set));
 | 
			
		||||
					m_g14_alt_freq_set.clear();
 | 
			
		||||
					m_g14_data_available = ret.second;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (m_g14_mapped_freq_set.size() > 0)
 | 
			
		||||
				{
 | 
			
		||||
					std::pair<freqs_map_t::iterator, bool> ret = m_g14_mapped_freqs.insert(freqs_map_kv_t(pi_on, m_g14_mapped_freq_set));
 | 
			
		||||
					m_g14_mapped_freq_set.clear();
 | 
			
		||||
					m_g14_data_available = ret.second;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				std::string s = str(boost::format("Linkage information: %x%x") % ((information >> 8) & 0xff) % (information & 0xff));
 | 
			
		||||
				qDebug() << "RDSParser::decode_type14: " << s.c_str();
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
@ -20,10 +20,16 @@
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <set>
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
class RDSParser
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	typedef std::map<unsigned int, std::string> psns_map_t;
 | 
			
		||||
	typedef std::pair<unsigned int, std::string> psns_map_kv_t;
 | 
			
		||||
	typedef std::map<unsigned int, std::set<double> > freqs_map_t;
 | 
			
		||||
	typedef std::pair<unsigned int, std::set<double> > freqs_map_kv_t;
 | 
			
		||||
 | 
			
		||||
	RDSParser();
 | 
			
		||||
	~RDSParser();
 | 
			
		||||
 | 
			
		||||
@ -107,20 +113,32 @@ public:
 | 
			
		||||
	int            m_g8_label_index; //!< negative if not received
 | 
			
		||||
	int            m_g8_content;
 | 
			
		||||
 | 
			
		||||
	// G9..G15 data
 | 
			
		||||
	// G9..G13 data
 | 
			
		||||
	bool           m_g9_updated;
 | 
			
		||||
	bool           m_g10_updated;
 | 
			
		||||
	bool           m_g11_updated;
 | 
			
		||||
	bool           m_g12_updated;
 | 
			
		||||
	bool           m_g13_updated;
 | 
			
		||||
	bool           m_g14_updated;
 | 
			
		||||
	bool           m_g15_updated;
 | 
			
		||||
	unsigned int   m_g9_count;
 | 
			
		||||
	unsigned int   m_g10_count;
 | 
			
		||||
	unsigned int   m_g11_count;
 | 
			
		||||
	unsigned int   m_g12_count;
 | 
			
		||||
	unsigned int   m_g13_count;
 | 
			
		||||
 | 
			
		||||
	// G14 data
 | 
			
		||||
	bool           m_g14_updated;
 | 
			
		||||
	unsigned int   m_g14_count;
 | 
			
		||||
	psns_map_t     m_g14_program_service_names; //!< key: PI, value: PSN
 | 
			
		||||
	freqs_map_t    m_g14_alt_freqs;             //!< key: PI, value: set of alternate frequencies (MHz)
 | 
			
		||||
	freqs_map_t    m_g14_mapped_freqs;          //!< key: PI, value: set of mapped frequencies (MHz)
 | 
			
		||||
	char           m_g14_program_service_name[8+1];
 | 
			
		||||
	std::set<double> m_g14_alt_freq_set;
 | 
			
		||||
	std::set<double> m_g14_mapped_freq_set;
 | 
			
		||||
	bool           m_g14_psn_updated;
 | 
			
		||||
	bool           m_g14_data_available;
 | 
			
		||||
 | 
			
		||||
	// G15 data
 | 
			
		||||
	bool           m_g15_updated;
 | 
			
		||||
	unsigned int   m_g15_count;
 | 
			
		||||
 | 
			
		||||
	// Static tables
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user