X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/967664233fc4ce992405a0e86e0c6cd594dfba57..44433f650cd3e5f9f66253b74d194fcb01578595:/lib/dvb/idvb.h diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index 878b3619..c201c1a4 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -4,6 +4,10 @@ #include #if HAVE_DVB_API_VERSION < 3 #include +#define FRONTENDPARAMETERS FrontendParameters +#else +#include +#define FRONTENDPARAMETERS struct dvb_frontend_parameters #endif #include #include @@ -135,7 +139,7 @@ struct eServiceReferenceDVB: public eServiceReference setTransportStreamID(chid.transport_stream_id); } - void getChannelID(eDVBChannelID &chid) + void getChannelID(eDVBChannelID &chid) const { chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID()); } @@ -147,14 +151,87 @@ struct eServiceReferenceDVB: public eServiceReference }; +////////////////// TODO: we need an interface here, but what exactly? + +#include +// btw, still implemented in db.cpp. FIX THIS, TOO. + +class eDVBChannelQuery; + +class eDVBService: public iStaticServiceInformation +{ + DECLARE_REF(eDVBService); +public: + eDVBService(); + std::string m_service_name; + std::string m_provider_name; + + int m_flags; + std::set m_ca; + std::map m_cache; + virtual ~eDVBService(); + + eDVBService &operator=(const eDVBService &); + + // iStaticServiceInformation + RESULT getName(const eServiceReference &ref, std::string &name); + + // for filtering: + int checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQuery &query); +}; + +////////////////// + class iDVBChannel; class iDVBDemux; class iDVBFrontendParameters; +class iDVBChannelListQuery: public iObject +{ +public: + virtual RESULT getNextResult(eServiceReferenceDVB &ref)=0; +}; + +class eDVBChannelQuery: public iObject +{ + DECLARE_REF(eDVBChannelQuery); +public: + enum + { + tName, + tProvider, + tType, + tBouquet, + tSatellitePosition, + tChannelID, + tAND, + tOR + }; + + int m_type; + int m_inverse; + + std::string m_string; + int m_int; + eDVBChannelID m_channelid; + + static RESULT compile(ePtr &res, std::string query); + + ePtr m_p1, m_p2; +}; + class iDVBChannelList: public iObject { public: + virtual RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)=0; + virtual RESULT removeChannel(const eDVBChannelID &id)=0; + virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr &parm)=0; + + virtual RESULT addService(const eServiceReferenceDVB &service, eDVBService *service)=0; + virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr &service)=0; + + virtual RESULT startQuery(ePtr &query, eDVBChannelQuery *query)=0; }; class iDVBResourceManager: public iObject @@ -214,7 +291,57 @@ struct eDVBFrontendParametersCable struct eDVBFrontendParametersTerrestrial { - int unknown; + unsigned int frequency; + struct Bandwidth { + enum { Bw8MHz, Bw7MHz, Bw6MHz, BwAuto }; + }; + + struct FEC + { + enum { + fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto + }; + }; + + struct TransmissionMode { + enum { + TM2k, TM8k, TMAuto + }; + }; + + struct GuardInterval { + enum { + GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto + }; + }; + + struct Hierarchy { + enum { + HNone, H1, H2, H4, HAuto + }; + }; + + struct Modulation { + enum { + QPSK, QAM16, Auto + }; + }; + + struct Inversion + { + enum { + On, Off, Unknown + }; + }; + + int bandwidth; + int code_rate_HP, code_rate_LP; + int modulation; + int transmission_mode; + int guard_interval; + int hierarchy; + int inversion; + void set(const TerrestrialDeliverySystemDescriptor &); }; @@ -271,11 +398,7 @@ public: class iDVBSatelliteEquipmentControl: public iObject { public: -#if HAVE_DVB_API_VERSION < 3 - virtual RESULT prepare(iDVBFrontend &frontend, FrontendParameters &parm, eDVBFrontendParametersSatellite &sat)=0; -#else - virtual RESULT prepare(iDVBFrontend &frontend, struct dvb_frontend_parameters &parm, eDVBFrontendParametersSatellite &sat)=0; -#endif + virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)=0; }; struct eDVBCIRouting