add cancelenq
[enigma2.git] / lib / dvb_ci / dvbci.h
index c6166555b895d7055f4f8d38332e5624639f89fd..1921ad7f3ebb70b246ef2f9a877d2b950b62ca7c 100644 (file)
@@ -3,9 +3,13 @@
 
 #include <lib/base/ebase.h>
 
+#include <set>
+
 class eDVBCISession;
 class eDVBCIApplicationManagerSession;
 class eDVBCICAManagerSession;
+class eDVBCIMMISession;
+class eDVBServicePMTHandler;
 
 class eDVBCISlot: public iObject, public Object
 {
@@ -17,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();
@@ -26,14 +31,40 @@ public:
        
        eDVBCIApplicationManagerSession *application_manager;
        eDVBCICAManagerSession *ca_manager;
+       eDVBCIMMISession *mmi_session;
        
        int getSlotID();
        int reset();
        int initialize();
        int startMMI();
-       int answerMMI(int answer, char *value);
+       int stopMMI();
+       int answerText(int answer);
+       int answerEnq(char *value);
+       int cancelEnq();
+       int getMMIState();
+       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; }
+};
+
+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<CIPmtHandler> PMTHandlerSet;
+
 class eDVBCIInterfaces
 {
 DECLARE_REF(eDVBCIInterfaces);
@@ -41,16 +72,26 @@ DECLARE_REF(eDVBCIInterfaces);
 private:
        eSmartPtrList<eDVBCISlot>       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);
        int initialize(int slot);
        int startMMI(int slot);
-       int answerMMI(int slot, int answer, char *value);
+       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