aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/scan.h
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:36:42 +0000
committerFelix Domke <tmbinc@elitedvb.net>2003-10-17 15:36:42 +0000
commitd63d2c3c6cbbd574dda4f8b00ebe6c661735edd5 (patch)
tree84d0cacfd0b6c1241c236c7860f7cbd7f26901bb /lib/dvb/scan.h
downloadenigma2-d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5.tar.gz
enigma2-d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5.zip
import of enigma2
Diffstat (limited to 'lib/dvb/scan.h')
-rw-r--r--lib/dvb/scan.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h
new file mode 100644
index 00000000..196e52fc
--- /dev/null
+++ b/lib/dvb/scan.h
@@ -0,0 +1,69 @@
+#ifndef __lib_dvb_scan_h
+#define __lib_dvb_scan_h
+
+#include <lib/dvb_si/nit.h>
+#include <lib/dvb_si/sdt.h>
+#include <lib/dvb_si/bat.h>
+#include <lib/dvb/db.h>
+
+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<iDVBChannel> m_channel;
+ ePtr<iDVBDemux> m_demux;
+
+ /* infrastructure */
+ void stateChange(iDVBChannel *);
+ ePtr<eConnection> 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<eDVBChannelID, ePtr<iDVBFrontendParameters> > m_new_channels;
+ std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_new_services;
+
+ std::list<ePtr<iDVBFrontendParameters> > m_ch_toScan, m_ch_scanned, m_ch_unavailable;
+ ePtr<iDVBFrontendParameters> m_ch_current;
+
+ ePtr<eTable<ServiceDescriptionTable> > m_SDT;
+ ePtr<eTable<NetworkInformationTable> > m_NIT;
+ ePtr<eTable<BouquetAssociationTable> > 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<void,int> m_event;
+ RESULT processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionTable &sdt);
+public:
+ eDVBScan(iDVBChannel *channel);
+ ~eDVBScan();
+
+ void start(const std::list<ePtr<iDVBFrontendParameters> > &known_transponders);
+
+ enum { evtUpdate, evtFinish };
+ RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &connection);
+ void insertInto(eDVBDB *db);
+};
+
+#endif