#ifndef __dvbci_dvbci_h #define __dvbci_dvbci_h #include #include class eDVBCISession; class eDVBCIApplicationManagerSession; class eDVBCICAManagerSession; class eDVBCIMMISession; class eDVBServicePMTHandler; class eDVBCISlot; class eDVBCISlot: public iObject, public Object { DECLARE_REF(eDVBCISlot); private: int slotid; int fd; void data(int); eSocketNotifier *notifier; int state; 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); 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, int tuner=0); }; 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); static eDVBCIInterfaces *instance; 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