trunk 20080912
[gitenigma.git] / include / lib / dvb / edvb.h
blob41052a74d55fe085c0683ffd5a4b8456f31d0ed6
1 #ifndef __edvb_h
2 #define __edvb_h
4 #include <stdio.h>
5 #include <list>
7 #include <libsig_comp.h>
8 #include <lib/dvb/esection.h>
9 #include <lib/system/econfig.h>
10 #include <lib/base/estring.h>
11 #include <lib/base/eptrlist.h>
12 #include <lib/dvb/settings.h>
14 class eService;
15 class eTransponder;
16 class eTransponderList;
17 class eDVBServiceController;
19 class PAT;
20 class PMT;
21 class PMTEntry;
22 class SDT;
23 class NIT;
24 class EIT;
25 class TDT;
26 class BAT;
27 class Descriptor;
29 #define ENOCASYS 1000 /// service is not free and no valid caid
30 #define ENOSTREAM 1001 /// no video or audio stream
31 #define ENVOD 1002 /// nvod stream has to be selected
33 class eBouquet;
34 class eAVSwitch;
35 class eStreamWatchdog;
36 class eRFmod;
37 class MHWEIT;
38 class eDVBRecorder;
39 class eDVBScanController;
40 class eDVB;
41 class eConsoleAppContainer;
43 class eTransponder;
45 #ifndef DISABLE_CI
46 class eDVBCI;
47 #endif
49 class eDVBEvent
51 public:
52 int type;
53 enum
55 eventTunedIn,
56 eventRecordWriteError,
57 eventUser,
59 int err;
60 eTransponder *transponder;
62 eDVBEvent(int type)
63 :type(type)
67 eDVBEvent(int type, int err, eTransponder *transponder)
68 :type(type), err(err), transponder(transponder)
73 class eDVBState
75 public:
76 int state;
77 enum
79 stateIdle,
80 stateUser
82 eDVBState(int state)
83 :state(state)
86 operator int () const
88 return state;
92 class eDVBController
94 protected:
95 eDVB &dvb;
96 public:
97 eDVBController(eDVB &dvb)
98 :dvb(dvb)
101 virtual ~eDVBController()=0;
102 virtual void handleEvent(const eDVBEvent &event)=0;
106 * \brief High level DVB class.
108 * eDVB contains high-level dvb-functions like
109 * "switchService" which can be called almost
110 * stateless from everywhere...
112 class eDVB: public Object
114 static eDVB *instance;
115 public:
116 static eDVB *getInstance() { return instance; }
117 eDVB();
118 ~eDVB();
119 eString getVersion();
121 //////////// tables for current service/transponder /////////////////
122 /** */
123 eAUTable<PAT> tPAT;
124 eAUTable<PMT> tPMT;
125 eAUTable<SDT> tSDT;
126 eAUTable<NIT> tNIT, tONIT;
127 eAUTable<EIT> tEIT;
128 eAUTable<BAT> tBAT;
129 EIT *parentEIT;
131 Signal2<void, EIT*, int> gotEIT;
132 Signal1<void, SDT*> gotSDT;
133 Signal1<void, PMT*> gotPMT;
134 Signal1<void, int> gotContentPid;
136 // use from external classes to get PMT/EIT/SDT ... for refcounting
137 PMT *getPMT();
138 EIT *getEIT();
139 SDT *getSDT();
141 /////////////////////////// eDVB Recoder ////////////////////////////
142 #ifndef DISABLE_FILE
143 private:
144 void recMessage(int);
145 public:
146 #endif
147 eDVBRecorder *recorder;
148 #ifndef DISABLE_FILE
149 /// starts a new recording
150 void recBegin(const char *filename, eServiceReferenceDVB service);
151 /// pauses a recording
152 void recPause();
153 /// resumes a recording
154 void recResume();
155 /// closes a recording
156 void recEnd();
157 /// sets current slice
158 void recSetSlice(int slice);
160 #endif //DISABLE_FILE
162 ///////////////////////////// CI Instances //////////////////////////
163 #ifndef DISABLE_CI
164 eDVBCI *DVBCI;
165 eDVBCI *DVBCI2;
166 #else
167 int *dummy[2];
168 #endif
170 ///////////////////////////// State Handling ////////////////////////
171 private:
172 void tunedIn(eTransponder*, int);
173 eDVBState state;
174 public:
175 const eDVBState &getState() const { return state; }
176 void setState(const eDVBState &newstate) { /*emit*/ stateChanged(state=newstate); }
177 void event(const eDVBEvent &event);
178 Signal1<void, const eDVBState&> stateChanged;
179 Signal1<void, const eDVBEvent&> eventOccured;
181 Signal1<void, bool> scrambled;
182 Signal0<void> serviceListChanged;
183 Signal0<void> bouquetListChanged;
184 Signal1<void, const eServiceReferenceDVB &> leaveService;
185 Signal1<void, const eServiceReferenceDVB &> enterService;
186 Signal1<void, eTransponder*> leaveTransponder;
187 Signal1<void, eTransponder*> enterTransponder;
188 Signal2<void, eTransponder*, int> switchedTransponder;
189 Signal2<void, const eServiceReferenceDVB &, int> switchedService;
191 /////////////////////////Scan and Service Controller////////////////////////////
192 public:
193 void setMode(int mode);
194 eDVBServiceController *getServiceAPI();
195 eDVBScanController *getScanAPI();
196 enum {controllerNone,controllerScan,controllerService};
197 protected:
198 int controllertype;
199 eDVBController *controller;
201 //////////////////////////////Network Stuff////////////////////////////////////
202 public:
203 #ifndef DISABLE_NETWORK
204 void configureNetwork();
205 void UDHCPC_DataAvail(eString);
206 void UDHCPC_Closed(int);
207 void restartSamba();
208 eConsoleAppContainer *udhcpc;
209 eTimer delayTimer;
210 #ifndef DISABLE_NFS
211 void doMounts();
212 #endif
213 #endif
214 ///////////////////////////////////////////////////////////////////////////////
216 /* container for settings */
217 eDVBSettings *settings;
218 Signal0<void> timeUpdated;
219 int time_difference;
222 #endif