X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/71efef08fb67e1287dc8f295e4ffe3cfc1aa23c1..5c644fbbceaa79a49501975de16b090771edee29:/lib/dvb_ci/dvbci.h diff --git a/lib/dvb_ci/dvbci.h b/lib/dvb_ci/dvbci.h index 7b8a8e25..fc6323e8 100644 --- a/lib/dvb_ci/dvbci.h +++ b/lib/dvb_ci/dvbci.h @@ -3,9 +3,14 @@ #include +#include + class eDVBCISession; class eDVBCIApplicationManagerSession; class eDVBCICAManagerSession; +class eDVBCIMMISession; +class eDVBServicePMTHandler; +class eDVBCISlot; class eDVBCISlot: public iObject, public Object { @@ -17,21 +22,63 @@ private: eSocketNotifier *notifier; int state; - enum {stateRemoved, stateInserted}; + enum {stateRemoved, stateInserted}; + uint8_t prev_sent_capmt_version; + eDVBCIApplicationManagerSession *application_manager; + eDVBCICAManagerSession *ca_manager; + eDVBCIMMISession *mmi_session; public: + int use_count; + eDVBCISlot(eMainloop *context, int nr); ~eDVBCISlot(); int send(const unsigned char *data, size_t len); - - eDVBCIApplicationManagerSession *application_manager; - eDVBCICAManagerSession *ca_manager; - + + void setAppManager( eDVBCIApplicationManagerSession *session ); + void setMMIManager( eDVBCIMMISession *session ); + void setCAManager( eDVBCICAManagerSession *session ); + + eDVBCIApplicationManagerSession *getAppManager() { return application_manager; } + eDVBCIMMISession *getMMIManager() { return mmi_session; } + eDVBCICAManagerSession *getCAManager() { return ca_manager; } + int getSlotID(); int reset(); + int initialize(); int startMMI(); + int stopMMI(); + int answerText(int answer); + int answerEnq(char *value); + int cancelEnq(); + int getMMIState(); + void resendCAPMT(); + 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; } + + int enableTS(int enable); + }; +struct CIPmtHandler +{ + eDVBServicePMTHandler *pmthandler; + eDVBCISlot *cislot; + CIPmtHandler() + :pmthandler(NULL), cislot(NULL) + {} + CIPmtHandler( const CIPmtHandler &x ) + :pmthandler(x.pmthandler), cislot(x.cislot) + {} + CIPmtHandler( eDVBServicePMTHandler *ptr ) + :pmthandler(ptr), cislot(NULL) + {} + bool operator==(const CIPmtHandler &x) const { return x.pmthandler == pmthandler; } +}; + +typedef std::list PMTHandlerList; + class eDVBCIInterfaces { DECLARE_REF(eDVBCIInterfaces); @@ -39,14 +86,28 @@ DECLARE_REF(eDVBCIInterfaces); private: eSmartPtrList m_slots; eDVBCISlot *getSlot(int slotid); + + PMTHandlerList 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); + int initialize(int slot); int startMMI(int slot); + int stopMMI(int slot); + int answerText(int slot, int answer); + int answerEnq(int slot, char *value); + int cancelEnq(int slot); + int getMMIState(int slot); + int enableTS(int slot, int enable); + int sendCAPMT(int slot); }; #endif