-from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBResourceManagerPtr, iDVBChannelPtr, iDVBFrontendPtr, iDVBFrontend, eDVBFrontendParametersSatellite, eDVBFrontendParameters
+from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBFrontendParametersSatellite, eDVBFrontendParameters
from Screens.Screen import Screen
from Screens.ScanSetup import ScanSetup
from Screens.MessageBox import MessageBox
from Components.MenuList import MenuList
from Components.config import ConfigSatlist, ConfigNothing, ConfigSelection, ConfigSubsection, KEY_LEFT, KEY_RIGHT, getConfigListEntry
+from time import sleep
+
class PositionerSetup(Screen):
skin = """
<screen position="100,100" size="560,400" title="Positioner setup..." >
def __init__(self, session, feid):
self.skin = PositionerSetup.skin
Screen.__init__(self, session)
-
- self.session.nav.stopService()
-
self.feid = feid
+ self.oldref = None
- self.diseqc = Diseqc(self.feid)
- self.tuner = Tuner(self.diseqc.getFrontend())
- self.tuner.tune((0,0,0,0,0,0))
+ if not self.openFrontend():
+ self.oldref = session.nav.getCurrentlyPlayingServiceReference()
+ session.nav.stopService() # try to disable foreground service
+ if not self.openFrontend():
+ if session.pipshown: # try to disable pip
+ session.pipshown = False
+ del session.pip
+ if not self.openFrontend():
+ self.frontend = None # in normal case this should not happen
+ self.getFrontend = None
- #self.session.nav.stopService()
+ self.diseqc = Diseqc(self.frontend)
+ self.tuner = Tuner(self.frontend)
+ self.tuner.tune((0,0,0,0,0,0))
self.createConfig()
self["agc"] = Label()
self["ber"] = Label()
self["lock"] = Label()
- self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, frontendfkt = self.diseqc.getFrontend)
- self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, frontendfkt = self.diseqc.getFrontend)
- self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, frontendfkt = self.diseqc.getFrontend)
- self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, frontendfkt = self.diseqc.getFrontend)
- self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, frontendfkt = self.diseqc.getFrontend)
- self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, frontendfkt = self.diseqc.getFrontend)
- self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, frontendfkt = self.diseqc.getFrontend)
+ self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, frontendfkt = self.getFrontend)
+ self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, frontendfkt = self.getFrontend)
+ self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, frontendfkt = self.getFrontend)
+ self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, frontendfkt = self.getFrontend)
+ self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, frontendfkt = self.getFrontend)
+ self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, frontendfkt = self.getFrontend)
+ self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, frontendfkt = self.getFrontend)
self["frequency"] = Label()
self["symbolrate"] = Label()
self["actions"] = ActionMap(["DirectionActions", "OkCancelActions", "ColorActions"],
{
"ok": self.go,
- "cancel": self.close,
+ "cancel": self.keyCancel,
"up": self.up,
"down": self.down,
"left": self.left,
self.statusTimer.timeout.get().append(self.updateStatus)
self.statusTimer.start(50, False)
+ def restartPrevService(self, yesno):
+ if yesno:
+ if self.frontend:
+ self.frontend = None
+ del self.raw_channel
+ self.session.nav.playService(self.oldref)
+ self.close(None)
+
+ def keyCancel(self):
+ if self.oldref:
+ self.session.openWithCallback(self.restartPrevService, MessageBox, _("Zap back to service before positioner setup?"), MessageBox.TYPE_YESNO)
+ else:
+ self.restartPrevService(False)
+
+ def getFrontend(self):
+ return self.frontend
+
+ def openFrontend(self):
+ res_mgr = eDVBResourceManager.getInstance()
+ if res_mgr:
+ self.raw_channel = res_mgr.allocateRawChannel(self.feid)
+ if self.raw_channel:
+ self.frontend = self.raw_channel.getFrontend(self.frontend)
+ if self.frontend:
+ return True
+ else:
+ print "getFrontend failed"
+ else:
+ print "getRawChannel failed"
+ else:
+ print "getResourceManager instance failed"
+ return False
+
def createConfig(self):
self.positioner_tune = ConfigNothing()
self.positioner_move = ConfigNothing()
self.diseqccommand("store", int(self.positioner_storage.value))
elif entry == "limits":
self.diseqccommand("limitWest")
-
+
def yellowKey(self):
entry = self.getCurrentConfigPath()
if entry == "move":
print "stepping east"
self.diseqccommand("moveEast", 0xFF) # one step
elif entry == "storage":
- print "move to position", (self.positioner_storage.value + 1)
- self.diseqccommand("moveTo", self.positioner_storage.value + 1)
+ print "move to position", int(self.positioner_storage.value)
+ self.diseqccommand("moveTo", int(self.positioner_storage.value))
elif entry == "limits":
self.diseqccommand("limitEast")
-#
+
def blueKey(self):
entry = self.getCurrentConfigPath()
if entry == "move":
def tune(self, transponder):
if transponder is not None:
self.tuner.tune(transponder)
-
+
class Diseqc:
- def __init__(self, feid = 0):
- self.ready = False
- self.feid = feid
- res_mgr = eDVBResourceManagerPtr()
- if eDVBResourceManager.getInstance(res_mgr) == 0:
- self.raw_channel = iDVBChannelPtr()
- if res_mgr.allocateRawChannel(self.raw_channel, self.feid) == 0:
- self.frontend = iDVBFrontendPtr()
- if self.raw_channel.getFrontend(self.frontend) == 0:
- self.ready = True
- else:
- print "getFrontend failed"
- else:
- print "getRawChannel failed"
- else:
- print "getResourceManager instance failed"
-
- def getFrontend(self):
- return self.frontend
-
+ def __init__(self, frontend):
+ self.frontend = frontend
+
def command(self, what, param = 0):
- if self.ready:
+ if self.frontend:
cmd = eDVBDiseqcCommand()
if what == "moveWest":
string = 'e03169' + ("%02x" % param)
string = 'e03167'
else:
string = 'e03160' #positioner stop
+
print "diseqc command:",
print string
-
cmd.setCommandString(string)
self.frontend.sendDiseqc(cmd)
-
+ if string == 'e03160': #positioner stop
+ sleep(0.05)
+ self.frontend.sendDiseqc(cmd) # send 2nd time
+
class Tuner:
def __init__(self, frontend):
self.frontend = frontend
-
+
def tune(self, transponder):
print "tuning to transponder with data", transponder
parm = eDVBFrontendParametersSatellite()
feparm = eDVBFrontendParameters()
feparm.setDVBS(parm, True)
self.lastparm = feparm
- self.frontend.tune(feparm)
-
+ if self.frontend:
+ self.frontend.tune(feparm)
+
def retune(self):
- self.frontend.tune(self.lastparm)
-
+ if self.frontend:
+ self.frontend.tune(self.lastparm)
+
def getTransponderData(self):
- return self.frontend.readTransponderData(True)
+ if self.frontend:
+ return self.frontend.readTransponderData(True)
+ return None
+
+tuning = None
class TunerScreen(ScanSetup):
skin = """
def __init__(self, session, feid):
self.feid = feid
ScanSetup.__init__(self, session)
-
self["introduction"].setText("")
-
+
def createSetup(self):
self.typeOfTuningEntry = None
self.satEntry = None
-
self.list = []
- self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning.type)
+ self.typeOfTuningEntry = getConfigListEntry(_('Tune'), tuning.type)
self.list.append(self.typeOfTuningEntry)
- self.satEntry = getConfigListEntry(_('Satellite'), self.tuning.sat)
+ self.satEntry = getConfigListEntry(_('Satellite'), tuning.sat)
self.list.append(self.satEntry)
- if self.tuning.type.value == "manual_transponder":
+ if tuning.type.value == "manual_transponder":
self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
- elif self.tuning.type.value == "predefined_transponder":
- self.list.append(getConfigListEntry(_("Transponder"), self.tuning.transponder))
+ elif tuning.type.value == "predefined_transponder":
+ self.list.append(getConfigListEntry(_("Transponder"), tuning.transponder))
self["config"].list = self.list
self["config"].l.setList(self.list)
if self["config"].getCurrent() == self.typeOfTuningEntry:
self.createSetup()
elif self["config"].getCurrent() == self.satEntry:
- self.updateTransponders()
self.createSetup()
def createConfig(self, foo):
- self.tuning = ConfigSubsection()
- self.tuning.type = ConfigSelection(
- default = "manual_transponder",
- choices = { "manual_transponder" : _("Manual transponder"),
- "predefined_transponder" : _("Predefined transponder") } )
- self.tuning.sat = ConfigSatlist(list=nimmanager.getRotorSatListForNim(self.feid))
+ global tuning
+ if not tuning:
+ tuning = ConfigSubsection()
+ tuning.type = ConfigSelection(
+ default = "manual_transponder",
+ choices = { "manual_transponder" : _("Manual transponder"),
+ "predefined_transponder" : _("Predefined transponder") } )
+ tuning.sat = ConfigSatlist(list=nimmanager.getRotorSatListForNim(self.feid))
+ tuning.sat.addNotifier(self.tuningSatChanged)
+ self.updateTransponders()
+ TunerScreenConfigCreated = True
ScanSetup.createConfig(self, None)
+
+ def tuningSatChanged(self, *parm):
self.updateTransponders()
def updateTransponders(self):
- if len(self.tuning.sat.choices):
- transponderlist = nimmanager.getTransponders(int(self.tuning.sat.value))
+ if len(tuning.sat.choices):
+ transponderlist = nimmanager.getTransponders(int(tuning.sat.value))
tps = []
cnt=0
for x in transponderlist:
elif x[4] == 6:
fec = "FEC_None"
tps.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
- self.tuning.transponder = ConfigSelection(choices=tps)
+ tuning.transponder = ConfigSelection(choices=tps)
def keyGo(self):
returnvalue = (0, 0, 0, 0, 0, 0)
- satpos = int(self.tuning.sat.value)
- if self.tuning.type.value == "manual_transponder":
+ satpos = int(tuning.sat.value)
+ if tuning.type.value == "manual_transponder":
returnvalue = (
self.scan_sat.frequency.value,
self.scan_sat.symbolrate.value,
self.scan_sat.fec.index,
self.scan_sat.inversion.index,
satpos)
- elif self.tuning.type.value == "predefined_transponder":
- transponder = nimmanager.getTransponders(satpos)[self.tuning.transponder.index]
+ elif tuning.type.value == "predefined_transponder":
+ transponder = nimmanager.getTransponders(satpos)[tuning.transponder.index]
returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, satpos)
self.close(returnvalue)
<screen position="140,165" size="400,100" title="select Slot">
<widget name="nimlist" position="20,10" size="360,75" />
</screen>"""
-
+
def __init__(self, session):
Screen.__init__(self, session)
else:
session.open(MessageBox, _("No tuner is configured for use with a diseqc positioner!"), MessageBox.TYPE_ERROR)
+def PositionerSetupStart(menuid):
+ if menuid == "scan":
+ return [(_("Positioner setup"), PositionerMain)]
+ else:
+ return []
+
def Plugins(**kwargs):
- return PluginDescriptor(name="Positioner setup", description="Setup your positioner", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=PositionerMain)
+ return PluginDescriptor(name=_("Positioner setup"), description="Setup your positioner", where = PluginDescriptor.WHERE_SETUP, fnc=PositionerSetupStart)