X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb_ci%2Fdvbci.h;h=1921ad7f3ebb70b246ef2f9a877d2b950b62ca7c;hp=961999e93b353408ec4e114ad2ae531aa63fcaf0;hb=c199d209c922c72b0376ff85ed5ab5da8107aaa5;hpb=682b9158bbddde229a2559365aa108812b15de61 diff --git a/lib/dvb_ci/dvbci.h b/lib/dvb_ci/dvbci.h index 961999e..1921ad7 100644 --- a/lib/dvb_ci/dvbci.h +++ b/lib/dvb_ci/dvbci.h @@ -3,33 +3,95 @@ #include +#include + class eDVBCISession; +class eDVBCIApplicationManagerSession; +class eDVBCICAManagerSession; +class eDVBCIMMISession; +class eDVBServicePMTHandler; -class eDVBCISlot: public Object +class eDVBCISlot: public iObject, public Object { DECLARE_REF(eDVBCISlot); private: + int slotid; int fd; void data(int); - eSocketNotifier *notifier_data; - void event(int); - eSocketNotifier *notifier_event; - - eDVBCISession *se; + eSocketNotifier *notifier; + + int state; + enum {stateRemoved, stateInserted}; + uint8_t prev_sent_capmt_version; public: eDVBCISlot(eMainloop *context, int nr); - virtual ~eDVBCISlot(); + ~eDVBCISlot(); + + int send(const unsigned char *data, size_t len); - int eDVBCISlot::write(const unsigned char *data, size_t len); + eDVBCIApplicationManagerSession *application_manager; + eDVBCICAManagerSession *ca_manager; + eDVBCIMMISession *mmi_session; + + int getSlotID(); + int reset(); + int initialize(); + int startMMI(); + int stopMMI(); + int answerText(int answer); + int answerEnq(char *value); + int cancelEnq(); + 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); + static eDVBCIInterfaces *instance; private: eSmartPtrList m_slots; + eDVBCISlot *getSlot(int slotid); + + PMTHandlerSet m_pmt_handlers; public: eDVBCIInterfaces(); - virtual ~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); }; #endif