{
// eDebug("scan event %d!", evt);
- if (evt == eDVBScan::evtFinish)
+ switch(evt)
{
- m_done = 1;
- ePtr<iDVBChannelList> db;
- ePtr<eDVBResourceManager> res;
-
- int err;
- if ((err = eDVBResourceManager::getInstance(res)) != 0)
- {
- eDebug("no resource manager");
- m_failed = 2;
- } else if ((err = res->getChannelList(db)) != 0)
+ case eDVBScan::evtFinish:
{
- m_failed = 3;
- eDebug("no channel list");
- } else
- {
- m_scan->insertInto(db);
- db->flush();
- eDebug("scan done!");
+ m_done = 1;
+ ePtr<iDVBChannelList> db;
+ ePtr<eDVBResourceManager> res;
+
+ int err;
+ if ((err = eDVBResourceManager::getInstance(res)) != 0)
+ {
+ eDebug("no resource manager");
+ m_failed = 2;
+ } else if ((err = res->getChannelList(db)) != 0)
+ {
+ m_failed = 3;
+ eDebug("no channel list");
+ } else
+ {
+ m_scan->insertInto(db);
+ db->flush();
+ eDebug("scan done!");
+ }
+ break;
}
+ case eDVBScan::evtNewService:
+ newService();
+ return;
+ case eDVBScan::evtFail:
+ eDebug("scan failed.");
+ m_failed = 1;
+ m_done = 1;
+ break;
+ case eDVBScan::evtUpdate:
+ break;
}
-
- if (evt == eDVBScan::evtNewService)
- {
- newService();
- return;
- }
-
- if (evt == eDVBScan::evtFail)
- {
- eDebug("scan failed.");
- m_failed = 1;
- m_done = 1;
- }
-
statusChanged();
}
{
if (m_initial.size() > 1)
{
- iDVBFrontendParameters *tp = m_initial.first();
+ ePtr<iDVBFrontendParameters> tp = m_initial.first();
int type;
if (tp && !tp->getSystem(type))
{
return 0;
}
-RESULT eComponentScan::getFrontend(ePtr<iDVBFrontend> &fe)
-{
- if (m_scan)
- return m_scan->getFrontend(fe);
- fe = 0;
- return -1;
-}
-
int eComponentScan::getProgress()
{
if (!m_scan)
return;
m_scan->getLastServiceName(string);
}
+
+RESULT eComponentScan::getFrontend(ePtr<iDVBFrontend> &fe)
+{
+ if (m_scan)
+ return m_scan->getFrontend(fe);
+ fe = 0;
+ return -1;
+}
+
+RESULT eComponentScan::getCurrentTransponder(ePtr<iDVBFrontendParameters> &tp)
+{
+ if (m_scan)
+ return m_scan->getCurrentTransponder(tp);
+ tp = 0;
+ return -1;
+}
+
enum { scanNetworkSearch=1, scanRemoveServices=4, scanDontRemoveFeeds=8, clearToScanOnFirstNIT = 16 };
int start(int feid, int flags=0 );
SWIG_VOID(RESULT) getFrontend(ePtr<iDVBFrontend> &SWIG_OUTPUT);
+ SWIG_VOID(RESULT) getCurrentTransponder(ePtr<iDVBFrontendParameters> &SWIG_OUTPUT);
};
#endif
eDVBFrontendParameters();
~eDVBFrontendParameters() {}
- RESULT getSystem(int &type) const;
- RESULT getDVBS(eDVBFrontendParametersSatellite &SWIG_OUTPUT) const;
- RESULT getDVBC(eDVBFrontendParametersCable &SWIG_OUTPUT) const;
- RESULT getDVBT(eDVBFrontendParametersTerrestrial &SWIG_OUTPUT) const;
-
RESULT setDVBS(const eDVBFrontendParametersSatellite &p, bool no_rotor_command_on_tune=false);
RESULT setDVBC(const eDVBFrontendParametersCable &p);
RESULT setDVBT(const eDVBFrontendParametersTerrestrial &p);
-
- RESULT calculateDifference(const iDVBFrontendParameters *parm, int &SWIG_OUTPUT, bool exact) const;
-
- RESULT getHash(unsigned long &SWIG_OUTPUT) const;
+
+#ifndef SWIG
+ RESULT getSystem(int &type) const;
+ RESULT getDVBS(eDVBFrontendParametersSatellite &) const;
+ RESULT getDVBC(eDVBFrontendParametersCable &) const;
+ RESULT getDVBT(eDVBFrontendParametersTerrestrial &) const;
+ RESULT calculateDifference(const iDVBFrontendParameters *parm, int &, bool exact) const;
+ RESULT getHash(unsigned long &) const;
+#endif
};
#ifndef SWIG
#ifndef __lib_dvb_frontendparms_h
#define __lib_dvb_frontendparms_h
+#include <lib/python/swig.h>
+
class SatelliteDeliverySystemDescriptor;
class CableDeliverySystemDescriptor;
class TerrestrialDeliverySystemDescriptor;
#ifndef SWIG
void set(const SatelliteDeliverySystemDescriptor &);
#endif
- struct Polarisation
- {
+ struct Polarisation {
enum {
Horizontal, Vertical, CircularLeft, CircularRight
};
};
- struct Inversion
- {
+ struct Inversion {
enum {
Off, On, Unknown
};
};
- struct FEC
- {
+ struct FEC {
enum {
fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, f3_5, f4_5, f9_10, fNone=15
};
};
- struct System
- {
+ struct System {
enum {
DVB_S, DVB_S2
};
};
- struct Modulation
- {
+ struct Modulation {
enum {
Auto, QPSK, M8PSK, QAM_16
};
};
- struct RollOff // dvb-s2
- {
+ struct RollOff { // dvb-s2
enum {
alpha_0_35, alpha_0_25, alpha_0_20, alpha_auto
};
unsigned int frequency, symbol_rate;
int polarisation, fec, inversion, orbital_position, system, modulation, roll_off;
};
+SWIG_ALLOW_OUTPUT_SIMPLE(eDVBFrontendParametersSatellite);
struct eDVBFrontendParametersCable
{
#ifndef SWIG
void set(const CableDeliverySystemDescriptor &);
#endif
- struct Inversion
- {
+ struct Inversion {
enum {
Off, On, Unknown
};
};
- struct FEC
- {
+ struct FEC {
enum {
fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, fNone=15
};
unsigned int frequency, symbol_rate;
int modulation, inversion, fec_inner;
};
+SWIG_ALLOW_OUTPUT_SIMPLE(eDVBFrontendParametersCable);
struct eDVBFrontendParametersTerrestrial
{
#ifndef SWIG
- void set(const TerrestrialDeliverySystemDescriptor &);
+ void set(const TerrestrialDeliverySystemDescriptor &);
#endif
struct Bandwidth {
enum {
Bw8MHz, Bw7MHz, Bw6MHz, /*Bw5MHz,*/ BwAuto
}; // Bw5Mhz nyi (compatibilty with enigma1)
};
- struct FEC
- {
+ struct FEC {
enum {
f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
};
int hierarchy;
int inversion;
};
+SWIG_ALLOW_OUTPUT_SIMPLE(eDVBFrontendParametersTerrestrial);
#endif
virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &SWIG_OUTPUT, bool exact) const = 0;
virtual RESULT getHash(unsigned long &SWIG_OUTPUT) const = 0;
};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iDVBFrontendParameters>, iDVBFrontendParametersPtr);
#define MAX_DISEQC_LENGTH 16
state_last_instance, /* just one reference to this channel is left */
state_release /* channel is being shut down. */
};
- virtual RESULT getState(int &SWIG_OUTPUT)=0;
+ virtual RESULT getState(int &)=0;
virtual RESULT getCurrentFrontendParameters(ePtr<iDVBFrontendParameters> &)=0;
enum
m_chid_current = eDVBChannelID();
m_channel_state = iDVBChannel::state_idle;
+
if (fe->tune(*m_ch_current))
- {
return nextChannel();
- m_event(evtFail);
- return -EINVAL;
- }
-
+
m_event(evtUpdate);
return 0;
}
return m_channel->getFrontend(fe);
fe = 0;
return -1;
-}
\ No newline at end of file
+}
+
+RESULT eDVBScan::getCurrentTransponder(ePtr<iDVBFrontendParameters> &tp)
+{
+ if (m_ch_current)
+ {
+ tp = m_ch_current;
+ return 0;
+ }
+ tp = 0;
+ return -1;
+}
void getStats(int &transponders_done, int &transponders_total, int &services);
void getLastServiceName(std::string &name);
RESULT getFrontend(ePtr<iDVBFrontend> &);
+ RESULT getCurrentTransponder(ePtr<iDVBFrontendParameters> &);
};
#endif
-from enigma import eComponentScan
+from enigma import eComponentScan, iDVBFrontend
+from Components.NimManager import nimmanager as nimmgr
class ServiceScan:
else:
self.state = self.Error
self.errorcode = errcode
+ self.network.setText("")
+ self.transponder.setText("")
else:
self.text.setText(_("scan in progress - %d %% done!\n%d services found!") % (self.scan.getProgress(), self.foundServices + self.scan.getNumServices()))
+ transponder = self.scan.getCurrentTransponder()
+ network = ""
+ tp_text = ""
+ if transponder:
+ tp_type = transponder.getSystem()
+ if not tp_type[0]:
+ tp_type = tp_type[1]
+ if tp_type == iDVBFrontend.feSatellite:
+ network = _("Satellite")
+ tp = transponder.getDVBS()
+ if not tp[0]:
+ tp = tp[1]
+ orb_pos = tp.orbital_position
+ try:
+ sat_name = str(nimmgr.getSatDescription(orb_pos))
+ except KeyError:
+ sat_name = ""
+ if orb_pos > 1800: # west
+ orb_pos = 3600 - orbpos
+ h = _("W")
+ else:
+ h = _("E")
+ if sat_name.find("%d.%d" % (orb_pos/10, orb_pos%10)) != -1:
+ network = sat_name
+ else:
+ network = ("%s %d.%d %s") % (sat_name, orb_pos / 10, orb_pos % 10, h)
+ tp_text = ("%s %s %d%c / %d / %s") %( { 0 : "DVB-S", 1 : "DVB-S2" }[tp.system],
+ { 0 : "Auto", 1 : "QPSK", 2 : "M8PSK", 3 : "QAM16" }[tp.modulation],
+ tp.frequency/1000,
+ { 0 : 'H', 1 : 'V', 2 : 'L', 3 : 'R' }[tp.polarisation],
+ tp.symbol_rate/1000,
+ { 0 : "AUTO", 1 : "1/2", 2 : "2/3", 3 : "3/4", 4 : "5/6",
+ 5 : "7/8", 6 : "8/9", 7 : "3/5", 8 : "4/5", 9 : "9/10",
+ 15 : "NONE" }[tp.fec] )
+ elif tp_type == iDVBFrontend.feCable:
+ network = _("Cable")
+ tp = transponder.getDVBC()
+ if not tp[0]:
+ tp = tp[1]
+ tp_text = ("DVB-C %s %d / %d / %s") %( { 0 : "AUTO", 1 : "QAM16", 2 : "QAM32", 3 : "QAM64", 4 : "QAM128", 5 : "QAM256" }[tp.modulation],
+ tp.frequency,
+ tp.symbol_rate/1000,
+ { 0 : "AUTO", 1 : "1/2", 2 : "2/3", 3 : "3/4", 4 : "5/6", 5 : "7/8", 6 : "8/9", 15 : "NONE" }[tp.fec_inner] )
+ elif tp_type == iDVBFrontend.feTerrestrial:
+ network = _("Terrestrial")
+ tp = transponder.getDVBT()
+ if not tp[0]:
+ tp = tp[1]
+ tp_text = ("DVB-T %s %d / %d") %( { 0 : "QPSK", 1 : "QAM16", 2 : "QAM64", 3 : "AUTO"}[tp.modulation],
+ tp.frequency,
+ tp.symbol_rate/1000)
+ else:
+ print "unknown transponder type in scanStatusChanged"
+ self.network.setText(network)
+ self.transponder.setText(tp_text)
if self.state == self.Done:
if self.scan.getNumServices() == 1:
self.run += 1
self.execBegin()
- def __init__(self, progressbar, text, servicelist, passNumber, scanList, frontendInfo):
+ def __init__(self, progressbar, text, servicelist, passNumber, scanList, network, transponder, frontendInfo):
self.foundServices = 0
self.progressbar = progressbar
self.text = text
self.passNumber = passNumber
self.scanList = scanList
self.frontendInfo = frontendInfo
+ self.transponder = transponder
+ self.network = network
self.run = 0
def doRun(self):
self["scan_progress"] = ProgressBar()
self["scan_state"] = Label(_("scan state"))
+ self["network"] = Label()
+ self["transponder"] = Label()
+
self["pass"] = Label("")
self["servicelist"] = FIFOList(len=7)
self["FrontendInfo"] = FrontendInfo()
- self["scan"] = CScan(self["scan_progress"], self["scan_state"], self["servicelist"], self["pass"], scanList, self["FrontendInfo"])
+ self["scan"] = CScan(self["scan_progress"], self["scan_state"], self["servicelist"], self["pass"], scanList, self["network"], self["transponder"], self["FrontendInfo"])
self["actions"] = ActionMap(["OkCancelActions"],
{
#include <lib/gdi/gfont.h>
#include <lib/gdi/epng.h>
#include <lib/dvb/db.h>
+#include <lib/dvb/frontendparms.h>
#include <lib/dvb/idvb.h>
#include <lib/dvb/dvb.h>
#include <lib/dvb/frontend.h>
#include <lib/dvb/volume.h>
#include <lib/dvb/sec.h>
#include <lib/dvb/epgcache.h>
-#include <lib/dvb/frontendparms.h>
#include <lib/dvb/dvbtime.h>
#include <lib/dvb/pmt.h>
#include <lib/components/scan.h>