diff options
Diffstat (limited to 'src/fig/FIG0.h')
-rw-r--r-- | src/fig/FIG0.h | 279 |
1 files changed, 13 insertions, 266 deletions
diff --git a/src/fig/FIG0.h b/src/fig/FIG0.h index fe90d31..927efc1 100644 --- a/src/fig/FIG0.h +++ b/src/fig/FIG0.h @@ -25,270 +25,17 @@ #pragma once -#include <cstdint> -#include <map> -#include <set> - -#include "fig/FIG.h" - -namespace FIC { - -// Some FIGs need to adapt their rate or their contents depending -// on if some data entries are stable or currently undergoing a -// change. The TransitionHandler keeps track of which entries -// are in what state. -template<class T> -class TransitionHandler { - public: - // update_state must be called once per ETI frame, and will - // move entries from new to repeated to disabled depending - // on their is_active() return value. - void update_state(int timeout, std::vector<std::shared_ptr<T> > all_entries); - - // The FIG that needs the information about what state an entry is in - // can read from the following data structures. It shall not modify them. - - /* Map to frame count */ - std::map< - std::shared_ptr<T>,int> new_entries; - - std::set< - std::shared_ptr<T> > repeated_entries; - - /* Map to frame count */ - std::map< - std::shared_ptr<T>,int> disabled_entries; -}; - - -// 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/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; - - TransitionHandler<AnnouncementCluster> m_transition; -}; - -} // 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_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" |