1 #ifndef __dvbci_dvbci_h
2 #define __dvbci_dvbci_h
6 #include <lib/base/ebase.h>
7 #include <lib/service/iservice.h>
8 #include <lib/python/python.h>
13 class eDVBCIApplicationManagerSession;
14 class eDVBCICAManagerSession;
15 class eDVBCIMMISession;
16 class eDVBServicePMTHandler;
18 class eDVBCIInterfaces;
25 queueData( unsigned char *data, unsigned int len, __u8 prio = 0 )
26 :prio(prio), data(data), len(len)
30 bool operator < ( const struct queueData &a ) const
38 TUNER_A, TUNER_B, TUNER_C, TUNER_D, CI_A, CI_B, CI_C, CI_D
41 class eDVBCISlot: public iObject, public Object
43 friend class eDVBCIInterfaces;
44 DECLARE_REF(eDVBCISlot);
48 eSocketNotifier *notifier;
50 std::map<uint16_t, uint8_t> running_services;
51 eDVBCIApplicationManagerSession *application_manager;
52 eDVBCICAManagerSession *ca_manager;
53 eDVBCIMMISession *mmi_session;
54 std::priority_queue<queueData> sendqueue;
55 std::set<uint16_t> possible_caids;
56 std::set<eServiceReference> possible_services;
57 std::set<std::string> possible_providers;
59 eDVBCISlot *linked_next; // needed for linked CI handling
60 data_source current_source;
64 enum {stateRemoved, stateInserted, stateInvalid, stateResetted};
65 eDVBCISlot(eMainloop *context, int nr);
68 int send(const unsigned char *data, size_t len);
70 void setAppManager( eDVBCIApplicationManagerSession *session );
71 void setMMIManager( eDVBCIMMISession *session );
72 void setCAManager( eDVBCICAManagerSession *session );
74 eDVBCIApplicationManagerSession *getAppManager() { return application_manager; }
75 eDVBCIMMISession *getMMIManager() { return mmi_session; }
76 eDVBCICAManagerSession *getCAManager() { return ca_manager; }
78 int getState() { return state; }
83 int answerText(int answer);
84 int answerEnq(char *value);
87 int sendCAPMT(eDVBServicePMTHandler *ptr, const std::vector<uint16_t> &caids=std::vector<uint16_t>());
88 void removeService(uint16_t program_number=0xFFFF);
89 int getNumOfServices() { return running_services.size(); }
90 int setSource(data_source source);
95 eDVBServicePMTHandler *pmthandler;
98 :pmthandler(NULL), cislot(NULL)
100 CIPmtHandler( const CIPmtHandler &x )
101 :pmthandler(x.pmthandler), cislot(x.cislot)
103 CIPmtHandler( eDVBServicePMTHandler *ptr )
104 :pmthandler(ptr), cislot(NULL)
106 bool operator==(const CIPmtHandler &x) const { return x.pmthandler == pmthandler; }
109 typedef std::list<CIPmtHandler> PMTHandlerList;
113 class eDVBCIInterfaces
115 DECLARE_REF(eDVBCIInterfaces);
116 static eDVBCIInterfaces *instance;
118 eSmartPtrList<eDVBCISlot> m_slots;
119 eDVBCISlot *getSlot(int slotid);
120 PMTHandlerList m_pmt_handlers;
127 void addPMTHandler(eDVBServicePMTHandler *pmthandler);
128 void removePMTHandler(eDVBServicePMTHandler *pmthandler);
129 void recheckPMTHandlers();
130 void gotPMT(eDVBServicePMTHandler *pmthandler);
131 void ciRemoved(eDVBCISlot *slot);
132 int getSlotState(int slot);
135 int initialize(int slot);
136 int startMMI(int slot);
137 int stopMMI(int slot);
138 int answerText(int slot, int answer);
139 int answerEnq(int slot, char *value);
140 int cancelEnq(int slot);
141 int getMMIState(int slot);
142 int sendCAPMT(int slot);
143 int setInputSource(int tunerno, data_source source);
147 static eDVBCIInterfaces *getInstance();
148 int getNumOfSlots() { return m_slots.size(); }
149 PyObject *getDescrambleRules(int slotid);
150 RESULT setDescrambleRules(int slotid, SWIG_PYOBJECT(ePyObject) );