+
+ /* search available adapters... */
+
+ // add linux devices
+
+ int num_adapter = 0;
+ while (eDVBAdapterLinux::exist(num_adapter))
+ {
+ addAdapter(new eDVBAdapterLinux(num_adapter));
+ num_adapter++;
+ }
+
+ eDebug("found %d adapter, %d frontends and %d demux",
+ m_adapter.size(), m_frontend.size(), m_demux.size());
+}
+
+
+DEFINE_REF(eDVBAdapterLinux);
+eDVBAdapterLinux::eDVBAdapterLinux(int nr): m_nr(nr)
+{
+ // scan frontends
+ int num_fe = 0;
+
+ eDebug("scanning for frontends..");
+ while (1)
+ {
+ struct stat s;
+ char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+ sprintf(filename, "/dev/dvb/card%d/frontend%d", m_nr, num_fe);
+#else
+ sprintf(filename, "/dev/dvb/adapter%d/frontend%d", m_nr, num_fe);
+#endif
+ if (stat(filename, &s))
+ break;
+ ePtr<eDVBFrontend> fe;
+
+ int ok = 0;
+ fe = new eDVBFrontend(m_nr, num_fe, ok);
+ if (ok)
+ m_frontend.push_back(fe);
+ ++num_fe;
+ }
+
+ // scan demux
+ int num_demux = 0;
+ while (1)
+ {
+ struct stat s;
+ char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+ sprintf(filename, "/dev/dvb/card%d/demux%d", m_nr, num_demux);
+#else
+ sprintf(filename, "/dev/dvb/adapter%d/demux%d", m_nr, num_demux);
+#endif
+ if (stat(filename, &s))
+ break;
+ ePtr<eDVBDemux> demux;
+
+ demux = new eDVBDemux(m_nr, num_demux);
+ m_demux.push_back(demux);
+
+ ++num_demux;
+ }
+}
+
+int eDVBAdapterLinux::getNumDemux()
+{
+ return m_demux.size();
+}
+
+RESULT eDVBAdapterLinux::getDemux(ePtr<eDVBDemux> &demux, int nr)
+{
+ eSmartPtrList<eDVBDemux>::iterator i(m_demux.begin());
+ while (nr && (i != m_demux.end()))
+ {
+ --nr;
+ ++i;
+ }
+
+ if (i != m_demux.end())
+ demux = *i;
+ else
+ return -1;
+
+ return 0;
+}
+
+int eDVBAdapterLinux::getNumFrontends()
+{
+ return m_frontend.size();
+}
+
+RESULT eDVBAdapterLinux::getFrontend(ePtr<eDVBFrontend> &fe, int nr)
+{
+ eSmartPtrList<eDVBFrontend>::iterator i(m_frontend.begin());
+ while (nr && (i != m_frontend.end()))
+ {
+ --nr;
+ ++i;
+ }
+
+ if (i != m_frontend.end())
+ fe = *i;
+ else
+ return -1;
+
+ return 0;
+}
+
+int eDVBAdapterLinux::exist(int nr)
+{
+ struct stat s;
+ char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+ sprintf(filename, "/dev/dvb/card%d", nr);
+#else
+ sprintf(filename, "/dev/dvb/adapter%d", nr);
+#endif
+ if (!stat(filename, &s))
+ return 1;
+ return 0;