-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":
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
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'), tuning.type)
self.list.append(self.typeOfTuningEntry)
self.createSetup()
def createConfig(self, foo):
+ global tuning
if not tuning:
- global tuning
tuning = ConfigSubsection()
tuning.type = ConfigSelection(
default = "manual_transponder",
ScanSetup.createConfig(self, None)
def tuningSatChanged(self, *parm):
- if tuning.type.value == "predefined_transponder":
- self.updateTransponders()
+ self.updateTransponders()
def updateTransponders(self):
if len(tuning.sat.choices):
<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)