#ifndef __lib_dvb_scan_h #define __lib_dvb_scan_h #include #include #include #include class eDVBScan: public Object { /* chid helper functions: */ /* heuristically determine if onid/tsid is valid */ int isValidONIDTSID(eOriginalNetworkID onid, eTransportStreamID tsid); /* build dvb namespace */ eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash); /* scan resources */ ePtr m_channel; ePtr m_demux; /* infrastructure */ void stateChange(iDVBChannel *); ePtr m_stateChanged_connection; /* state handling */ RESULT nextChannel(); RESULT startFilter(); enum { readySDT=1, readyNIT=2, readyBAT=4, readyAll=7, validSDT=8, validNIT=16, validBAT=32}; /* scan state variables */ int m_channel_state; int m_ready; std::map > m_new_channels; std::map > m_new_services; std::list > m_ch_toScan, m_ch_scanned, m_ch_unavailable; ePtr m_ch_current; ePtr > m_SDT; ePtr > m_NIT; ePtr > m_BAT; void SDTready(int err); void NITready(int err); void BATready(int err); void addChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm); int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2) const; void channelDone(); Signal1 m_event; RESULT processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionTable &sdt); public: eDVBScan(iDVBChannel *channel); ~eDVBScan(); void start(const std::list > &known_transponders); enum { evtUpdate, evtFinish }; RESULT connectEvent(const Slot1 &event, ePtr &connection); void insertInto(eDVBDB *db); }; #endif