add cancelenq
[vuplus_dvbapp] / 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
14 class eDVBCISlot: public iObject, public Object
15 {
16 DECLARE_REF(eDVBCISlot);
17 private:
18         int slotid;
19         int fd;
20         void data(int);
21         eSocketNotifier *notifier;
22
23         int state;
24         enum {stateRemoved, stateInserted};
25         uint8_t prev_sent_capmt_version;
26 public:
27         eDVBCISlot(eMainloop *context, int nr);
28         ~eDVBCISlot();
29         
30         int send(const unsigned char *data, size_t len);
31         
32         eDVBCIApplicationManagerSession *application_manager;
33         eDVBCICAManagerSession *ca_manager;
34         eDVBCIMMISession *mmi_session;
35         
36         int getSlotID();
37         int reset();
38         int initialize();
39         int startMMI();
40         int stopMMI();
41         int answerText(int answer);
42         int answerEnq(char *value);
43         int cancelEnq();
44         int getMMIState();
45         int sendCAPMT(eDVBServicePMTHandler *ptr, const std::vector<uint16_t> &caids=std::vector<uint16_t>());
46         uint8_t getPrevSentCAPMTVersion() const { return prev_sent_capmt_version; }
47         void resetPrevSentCAPMTVersion() { prev_sent_capmt_version = 0xFF; }
48 };
49
50 struct CIPmtHandler
51 {
52         eDVBServicePMTHandler *pmthandler;
53         eDVBCISlot *usedby;
54         CIPmtHandler()
55                 :pmthandler(NULL), usedby(NULL)
56         {}
57         CIPmtHandler( const CIPmtHandler &x )
58                 :pmthandler(x.pmthandler), usedby(x.usedby)
59         {}
60         CIPmtHandler( eDVBServicePMTHandler *ptr )
61                 :pmthandler(ptr), usedby(NULL)
62         {}
63         bool operator<(const CIPmtHandler &x) const { return x.pmthandler < pmthandler; }
64 };
65
66 typedef std::set<CIPmtHandler> PMTHandlerSet;
67
68 class eDVBCIInterfaces
69 {
70 DECLARE_REF(eDVBCIInterfaces);
71         static eDVBCIInterfaces *instance;
72 private:
73         eSmartPtrList<eDVBCISlot>       m_slots;
74         eDVBCISlot *getSlot(int slotid);
75
76         PMTHandlerSet m_pmt_handlers; 
77 public:
78         eDVBCIInterfaces();
79         ~eDVBCIInterfaces();
80
81         void addPMTHandler(eDVBServicePMTHandler *pmthandler);
82         void removePMTHandler(eDVBServicePMTHandler *pmthandler);
83         void gotPMT(eDVBServicePMTHandler *pmthandler);
84
85         static eDVBCIInterfaces *getInstance();
86         
87         int reset(int slot);
88         int initialize(int slot);
89         int startMMI(int slot);
90         int stopMMI(int slot);
91         int answerText(int slot, int answer);
92         int answerEnq(int slot, char *value);
93         int cancelEnq(int slot);
94         int getMMIState(int slot);
95 };
96
97 #endif