fix
[enigma2.git] / lib / dvb_ci / dvbci.h
1 #ifndef __dvbci_dvbci_h
2 #define __dvbci_dvbci_h
3
4 #include <lib/base/ebase.h>
5
6 #include <set>
7
8 class eDVBCISession;
9 class eDVBCIApplicationManagerSession;
10 class eDVBCICAManagerSession;
11 class eDVBCIMMISession;
12 class eDVBServicePMTHandler;
13 class eDVBCISlot;
14
15 class eDVBCISlot: public iObject, public Object
16 {
17 DECLARE_REF(eDVBCISlot);
18 private:
19         int slotid;
20         int fd;
21         void data(int);
22         eSocketNotifier *notifier;
23
24         int state;
25         enum {stateRemoved, stateInserted};
26         uint8_t prev_sent_capmt_version;
27 public:
28         int use_count;
29
30         eDVBCISlot(eMainloop *context, int nr);
31         ~eDVBCISlot();
32         
33         int send(const unsigned char *data, size_t len);
34         
35         eDVBCIApplicationManagerSession *application_manager;
36         eDVBCICAManagerSession *ca_manager;
37         eDVBCIMMISession *mmi_session;
38         
39         int getSlotID();
40         int reset();
41         int initialize();
42         int startMMI();
43         int stopMMI();
44         int answerText(int answer);
45         int answerEnq(char *value);
46         int cancelEnq();
47         int getMMIState();
48         int sendCAPMT(eDVBServicePMTHandler *ptr, const std::vector<uint16_t> &caids=std::vector<uint16_t>());
49         uint8_t getPrevSentCAPMTVersion() const { return prev_sent_capmt_version; }
50         void resetPrevSentCAPMTVersion() { prev_sent_capmt_version = 0xFF; }
51         
52         int enableTS(int enable);
53
54 };
55
56 struct CIPmtHandler
57 {
58         eDVBServicePMTHandler *pmthandler;
59         eDVBCISlot *cislot;
60         CIPmtHandler()
61                 :pmthandler(NULL), cislot(NULL)
62         {}
63         CIPmtHandler( const CIPmtHandler &x )
64                 :pmthandler(x.pmthandler), cislot(x.cislot)
65         {}
66         CIPmtHandler( eDVBServicePMTHandler *ptr )
67                 :pmthandler(ptr), cislot(NULL)
68         {}
69         bool operator==(const CIPmtHandler &x) const { return x.pmthandler == pmthandler; }
70 };
71
72 typedef std::list<CIPmtHandler> PMTHandlerList;
73
74 class eDVBCIInterfaces
75 {
76 DECLARE_REF(eDVBCIInterfaces);
77         static eDVBCIInterfaces *instance;
78 private:
79         eSmartPtrList<eDVBCISlot>       m_slots;
80         eDVBCISlot *getSlot(int slotid);
81
82         PMTHandlerList m_pmt_handlers; 
83 public:
84         eDVBCIInterfaces();
85         ~eDVBCIInterfaces();
86
87         void addPMTHandler(eDVBServicePMTHandler *pmthandler);
88         void removePMTHandler(eDVBServicePMTHandler *pmthandler);
89         void gotPMT(eDVBServicePMTHandler *pmthandler);
90
91         static eDVBCIInterfaces *getInstance();
92         
93         int reset(int slot);
94         int initialize(int slot);
95         int startMMI(int slot);
96         int stopMMI(int slot);
97         int answerText(int slot, int answer);
98         int answerEnq(int slot, char *value);
99         int cancelEnq(int slot);
100         int getMMIState(int slot);
101         int enableTS(int slot, int enable);
102 };
103
104 #endif