- fix scan: initial transponder wasn't used.
[enigma2.git] / lib / dvb / scan.h
index cc727644336b8c4a80113497c93680cfd9dced6c..743ea8d963f272fda92122bc4c497ba8d1e5f3ee 100644 (file)
@@ -4,10 +4,14 @@
 #include <lib/dvb_si/nit.h>
 #include <lib/dvb_si/sdt.h>
 #include <lib/dvb_si/bat.h>
+#include <lib/dvb/idemux.h>
+#include <lib/dvb/esection.h>
 #include <lib/dvb/db.h>
 
-class eDVBScan: public Object, public virtual iObject
+class eDVBScan: public Object, public iObject
 {
+DECLARE_REF(eDVBScan);
+private:
                /* chid helper functions: */
                
                /* heuristically determine if onid/tsid is valid */
@@ -16,7 +20,7 @@ class eDVBScan: public Object, public virtual iObject
        eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash);
        
                /* scan resources */    
-       ePtr<iDVBChannel> m_channel;
+       eUsePtr<iDVBChannel> m_channel;
        ePtr<iDVBDemux> m_demux;
        
                /* infrastructure */
@@ -39,6 +43,7 @@ class eDVBScan: public Object, public virtual iObject
        
        std::list<ePtr<iDVBFrontendParameters> > m_ch_toScan, m_ch_scanned, m_ch_unavailable;
        ePtr<iDVBFrontendParameters> m_ch_current;
+       eDVBChannelID m_chid_current;
        
        ePtr<eTable<ServiceDescriptionTable> > m_SDT;
        ePtr<eTable<NetworkInformationTable> > m_NIT;
@@ -48,7 +53,8 @@ class eDVBScan: public Object, public virtual iObject
        void NITready(int err);
        void BATready(int err);
        
-       void addChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
+       void addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
+       void addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
        int  sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2) const;
        
        void channelDone();
@@ -61,9 +67,11 @@ public:
        
        void start(const std::list<ePtr<iDVBFrontendParameters> > &known_transponders);
 
-       enum { evtUpdate, evtFinish };
+       enum { evtUpdate, evtFinish, evtFail };
   RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &connection);
-       void insertInto(eDVBDB *db);
+       void insertInto(iDVBChannelList *db);
+       
+       void getStats(int &transponders_done, int &transponders_total, int &services);
 };
 
 #endif