X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/b0e09a2cd9a05a002222d79fb71848f4c7820ff3..e68ab3a6255de286aad4f503ee9929d0c503ebcc:/lib/dvb/scan.h diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h index df832bd6..96a1528d 100644 --- a/lib/dvb/scan.h +++ b/lib/dvb/scan.h @@ -1,9 +1,10 @@ #ifndef __lib_dvb_scan_h #define __lib_dvb_scan_h -#include #include +#include #include +#include #include #include #include @@ -15,7 +16,7 @@ private: /* chid helper functions: */ /* heuristically determine if onid/tsid is valid */ - int isValidONIDTSID(eOriginalNetworkID onid, eTransportStreamID tsid); + int isValidONIDTSID(int orbital_position, eOriginalNetworkID onid, eTransportStreamID tsid); /* build dvb namespace */ eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash); @@ -31,8 +32,8 @@ private: RESULT nextChannel(); RESULT startFilter(); - enum { readySDT=1, readyNIT=2, readyBAT=4, - validSDT=8, validNIT=16, validBAT=32}; + enum { readyPAT=1, readySDT=2, readyNIT=4, readyBAT=8, + validPAT=16, validSDT=32, validNIT=64, validBAT=128}; /* scan state variables */ int m_channel_state; @@ -40,6 +41,7 @@ private: std::map > m_new_channels; std::map > m_new_services; + std::map >::iterator m_last_service; std::list > m_ch_toScan, m_ch_scanned, m_ch_unavailable; ePtr m_ch_current; @@ -48,33 +50,42 @@ private: ePtr > m_SDT; ePtr > m_NIT; ePtr > m_BAT; - + ePtr > m_PAT; + void SDTready(int err); void NITready(int err); void BATready(int err); - + void PATready(int err); + void addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm); void addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm); - int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2) const; - + + int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2, bool exact=false) const; + void channelDone(); Signal1 m_event; RESULT processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionSection &sdt); int m_flags; + bool m_usePAT; public: - eDVBScan(iDVBChannel *channel); + eDVBScan(iDVBChannel *channel, bool usePAT=true, bool debug=true ); ~eDVBScan(); - - enum { scanNetworkSearch = 1, scanSearchBAT = 2 }; + + enum { + scanNetworkSearch = 1, scanSearchBAT = 2, + scanRemoveServices = 4, scanDontRemoveFeeds = 8, + clearToScanOnFirstNIT = 16 }; + void start(const eSmartPtrList &known_transponders, int flags); - enum { evtUpdate, evtFinish, evtFail }; - RESULT connectEvent(const Slot1 &event, ePtr &connection); - void insertInto(iDVBChannelList *db); + enum { evtUpdate, evtNewService, evtFinish, evtFail }; + RESULT connectEvent(const Slot1 &event, ePtr &connection); + void insertInto(iDVBChannelList *db, bool dontRemoveNewFlags=false); void getStats(int &transponders_done, int &transponders_total, int &services); + void getLastServiceName(std::string &name); }; #endif