1 #ifndef __lib_dvb_scan_h
2 #define __lib_dvb_scan_h
4 #include <lib/dvb_si/nit.h>
5 #include <lib/dvb_si/sdt.h>
6 #include <lib/dvb_si/bat.h>
7 #include <lib/dvb/db.h>
9 class eDVBScan: public Object, public iObject
13 /* chid helper functions: */
15 /* heuristically determine if onid/tsid is valid */
16 int isValidONIDTSID(eOriginalNetworkID onid, eTransportStreamID tsid);
17 /* build dvb namespace */
18 eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash);
21 ePtr<iDVBChannel> m_channel;
22 ePtr<iDVBDemux> m_demux;
25 void stateChange(iDVBChannel *);
26 ePtr<eConnection> m_stateChanged_connection;
32 enum { readySDT=1, readyNIT=2, readyBAT=4, readyAll=7,
33 validSDT=8, validNIT=16, validBAT=32};
35 /* scan state variables */
39 std::map<eDVBChannelID, ePtr<iDVBFrontendParameters> > m_new_channels;
40 std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_new_services;
42 std::list<ePtr<iDVBFrontendParameters> > m_ch_toScan, m_ch_scanned, m_ch_unavailable;
43 ePtr<iDVBFrontendParameters> m_ch_current;
45 ePtr<eTable<ServiceDescriptionTable> > m_SDT;
46 ePtr<eTable<NetworkInformationTable> > m_NIT;
47 ePtr<eTable<BouquetAssociationTable> > m_BAT;
49 void SDTready(int err);
50 void NITready(int err);
51 void BATready(int err);
53 void addChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
54 int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2) const;
58 Signal1<void,int> m_event;
59 RESULT processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionTable &sdt);
61 eDVBScan(iDVBChannel *channel);
64 void start(const std::list<ePtr<iDVBFrontendParameters> > &known_transponders);
66 enum { evtUpdate, evtFinish };
67 RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &connection);
68 void insertInto(eDVBDB *db);