Remove TPM
[openblackhole/openblackhole-enigma2.git] / lib / python / enigma_python.i
1 /*
2   NOTE: you have two options when adding classes so that
3   they are callable *from* python.
4   
5    - either you %include the header file
6    - or you re-declare it
7    
8   In both cases, you must #include the required
9   header file (i.e. the header file itself), otherwise
10   enigma_python_wrap.cxx won't build.
11   
12         In case you import the whole header file,
13         please make sure that no unimportant stuff
14         is wrapped, as this makes the wrapper stuff
15         much more complex and it can probably break 
16         very easily because of missing typemaps etc.
17         
18         you could make use of dizzy macros to ensure
19         that some stuff is left out when parsed as SWIG
20         definitions, but be sure to not modify the binary 
21         representation. DON'T USE #ifdef SWIG_COMPILE
22         for leaving out stuff (unless you *really* know
23         what you are doing,of course!). you WILL break it.
24                 
25         The better way (with more work) is to re-declare
26         the class. It won't be compiled, so you can
27         leave out stuff as you like.
28
29
30
31 Oh, things like "operator= is private in this context" etc.
32 is usually caused by not marking PSignals as immutable. 
33 */
34
35 %module enigma
36 %{
37
38 #define SWIG_COMPILE
39 #include <lib/base/ebase.h>
40 #include <lib/base/smartptr.h>
41 #include <lib/base/eenv.h>
42 #include <lib/base/eerror.h>
43 #include <lib/base/message.h>
44 #include <lib/driver/rc.h>
45 #include <lib/driver/rcinput_swig.h>
46 #include <lib/service/event.h>
47 #include <lib/service/iservice.h>
48 #include <lib/service/service.h>
49 #include <lib/service/servicedvb.h>
50 #include <lib/gdi/fb.h>
51 #include <lib/gdi/font.h>
52 #include <lib/gdi/gpixmap.h>
53 #include <lib/gdi/gfbdc.h>
54 #include <lib/gdi/grc.h>
55 #include <lib/gdi/gmaindc.h>
56 #include <lib/gui/ewidget.h>
57 #include <lib/gui/elabel.h>
58 #include <lib/gui/einput.h>
59 #include <lib/gui/einputstring.h>
60 #include <lib/gui/einputnumber.h>
61 #include <lib/gui/epixmap.h>
62 #include <lib/gui/ebutton.h>
63 #include <lib/gui/ewindow.h>
64 #include <lib/gui/ewidgetdesktop.h>
65 #include <lib/gui/ewindowstyle.h>
66 #include <lib/gui/ewindowstyleskinned.h>
67 #include <lib/gui/ewidgetanimation.h>
68 #include <lib/gui/eslider.h>
69 #include <lib/gui/epositiongauge.h>
70 #include <lib/gui/evideo.h>
71 #include <lib/gui/ecanvas.h>
72 #include <lib/python/connections.h>
73 #include <lib/python/pythonconfig.h>
74 #include <lib/gui/elistbox.h>
75 #include <lib/gui/elistboxcontent.h>
76 #include <lib/gui/esubtitle.h>
77 #include <lib/service/listboxservice.h>
78 #include <lib/nav/pcore.h>
79 #include <lib/actions/action.h>
80 #include <lib/gdi/gfont.h>
81 #include <lib/gdi/epng.h>
82 #include <lib/dvb/db.h>
83 #include <lib/dvb/frontendparms.h>
84 #include <lib/dvb/idvb.h>
85 #include <lib/dvb/dvb.h>
86 #include <lib/dvb/frontend.h>
87 #include <lib/dvb/volume.h>
88 #include <lib/dvb/sec.h>
89 #include <lib/dvb/epgcache.h>
90 #include <lib/dvb/dvbtime.h>
91 #include <lib/dvb/pmt.h>
92 #include <lib/dvb/cahandler.h>
93 #include <lib/dvb/fastscan.h>
94 #include <lib/dvb/cablescan.h>
95 #include <lib/dvb/encoder.h>
96 #include <lib/components/scan.h>
97 #include <lib/components/file_eraser.h>
98 #include <lib/components/tuxtxtapp.h>
99 #include <lib/driver/avswitch.h>
100 #include <lib/driver/hdmi_cec.h>
101 #include <lib/driver/rfmod.h>
102 #include <lib/driver/misc_options.h>
103 #include <lib/driver/etimezone.h>
104 #include <lib/gdi/lcd.h>
105 #include <lib/mmi/mmi_ui.h>
106 #include <lib/dvb_ci/dvbci.h>
107 #include <lib/dvb_ci/dvbci_ui.h>
108 #include <lib/python/python.h>
109 #include <lib/python/python_helpers.h>
110 #include <lib/gdi/picload.h>
111 %}
112
113 %feature("ref")   iObject "$this->AddRef(); /* eDebug(\"AddRef (%s:%d)!\", __FILE__, __LINE__); */ "
114 %feature("unref") iObject "$this->Release(); /* eDebug(\"Release! %s:%d\", __FILE__, __LINE__); */ "
115
116 /* this magic allows smartpointer to be used as OUTPUT arguments, i.e. call-by-reference-styled return value. */
117
118 %define %typemap_output_simple(Type)
119  %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
120               Type &OUTPUT ($*1_ltype temp)
121    "$1 = new Type;";
122  %fragment("t_out_helper"{Type},"header",
123      fragment="t_output_helper") {}
124  %typemap(argout,fragment="t_out_helper"{Type}) Type *OUTPUT, Type &OUTPUT
125    "$result = t_output_helper($result, (SWIG_NewPointerObj((void*)($1), $1_descriptor, 1)));"
126 %enddef
127
128 %define %typemap_output_ptr(Type)
129  %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
130               Type &OUTPUT ($*1_ltype temp)
131    "$1 = new Type;";
132  %fragment("t_out_helper"{Type},"header",
133      fragment="t_output_helper") {}
134  %typemap(argout,fragment="t_out_helper"{Type}) Type *OUTPUT, Type &OUTPUT
135                 // generate None if smartpointer is NULL
136    "$result = t_output_helper($result, ((*$1) ? SWIG_NewPointerObj((void*)($1), $1_descriptor, 1) : (delete $1, Py_INCREF(Py_None), Py_None)));"
137 %enddef
138
139
140 #define DEBUG
141 typedef long time_t;
142 %include "typemaps.i"
143 %include "std_string.i"
144 %include <lib/python/swig.h>
145 %include <lib/base/object.h>
146 %include <lib/base/eenv.h>
147 %include <lib/base/eerror.h>
148
149 %include <lib/python/python_dvb.i>
150 %include <lib/python/python_service.i>
151 %include <lib/python/python_pmt.i>
152 %include <lib/python/python_pcore.i>
153
154 %immutable eSocketNotifier::activated;
155 %include <lib/base/ebase.h>
156 %include <lib/base/smartptr.h>
157 %include <lib/service/event.h>
158 %include <lib/service/iservice.h>
159 %include <lib/service/service.h>
160
161 // TODO: embed these...
162 %immutable ePicLoad::PictureData;
163 %immutable eButton::selected;
164 %immutable eInput::changed;
165 %immutable eComponentScan::statusChanged;
166 %immutable eComponentScan::newService;
167 %immutable eFastScan::scanProgress;
168 %immutable eFastScan::scanCompleted;
169 %immutable eCableScan::scanProgress;
170 %immutable eCableScan::scanCompleted;
171 %immutable pNavigation::m_event;
172 %immutable pNavigation::m_record_event;
173 %immutable eListbox::selectionChanged;
174 %immutable eDVBCI_UI::ciStateChanged;
175 %immutable eSocket_UI::socketStateChanged;
176 %immutable eDVBResourceManager::frontendUseMaskChanged;
177 %immutable eAVSwitch::vcr_sb_notifier;
178 %immutable eHdmiCEC::messageReceived;
179 %immutable eHdmiCEC::addressChanged;
180 %immutable ePythonMessagePump::recv_msg;
181 %immutable eDVBLocalTimeHandler::m_timeUpdated;
182 %immutable iCryptoInfo::clientname;
183 %immutable iCryptoInfo::clientinfo;
184 %immutable iCryptoInfo::verboseinfo;
185 %immutable iCryptoInfo::usedcaid;
186 %immutable iCryptoInfo::decodetime;
187 %immutable iCryptoInfo::usedcardid;
188 %immutable eTuxtxtApp::appClosed;
189 %immutable iDVBChannel::receivedTsidOnid;
190 %include <lib/base/message.h>
191 %include <lib/driver/rc.h>
192 %include <lib/driver/rcinput_swig.h>
193 %include <lib/gdi/fb.h>
194 %include <lib/gdi/font.h>
195 %include <lib/gdi/gpixmap.h>
196 %include <lib/gdi/gmaindc.h>
197 %include <lib/gdi/epoint.h>
198 %include <lib/gdi/erect.h>
199 %include <lib/gdi/esize.h>
200 %include <lib/gui/ewidget.h>
201 %include <lib/gui/elabel.h>
202 %include <lib/gui/einput.h>
203 %include <lib/gui/einputstring.h>
204 %include <lib/gui/einputnumber.h>
205 %include <lib/gui/epixmap.h>
206 %include <lib/gui/ecanvas.h>
207 %include <lib/gui/ebutton.h>
208 %include <lib/gui/ewindow.h>
209 %include <lib/gui/eslider.h>
210 %include <lib/gui/epositiongauge.h>
211 %include <lib/gui/ewidgetdesktop.h>
212 %include <lib/gui/elistbox.h>
213 %include <lib/gui/elistboxcontent.h>
214 %include <lib/gui/ewindowstyle.h>
215 %include <lib/gui/ewindowstyleskinned.h>
216 %include <lib/gui/ewidgetanimation.h>
217 %include <lib/gui/evideo.h>
218 %include <lib/gui/esubtitle.h>
219 %include <lib/service/listboxservice.h>
220 %include <lib/nav/pcore.h>
221 %include <lib/actions/action.h>
222 %include <lib/gdi/gfont.h>
223 %include <lib/gdi/epng.h>
224 %include <lib/dvb/volume.h>
225 %include <lib/dvb/sec.h>
226 %include <lib/dvb/epgcache.h>
227 %include <lib/dvb/frontendparms.h>
228 %include <lib/dvb/dvbtime.h>
229 %include <lib/dvb/idvb.h>
230 %include <lib/dvb/dvb.h>
231 %include <lib/dvb/frontend.h>
232 %include <lib/dvb/pmt.h>
233 %include <lib/dvb/cahandler.h>
234 %include <lib/dvb/fastscan.h>
235 %include <lib/dvb/cablescan.h>
236 %include <lib/components/scan.h>
237 %include <lib/components/file_eraser.h>
238 %include <lib/components/tuxtxtapp.h>
239 %include <lib/driver/avswitch.h>
240 %include <lib/driver/hdmi_cec.h>
241 %include <lib/driver/rfmod.h>
242 %include <lib/driver/misc_options.h>
243 %include <lib/driver/etimezone.h>
244 %include <lib/gdi/lcd.h>
245 %include <lib/mmi/mmi_ui.h>
246 %include <lib/dvb_ci/dvbci.h>
247 %include <lib/dvb_ci/dvbci_ui.h>
248 %include <lib/dvb/db.h>
249 %include <lib/python/python.h>
250 %include <lib/python/pythonconfig.h>
251 %include <lib/gdi/picload.h>
252 /**************  eptr  **************/
253
254 /**************  signals  **************/
255
256 template<class R> class PSignal0
257 {
258 public:
259         PyObject *get();
260 };
261
262 %template(PSignal0V) PSignal0<void>;
263
264 %typemap(out) PSignal0V {
265         $1 = $input->get();
266 }
267
268 template<class R, class P0> class PSignal1
269 {
270 public:
271         PyObject *get();
272 };
273
274 %template(PSignal1VI) PSignal1<void,int>;
275 %template(PSignal1VS) PSignal1<void,const char *c>;
276
277 %typemap(out) PSignal1VI {
278         $1 = $input->get();
279 }
280
281 %typemap(out) PSignal1VS {
282         $1 = $input->get();
283 }
284
285 %template(PSignal1VoidICECMessage) PSignal1<void,ePtr<iCECMessage>&>;
286
287 %typemap(out) PSignal1VoidICECMessage {
288         $1 = $input->get();
289 }
290
291 template<class R, class P0, class P1> class PSignal2
292 {
293 public:
294         PyObject *get();
295 };
296
297 %template(PSignal2VoidIRecordableServiceInt) PSignal2<void,ePtr<iRecordableService>&,int>;
298
299 %typemap(out) PSignal2VoidIRecordableServiceInt {
300         $1 = $input->get();
301 }
302
303 %template(PSignal2VII) PSignal2<void,int,int>;
304
305 %typemap(out) PSignal2VII {
306         $1 = $input->get();
307 }
308
309 %{
310 RESULT SwigFromPython(ePtr<gPixmap> &result, PyObject *obj)
311 {       
312         ePtr<gPixmap> *res;
313
314         res = 0;
315         result = 0;
316 #ifndef SWIGTYPE_p_ePtrT_gPixmap_t
317 #define SWIGTYPE_p_ePtrT_gPixmap_t SWIGTYPE_p_ePtrTgPixmap_t
318 #endif
319         if (SWIG_Python_ConvertPtr(obj, (void **)&res, SWIGTYPE_p_ePtrT_gPixmap_t, SWIG_POINTER_EXCEPTION | 0))
320                 return -1;
321         if (!res)
322                 return -1;
323         result = *res;
324         return 0;
325 }
326 PyObject *New_eServiceReference(const eServiceReference &ref)
327 {
328     eServiceReference *result = new eServiceReference(ref);
329     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_eServiceReference, 1);
330 }
331 PyObject *New_iRecordableServicePtr(const ePtr<iRecordableService> &ptr)
332 {
333     ePtr<iRecordableService> *result = new ePtr<iRecordableService>(ptr);
334 #ifndef SWIGTYPE_p_ePtrT_iRecordableService_t
335 #define SWIGTYPE_p_ePtrT_iRecordableService_t SWIGTYPE_p_ePtrTiRecordableService_t
336 #endif
337     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_ePtrT_iRecordableService_t, 1);
338 }
339 PyObject *New_iCECMessagePtr(const ePtr<iCECMessage> &ptr)
340 {
341     ePtr<iCECMessage> *result = new ePtr<iCECMessage>(ptr);
342 #ifndef SWIGTYPE_p_ePtrT_iCECMessage_t
343 #define SWIGTYPE_p_ePtrT_iCECMessage_t SWIGTYPE_p_ePtrTiCECMessage_t
344 #endif
345     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_ePtrT_iCECMessage_t, 1);
346 }
347 %}
348
349 /* needed for service groups */
350
351 PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref, const eServiceReference &ignore, bool simulate=false);
352 %{
353 PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref, const eServiceReference &ignore, bool simulate=false)
354 {
355         eStaticServiceDVBBouquetInformation info;
356         if (info.isPlayable(bouquet_ref, ignore, simulate))
357                 return New_eServiceReference(info.getPlayableService());
358         Py_INCREF(Py_None);
359         return Py_None;
360 }
361 %}
362
363 void setTunerTypePriorityOrder(int);
364 %{
365 void setTunerTypePriorityOrder(int order)
366 {
367         eDVBFrontend::setTypePriorityOrder(order);
368 }
369 %}
370
371 void setPreferredTuner(int);
372 %{
373 void setPreferredTuner(int index)
374 {
375         eDVBFrontend::setPreferredFrontend(index);
376 }
377 %}
378
379 void setSpinnerOnOff(int);
380 %{
381 void setSpinnerOnOff(int onoff)
382 {
383         gRC *rc = gRC::getInstance();
384         if (rc) rc->setSpinnerOnOff(onoff);
385 }
386 %}
387
388 void setEnableTtCachingOnOff(int);
389 %{
390 void setEnableTtCachingOnOff(int onoff)
391 {
392         eTuxtxtApp *tt = eTuxtxtApp::getInstance();
393         if (tt) tt->setEnableTtCachingOnOff(onoff);
394 }
395 %}
396
397 int getUsedEncoderCount();
398 %{
399 int getUsedEncoderCount()
400 {
401         eEncoder *encoders = eEncoder::getInstance();
402         if (encoders) return encoders->getUsedEncoderCount();
403         return 0;
404 }
405 %}
406
407 /************** temp *****************/
408
409         /* need a better place for this, i agree. */
410 %{
411 extern void runMainloop();
412 extern void quitMainloop(int exit_code);
413 extern eApplication *getApplication();
414 extern int getPrevAsciiCode();
415 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement, int renderflags = 0);
416 extern const char *getEnigmaVersionString();
417 extern const char *getBoxType();
418 extern const char *getGStreamerVersionString();
419 extern void dump_malloc_stats(void);
420 %}
421
422 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement, int renderflags = 0);
423 extern int getPrevAsciiCode();
424 extern void runMainloop();
425 extern void quitMainloop(int exit_code);
426 extern eApplication *getApplication();
427 extern const char *getEnigmaVersionString();
428 extern const char *getBoxType();
429 extern const char *getGStreamerVersionString();
430 extern void dump_malloc_stats(void);
431
432 %include <lib/python/python_console.i>
433 %include <lib/python/python_base.i>