pass more information about why a channel alloc fails, and display proper error messa...
[enigma2.git] / lib / dvb / dvb.h
index fde9f741436fbea995547248daea6c221d19438b..c71a4d1b9a399f9f1d505bc9d7a86a7e0b2b66d1 100644 (file)
@@ -33,9 +33,12 @@ public:
        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)
@@ -149,7 +152,7 @@ class eDVBResourceManager: public iObject, public Object
                           combinations. this will be evaluated here. */
                           
        RESULT allocateFrontend(ePtr<eDVBAllocatedFrontend> &fe, ePtr<iDVBFrontendParameters> &feparm);
-       RESULT allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int index);
+       RESULT allocateFrontendByIndex(ePtr<eDVBAllocatedFrontend> &fe, int slot_index);
        
                        /* allocate a demux able to filter on the selected frontend. */
        RESULT allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBAllocatedDemux> &demux, int cap);
@@ -181,11 +184,11 @@ class eDVBResourceManager: public iObject, public Object
        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();
 
@@ -193,9 +196,13 @@ public:
        RESULT getChannelList(ePtr<iDVBChannelList> &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<void,eDVBChannel*> &channelAdded, ePtr<eConnection> &connection);
@@ -209,9 +216,10 @@ public:
 public:
 #endif
        PSignal1<void,int> frontendUseMaskChanged;
-       SWIG_VOID(RESULT) allocateRawChannel(eUsePtr<iDVBChannel> &SWIG_OUTPUT, int frontend_index);
+       SWIG_VOID(RESULT) allocateRawChannel(eUsePtr<iDVBChannel> &SWIG_OUTPUT, int slot_index);
+       PyObject *setFrontendSlotInformations(SWIG_PYOBJECT(ePyObject) list);
 };
-SWIG_TEMPLATE_TYPEDEF_REPLACE(ePtr<eDVBResourceManager>, eDVBResourceManager);
+SWIG_TEMPLATE_TYPEDEF(ePtr<eDVBResourceManager>, eDVBResourceManager);
 SWIG_EXTEND(ePtr<eDVBResourceManager>,
        static ePtr<eDVBResourceManager> getInstance()
        {
@@ -221,6 +229,9 @@ SWIG_EXTEND(ePtr<eDVBResourceManager>,
 );
 
 #ifndef SWIG
+
+class eDVBChannelFilePush;
+
        /* iDVBPVRChannel includes iDVBChannel. don't panic. */
 class eDVBChannel: public iDVBPVRChannel, public iFilePushScatterGather, public Object
 {
@@ -272,7 +283,7 @@ private:
        ePtr<eConnection> m_conn_frontendStateChanged;
        
                /* for PVR playback */
-       eFilePushThread *m_pvr_thread;
+       eDVBChannelFilePush *m_pvr_thread;
        void pvrEvent(int event);
        
        int m_pvr_fd_dst;