diff options
Diffstat (limited to 'src/fig/FIG0.h')
-rw-r--r-- | src/fig/FIG0.h | 319 |
1 files changed, 14 insertions, 305 deletions
diff --git a/src/fig/FIG0.h b/src/fig/FIG0.h index 0109219..446e1ac 100644 --- a/src/fig/FIG0.h +++ b/src/fig/FIG0.h @@ -25,309 +25,18 @@ #pragma once -#include <cstdint> -#include <map> -#include <set> -#include <vector> -#include <list> - -#include "fig/FIG.h" - -namespace FIC { - -// FIG type 0/0, Multiplex Configuration Info (MCI), -// Ensemble information -class FIG0_0 : public IFIG -{ - public: - FIG0_0(FIGRuntimeInformation* rti) : - m_rti(rti) {} - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::FIG0_0; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 0; } - - private: - FIGRuntimeInformation *m_rti; -}; - -// FIG type 0/1, MIC, Sub-Channel Organization, -// one instance of the part for each subchannel -class FIG0_1 : public IFIG -{ - public: - FIG0_1(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::A; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 1; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - std::vector<DabSubchannel*> subchannels; - std::vector<DabSubchannel*>::iterator subchannelFIG0_1; - - uint8_t m_watermarkData[128]; - size_t m_watermarkSize; - size_t m_watermarkPos; -}; - -// FIG type 0/2, MCI, Service Organization, one instance of -// FIGtype0_2_Service for each subchannel -class FIG0_2 : public IFIG -{ - public: - FIG0_2(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::A; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 2; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - bool m_inserting_audio_not_data; - std::vector<std::shared_ptr<DabService> > m_audio_services; - std::vector<std::shared_ptr<DabService> > m_data_services; - std::vector<std::shared_ptr<DabService> >::iterator serviceFIG0_2; -}; - -// FIG type 0/3 -// The Extension 3 of FIG type 0 (FIG 0/3) gives additional information about -// the service component description in packet mode. -class FIG0_3 : public IFIG -{ - public: - FIG0_3(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::A; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 3; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - std::vector<DabComponent*>::iterator componentFIG0_3; -}; - -// FIG type 0/5 -// The service component language feature is used to signal a language -// associated with a service component; the spoken language of an audio -// component or the language of the content of a data component. This -// information can be used for user selection or display. The feature is -// encoded in Extension 5 of FIG type 0 (FIG 0/5). -class FIG0_5 : public IFIG -{ - public: - FIG0_5(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 5; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - std::vector<DabComponent*>::iterator componentFIG0_5; -}; - -// FIG type 0/6 -// Service Linking -// -// This feature shall use the SIV signalling (see clause 5.2.2.1). The database -// shall be divided by use of a database key. Changes to the database shall be -// signalled using the CEI. The first service in the list of services in each -// part of the database, as divided by the database key, shall be a service -// carried in the ensemble. This service is called the key service. -// -// The database key comprises the OE and P/D flags and the S/H, ILS, and LSN -// fields. -class FIG0_6 : public IFIG -{ - public: - FIG0_6(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::E; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 6; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - std::list<std::shared_ptr<LinkageSet> >::iterator linkageSetFIG0_6; -}; - -// FIG0/6 needs a change indicator, which is a short-form FIG (i.e. without the list) -// and with C/N 1. Since this has another rate, it's implemented in another class. -// -// This is signalled once per second for a period of five seconds -// (TS 103 176 5.2.4.3). -class FIG0_6_CEI : public IFIG -{ - public: - FIG0_6_CEI(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 6; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - std::list<std::shared_ptr<LinkageSet> >::iterator linkageSetFIG0_6; -}; - -// FIG type 0/8 -// The Extension 8 of FIG type 0 (FIG 0/8) provides information to link -// together the service component description that is valid within the ensemble -// to a service component description that is valid in other ensembles -class FIG0_8 : public IFIG -{ - public: - FIG0_8(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 8; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - bool m_transmit_programme; - std::vector<DabComponent*>::iterator componentFIG0_8; -}; - -// FIG type 0/9 -// The Country, LTO and International table feature defines the local time -// offset, the International Table and the Extended Country Code (ECC) -class FIG0_9 : public IFIG -{ - public: - FIG0_9(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 9; } - - private: - FIGRuntimeInformation *m_rti; -}; - - -// FIG type 0/10 -// The date and time feature is used to signal a location-independent timing -// reference in UTC format. -class FIG0_10 : public IFIG -{ - public: - FIG0_10(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 10; } - - private: - FIGRuntimeInformation *m_rti; -}; - -// FIG type 0/13 -// User Application Information -class FIG0_13 : public IFIG -{ - public: - FIG0_13(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 13; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - bool m_transmit_programme; - std::vector<DabComponent*>::iterator componentFIG0_13; -}; - -// FIG type 0/17 -// Programme Type (PTy) -class FIG0_17 : public IFIG -{ - public: - FIG0_17(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 17; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - std::vector<std::shared_ptr<DabService> >::iterator serviceFIG0_17; -}; - -// FIG type 0/18 -class FIG0_18 : public IFIG -{ - public: - FIG0_18(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void) { return FIG_rate::B; } - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 18; } - - private: - FIGRuntimeInformation *m_rti; - bool m_initialised; - std::vector<std::shared_ptr<DabService> >::iterator service; -}; - -// FIG type 0/19 -class FIG0_19 : public IFIG -{ - public: - FIG0_19(FIGRuntimeInformation* rti); - virtual FillStatus fill(uint8_t *buf, size_t max_size); - virtual FIG_rate repetition_rate(void); - - virtual const int figtype(void) const { return 0; } - virtual const int figextension(void) const { return 19; } - - private: - FIGRuntimeInformation *m_rti; - - void update_state(void); - - /* When a new announcement gets active, it is moved into the list - * of new announcements, and gets transmitted at a faster rate for - * two seconds. - * Same for recently disabled announcements. - */ - - /* Map of cluster to frame count */ - std::map< - std::shared_ptr<AnnouncementCluster>,int> m_new_announcements; - - std::set< - std::shared_ptr<AnnouncementCluster> > m_repeated_announcements; - - /* Map of cluster to frame count */ - std::map< - std::shared_ptr<AnnouncementCluster>,int> m_disabled_announcements; -}; - -} // namespace FIC +#include "fig/FIG0structs.h" +#include "fig/FIG0_0.h" +#include "fig/FIG0_1.h" +#include "fig/FIG0_2.h" +#include "fig/FIG0_3.h" +#include "fig/FIG0_5.h" +#include "fig/FIG0_6.h" +#include "fig/FIG0_8.h" +#include "fig/FIG0_9.h" +#include "fig/FIG0_10.h" +#include "fig/FIG0_13.h" +#include "fig/FIG0_17.h" +#include "fig/FIG0_18.h" +#include "fig/FIG0_19.h" |