X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdvb.h;h=2fca347d3f6d1771e8bfb520fd1905c025e557ce;hp=836a4948b8dace2bb953b88cc39352ce6527bfb0;hb=2e0270746af934180499931f95ed91c444c8233e;hpb=af6a8a3a102ff0230fcc6d90ad213e2e7d706fa8 diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h index 836a494..2fca347 100644 --- a/lib/dvb/dvb.h +++ b/lib/dvb/dvb.h @@ -1,6 +1,8 @@ #ifndef __dvb_dvb_h #define __dvb_dvb_h +#ifndef SWIG + #include #include #include @@ -27,21 +29,31 @@ class eDVBRegisteredFrontend: public iObject, public Object disable->start(60000, true); // retry close in 60secs } public: + Signal0 stateChanged; eDVBRegisteredFrontend(eDVBFrontend *fe, iDVBAdapter *adap) :disable(new eTimer(eApp)), m_adapter(adap), m_frontend(fe), m_inuse(0) { - disable = new eTimer(eApp); CONNECT(disable->timeout, eDVBRegisteredFrontend::closeFrontend); } + ~eDVBRegisteredFrontend() + { + delete disable; + } void dec_use() { if (!--m_inuse) + { + /* emit */ stateChanged(); disable->start(3000, true); + } } void inc_use() { if (++m_inuse == 1) + { m_frontend->openFrontend(); + /* emit */ stateChanged(); + } } iDVBAdapter *m_adapter; ePtr m_frontend; @@ -50,7 +62,7 @@ public: struct eDVBRegisteredDemux { -DECLARE_REF(eDVBRegisteredDemux); + DECLARE_REF(eDVBRegisteredDemux); public: iDVBAdapter *m_adapter; ePtr m_demux; @@ -60,7 +72,7 @@ public: class eDVBAllocatedFrontend { -DECLARE_REF(eDVBAllocatedFrontend); + DECLARE_REF(eDVBAllocatedFrontend); public: eDVBAllocatedFrontend(eDVBRegisteredFrontend *fe); @@ -75,7 +87,7 @@ private: class eDVBAllocatedDemux { -DECLARE_REF(eDVBAllocatedDemux); + DECLARE_REF(eDVBAllocatedDemux); public: eDVBAllocatedDemux(eDVBRegisteredDemux *demux); @@ -100,7 +112,7 @@ public: class eDVBAdapterLinux: public iDVBAdapter { -DECLARE_REF(eDVBAdapterLinux); + DECLARE_REF(eDVBAdapterLinux); public: eDVBAdapterLinux(int nr); @@ -116,7 +128,9 @@ private: eSmartPtrList m_frontend; eSmartPtrList m_demux; }; +#endif // SWIG +SWIG_IGNORE(eDVBResourceManager); class eDVBResourceManager: public iObject, public Object { DECLARE_REF(eDVBResourceManager); @@ -138,7 +152,7 @@ class eDVBResourceManager: public iObject, public Object combinations. this will be evaluated here. */ RESULT allocateFrontend(ePtr &fe, ePtr &feparm); - RESULT allocateFrontendByIndex(ePtr &fe, int index); + RESULT allocateFrontendByIndex(ePtr &fe, int slot_index); /* allocate a demux able to filter on the selected frontend. */ RESULT allocateDemux(eDVBRegisteredFrontend *fe, ePtr &demux, int cap); @@ -164,37 +178,60 @@ class eDVBResourceManager: public iObject, public Object Signal1 m_channelAdded; - bool canAllocateFrontend(ePtr &feparm); + int canAllocateFrontend(ePtr &feparm); eUsePtr m_cached_channel; Connection m_cached_channel_state_changed_conn; eTimer m_releaseCachedChannelTimer; void DVBChannelStateChanged(iDVBChannel*); - void releaseCachedChannel(); + void feStateChanged(); +#ifndef SWIG public: +#endif + void releaseCachedChannel(); eDVBResourceManager(); virtual ~eDVBResourceManager(); - - static RESULT getInstance(ePtr &ptr) { if (instance) { ptr = instance; return 0; } return -1; } - + RESULT setChannelList(iDVBChannelList *list); RESULT getChannelList(ePtr &list); enum { - errNoFrontend = -1, + /* errNoFrontend = -1 replaced by more spcific messages */ errNoDemux = -2, - errChidNotFound = -3 + errChidNotFound = -3, + errNoChannelList = -4, + errChannelNotInList = -5, + errAllSourcesBusy = -6, + errNoSourceFound = -7, }; + + RESULT connectChannelAdded(const Slot1 &channelAdded, ePtr &connection); + int canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID &ignore); /* allocate channel... */ RESULT allocateChannel(const eDVBChannelID &channelid, eUsePtr &channel); - RESULT allocateRawChannel(eUsePtr &channel, int frontend_index); RESULT allocatePVRChannel(eUsePtr &channel); + static RESULT getInstance(ePtr &); +#ifdef SWIG +public: +#endif + bool canMeasureFrontendInputPower(); + PSignal1 frontendUseMaskChanged; + SWIG_VOID(RESULT) allocateRawChannel(eUsePtr &SWIG_OUTPUT, int slot_index); + PyObject *setFrontendSlotInformations(SWIG_PYOBJECT(ePyObject) list); +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, eDVBResourceManager); +SWIG_EXTEND(ePtr, + static ePtr getInstance() + { + extern ePtr NewResourceManagerPtr(void); + return NewResourceManagerPtr(); + } +); - RESULT connectChannelAdded(const Slot1 &channelAdded, ePtr &connection); +#ifndef SWIG - bool canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID &ignore); -}; +class eDVBChannelFilePush; /* iDVBPVRChannel includes iDVBChannel. don't panic. */ class eDVBChannel: public iDVBPVRChannel, public iFilePushScatterGather, public Object @@ -247,7 +284,7 @@ private: ePtr m_conn_frontendStateChanged; /* for PVR playback */ - eFilePushThread *m_pvr_thread; + eDVBChannelFilePush *m_pvr_thread; void pvrEvent(int event); int m_pvr_fd_dst; @@ -271,5 +308,6 @@ private: void AddUse(); void ReleaseUse(); }; +#endif // SWIG #endif