fix for canAllocateChannel
[enigma2.git] / lib / dvb_ci / dvbci.h
index 1921ad7f3ebb70b246ef2f9a877d2b950b62ca7c..fc6323e84b75e27dbf127409317699f5017fb1a3 100644 (file)
@@ -10,6 +10,7 @@ class eDVBCIApplicationManagerSession;
 class eDVBCICAManagerSession;
 class eDVBCIMMISession;
 class eDVBServicePMTHandler;
+class eDVBCISlot;
 
 class eDVBCISlot: public iObject, public Object
 {
@@ -23,16 +24,25 @@ private:
        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);
-       
-       eDVBCIApplicationManagerSession *application_manager;
-       eDVBCICAManagerSession *ca_manager;
-       eDVBCIMMISession *mmi_session;
-       
+
+       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();
@@ -42,28 +52,32 @@ public:
        int answerEnq(char *value);
        int cancelEnq();
        int getMMIState();
+       void resendCAPMT();
        int sendCAPMT(eDVBServicePMTHandler *ptr, const std::vector<uint16_t> &caids=std::vector<uint16_t>());
        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 *usedby;
+       eDVBCISlot *cislot;
        CIPmtHandler()
-               :pmthandler(NULL), usedby(NULL)
+               :pmthandler(NULL), cislot(NULL)
        {}
        CIPmtHandler( const CIPmtHandler &x )
-               :pmthandler(x.pmthandler), usedby(x.usedby)
+               :pmthandler(x.pmthandler), cislot(x.cislot)
        {}
        CIPmtHandler( eDVBServicePMTHandler *ptr )
-               :pmthandler(ptr), usedby(NULL)
+               :pmthandler(ptr), cislot(NULL)
        {}
-       bool operator<(const CIPmtHandler &x) const { return x.pmthandler < pmthandler; }
+       bool operator==(const CIPmtHandler &x) const { return x.pmthandler == pmthandler; }
 };
 
-typedef std::set<CIPmtHandler> PMTHandlerSet;
+typedef std::list<CIPmtHandler> PMTHandlerList;
 
 class eDVBCIInterfaces
 {
@@ -73,7 +87,7 @@ private:
        eSmartPtrList<eDVBCISlot>       m_slots;
        eDVBCISlot *getSlot(int slotid);
 
-       PMTHandlerSet m_pmt_handlers; 
+       PMTHandlerList m_pmt_handlers; 
 public:
        eDVBCIInterfaces();
        ~eDVBCIInterfaces();
@@ -92,6 +106,8 @@ public:
        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