X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/67d4b94bb0c054c4e2299122aa1e37192a00230b..3ebb2698eec3fae7d277550f7cd19d18f10e8aab:/lib/dvb_ci/dvbci.h diff --git a/lib/dvb_ci/dvbci.h b/lib/dvb_ci/dvbci.h index 224ecde8..1df87eaa 100644 --- a/lib/dvb_ci/dvbci.h +++ b/lib/dvb_ci/dvbci.h @@ -3,10 +3,13 @@ #include +#include + class eDVBCISession; class eDVBCIApplicationManagerSession; class eDVBCICAManagerSession; class eDVBCIMMISession; +class eDVBServicePMTHandler; class eDVBCISlot: public iObject, public Object { @@ -18,7 +21,8 @@ private: eSocketNotifier *notifier; int state; - enum {stateRemoved, stateInserted}; + enum {stateRemoved, stateInserted}; + uint8_t prev_sent_capmt_version; public: eDVBCISlot(eMainloop *context, int nr); ~eDVBCISlot(); @@ -37,8 +41,29 @@ public: int answerText(int answer); int answerEnq(int answer, char *value); int getMMIState(); + int sendCAPMT(eDVBServicePMTHandler *ptr, const std::vector &caids=std::vector()); + uint8_t getPrevSentCAPMTVersion() const { return prev_sent_capmt_version; } + void resetPrevSentCAPMTVersion() { prev_sent_capmt_version = 0xFF; } +}; + +struct CIPmtHandler +{ + eDVBServicePMTHandler *pmthandler; + eDVBCISlot *usedby; + CIPmtHandler() + :pmthandler(NULL), usedby(NULL) + {} + CIPmtHandler( const CIPmtHandler &x ) + :pmthandler(x.pmthandler), usedby(x.usedby) + {} + CIPmtHandler( eDVBServicePMTHandler *ptr ) + :pmthandler(ptr), usedby(NULL) + {} + bool operator<(const CIPmtHandler &x) const { return x.pmthandler < pmthandler; } }; +typedef std::set PMTHandlerSet; + class eDVBCIInterfaces { DECLARE_REF(eDVBCIInterfaces); @@ -46,10 +71,16 @@ DECLARE_REF(eDVBCIInterfaces); private: eSmartPtrList m_slots; eDVBCISlot *getSlot(int slotid); + + PMTHandlerSet m_pmt_handlers; public: eDVBCIInterfaces(); ~eDVBCIInterfaces(); + void addPMTHandler(eDVBServicePMTHandler *pmthandler); + void removePMTHandler(eDVBServicePMTHandler *pmthandler); + void gotPMT(eDVBServicePMTHandler *pmthandler); + static eDVBCIInterfaces *getInstance(); int reset(int slot);