From a8e2ae086f201762677d9f926b75285d1c299ab2 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 17 Nov 2008 23:29:39 +0100 Subject: remove superfluous import --- lib/python/Screens/InfoBarGenerics.py | 1 - 1 file changed, 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index cdaa2c1e..eb79c74e 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1312,7 +1312,6 @@ class InfoBarJobman: self.session.openWithCallback(self.JobViewCB, JobView, job) def JobViewCB(self, in_background): - from Screens.TaskView import JobView job_manager.in_background = in_background # depends on InfoBarExtensions -- cgit v1.2.3 From 623abfc754b4a95f79f90cf0498300d16b52f894 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 18 Nov 2008 13:14:46 +0100 Subject: scroll to bottom of output after execution --- lib/python/Screens/Console.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Console.py b/lib/python/Screens/Console.py index b57f2400..c6b156cf 100644 --- a/lib/python/Screens/Console.py +++ b/lib/python/Screens/Console.py @@ -55,6 +55,7 @@ class Console(Screen): str = self["text"].getText() str += _("Execution finished!!"); self["text"].setText(str) + self["text"].lastPage() if self.finishedCallback is not None: self.finishedCallback() if not retval and self.closeOnSuccess: @@ -67,4 +68,4 @@ class Console(Screen): self.container.dataAvail.remove(self.dataAvail) def dataAvail(self, str): - self["text"].setText(self["text"].getText() + str) + self["text"].setText(self["text"].getText() + str) \ No newline at end of file -- cgit v1.2.3 From 60fc8afd61923e8bbf949d04b73491862390b65f Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Thu, 20 Nov 2008 22:54:11 +0100 Subject: fix keymap associations with INFO button --- data/keymap.xml | 2 +- lib/python/Screens/InfoBarGenerics.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/python/Screens') diff --git a/data/keymap.xml b/data/keymap.xml index 6b8b583d..0a0dc867 100644 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -77,7 +77,7 @@ - + diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index eb79c74e..b923340c 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -403,7 +403,7 @@ class InfoBarEPG: self.eventView = None self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", { - "showEventView": (self.openEventView, _("show EPG...")), + "showEventInfo": (self.openEventView, _("show EPG...")), "showEventInfoPlugin": (self.showEventInfoPlugins, _("show single service EPG...")), "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible, }) -- cgit v1.2.3 From a9f7393e1d00eb89b8282aae0ddc4f6da33d9ca1 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 2 Dec 2008 15:16:49 +0100 Subject: add new after record timer event behavior "auto".. and use it as default --- Navigation.py | 4 ++-- RecordTimer.py | 29 ++++++++++++++++++++++++++--- lib/python/Screens/TimerEntry.py | 16 +++++++++++++--- 3 files changed, 41 insertions(+), 8 deletions(-) (limited to 'lib/python/Screens') diff --git a/Navigation.py b/Navigation.py index 42733cb2..715e886b 100644 --- a/Navigation.py +++ b/Navigation.py @@ -11,7 +11,7 @@ import ServiceReference # TODO: remove pNavgation, eNavigation and rewrite this stuff in python. class Navigation: - def __init__(self): + def __init__(self, nextRecordTimerAfterEventActionAuto=False): if NavigationInstance.instance is not None: raise NavigationInstance.instance @@ -33,7 +33,7 @@ class Navigation: clearFPWasTimerWakeup() if getFPWasTimerWakeup(): # sanity check to detect if the FP driver is working correct! print "buggy fp driver detected!!! please update drivers.... ignore timer wakeup!" - elif len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360: + elif nextRecordTimerAfterEventActionAuto and (len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360): if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open RecordTimer.RecordTimerEntry.TryQuitMainloop(False) # start shutdown handling self.SleepTimer = SleepTimer.SleepTimer() diff --git a/RecordTimer.py b/RecordTimer.py index 28b878a1..cac475d6 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -47,6 +47,7 @@ class AFTEREVENT: NONE = 0 STANDBY = 1 DEEPSTANDBY = 2 + AUTO = 3 # please do not translate log messages class RecordTimerEntry(timer.TimerEntry, object): @@ -91,7 +92,7 @@ class RecordTimerEntry(timer.TimerEntry, object): Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop, default_yes = default_yes) ################################################################# - def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False, dirname = None, tags = None): + def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.AUTO, checkOldTimers = False, dirname = None, tags = None): timer.TimerEntry.__init__(self, int(begin), int(end)) if checkOldTimers == True: @@ -361,7 +362,12 @@ def createTimer(xml): disabled = long(xml.getAttribute("disabled") or "0") justplay = long(xml.getAttribute("justplay") or "0") afterevent = str(xml.getAttribute("afterevent") or "nothing") - afterevent = { "nothing": AFTEREVENT.NONE, "standby": AFTEREVENT.STANDBY, "deepstandby": AFTEREVENT.DEEPSTANDBY }[afterevent] + afterevent = { + "nothing": AFTEREVENT.NONE, + "standby": AFTEREVENT.STANDBY, + "deepstandby": AFTEREVENT.DEEPSTANDBY, + "auto": AFTEREVENT.AUTO + }[afterevent] if xml.hasAttribute("eit") and xml.getAttribute("eit") != "None": eit = long(xml.getAttribute("eit")) else: @@ -493,7 +499,12 @@ class RecordTimer(timer.Timer): list.append(' repeated="' + str(int(timer.repeated)) + '"') list.append(' name="' + str(stringToXML(timer.name)) + '"') list.append(' description="' + str(stringToXML(timer.description)) + '"') - list.append(' afterevent="' + str(stringToXML({ AFTEREVENT.NONE: "nothing", AFTEREVENT.STANDBY: "standby", AFTEREVENT.DEEPSTANDBY: "deepstandby" }[timer.afterEvent])) + '"') + list.append(' afterevent="' + str(stringToXML({ + AFTEREVENT.NONE: "nothing", + AFTEREVENT.STANDBY: "standby", + AFTEREVENT.DEEPSTANDBY: "deepstandby", + AFTEREVENT.AUTO: "auto" + }[timer.afterEvent])) + '"') if timer.eit is not None: list.append(' eit="' + str(timer.eit) + '"') if timer.dirname is not None: @@ -538,6 +549,18 @@ class RecordTimer(timer.Timer): return timer.begin return -1 + def isNextRecordAfterEventActionAuto(self): + now = time.time() + t = None + for timer in self.timer_list: + if timer.justplay or timer.begin < now: + continue + if t is None or t.begin == timer.begin: + t = timer + if t.afterEvent == AFTEREVENT.AUTO: + return True + return False + def record(self, entry, ignoreTSC=False, dosave=True): #wird von loadTimer mit dosave=False aufgerufen timersanitycheck = TimerSanityCheck(self.timer_list,entry) if not timersanitycheck.check(): diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index 1774061d..be8b5240 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -46,7 +46,12 @@ class TimerEntry(Screen, ConfigListScreen): def createConfig(self): justplay = self.timer.justplay - afterevent = { AFTEREVENT.NONE: "nothing", AFTEREVENT.DEEPSTANDBY: "deepstandby", AFTEREVENT.STANDBY: "standby"}[self.timer.afterEvent] + afterevent = { + AFTEREVENT.NONE: "nothing", + AFTEREVENT.DEEPSTANDBY: "deepstandby", + AFTEREVENT.STANDBY: "standby", + AFTEREVENT.AUTO: "auto" + }[self.timer.afterEvent] weekday_table = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"] @@ -84,7 +89,7 @@ class TimerEntry(Screen, ConfigListScreen): day[weekday] = 1 self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay]) - self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = afterevent) + self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("auto", _("auto"))], default = afterevent) self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type) self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False) self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False) @@ -250,7 +255,12 @@ class TimerEntry(Screen, ConfigListScreen): self.timer.description = self.timerentry_description.value self.timer.justplay = self.timerentry_justplay.value == "zap" self.timer.resetRepeated() - self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value] + self.timer.afterEvent = { + "nothing": AFTEREVENT.NONE, + "deepstandby": AFTEREVENT.DEEPSTANDBY, + "standby": AFTEREVENT.STANDBY, + "auto": AFTEREVENT.AUTO + }[self.timerentry_afterevent.value] self.timer.service_ref = self.timerentry_service_ref self.timer.tags = self.timerentry_tags -- cgit v1.2.3 From 7e94237a4e4ee40e1dff230d1760dcaaba3d90e8 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 16:08:07 +0100 Subject: use cElementTree instead of minidom for xml parsing (thx to Moritz Venn) --- lib/python/Screens/InfoBarGenerics.py | 6 +-- lib/python/Screens/Menu.py | 71 +++++++++++++++-------------------- lib/python/Screens/Setup.py | 43 +++++++++------------ mytest.py | 26 +++++-------- tests/test_timer.py | 6 +-- 5 files changed, 65 insertions(+), 87 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index b923340c..af29ed4e 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -348,14 +348,14 @@ class InfoBarMenu: def mainMenu(self): print "loading mainmenu XML..." - menu = mdom.childNodes[0] - assert menu.tagName == "menu", "root element in menu must be 'menu'!" + menu = mdom.getroot() + assert menu.tag == "menu", "root element in menu must be 'menu'!" self.session.infobar = self # so we can access the currently active infobar from screens opened from within the mainmenu # at the moment used from the SubserviceSelection - self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu, menu.childNodes) + self.session.openWithCallback(self.mainMenuClosed, MainMenu, menu) def mainMenuClosed(self, *val): self.session.infobar = None diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py index 92039b42..93f23dfb 100644 --- a/lib/python/Screens/Menu.py +++ b/lib/python/Screens/Menu.py @@ -9,12 +9,10 @@ from Components.SystemInfo import SystemInfo from Tools.Directories import resolveFilename, SCOPE_SKIN -import xml.dom.minidom +import xml.etree.cElementTree from Screens.Setup import Setup, getSetupTitle -from Tools import XMLTools - # self.setModeTV() # self.setModeRadio() # self.setModeFile() @@ -22,9 +20,7 @@ from Tools import XMLTools # read the menu -menufile = file(resolveFilename(SCOPE_SKIN, 'menu.xml'), 'r') -mdom = xml.dom.minidom.parseString(menufile.read()) -menufile.close() +mdom = xml.etree.cElementTree.parse(resolveFilename(SCOPE_SKIN, 'menu.xml')) class boundFunction: def __init__(self, fnc, *args): @@ -103,17 +99,17 @@ class Menu(Screen): self.session.openWithCallback(self.menuClosed, Setup, dialog) def addMenu(self, destList, node): - requires = node.getAttribute("requires") + requires = node.get("requires") if requires and not SystemInfo.get(requires, False): return - MenuTitle = _(node.getAttribute("text").encode("UTF-8") or "??") - entryID = node.getAttribute("entryID") or "undefined" - weight = node.getAttribute("weight") or 50 - x = node.getAttribute("flushConfigOnClose") + MenuTitle = _(node.get("text", "??").encode("UTF-8")) + entryID = node.get("entryID", "undefined") + weight = node.get("weight", 50) + x = node.get("flushConfigOnClose") if x: - a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node, node.childNodes) + a = boundFunction(self.session.openWithCallback, self.menuClosedWithConfigFlush, Menu, node) else: - a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node, node.childNodes) + a = boundFunction(self.session.openWithCallback, self.menuClosed, Menu, node) #TODO add check if !empty(node.childNodes) destList.append((MenuTitle, a, entryID, weight)) @@ -126,18 +122,16 @@ class Menu(Screen): self.close(True) def addItem(self, destList, node): - requires = node.getAttribute("requires") + requires = node.get("requires") if requires and not SystemInfo.get(requires, False): return - item_text = node.getAttribute("text").encode("UTF-8") - entryID = node.getAttribute("entryID") or "undefined" - weight = node.getAttribute("weight") or 50 - for x in node.childNodes: - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'screen': - module = x.getAttribute("module") or None - screen = x.getAttribute("screen") or None + item_text = node.get("text", "").encode("UTF-8") + entryID = node.get("entryID", "undefined") + weight = node.get("weight", 50) + for x in node: + if x.tag == 'screen': + module = x.get("module") + screen = x.get("screen") if screen is None: screen = module @@ -150,16 +144,16 @@ class Menu(Screen): # check for arguments. they will be appended to the # openDialog call - args = XMLTools.mergeText(x.childNodes) + args = x.text or "" screen += ", " + args destList.append((_(item_text or "??"), boundFunction(self.runScreen, (module, screen)), entryID, weight)) return - elif x.tagName == 'code': - destList.append((_(item_text or "??"), boundFunction(self.execText, XMLTools.mergeText(x.childNodes)), entryID, weight)) + elif x.tag == 'code': + destList.append((_(item_text or "??"), boundFunction(self.execText, x.text), entryID, weight)) return - elif x.tagName == 'setup': - id = x.getAttribute("id") + elif x.tag == 'setup': + id = x.get("id") if item_text == "": item_text = _(getSetupTitle(id)) + "..." else: @@ -169,26 +163,23 @@ class Menu(Screen): destList.append((item_text, self.nothing, entryID, weight)) - def __init__(self, session, parent, childNode): + def __init__(self, session, parent): Screen.__init__(self, session) list = [] menuID = None - for x in childNode: #walk through the actual nodelist - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'item': - item_level = int(x.getAttribute("level") or "0") - + for x in parent: #walk through the actual nodelist + if x.tag == 'item': + item_level = int(x.get("level", 0)) if item_level <= config.usage.setup_level.index: self.addItem(list, x) count += 1 - elif x.tagName == 'menu': + elif x.tag == 'menu': self.addMenu(list, x) count += 1 - elif x.tagName == "id": - menuID = x.getAttribute("val") + elif x.tag == "id": + menuID = x.get("val") count = 0 if menuID is not None: @@ -237,10 +228,10 @@ class Menu(Screen): "9": self.keyNumberGlobal }) - a = parent.getAttribute("title").encode("UTF-8") or None + a = parent.get("title", "").encode("UTF-8") or None a = a and _(a) if a is None: - a = _(parent.getAttribute("text").encode("UTF-8")) + a = _(parent.get("text", "").encode("UTF-8")) self["title"] = StaticText(a) self.menu_title = a diff --git a/lib/python/Screens/Setup.py b/lib/python/Screens/Setup.py index 3ff0b76e..35918b5b 100644 --- a/lib/python/Screens/Setup.py +++ b/lib/python/Screens/Setup.py @@ -6,8 +6,7 @@ from Components.ConfigList import ConfigListScreen from Components.Label import Label from Components.Pixmap import Pixmap -import xml.dom.minidom -from Tools import XMLTools +import xml.etree.cElementTree # FIXME: use resolveFile! # read the setupmenu @@ -17,7 +16,7 @@ try: except: # if not found in the current path, we use the global datadir-path setupfile = file('/usr/share/enigma2/setup.xml', 'r') -setupdom = xml.dom.minidom.parseString(setupfile.read()) +setupdom = xml.etree.cElementTree.parse(setupfile) setupfile.close() class SetupSummary(Screen): @@ -63,16 +62,12 @@ class Setup(ConfigListScreen, Screen): self["config"].setList(list) def refill(self, list): - xmldata = setupdom.childNodes[0] - entries = xmldata.childNodes - for x in entries: #walk through the actual nodelist - if x.nodeType != xml.dom.minidom.Element.nodeType: + xmldata = setupdom.getroot() + for x in xmldata.findall("setup"): + if x.get("key") != self.setup: continue - elif x.tagName == 'setup': - if x.getAttribute("key") != self.setup: - continue - self.addItems(list, x.childNodes); - self.setup_title = x.getAttribute("title").encode("UTF-8") + self.addItems(list, x); + self.setup_title = x.get("title", "").encode("UTF-8") def __init__(self, session, setup): Screen.__init__(self, session) @@ -118,12 +113,10 @@ class Setup(ConfigListScreen, Screen): def createSummary(self): return SetupSummary - def addItems(self, list, childNode): - for x in childNode: - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'item': - item_level = int(x.getAttribute("level") or "0") + def addItems(self, list, parentNode): + for x in parentNode: + if x.tag == 'item': + item_level = int(x.get("level", 0)) if not self.levelChanged in config.usage.setup_level.notifiers: config.usage.setup_level.notifiers.append(self.levelChanged) @@ -132,12 +125,12 @@ class Setup(ConfigListScreen, Screen): if item_level > config.usage.setup_level.index: continue - requires = x.getAttribute("requires") + requires = x.get("requires") if requires and not SystemInfo.get(requires, False): continue; - item_text = _(x.getAttribute("text").encode("UTF-8") or "??") - b = eval(XMLTools.mergeText(x.childNodes)); + item_text = _(x.get("text", "??").encode("UTF-8")) + b = eval(x.text or ""); if b == "": continue #add to configlist @@ -148,8 +141,8 @@ class Setup(ConfigListScreen, Screen): list.append( (item_text, item) ) def getSetupTitle(id): - xmldata = setupdom.childNodes[0].childNodes - for x in XMLTools.elementsWithTag(xmldata, "setup"): - if x.getAttribute("key") == id: - return x.getAttribute("title").encode("UTF-8") + xmldata = setupdom.getroot() + for x in xmldata.findall("setup"): + if x.get("key") == id: + return x.get("title", "").encode("UTF-8") raise "unknown setup id '%s'!" % repr(id) diff --git a/mytest.py b/mytest.py index 886efab2..014f94c9 100644 --- a/mytest.py +++ b/mytest.py @@ -321,7 +321,6 @@ class Session: profile("Standby,PowerKey") import Screens.Standby from Screens.Menu import MainMenu, mdom -import xml.dom.minidom from GlobalActions import globalActionMap class PowerKey: @@ -350,21 +349,16 @@ class PowerKey: self.shutdown() elif action == "show_menu": print "Show shutdown Menu" - menu = mdom.childNodes[0] - for x in menu.childNodes: - if x.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif x.tagName == 'menu': - for y in x.childNodes: - if y.nodeType != xml.dom.minidom.Element.nodeType: - continue - elif y.tagName == 'id': - id = y.getAttribute("val") - if id and id == "shutdown": - self.session.infobar = self - menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x, x.childNodes) - menu_screen.setTitle(_("Standby / Restart")) - return + root = mdom.getroot() + for x in root.findall("menu"): + y = x.find("id") + if y is not None: + id = y.get("val") + if id and id == "shutdown": + self.session.infobar = self + menu_screen = self.session.openWithCallback(self.MenuClosed, MainMenu, x) + menu_screen.setTitle(_("Standby / Restart")) + return def powerdown(self): self.standbyblocked = 0 diff --git a/tests/test_timer.py b/tests/test_timer.py index 565a838b..ea8b0bdb 100644 --- a/tests/test_timer.py +++ b/tests/test_timer.py @@ -24,10 +24,10 @@ def test_timer(repeat = 0, timer_start = 3600, timer_length = 1000, sim_length = # generate a timer to test - import xml.dom.minidom + import xml.etree.cElementTree import RecordTimer - timer = RecordTimer.createTimer(xml.dom.minidom.parseString( + timer = RecordTimer.createTimer(xml.etree.cElementTree.fromstring( """ """ % (at + timer_start, at + timer_start + timer_length, repeat) - ).childNodes[0]) + )) t.record(timer) -- cgit v1.2.3 From cc53ef67c6cfb594f1d30d1367210c0d3bc41d15 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 17:20:48 +0100 Subject: show timer name in dialog when asking to remove it --- lib/python/Screens/TimerEdit.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index aae345db..18ab2b79 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -199,9 +199,11 @@ class TimerEditList(Screen): self.updateState() def removeTimerQuestion(self): - if not self["timerlist"].getCurrent(): + cur = self["timerlist"].getCurrent() + if not cur: return - self.session.openWithCallback(self.removeTimer, MessageBox, _("Really delete this timer?")) + + self.session.openWithCallback(self.removeTimer, MessageBox, _("Do you really want to delete %s?") % (cur.name)) def removeTimer(self, result): if not result: -- cgit v1.2.3 From 2e5c13aebb389a6d74e4130658ccee6a863d01f6 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 3 Dec 2008 17:40:25 +0100 Subject: add possibility to change start/end time in timer edit with Vol/Bouquet +/- (thx to Moritz Venn) --- lib/python/Components/config.py | 28 ++++++++++++++++++++++++++++ lib/python/Screens/TimerEntry.py | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 58 insertions(+), 3 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py index 4d57bbb9..d79337ba 100755 --- a/lib/python/Components/config.py +++ b/lib/python/Components/config.py @@ -604,6 +604,34 @@ class ConfigClock(ConfigSequence): t = time.localtime(default) ConfigSequence.__init__(self, seperator = ":", limits = [(0,23),(0,59)], default = [t.tm_hour, t.tm_min]) + def increment(self): + # Check if Minutes maxed out + if self._value[1] == 59: + # Check if Hours not maxed out + if self._value[0] < 23: + # Increment Hour, reset Minutes to 0 + self._value[0] += 1 + self._value[1] = 0 + else: + # Increment Minutes + self._value[1] += 1 + # Trigger change + self.changed() + + def decrement(self): + # Check if Minutes is minimum + if self._value[1] == 0: + # Check if Hour is greater than 0 + if self._value[0] > 0: + # Decrement Hour, set Minutes to 59 + self._value[0] -= 1 + self._value[1] = 59 + else: + # Decrement Minutes + self._value[1] -= 1 + # Trigger change + self.changed() + class ConfigInteger(ConfigSequence): def __init__(self, default, limits = (0, 9999999999)): ConfigSequence.__init__(self, seperator = ":", limits = [limits], default = default) diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index be8b5240..0544eff1 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -32,11 +32,15 @@ class TimerEntry(Screen, ConfigListScreen): self.createConfig() - self["actions"] = NumberActionMap(["SetupActions"], + self["actions"] = NumberActionMap(["SetupActions", "GlobalActions", "PiPSetupActions"], { "ok": self.keySelect, "save": self.keyGo, "cancel": self.keyCancel, + "volumeUp": self.incrementStart, + "volumeDown": self.decrementStart, + "size+": self.incrementEnd, + "size-": self.decrementEnd }, -2) self.list = [] @@ -160,9 +164,14 @@ class TimerEntry(Screen, ConfigListScreen): self.entryDate = getConfigListEntry(_("Date"), self.timerentry_date) if self.timerentry_type.value == "once": self.list.append(self.entryDate) - self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime)) + + self.entryStartTime = getConfigListEntry(_("StartTime"), self.timerentry_starttime) + self.list.append(self.entryStartTime) if self.timerentry_justplay.value != "zap": - self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime)) + self.entryEndTime = getConfigListEntry(_("EndTime"), self.timerentry_endtime) + self.list.append(self.entryEndTime) + else: + self.entryEndTime = None self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service) self.list.append(self.channelEntry) @@ -319,6 +328,24 @@ class TimerEntry(Screen, ConfigListScreen): self.saveTimer() self.close((True, self.timer)) + def incrementStart(self): + self.timerentry_starttime.increment() + self["config"].invalidate(self.entryStartTime) + + def decrementStart(self): + self.timerentry_starttime.decrement() + self["config"].invalidate(self.entryStartTime) + + def incrementEnd(self): + if self.entryEndTime is not None: + self.timerentry_endtime.increment() + self["config"].invalidate(self.entryEndTime) + + def decrementEnd(self): + if self.entryEndTime is not None: + self.timerentry_endtime.decrement() + self["config"].invalidate(self.entryEndTime) + def subserviceSelected(self, service): if not service is None: self.timer.service_ref = ServiceReference(service[1]) -- cgit v1.2.3 From a0ae92efcfeea6d81f077be4b5423b524f59b131 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Wed, 10 Dec 2008 12:52:28 +0100 Subject: enable dream keyboard --- lib/python/Screens/Wizard.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) mode change 100644 => 100755 lib/python/Screens/Wizard.py (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py old mode 100644 new mode 100755 index 23d6253a..feba8ac2 --- a/lib/python/Screens/Wizard.py +++ b/lib/python/Screens/Wizard.py @@ -3,7 +3,8 @@ from Screen import Screen import string from Screens.HelpMenu import HelpableScreen -from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_DELETE, KEY_BACKSPACE +from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS + from Components.Label import Label from Components.Slider import Slider from Components.ActionMap import NumberActionMap @@ -215,8 +216,9 @@ class Wizard(Screen): self.disableKeys = False - self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions"], + self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions"], { + "gotAsciiCode": self.keyGotAscii, "ok": self.ok, "back": self.back, "left": self.left, @@ -368,6 +370,10 @@ class Wizard(Screen): def keyNumberGlobal(self, number): if (self.wizard[self.currStep]["config"]["screen"] != None): self.configInstance.keyNumberGlobal(number) + + def keyGotAscii(self): + if (self.wizard[self.currStep]["config"]["screen"] != None): + self["config"].handleKey(KEY_ASCII) def left(self): self.resetCounter() -- cgit v1.2.3 From f2f6bf14c7a92410a6484f050837febd6985d401 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 12 Dec 2008 12:59:41 +0100 Subject: cleanup code --- lib/python/Screens/ScanSetup.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index 608dcb2d..464c701a 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -487,9 +487,9 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): ttype = frontendData.get("tuner_type", "UNKNOWN") if ttype == "DVB-S": defaultSat["system"] = {"DVB-S": "dvb-s", "DVB-S2": "dvb-s2"}[frontendData.get("system", "DVB-S")] - defaultSat["frequency"] = int(frontendData.get("frequency", 0) / 1000) + defaultSat["frequency"] = frontendData.get("frequency", 0) / 1000 defaultSat["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")] - defaultSat["symbolrate"] = int(frontendData.get("symbol_rate", 0) / 1000) + defaultSat["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000 defaultSat["polarization"] = {"HORIZONTAL": "horizontal", "VERTICAL": "vertical", "CIRCULAR_LEFT": "circular_left", "CIRCULAR_RIGHT": "circular_right", "UNKNOWN": None}[frontendData.get("polarization", "HORIZONTAL")] if frontendData.get("system", "DVB-S") == "DVB-S2": @@ -504,8 +504,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): defaultSat["modulation"] = {"QPSK": "qpsk", "8PSK": "8psk"}[frontendData.get("modulation", "QPSK")] defaultSat["orbpos"] = frontendData.get("orbital_position", 0) elif ttype == "DVB-C": - defaultCab["frequency"] = int(frontendData.get("frequency", 0) / 1000) - defaultCab["symbolrate"] = int(frontendData.get("symbol_rate", 0) / 1000) + defaultCab["frequency"] = frontendData.get("frequency", 0) / 1000 + defaultCab["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000 defaultCab["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")] defaultCab["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_NONE": "none"}[frontendData.get("fec_inner", "FEC_AUTO")] defaultCab["modulation"] = {"QAM_AUTO": "auto", "QAM_16": "16qam", "QAM_32": "32qam", "QAM_64": "64qam", "QAM_128": "128qam", "QAM_256": "256qam"}[frontendData.get("modulation", "QAM_16")] @@ -577,7 +577,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): self.scan_satselection = [] for slot in nimmanager.nim_slots: if slot.isCompatible("DVB-S"): - self.scan_satselection.append(getConfigSatlist(int(defaultSat["orbpos"]), self.satList[slot.slot])) + self.scan_satselection.append(getConfigSatlist(defaultSat["orbpos"], self.satList[slot.slot])) else: self.scan_satselection.append(None) @@ -621,9 +621,9 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): parm.polarisation = polarisation parm.fec = self.fecmap[fec] parm.inversion = inversion - parm.orbital_position = int(orbital_position) - parm.rolloff = int(rolloff) - parm.pilot = int(pilot) + parm.orbital_position = orbital_position + parm.rolloff = rolloff + parm.pilot = pilot tlist.append(parm) def addCabTransponder(self, tlist, frequency, symbol_rate, modulation, fec, inversion): -- cgit v1.2.3 From b833353b5285a547eb18c079aa860c9ee2765d6e Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 13 Dec 2008 01:33:05 +0100 Subject: add possibility to set manual lnb priority (only in advanced sat config) range 0..64 to decrease priorities (this is lower as all auto given priorities) range 14000..14064 this is higher than auto given rotor priorities range 19000..19064 this is higher than each auto given priorities --- lib/dvb/sec.cpp | 28 ++++++++++++++++++++++++---- lib/dvb/sec.h | 5 ++++- lib/python/Components/NimManager.py | 10 ++++++++++ lib/python/Screens/Satconfig.py | 1 + 4 files changed, 39 insertions(+), 5 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 751a5453..1022b955 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -140,7 +140,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite { bool rotor=false; eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx]; - if ( lnb_param.slot_mask & slot_id ) // lnb for correct tuner? + if ( lnb_param.m_slot_mask & slot_id ) // lnb for correct tuner? { int ret = 0; eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters; @@ -297,6 +297,9 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite ret=0; } + if (ret && lnb_param.m_prio != -1) + ret = lnb_param.m_prio; + eSecDebugNoSimulate("ret %d, score old %d", ret, score); if (ret > score) { @@ -309,7 +312,12 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite } } if (score && satcount) - score -= (satcount-1); + { + if (score > (satcount-1)) + score -= (satcount-1); + else + score = 1; // min score + } if (score && direct_connected) score += 5; // increase score for tuners with direct sat connection eSecDebugNoSimulate("final score %d", score); @@ -963,7 +971,8 @@ RESULT eDVBSatelliteEquipmentControl::clear() for (int i=0; i <= m_lnbidx; ++i) { m_lnbs[i].m_satellites.clear(); - m_lnbs[i].slot_mask = 0; + m_lnbs[i].m_slot_mask = 0; + m_lnbs[i].m_prio = -1; // auto } m_lnbidx=-1; @@ -1021,7 +1030,7 @@ RESULT eDVBSatelliteEquipmentControl::setLNBSlotMask(int slotmask) { eSecDebug("eDVBSatelliteEquipmentControl::setLNBSlotMask(%d)", slotmask); if ( currentLNBValid() ) - m_lnbs[m_lnbidx].slot_mask = slotmask; + m_lnbs[m_lnbidx].m_slot_mask = slotmask; else return -ENOENT; return 0; @@ -1067,6 +1076,17 @@ RESULT eDVBSatelliteEquipmentControl::setLNBIncreasedVoltage(bool onoff) return 0; } +RESULT eDVBSatelliteEquipmentControl::setLNBPrio(int prio) +{ + eSecDebug("eDVBSatelliteEquipmentControl::setLNBPrio(%d)", prio); + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_prio = prio; + else + return -ENOENT; + return 0; +} + + /* DiSEqC Specific Parameters */ RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode) { diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h index 27dcedd5..2efd0b49 100644 --- a/lib/dvb/sec.h +++ b/lib/dvb/sec.h @@ -231,7 +231,7 @@ public: #ifndef SWIG t_12V_relais_state m_12V_relais_state; // 12V relais output on/off - __u8 slot_mask; // useable by slot ( 1 | 2 | 4...) + int m_slot_mask; // useable by slot ( 1 | 2 | 4...) unsigned int m_lof_hi, // for 2 band universal lnb 10600 Mhz (high band offset frequency) m_lof_lo, // for 2 band universal lnb 9750 Mhz (low band offset frequency) @@ -242,6 +242,8 @@ public: std::map m_satellites; eDVBSatelliteDiseqcParameters m_diseqc_parameters; eDVBSatelliteRotorParameters m_rotor_parameters; + + int m_prio; // to override automatic tuner management ... -1 is Auto #endif }; @@ -304,6 +306,7 @@ public: RESULT setLNBLOFH(int lofh); RESULT setLNBThreshold(int threshold); RESULT setLNBIncreasedVoltage(bool onoff); + RESULT setLNBPrio(int prio); /* DiSEqC Specific Parameters */ RESULT setDiSEqCMode(int diseqcmode); RESULT setToneburst(int toneburst); diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index edd3bbbb..168962e9 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -381,6 +381,8 @@ class SecConfigure: sec.setLNBSlotMask(tunermask) + sec.setLNBPrio(int(currLnb.prio.value)) + # finally add the orbital positions for y in lnbSat[x]: self.addSatellite(sec, y) @@ -1026,6 +1028,14 @@ def InitNimManager(nimmgr): nim.advanced.lnb[x].fastTurningBegin = ConfigDateTime(default=mktime(btime.timetuple()), formatstring = _("%H:%M"), increment = 600) etime = datetime(1970, 1, 1, 19, 0); nim.advanced.lnb[x].fastTurningEnd = ConfigDateTime(default=mktime(etime.timetuple()), formatstring = _("%H:%M"), increment = 600) + prio_list = [ ("-1", _("Auto")) ] + for prio in range(65): + prio_list.append((str(prio), str(prio))) + for prio in range(14000,14065): + prio_list.append((str(prio), str(prio))) + for prio in range(19000,19065): + prio_list.append((str(prio), str(prio))) + nim.advanced.lnb[x].prio = ConfigSelection(default="-1", choices=prio_list) elif slot.isCompatible("DVB-C"): nim.configMode = ConfigSelection( choices = { diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 6489f28f..5628926f 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -283,6 +283,7 @@ class NimSetup(Screen, ConfigListScreen): self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold)) # self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v)) self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage)) + self.list.append(getConfigListEntry(_("Priority"), currLnb.prio)) def fillAdvancedList(self): self.list = [ ] -- cgit v1.2.3 From 216dbbfd18a36835b8a48d2f2e1e1ce2c65c8f14 Mon Sep 17 00:00:00 2001 From: Stefan Pluecken Date: Mon, 24 Nov 2008 22:42:42 +0100 Subject: catch up DiseqcTest development --- configure.ac | 1 + lib/dvb/db.cpp | 73 ++++--- lib/python/Components/Makefile.am | 2 +- lib/python/Components/Sources/Progress.py | 7 + lib/python/Components/TuneTest.py | 189 ++++++++++++++++ .../Plugins/SystemPlugins/DiseqcTester/Makefile.am | 5 + .../Plugins/SystemPlugins/DiseqcTester/__init__.py | 0 .../Plugins/SystemPlugins/DiseqcTester/plugin.py | 239 +++++++++++++++++++++ lib/python/Plugins/SystemPlugins/Makefile.am | 2 +- .../Plugins/SystemPlugins/Satfinder/plugin.py | 27 +-- lib/python/Screens/Satconfig.py | 88 ++++---- 11 files changed, 533 insertions(+), 100 deletions(-) create mode 100644 lib/python/Components/TuneTest.py create mode 100644 lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile.am create mode 100644 lib/python/Plugins/SystemPlugins/DiseqcTester/__init__.py create mode 100644 lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py (limited to 'lib/python/Screens') diff --git a/configure.ac b/configure.ac index 7aebe25f..719baa11 100644 --- a/configure.ac +++ b/configure.ac @@ -120,6 +120,7 @@ lib/python/Plugins/SystemPlugins/SkinSelector/Makefile lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/Makefile lib/python/Plugins/SystemPlugins/Videomode/Makefile lib/python/Plugins/SystemPlugins/VideoTune/Makefile +lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile lib/python/Plugins/DemoPlugins/Makefile lib/python/Plugins/DemoPlugins/TestPlugin/Makefile lib/python/Plugins/Extensions/Makefile diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 44191586..6f30253a 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -786,7 +786,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje return Py_False; } int tmp, *dest = NULL, - modulation, system, freq, sr, pol, fec, inv, pilot, rolloff; + modulation, system, freq, sr, pol, fec, inv, pilot, rolloff, tsid, onid; char *end_ptr; const Attribute *at; std::string name; @@ -851,6 +851,9 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje inv = 2; // AUTO default pilot = 2; // AUTO default rolloff = 0; // alpha 0.35 + tsid = -1; + onid = -1; + for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it) { // eDebug("\t\tattr: %s", at->name().c_str()); @@ -865,6 +868,8 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje else if (name == "inversion") dest = &inv; else if (name == "rolloff") dest = &rolloff; else if (name == "pilot") dest = &pilot; + else if (name == "tsid") dest = &tsid; + else if (name == "onid") dest = &onid; if (dest) { tmp = strtol(at->value().c_str(), &end_ptr, 10); @@ -874,7 +879,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje } if (freq && sr && pol != -1) { - tuple = PyTuple_New(10); + tuple = PyTuple_New(12); PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(0)); PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq)); PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(sr)); @@ -885,6 +890,8 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong(inv)); PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong(rolloff)); PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong(pilot)); + PyTuple_SET_ITEM(tuple, 10, PyInt_FromLong(tsid)); + PyTuple_SET_ITEM(tuple, 11, PyInt_FromLong(onid)); PyList_Append(tplist, tuple); Py_DECREF(tuple); } @@ -1497,7 +1504,7 @@ int eDVBDBQueryBase::compareLessEqual(const eServiceReferenceDVB &a, const eServ { ePtr a_service, b_service; int sortmode = m_query ? m_query->m_sort : eDVBChannelQuery::tName; - + if ((sortmode == eDVBChannelQuery::tName) || (sortmode == eDVBChannelQuery::tProvider)) { if (a.name.empty() && m_db->getService(a, a_service)) @@ -1505,7 +1512,7 @@ int eDVBDBQueryBase::compareLessEqual(const eServiceReferenceDVB &a, const eServ if (b.name.empty() && m_db->getService(b, b_service)) return 1; } - + switch (sortmode) { case eDVBChannelQuery::tName: @@ -1747,10 +1754,10 @@ static int decodeType(const std::string &type) RESULT parseExpression(ePtr &res, std::list::const_iterator begin, std::list::const_iterator end) { std::list::const_iterator end_of_exp; - + if (begin == end) return 0; - + if (*begin == "(") { end_of_exp = begin; @@ -1759,36 +1766,36 @@ RESULT parseExpression(ePtr &res, std::list::cons break; else ++end_of_exp; - + if (end_of_exp == end) { eDebug("expression parse: end of expression while searching for closing brace"); return -1; } - + ++begin; // begin..end_of_exp int r = parseExpression(res, begin, end_of_exp); if (r) return r; ++end_of_exp; - + /* we had only one sub expression */ if (end_of_exp == end) { // eDebug("only one sub expression"); return 0; } - + /* otherwise we have an operator here.. */ - + ePtr r2 = res; res = new eDVBChannelQuery(); res->m_sort = 0; res->m_p1 = r2; res->m_inverse = 0; r2 = 0; - + if (*end_of_exp == "||") res->m_type = eDVBChannelQuery::tOR; else if (*end_of_exp == "&&") @@ -1799,18 +1806,18 @@ RESULT parseExpression(ePtr &res, std::list::cons res = 0; return 1; } - + ++end_of_exp; - + return parseExpression(res->m_p2, end_of_exp, end); } - + // "begin" "end" std::string type, op, val; - + res = new eDVBChannelQuery(); res->m_sort = 0; - + int cnt = 0; while (begin != end) { @@ -1832,23 +1839,23 @@ RESULT parseExpression(ePtr &res, std::list::cons ++begin; ++cnt; } - + if (cnt != 3) { eDebug("malformed query: missing stuff"); res = 0; return 1; } - + res->m_type = decodeType(type); - + if (res->m_type == -1) { eDebug("malformed query: invalid type %s", type.c_str()); res = 0; return 1; } - + if (op == "==") res->m_inverse = 0; else if (op == "!=") @@ -1859,7 +1866,7 @@ RESULT parseExpression(ePtr &res, std::list::cons res = 0; return 1; } - + res->m_string = val; if (res->m_type == eDVBChannelQuery::tChannelID) @@ -1879,7 +1886,7 @@ RESULT parseExpression(ePtr &res, std::list::cons RESULT eDVBChannelQuery::compile(ePtr &res, std::string query) { std::list tokens; - + std::string current_token; std::string bouquet_name; @@ -1891,34 +1898,34 @@ RESULT eDVBChannelQuery::compile(ePtr &res, std::string query) { int c = (i < query.size()) ? query[i] : ' '; ++i; - + int issplit = !!strchr(splitchars, c); int isaln = isalnum(c); int iswhite = c == ' '; int isquot = c == '\"'; - + if (quotemode) { iswhite = issplit = 0; isaln = lastalnum; } - + if (issplit || iswhite || isquot || lastsplit || (lastalnum != isaln)) { if (current_token.size()) tokens.push_back(current_token); current_token.clear(); } - + if (!(iswhite || isquot)) current_token += c; - + if (isquot) quotemode = !quotemode; lastsplit = issplit; lastalnum = isaln; } - + // for (std::list::const_iterator a(tokens.begin()); a != tokens.end(); ++a) // { // printf("%s\n", a->c_str()); @@ -1970,12 +1977,12 @@ RESULT eDVBChannelQuery::compile(ePtr &res, std::string query) res = 0; return -1; } - + // eDebug("sort by %d", sort); - + /* now we recursivly parse that. */ int r = parseExpression(res, tokens.begin(), tokens.end()); - + /* we have an empty (but valid!) expression */ if (!r && !res) { @@ -1983,7 +1990,7 @@ RESULT eDVBChannelQuery::compile(ePtr &res, std::string query) res->m_inverse = 0; res->m_type = eDVBChannelQuery::tAny; } - + if (res) { res->m_sort = sort; diff --git a/lib/python/Components/Makefile.am b/lib/python/Components/Makefile.am index 9c04701b..67cec18d 100644 --- a/lib/python/Components/Makefile.am +++ b/lib/python/Components/Makefile.am @@ -18,4 +18,4 @@ install_PYTHON = \ MultiContent.py MediaPlayer.py TunerInfo.py VideoWindow.py ChoiceList.py \ Element.py Playlist.py ParentalControl.py ParentalControlList.py \ Ipkg.py SelectionList.py Scanner.py SystemInfo.py DreamInfoHandler.py \ - Task.py language_cache.py Console.py ResourceManager.py + Task.py language_cache.py Console.py ResourceManager.py TuneTest.py diff --git a/lib/python/Components/Sources/Progress.py b/lib/python/Components/Sources/Progress.py index b96065b3..d57a6179 100644 --- a/lib/python/Components/Sources/Progress.py +++ b/lib/python/Components/Sources/Progress.py @@ -12,5 +12,12 @@ class Progress(Source): def setValue(self, value): self.__value = value self.changed((self.CHANGED_ALL,)) + + def setRange(self, range = 100): + self.range = range + self.changed((self.CHANGED_ALL,)) + + def getRange(self): + return self.range value = property(getValue, setValue) diff --git a/lib/python/Components/TuneTest.py b/lib/python/Components/TuneTest.py new file mode 100644 index 00000000..7b087b98 --- /dev/null +++ b/lib/python/Components/TuneTest.py @@ -0,0 +1,189 @@ +from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParameters, eDVBResourceManager, eTimer + +class Tuner: + def __init__(self, frontend): + self.frontend = frontend + + # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, system, modulation) + # 0 1 2 3 4 5 6 7 + def tune(self, transponder): + if self.frontend: + print "tuning to transponder with data", transponder + parm = eDVBFrontendParametersSatellite() + parm.frequency = transponder[0] * 1000 + parm.symbol_rate = transponder[1] * 1000 + parm.polarisation = transponder[2] + parm.fec = transponder[3] + parm.inversion = transponder[4] + parm.orbital_position = transponder[5] + parm.system = 0 # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2) + parm.modulation = 1 # FIXMEE !! HARDCODED QPSK + feparm = eDVBFrontendParameters() + feparm.setDVBS(parm) + self.lastparm = feparm + self.frontend.tune(feparm) + + def retune(self): + if self.frontend: + self.frontend.tune(self.lastparm) + +# tunes a list of transponders and checks, if they lock and optionally checks the onid/tsid combination +# 1) add transponders with addTransponder() +# 2) call run() +# 3) finishedChecking() is called, when the run is finished +class TuneTest: + def __init__(self, feid, stopOnSuccess = False, stopOnError = False): + self.stopOnSuccess = stopOnSuccess + self.stopOnError = stopOnError + self.feid = feid + self.transponderlist = [] + self.currTuned = None + print "TuneTest for feid %d" % self.feid + if not self.openFrontend(): + self.oldref = self.session.nav.getCurrentlyPlayingServiceReference() + self.session.nav.stopService() # try to disable foreground service + if not self.openFrontend(): + if self.session.pipshown: # try to disable pip + self.session.pipshown = False + del self.session.pip + if not self.openFrontend(): + self.frontend = None # in normal case this should not happen + self.tuner = Tuner(self.frontend) + self.timer = eTimer() + self.timer.callback.append(self.updateStatus) + + def updateStatus(self): + dict = {} + self.frontend.getFrontendStatus(dict) + print "status:", dict + + stop = False + + if dict["tuner_state"] == "TUNING": + self.timer.start(100, True) + self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_TUNING, self.currTuned)) + elif self.checkPIDs and self.pidStatus == self.INTERNAL_PID_STATUS_NOOP: + if dict["tuner_state"] == "LOCKED": + print "acquiring TSID/ONID" + # TODO start getting TSID/ONID + self.pidStatus = self.INTERNAL_PID_STATUS_WAITING + else: + self.pidStatus = self.INTERNAL_PID_STATUS_FAILED + elif self.checkPIDs and self.pidStatus == self.INTERNAL_PID_STATUS_WAITING: + print "waiting for pids" + else: + if dict["tuner_state"] == "LOSTLOCK" or dict["tuner_state"] == "FAILED": + self.tuningtransponder = self.nextTransponder() + self.failedTune.append([self.currTuned, self.oldTuned, "tune_failed"]) + if self.stopOnError == True: + stop = True + elif dict["tuner_state"] == "LOCKED": + pidsFailed = False + if self.checkPIDs: + tsid = 0 # TODO read values + onid = 0 # TODO read values + if tsid != self.currTuned[8] or onid != self.currTuned[9]: + self.failedTune.append([self.currTuned, self.oldTuned, "pids_failed"]) + pidsFailes = True + elif not self.checkPIDs or (self.checkPids and not pidsFailed): + self.successfullyTune.append([self.currTuned, self.oldTuned]) + if self.stopOnSuccess == True: + stop = True + self.tuningtransponder = self.nextTransponder() + else: + print "************* tuner_state:", dict["tuner_state"] + + self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_NOOP, self.currTuned)) + + if not stop: + self.tune() + if self.tuningtransponder < len(self.transponderlist) and not stop: + self.timer.start(100, True) + print "restart timer" + else: + self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_DONE, self.currTuned)) + print "finishedChecking" + self.finishedChecking() + + def firstTransponder(self): + print "firstTransponder:" + index = 0 + if self.checkPIDs: + print "checkPIDs-loop" + # check for tsid != -1 and onid != -1 + print "index:", index + print "len(self.transponderlist):", len(self.transponderlist) + while (index < len(self.transponderlist) and (self.transponderlist[index][8] == -1 or self.transponderlist[index][9] == -1)): + index += 1 + print "FirstTransponder final index:", index + return index + + def nextTransponder(self): + index = self.tuningtransponder + 1 + if self.checkPIDs: + # check for tsid != -1 and onid != -1 + while (index < len(self.transponderlist) and self.transponderlist[index][8] != -1 and self.transponderlist[index][9] != -1): + index += 1 + + return index + + def finishedChecking(self): + print "finished testing" + print "successfull:", self.successfullyTune + print "failed:", self.failedTune + + 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() + if self.frontend: + return True + else: + print "getFrontend failed" + else: + print "getRawChannel failed" + else: + print "getResourceManager instance failed" + return False + + def tune(self): + print "tuning to", self.tuningtransponder + if self.tuningtransponder < len(self.transponderlist): + self.pidStatus = self.INTERNAL_PID_STATUS_NOOP + self.oldTuned = self.currTuned + self.currTuned = self.transponderlist[self.tuningtransponder] + self.tuner.tune(self.transponderlist[self.tuningtransponder]) + + INTERNAL_PID_STATUS_NOOP = 0 + INTERNAL_PID_STATUS_WAITING = 1 + INTERNAL_PID_STATUS_SUCCESSFUL = 2 + INTERNAL_PID_STATUS_FAILED = 3 + + def run(self, checkPIDs = False): + self.checkPIDs = checkPIDs + self.pidStatus = self.INTERNAL_PID_STATUS_NOOP + self.failedTune = [] + self.successfullyTune = [] + self.tuningtransponder = self.firstTransponder() + self.tune() + self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_START, self.currTuned)) + self.timer.start(100, True) + + # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, , , , ) + # 0 1 2 3 4 5 6 7 8 9 + def addTransponder(self, transponder): + self.transponderlist.append(transponder) + + def clearTransponder(self): + self.transponderlist = [] + + STATUS_START = 0 + STATUS_TUNING = 1 + STATUS_DONE = 2 + STATUS_NOOP = 3 + # can be overwritten + # progress = (range, value, status, transponder) + def progressCallback(self, progress): + pass \ No newline at end of file diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile.am b/lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile.am new file mode 100644 index 00000000..cd72696a --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/DiseqcTester/Makefile.am @@ -0,0 +1,5 @@ +installdir = $(LIBDIR)/enigma2/python/Plugins/SystemPlugins/DiseqcTester + +install_PYTHON = \ + __init__.py \ + plugin.py \ No newline at end of file diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/__init__.py b/lib/python/Plugins/SystemPlugins/DiseqcTester/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py b/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py new file mode 100644 index 00000000..57340368 --- /dev/null +++ b/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py @@ -0,0 +1,239 @@ +from Screens.Satconfig import NimSelection +from Screens.Screen import Screen + +from Plugins.Plugin import PluginDescriptor + +from Components.ActionMap import NumberActionMap +from Components.NimManager import nimmanager +from Components.ResourceManager import resourcemanager +from Components.Sources.FrontendStatus import FrontendStatus +from Components.TuneTest import TuneTest +from Components.Sources.Progress import Progress +from Components.Sources.StaticText import StaticText + +class DiseqcTester(Screen, TuneTest): + skin = """ + + + + SNRdB + + + + SNR + + + SNR + + + + AGC + + + AGC + + + + BER + + + BER + + + + LOCK + + + + LOCK + Invert + + + + + + + + + + + + """ + + TEST_TYPE_QUICK = 0 + TEST_TYPE_RANDOM = 1 + TEST_TYPE_COMPLETE = 2 + def __init__(self, session, feid, test_type = TEST_TYPE_QUICK): + Screen.__init__(self, session) + self.feid = feid + self.test_type = test_type + + self["actions"] = NumberActionMap(["SetupActions"], + { + "ok": self.keyGo, + "cancel": self.keyCancel, + }, -2) + + TuneTest.__init__(self, feid, stopOnSuccess = True) + self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100) + self["overall_progress"] = Progress() + self["sub_progress"] = Progress() + self["failed_counter"] = StaticText("10") + self["succeeded_counter"] = StaticText("10") + + self.indexlist = {} + self.readTransponderList() + + def readTransponderList(self): + for sat in nimmanager.getSatListForNim(self.feid): + for transponder in nimmanager.getTransponders(sat[0]): + #print transponder + mytransponder = (transponder[1] / 1000, transponder[2] / 1000, transponder[3], transponder[4], transponder[5], sat[0], None, None, transponder[10], transponder[11]) + self.analyseTransponder(mytransponder) + + def getIndexForTransponder(self, transponder): + if transponder[0] < 11700: + band = 1 # low + else: + band = 0 # high + + polarisation = transponder[2] + + sat = transponder[5] + + index = (band, polarisation, sat) + return index + + # sort the transponder into self.transponderlist + def analyseTransponder(self, transponder): + index = self.getIndexForTransponder(transponder) + if index not in self.indexlist: + self.indexlist[index] = [] + self.indexlist[index].append(transponder) + #print "self.indexlist:", self.indexlist + + # returns a string for the user representing a human readable output for index + def getTextualIndexRepresentation(self, index): + print "getTextualIndexRepresentation:", index + text = "" + + # TODO better sat representation + text += "%s, " % index[2] + + if index[0] == 1: + text += "Low Band, " + else: + text += "High Band, " + + if index[1] == 0: + text += "H" + else: + text += "V" + return text + + def fillTransponderList(self): + self.clearTransponder() + print "----------- fillTransponderList" + print "index:", self.currentlyTestedIndex + keys = self.indexlist.keys() + if self.getContinueScanning(): + print "index:", self.getTextualIndexRepresentation(self.currentlyTestedIndex) + for transponder in self.indexlist[self.currentlyTestedIndex]: + self.addTransponder(transponder) + print "transponderList:", self.transponderlist + return True + else: + return False + + def progressCallback(self, progress): + if progress[0] != self["sub_progress"].getRange(): + self["sub_progress"].setRange(progress[0]) + self["sub_progress"].setValue(progress[1]) + + # logic for scanning order of transponders + # on go getFirstIndex is called + def getFirstIndex(self): + # TODO use other function to scan more randomly + if self.test_type == self.TEST_TYPE_QUICK: + self.myindex = 0 + keys = self.indexlist.keys() + self["overall_progress"].setRange(len(keys)) + self["overall_progress"].setValue(self.myindex) + return keys[0] + + # after each index is finished, getNextIndex is called to get the next index to scan + def getNextIndex(self): + # TODO use other function to scan more randomly + if self.test_type == self.TEST_TYPE_QUICK: + self.myindex += 1 + keys = self.indexlist.keys() + + self["overall_progress"].setValue(self.myindex) + if self.myindex < len(keys): + return keys[self.myindex] + else: + return None + + # after each index is finished and the next index is returned by getNextIndex + # the algorithm checks, if we should continue scanning + def getContinueScanning(self): + if self.test_type == self.TEST_TYPE_QUICK: + return (self.myindex < len(self.indexlist.keys())) + + def finishedChecking(self): + print "finishedChecking" + TuneTest.finishedChecking(self) + self.currentlyTestedIndex = self.getNextIndex() + if self.fillTransponderList(): + self.run(checkPIDs = True) + + def keyGo(self): + self.currentlyTestedIndex = self.getFirstIndex() + if self.fillTransponderList(): + self.run(True) + + def keyCancel(self): + self.close() + +class DiseqcTesterNimSelection(NimSelection): + skin = """ + + + + {"template": [ + MultiContentEntryText(pos = (10, 5), size = (360, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name, + MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings, + ], + "fonts": [gFont("Regular", 20), gFont("Regular", 15)], + "itemHeight": 70 + } + + + """ + + def __init__(self, session, args = None): + NimSelection.__init__(self, session) + + def setResultClass(self): + self.resultclass = DiseqcTester + + def showNim(self, nim): + nimConfig = nimmanager.getNimConfig(nim.slot) + if nim.isCompatible("DVB-S"): + if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends", "nothing"]: + return False + if nimConfig.configMode.value == "simple": + if nimConfig.diseqcMode.value == "positioner": + return False + return True + return False + +def DiseqcTesterMain(session, **kwargs): + session.open(DiseqcTesterNimSelection) + +def autostart(reason, **kwargs): + resourcemanager.addResource("DiseqcTester", DiseqcTesterMain) + +def Plugins(**kwargs): + return [ PluginDescriptor(name="DiSEqC Tester", description=_("Test DiSEqC settings"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=DiseqcTesterMain), + PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)] \ No newline at end of file diff --git a/lib/python/Plugins/SystemPlugins/Makefile.am b/lib/python/Plugins/SystemPlugins/Makefile.am index 36b4bde5..4491eafc 100644 --- a/lib/python/Plugins/SystemPlugins/Makefile.am +++ b/lib/python/Plugins/SystemPlugins/Makefile.am @@ -1 +1 @@ -SUBDIRS = SoftwareUpdate FrontprocessorUpgrade PositionerSetup ConfigurationBackup Satfinder SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug DefaultServicesScanner NFIFlash +SUBDIRS = SoftwareUpdate FrontprocessorUpgrade PositionerSetup ConfigurationBackup Satfinder SkinSelector SatelliteEquipmentControl Videomode VideoTune Hotplug DefaultServicesScanner NFIFlash DiseqcTester diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py index d61c1503..72982483 100644 --- a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py +++ b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py @@ -12,33 +12,8 @@ from Components.ActionMap import ActionMap from Components.NimManager import nimmanager, getConfigSatlist from Components.MenuList import MenuList from Components.config import ConfigSelection, getConfigListEntry +from Components.TuneTest import Tuner -class Tuner: - def __init__(self, frontend): - self.frontend = frontend - - def tune(self, transponder): - if self.frontend: - print "tuning to transponder with data", transponder - parm = eDVBFrontendParametersSatellite() - parm.frequency = transponder[0] * 1000 - parm.symbol_rate = transponder[1] * 1000 - parm.polarisation = transponder[2] - parm.fec = transponder[3] - parm.inversion = transponder[4] - parm.orbital_position = transponder[5] - parm.system = transponder[6] - parm.modulation = transponder[7] - parm.rolloff = transponder[8] - parm.pilot = transponder[9] - feparm = eDVBFrontendParameters() - feparm.setDVBS(parm, True) - self.lastparm = feparm - self.frontend.tune(feparm) - - def retune(self): - if self.frontend: - self.frontend.tune(self.lastparm) class Satfinder(ScanSetup): def openFrontend(self): diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 5628926f..320bea84 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -384,18 +384,26 @@ class NimSelection(Screen): self.list = [None] * nimmanager.getSlotCount() self["nimlist"] = List(self.list) self.updateList() + + self.setResultClass() self["actions"] = ActionMap(["OkCancelActions"], { "ok": self.okbuttonClick , "cancel": self.close }, -2) + + def setResultClass(self): + self.resultclass = NimSetup def okbuttonClick(self): nim = self["nimlist"].getCurrent() nim = nim and nim[3] if nim is not None and not nim.empty: - self.session.openWithCallback(self.updateList, NimSetup, nim.slot) + self.session.openWithCallback(self.updateList, self.resultclass, nim.slot) + + def showNim(self, nim): + return True def updateList(self): self.list = [ ] @@ -403,42 +411,44 @@ class NimSelection(Screen): slotid = x.slot nimConfig = nimmanager.getNimConfig(x.slot) text = nimConfig.configMode.value - if x.isCompatible("DVB-S"): - if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends"]: - text = { "loopthrough": _("loopthrough to"), - "equal": _("equal to"), - "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value] - text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)] - elif nimConfig.configMode.value == "nothing": - text = _("nothing connected") - elif nimConfig.configMode.value == "simple": - if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: - text = _("Sats") + ": " - if nimConfig.diseqcA.orbital_position != 3601: - text += nimmanager.getSatName(int(nimConfig.diseqcA.value)) - if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: - if nimConfig.diseqcB.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value)) - if nimConfig.diseqcMode.value == "diseqc_a_b_c_d": - if nimConfig.diseqcC.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value)) - if nimConfig.diseqcD.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value)) - elif nimConfig.diseqcMode.value == "positioner": - text = _("Positioner") + ":" - if nimConfig.positionerMode.value == "usals": - text += _("USALS") - elif nimConfig.positionerMode.value == "manual": - text += _("manual") - else: - text = _("simple") - elif nimConfig.configMode.value == "advanced": - text = _("advanced") - elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"): - if nimConfig.configMode.value == "nothing": - text = _("nothing connected") - elif nimConfig.configMode.value == "enabled": - text = _("enabled") - - self.list.append((slotid, x.friendly_full_description, text, x)) + if self.showNim(x): + if x.isCompatible("DVB-S"): + if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends"]: + text = { "loopthrough": _("loopthrough to"), + "equal": _("equal to"), + "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value] + text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)] + elif nimConfig.configMode.value == "nothing": + text = _("nothing connected") + elif nimConfig.configMode.value == "simple": + if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: + text = _("Sats") + ": " + if nimConfig.diseqcA.orbital_position != 3601: + text += nimmanager.getSatName(int(nimConfig.diseqcA.value)) + if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: + if nimConfig.diseqcB.orbital_position != 3601: + text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value)) + if nimConfig.diseqcMode.value == "diseqc_a_b_c_d": + if nimConfig.diseqcC.orbital_position != 3601: + text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value)) + if nimConfig.diseqcD.orbital_position != 3601: + text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value)) + elif nimConfig.diseqcMode.value == "positioner": + text = _("Positioner") + ":" + if nimConfig.positionerMode.value == "usals": + text += _("USALS") + elif nimConfig.positionerMode.value == "manual": + text += _("manual") + else: + text = _("simple") + elif nimConfig.configMode.value == "advanced": + text = _("advanced") + elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"): + if nimConfig.configMode.value == "nothing": + text = _("nothing connected") + elif nimConfig.configMode.value == "enabled": + text = _("enabled") + + self.list.append((slotid, x.friendly_full_description, text, x)) + self["nimlist"].setList(self.list) self["nimlist"].updateList(self.list) \ No newline at end of file -- cgit v1.2.3 From f95be11f0517eac56013b0ccb14825be97fc1540 Mon Sep 17 00:00:00 2001 From: stefan Date: Tue, 16 Dec 2008 10:33:19 +0000 Subject: finish and polish diseqc tester plugin --- data/skin_default.xml | 5 + lib/dvb/db.cpp | 2 +- lib/python/Components/TuneTest.py | 54 +++- .../Plugins/SystemPlugins/DiseqcTester/plugin.py | 283 +++++++++++++++++++-- lib/python/Screens/Makefile.am | 3 +- lib/python/Screens/TextBox.py | 26 ++ 6 files changed, 340 insertions(+), 33 deletions(-) mode change 100755 => 100644 data/skin_default.xml mode change 100755 => 100644 lib/python/Screens/Makefile.am create mode 100644 lib/python/Screens/TextBox.py (limited to 'lib/python/Screens') diff --git a/data/skin_default.xml b/data/skin_default.xml old mode 100755 new mode 100644 index 5946097d..d60933eb --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -940,6 +940,11 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y())) + + + + + diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 6f30253a..e5a94392 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -856,7 +856,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it) { -// eDebug("\t\tattr: %s", at->name().c_str()); + //eDebug("\t\tattr: %s", at->name().c_str()); at = *it; name = at->name(); if (name == "modulation") dest = &modulation; diff --git a/lib/python/Components/TuneTest.py b/lib/python/Components/TuneTest.py index 2d448e8f..422036cd 100644 --- a/lib/python/Components/TuneTest.py +++ b/lib/python/Components/TuneTest.py @@ -32,7 +32,7 @@ class Tuner: # 2) call run() # 3) finishedChecking() is called, when the run is finished class TuneTest: - def __init__(self, feid, stopOnSuccess = False, stopOnError = False): + def __init__(self, feid, stopOnSuccess = -1, stopOnError = -1): self.stopOnSuccess = stopOnSuccess self.stopOnError = stopOnError self.feid = feid @@ -54,12 +54,14 @@ class TuneTest: def gotTsidOnid(self, tsid, onid): print "******** got tsid, onid:", tsid, onid - self.tsid = tsid - self.onid = onid if tsid is not None and onid is not None: self.pidStatus = self.INTERNAL_PID_STATUS_SUCCESSFUL + self.tsid = tsid + self.onid = onid else: self.pidStatus = self.INTERNAL_PID_STATUS_FAILED + self.tsid = -1 + self.onid = -1 self.timer.start(100, True) def updateStatus(self): @@ -71,7 +73,7 @@ class TuneTest: if dict["tuner_state"] == "TUNING": print "TUNING" self.timer.start(100, True) - self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_TUNING, self.currTuned)) + self.progressCallback((self.getProgressLength(), self.tuningtransponder, self.STATUS_TUNING, self.currTuned)) elif self.checkPIDs and self.pidStatus == self.INTERNAL_PID_STATUS_NOOP: print "2nd choice" if dict["tuner_state"] == "LOCKED": @@ -86,23 +88,28 @@ class TuneTest: if dict["tuner_state"] == "LOSTLOCK" or dict["tuner_state"] == "FAILED": self.tuningtransponder = self.nextTransponder() self.failedTune.append([self.currTuned, self.oldTuned, "tune_failed"]) - if self.stopOnError == True: + if self.stopOnError != -1 and self.stopOnError <= len(self.failedTune): stop = True elif dict["tuner_state"] == "LOCKED": pidsFailed = False if self.checkPIDs: - if self.tsid != self.currTuned[8] or self.onid != self.currTuned[9]: - self.failedTune.append([self.currTuned, self.oldTuned, "pids_failed"]) - pidsFailes = True + if self.currTuned is not None: + if self.tsid != self.currTuned[8] or self.onid != self.currTuned[9]: + self.failedTune.append([self.currTuned, self.oldTuned, "pids_failed", {"real": (self.tsid, self.onid), "expected": (self.currTuned[8], self.currTuned[9])}]) + pidsFailed = True + else: + self.successfullyTune.append([self.currTuned, self.oldTuned]) + if self.stopOnSuccess != -1 and self.stopOnSuccess <= len(self.successfullyTune): + stop = True elif not self.checkPIDs or (self.checkPids and not pidsFailed): self.successfullyTune.append([self.currTuned, self.oldTuned]) - if self.stopOnSuccess == True: - stop = True + if self.stopOnSuccess != -1 and self.stopOnSuccess <= len(self.successfullyTune): + stop = True self.tuningtransponder = self.nextTransponder() else: print "************* tuner_state:", dict["tuner_state"] - self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_NOOP, self.currTuned)) + self.progressCallback((self.getProgressLength(), self.tuningtransponder, self.STATUS_NOOP, self.currTuned)) if not stop: self.tune() @@ -113,7 +120,7 @@ class TuneTest: else: print "not restarting timers (waiting for pids)" else: - self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_DONE, self.currTuned)) + self.progressCallback((self.getProgressLength(), len(self.transponderlist), self.STATUS_DONE, self.currTuned)) print "finishedChecking" self.finishedChecking() @@ -131,12 +138,17 @@ class TuneTest: return index def nextTransponder(self): + print "getting next transponder", self.tuningtransponder index = self.tuningtransponder + 1 if self.checkPIDs: + print "checkPIDs-loop" # check for tsid != -1 and onid != -1 - while (index < len(self.transponderlist) and self.transponderlist[index][8] != -1 and self.transponderlist[index][9] != -1): + print "index:", index + print "len(self.transponderlist):", len(self.transponderlist) + while (index < len(self.transponderlist) and (self.transponderlist[index][8] == -1 or self.transponderlist[index][9] == -1)): index += 1 + print "next transponder index:", index return index def finishedChecking(self): @@ -180,7 +192,7 @@ class TuneTest: self.successfullyTune = [] self.tuningtransponder = self.firstTransponder() self.tune() - self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_START, self.currTuned)) + self.progressCallback((self.getProgressLength(), self.tuningtransponder, self.STATUS_START, self.currTuned)) self.timer.start(100, True) # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, , , , ) @@ -191,6 +203,20 @@ class TuneTest: def clearTransponder(self): self.transponderlist = [] + def getProgressLength(self): + count = 0 + if self.stopOnError == -1: + count = len(self.transponderlist) + else: + if count < self.stopOnError: + count = self.stopOnError + if self.stopOnSuccess == -1: + count = len(self.transponderlist) + else: + if count < self.stopOnSuccess: + count = self.stopOnSuccess + return count + STATUS_START = 0 STATUS_TUNING = 1 STATUS_DONE = 2 diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py b/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py index 57340368..f997acd1 100644 --- a/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py +++ b/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py @@ -1,20 +1,81 @@ from Screens.Satconfig import NimSelection from Screens.Screen import Screen +from Screens.TextBox import TextBox from Plugins.Plugin import PluginDescriptor -from Components.ActionMap import NumberActionMap +from Components.ActionMap import ActionMap, NumberActionMap from Components.NimManager import nimmanager from Components.ResourceManager import resourcemanager from Components.Sources.FrontendStatus import FrontendStatus from Components.TuneTest import TuneTest +from Components.Sources.List import List from Components.Sources.Progress import Progress from Components.Sources.StaticText import StaticText +from Components.ConfigList import ConfigListScreen +from Components.config import getConfigListEntry, ConfigSelection -class DiseqcTester(Screen, TuneTest): +# always use: +# setResultType(type) +# setResultParameter(parameter) +# getTextualResult() +class ResultParser: + def __init__(self): + pass + + TYPE_BYORBPOS = 0 + TYPE_BYINDEX = 1 + TYPE_ALL = 2 + def setResultType(self, type): + self.type = type + + def setResultParameter(self, parameter): + if self.type == self.TYPE_BYORBPOS: + self.orbpos = parameter + elif self.type == self.TYPE_BYINDEX: + self.index = parameter + + def getTextualResultForIndex(self, index): + text = "" + text += "%s:\n" % self.getTextualIndexRepresentation(index) + + failed, successful = self.results[index]["failed"], self.results[index]["successful"] + countfailed = len(failed) + countsuccessful = len(successful) + countall = countfailed + countsuccessful + percentfailed = round(countfailed / float(countall + 0.0001) * 100) + percentsuccessful = round(countsuccessful / float(countall + 0.0001) * 100) + text += "Tested %d transponders\n%d (%d %%) transponders succeeded\n%d (%d %%) transponders failed\n" % (countall, countsuccessful, percentsuccessful, countfailed, percentfailed) + reasons = {} + if countfailed > 0: + for transponder in failed: + reasons[transponder[2]] = reasons.get(transponder[2], []) + reasons[transponder[2]].append(transponder) + if transponder[2] == "pids_failed": + print transponder[2], "-", transponder[3] + + text += "The %d unsuccessful tuning attempts failed for the following reasons:\n" % countfailed + + for reason in reasons.keys(): + text += "%s: %d transponders failed\n" % (reason, len(reasons[reason])) + return text + + def getTextualResult(self): + text = "" + if self.type == self.TYPE_BYINDEX: + text += self.getTextualResultForIndex(self.index) + elif self.type == self.TYPE_BYORBPOS: + for index in self.results.keys(): + if index[2] == self.orbpos: + text += self.getTextualResultForIndex(index) + text += "\n-----------------------------------------------------\n" + + return text + +class DiseqcTester(Screen, TuneTest, ResultParser): skin = """ - + + + + {"template": [ + MultiContentEntryText(pos = (10, 0), size = (330, 25), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the index name, + MultiContentEntryText(pos = (330, 0), size = (150, 25), flags = RT_HALIGN_RIGHT, text = 2) # index 2 is the status, + ], + "fonts": [gFont("Regular", 20)], + "itemHeight": 25 + } + @@ -54,35 +126,93 @@ class DiseqcTester(Screen, TuneTest): - + - + + + + + + + + + """ TEST_TYPE_QUICK = 0 TEST_TYPE_RANDOM = 1 TEST_TYPE_COMPLETE = 2 - def __init__(self, session, feid, test_type = TEST_TYPE_QUICK): + def __init__(self, session, feid, test_type = TEST_TYPE_QUICK, loopsfailed = 3, loopssuccessful = 1): Screen.__init__(self, session) self.feid = feid self.test_type = test_type + self.loopsfailed = loopsfailed + self.loopssuccessful = loopssuccessful self["actions"] = NumberActionMap(["SetupActions"], { - "ok": self.keyGo, + "ok": self.select, "cancel": self.keyCancel, }, -2) - TuneTest.__init__(self, feid, stopOnSuccess = True) - self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100) + TuneTest.__init__(self, feid, stopOnSuccess = self.loopssuccessful, stopOnError = self.loopsfailed) + #self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100) self["overall_progress"] = Progress() self["sub_progress"] = Progress() - self["failed_counter"] = StaticText("10") - self["succeeded_counter"] = StaticText("10") + + self["failed_counter"] = StaticText("0") + self["succeeded_counter"] = StaticText("0") + self["witherrors_counter"] = StaticText("0") + self["untestable_counter"] = StaticText("0") + + self.list = [] + self["progress_list"] = List(self.list) + self["progress_list"].onSelectionChanged.append(self.selectionChanged) + + self["CmdText"] = StaticText(_("Please wait while scanning is in progress...")) self.indexlist = {} self.readTransponderList() + + self.running = False + + self.results = {} + self.resultsstatus = {} + + self.onLayoutFinish.append(self.go) + + def getProgressListComponent(self, index, status): + return (index, self.getTextualIndexRepresentation(index), status) + + def clearProgressList(self): + self.list = [] + self["progress_list"].list = self.list + + def addProgressListItem(self, index): + if index in self.indexlist: + for entry in self.list: + if entry[0] == index: + self.changeProgressListStatus(index, "working") + return + self.list.append(self.getProgressListComponent(index, _("working"))) + self["progress_list"].list = self.list + self["progress_list"].setIndex(len(self.list) - 1) + + def changeProgressListStatus(self, index, status): + self.newlist = [] + count = 0 + indexpos = 0 + for entry in self.list: + if entry[0] == index: + self.newlist.append(self.getProgressListComponent(index, status)) + indexpos = count + else: + self.newlist.append(entry) + count += 1 + self.list = self.newlist + self["progress_list"].list = self.list + self["progress_list"].setIndex(indexpos) def readTransponderList(self): for sat in nimmanager.getSatListForNim(self.feid): @@ -92,11 +222,12 @@ class DiseqcTester(Screen, TuneTest): self.analyseTransponder(mytransponder) def getIndexForTransponder(self, transponder): + if transponder[0] < 11700: band = 1 # low else: band = 0 # high - + polarisation = transponder[2] sat = transponder[5] @@ -117,8 +248,7 @@ class DiseqcTester(Screen, TuneTest): print "getTextualIndexRepresentation:", index text = "" - # TODO better sat representation - text += "%s, " % index[2] + text += nimmanager.getSatDescription(index[2]) + ", " if index[0] == 1: text += "Low Band, " @@ -157,6 +287,7 @@ class DiseqcTester(Screen, TuneTest): if self.test_type == self.TEST_TYPE_QUICK: self.myindex = 0 keys = self.indexlist.keys() + keys.sort(key = lambda a: a[2]) # sort by orbpos self["overall_progress"].setRange(len(keys)) self["overall_progress"].setValue(self.myindex) return keys[0] @@ -167,6 +298,7 @@ class DiseqcTester(Screen, TuneTest): if self.test_type == self.TEST_TYPE_QUICK: self.myindex += 1 keys = self.indexlist.keys() + keys.sort(key = lambda a: a[2]) # sort by orbpos self["overall_progress"].setValue(self.myindex) if self.myindex < len(keys): @@ -179,21 +311,137 @@ class DiseqcTester(Screen, TuneTest): def getContinueScanning(self): if self.test_type == self.TEST_TYPE_QUICK: return (self.myindex < len(self.indexlist.keys())) + + def addResult(self, index, status, failedTune, successfullyTune): + self.results[index] = self.results.get(index, {"failed": [], "successful": [], "status": None}) + self.resultsstatus[status] = self.resultsstatus.get(status, []) + + self.results[index]["status"] = status + self.results[index]["failed"] = failedTune + self.results[index]["successful"] = successfullyTune + + self.resultsstatus[status].append(index) def finishedChecking(self): print "finishedChecking" TuneTest.finishedChecking(self) + + if not self.results.has_key(self.currentlyTestedIndex): + self.results[self.currentlyTestedIndex] = {"failed": [], "successful": [], "status": None} + + if len(self.failedTune) > 0 and len(self.successfullyTune) > 0: + self.changeProgressListStatus(self.currentlyTestedIndex, "with errors") + self["witherrors_counter"].setText(str(int(self["witherrors_counter"].getText()) + 1)) + self.addResult(self.currentlyTestedIndex, "with_errors", self.failedTune, self.successfullyTune) + elif len(self.failedTune) == 0 and len(self.successfullyTune) == 0: + self.changeProgressListStatus(self.currentlyTestedIndex, "not tested") + self["untestable_counter"].setText(str(int(self["untestable_counter"].getText()) + 1)) + self.addResult(self.currentlyTestedIndex, "untestable", self.failedTune, self.successfullyTune) + elif len(self.failedTune) > 0: + self.changeProgressListStatus(self.currentlyTestedIndex, "failed") + self["failed_counter"].setText(str(int(self["failed_counter"].getText()) + len(self.failedTune))) + self.addResult(self.currentlyTestedIndex, "failed", self.failedTune, self.successfullyTune) + else: + self.changeProgressListStatus(self.currentlyTestedIndex, "successful") + self["succeeded_counter"].setText(str(int(self["succeeded_counter"].getText()) + len(self.successfullyTune))) + self.addResult(self.currentlyTestedIndex, "successful", self.failedTune, self.successfullyTune) + + + #self["failed_counter"].setText(str(int(self["failed_counter"].getText()) + len(self.failedTune))) + #self["succeeded_counter"].setText(str(int(self["succeeded_counter"].getText()) + len(self.successfullyTune))) + #if len(self.failedTune) == 0 and len(self.successfullyTune) == 0: + #self["untestable_counter"].setText(str(int(self["untestable_counter"].getText()) + 1)) + self.currentlyTestedIndex = self.getNextIndex() + self.addProgressListItem(self.currentlyTestedIndex) + if self.fillTransponderList(): self.run(checkPIDs = True) + else: + self.running = False + self["progress_list"].setIndex(0) + print "results:", self.results + print "resultsstatus:", self.resultsstatus - def keyGo(self): + def go(self): + self.running = True + self["failed_counter"].setText("0") + self["succeeded_counter"].setText("0") + self["untestable_counter"].setText("0") self.currentlyTestedIndex = self.getFirstIndex() + + self.clearProgressList() + self.addProgressListItem(self.currentlyTestedIndex) + if self.fillTransponderList(): self.run(True) def keyCancel(self): self.close() + + def select(self): + print "selectedIndex:", self["progress_list"].getCurrent()[0] + if not self.running: + index = self["progress_list"].getCurrent()[0] + #self.setResultType(ResultParser.TYPE_BYORBPOS) + #self.setResultParameter(index[2]) + self.setResultType(ResultParser.TYPE_BYINDEX) + self.setResultParameter(index) + self.session.open(TextBox, self.getTextualResult()) + + def selectionChanged(self): + print "selection changed" + if len(self.list) > 0 and not self.running: + self["CmdText"].setText(_("Press OK to get further details for %s") % str(self["progress_list"].getCurrent()[1])) + +class DiseqcTesterTestTypeSelection(Screen, ConfigListScreen): + skin = """ + + + """ + def __init__(self, session, feid): + Screen.__init__(self, session) + self.feid = feid + + self.list = [] + ConfigListScreen.__init__(self, self.list) + + self["actions"] = ActionMap(["SetupActions"], + { + "cancel": self.keyCancel + }, -2) + + self.createSetup() + + def createSetup(self): + self.testtype = ConfigSelection(choices={"quick": _("Quick")}, default = "quick") + self.testtypeEntry = getConfigListEntry(_("Test Type"), self.testtype) + self.list.append(self.testtypeEntry) + + self.loopsfailed = ConfigSelection(choices={"-1": "Every known", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7", "8": "8"}, default = "3") + self.loopsfailedEntry = getConfigListEntry(_("Stop testing plane after # failed transponders"), self.loopsfailed) + self.list.append(self.loopsfailedEntry) + + self.loopssuccessful = ConfigSelection(choices={"-1": "Every known", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7", "8": "8"}, default = "1") + self.loopssuccessfulEntry = getConfigListEntry(_("Stop testing plane after # successful transponders"), self.loopssuccessful) + self.list.append(self.loopssuccessfulEntry) + + self["config"].list = self.list + self["config"].l.setList(self.list) + + def keyOK(self): + print self.testtype.getValue() + testtype = DiseqcTester.TEST_TYPE_QUICK + if self.testtype.getValue() == "quick": + testtype = DiseqcTester.TEST_TYPE_QUICK + elif self.testtype.getValue() == "random": + testtype = DiseqcTester.TEST_TYPE_RANDOM + elif self.testtype.getValue() == "complete": + testtype = DiseqcTester.TEST_TYPE_COMPLETE + self.session.open(DiseqcTester, feid = self.feid, test_type = testtype, loopsfailed = int(self.loopsfailed.value), loopssuccessful = int(self.loopssuccessful.value)) + + def keyCancel(self): + self.close() class DiseqcTesterNimSelection(NimSelection): skin = """ @@ -215,7 +463,8 @@ class DiseqcTesterNimSelection(NimSelection): NimSelection.__init__(self, session) def setResultClass(self): - self.resultclass = DiseqcTester + #self.resultclass = DiseqcTester + self.resultclass = DiseqcTesterTestTypeSelection def showNim(self, nim): nimConfig = nimmanager.getNimConfig(nim.slot) @@ -224,7 +473,7 @@ class DiseqcTesterNimSelection(NimSelection): return False if nimConfig.configMode.value == "simple": if nimConfig.diseqcMode.value == "positioner": - return False + return True return True return False diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am old mode 100755 new mode 100644 index a3cf70bb..cde2d6c3 --- a/lib/python/Screens/Makefile.am +++ b/lib/python/Screens/Makefile.am @@ -13,5 +13,6 @@ install_PYTHON = \ TimerSelection.py PictureInPicture.py TimeDateInput.py \ SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \ SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \ - SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py + SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \ + TextBox.py diff --git a/lib/python/Screens/TextBox.py b/lib/python/Screens/TextBox.py new file mode 100644 index 00000000..117c5c72 --- /dev/null +++ b/lib/python/Screens/TextBox.py @@ -0,0 +1,26 @@ +from Screens.Screen import Screen + +from Components.ActionMap import ActionMap +from Components.Sources.StaticText import StaticText +from Components.ScrollLabel import ScrollLabel + +class TextBox(Screen): + def __init__(self, session, text = ""): + Screen.__init__(self, session) + + self.text = text + self["text"] = ScrollLabel(self.text) + + self["actions"] = ActionMap(["OkCancelActions", "DirectionActions"], + { + "cancel": self.cancel, + "ok": self.ok, + "up": self["text"].pageUp, + "down": self["text"].pageDown, + }, -1) + + def ok(self): + self.close() + + def cancel(self): + self.close() \ No newline at end of file -- cgit v1.2.3 From 3d3fb340f73559bde24e757f292632bb5208b009 Mon Sep 17 00:00:00 2001 From: Stefan Date: Tue, 16 Dec 2008 11:34:45 +0100 Subject: finish and polish diseqc tester plugin --- data/skin_default.xml | 0 lib/python/Screens/Makefile.am | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 data/skin_default.xml mode change 100644 => 100755 lib/python/Screens/Makefile.am (limited to 'lib/python/Screens') diff --git a/data/skin_default.xml b/data/skin_default.xml old mode 100644 new mode 100755 diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am old mode 100644 new mode 100755 -- cgit v1.2.3 From b10857da7a1853f816adcb2c0464e9c759190c26 Mon Sep 17 00:00:00 2001 From: Stefan Date: Tue, 16 Dec 2008 20:22:17 +0100 Subject: add newlines at end of file --- lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py | 2 +- lib/python/Screens/TextBox.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py b/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py index f55ba766..2c8c5c38 100644 --- a/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py +++ b/lib/python/Plugins/SystemPlugins/DiseqcTester/plugin.py @@ -524,4 +524,4 @@ def autostart(reason, **kwargs): def Plugins(**kwargs): return [ PluginDescriptor(name="DiSEqC Tester", description=_("Test DiSEqC settings"), where = PluginDescriptor.WHERE_PLUGINMENU, fnc=DiseqcTesterMain), - PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)] \ No newline at end of file + PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart)] diff --git a/lib/python/Screens/TextBox.py b/lib/python/Screens/TextBox.py index 117c5c72..44b8a3cf 100644 --- a/lib/python/Screens/TextBox.py +++ b/lib/python/Screens/TextBox.py @@ -23,4 +23,4 @@ class TextBox(Screen): self.close() def cancel(self): - self.close() \ No newline at end of file + self.close() -- cgit v1.2.3 From 17815854118aa7187570e0e4492064f43a1b94b7 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 18 Dec 2008 17:50:23 +0100 Subject: remove possibility to scan with "loopthrough" and "2nd cable from rotor" configured tuners --- lib/python/Screens/ScanSetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index 464c701a..f32904a1 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -524,7 +524,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): nim_list = [] # collect all nims which are *not* set to "nothing" for n in nimmanager.nim_slots: - if n.config_mode != "nothing": + if not n.config_mode in ("loopthrough", "satposdepends", "nothing"): nim_list.append((str(n.slot), n.friendly_full_description)) self.scan_nims = ConfigSelection(choices = nim_list) -- cgit v1.2.3 From 6667ca3701d2780a4d6d073c7c96a0ad1235bdb9 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 21 Dec 2008 14:23:36 +0100 Subject: fix deathscreen in some conditions (thx to adenin) --- lib/python/Screens/InfoBarGenerics.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index af29ed4e..79747a61 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1427,8 +1427,8 @@ class InfoBarInstantRecord: except: pass - begin = time() - end = time() + 3600 * 24 * 365 * 1 # 1 year + begin = int(time()) + end = begin + 3600 * 24 * 365 * 1 # 1 year name = "instant record" description = "" eventid = None @@ -1534,7 +1534,7 @@ class InfoBarInstantRecord: print "stopping recording after", int(value), "minutes." if int(value) != 0: self.recording[self.selectedEntry].autoincrease = False - self.recording[self.selectedEntry].end = time() + 60 * int(value) + self.recording[self.selectedEntry].end = int(time()) + 60 * int(value) self.session.nav.RecordTimer.timeChanged(self.recording[self.selectedEntry]) def instantRecord(self): -- cgit v1.2.3 From 65d84bb0627f0e3e21fcdae27ba98cb584d7ad37 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 22 Dec 2008 20:53:34 +0100 Subject: add possibility to remove timers in epglist TODO: this is not working for subtitles yet and not its working in graphical multi epg --- RecordTimer.py | 25 +++++++++---- data/skin_default/icons/epgclock_add.png | Bin 0 -> 358 bytes data/skin_default/icons/epgclock_post.png | Bin 0 -> 354 bytes data/skin_default/icons/epgclock_pre.png | Bin 0 -> 360 bytes lib/python/Components/EpgList.py | 32 +++++++++++++---- lib/python/Screens/EpgSelection.py | 57 ++++++++++++++++++++++++++---- lib/python/Screens/TimerEdit.py | 15 ++------ 7 files changed, 99 insertions(+), 30 deletions(-) create mode 100644 data/skin_default/icons/epgclock_add.png create mode 100644 data/skin_default/icons/epgclock_post.png create mode 100644 data/skin_default/icons/epgclock_pre.png (limited to 'lib/python/Screens') diff --git a/RecordTimer.py b/RecordTimer.py index 8449a2d2..dcfdd578 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -577,6 +577,7 @@ class RecordTimer(timer.Timer): print "ignore timer conflict" elif timersanitycheck.doubleCheck(): print "ignore double timer" + return None entry.timeChanged() print "[Timer] Record " + str(entry) entry.Timer = self @@ -584,15 +585,16 @@ class RecordTimer(timer.Timer): if dosave: self.saveTimer() return None - + def isInTimer(self, eventid, begin, duration, service): time_match = 0 chktime = None chktimecmp = None chktimecmp_end = None end = begin + duration + refstr = str(service) for x in self.timer_list: - check = x.service_ref.ref.toCompareString() == str(service) + check = x.service_ref.ref.toString() == refstr if not check: sref = x.service_ref.ref parent_sid = sref.getUnsignedData(5) @@ -604,7 +606,7 @@ class RecordTimer(timer.Timer): sref.setUnsignedData(2, parent_tsid) sref.setUnsignedData(5, 0) sref.setUnsignedData(6, 0) - check = x.service_ref.ref.toCompareString() == str(service) + check = sref.toCompareString() == refstr num = 0 if check: check = False @@ -620,9 +622,6 @@ class RecordTimer(timer.Timer): check = True break if check: - #if x.eit is not None and x.repeated == 0: - # if x.eit == eventid: - # return duration if x.repeated != 0: if chktime is None: chktime = localtime(begin) @@ -645,6 +644,8 @@ class RecordTimer(timer.Timer): diff = x.end - begin if time_match < diff: time_match = diff + if time_match: + break return time_match def removeEntry(self, entry): @@ -663,6 +664,18 @@ class RecordTimer(timer.Timer): print "state: ", entry.state print "in processed: ", entry in self.processed_timers print "in running: ", entry in self.timer_list + # autoincrease instanttimer if possible + if not entry.dontSave: + for x in self.timer_list: + if x.dontSave and x.autoincrease: + x.end = x.begin + (3600 * 24 * 356 * 1) + self.timeChanged(x) + timersanitycheck = TimerSanityCheck(self.timer_list,x) + if not timersanitycheck.check(): + tsc_list = timersanitycheck.getSimulTimerList() + if len(tsc_list) > 1: + x.end = tsc_list[1].begin - 30 + self.timeChanged(x) # now the timer should be in the processed_timers list. remove it from there. self.processed_timers.remove(entry) self.saveTimer() diff --git a/data/skin_default/icons/epgclock_add.png b/data/skin_default/icons/epgclock_add.png new file mode 100644 index 00000000..487ac483 Binary files /dev/null and b/data/skin_default/icons/epgclock_add.png differ diff --git a/data/skin_default/icons/epgclock_post.png b/data/skin_default/icons/epgclock_post.png new file mode 100644 index 00000000..5716d99f Binary files /dev/null and b/data/skin_default/icons/epgclock_post.png differ diff --git a/data/skin_default/icons/epgclock_pre.png b/data/skin_default/icons/epgclock_pre.png new file mode 100644 index 00000000..ff424637 Binary files /dev/null and b/data/skin_default/icons/epgclock_pre.png differ diff --git a/lib/python/Components/EpgList.py b/lib/python/Components/EpgList.py index dbcd572b..042abccb 100644 --- a/lib/python/Components/EpgList.py +++ b/lib/python/Components/EpgList.py @@ -52,6 +52,9 @@ class EPGList(HTMLComponent, GUIComponent): self.l.setBuildFunc(self.buildSimilarEntry) self.epgcache = eEPGCache.getInstance() self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png')) + self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png')) + self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png')) + self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png')) def getEventFromId(self, service, eventid): event = None @@ -135,8 +138,22 @@ class EPGList(HTMLComponent, GUIComponent): self.datetime_rect = Rect(width/20*2, 0, width/20*5-15, height) self.service_rect = Rect(width/20*7, 0, width/20*13, height) + def getClockPixmap(self, refstr, beginTime, duration, eventId): + endTime = beginTime + duration + for x in self.timer.timer_list: + if x.service_ref.ref.toString() == refstr: + beg = x.begin + end = x.end + if x.eit == eventId: + return self.clock_pixmap + elif beginTime > beg and beginTime < end and endTime > end: + return self.clock_post_pixmap + elif beginTime < beg and endTime > beg and endTime < end: + return self.clock_pre_pixmap + return self.clock_add_pixmap + def buildSingleEntry(self, service, eventId, beginTime, duration, EventName): - rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service) > ((duration/10)*8)) + rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service)) r1=self.weekday_rect r2=self.datetime_rect r3=self.descr_rect @@ -145,14 +162,15 @@ class EPGList(HTMLComponent, GUIComponent): res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_RIGHT, self.days[t[6]])) res.append((eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))) if rec: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, self.clock_pixmap)) + clock_pic = self.getClockPixmap(service, beginTime, duration, eventId) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic)) res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName)) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, EventName)) return res def buildSimilarEntry(self, service, eventId, beginTime, service_name, duration): - rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service) > ((duration/10)*8)) + rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service)) r1=self.weekday_rect r2=self.datetime_rect r3=self.service_rect @@ -161,22 +179,24 @@ class EPGList(HTMLComponent, GUIComponent): res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_RIGHT, self.days[t[6]])) res.append((eListboxPythonMultiContent.TYPE_TEXT, r2.left(), r2.top(), r2.width(), r1.height(), 0, RT_HALIGN_RIGHT, "%02d.%02d, %02d:%02d"%(t[2],t[1],t[3],t[4]))) if rec: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, self.clock_pixmap)) + clock_pic = self.getClockPixmap(service, beginTime, duration, eventId) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r3.left(), r3.top(), 21, 21, clock_pic)) res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left() + 25, r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name)) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, r3.left(), r3.top(), r3.width(), r3.height(), 0, RT_HALIGN_LEFT, service_name)) return res def buildMultiEntry(self, changecount, service, eventId, begTime, duration, EventName, nowTime, service_name): - rec=begTime and (self.timer.isInTimer(eventId, begTime, duration, service) > ((duration/10)*8)) + rec=beginTime and (self.timer.isInTimer(eventId, begTime, duration, service)) r1=self.service_rect r2=self.progress_rect r3=self.descr_rect r4=self.start_end_rect res = [ None ] # no private data needed if rec: + clock_pic = self.getClockPixmap(service, begTime, duration, eventId) res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width()-21, r1.height(), 0, RT_HALIGN_LEFT, service_name)) - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, self.clock_pixmap)) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, clock_pic)) else: res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, service_name)) if begTime is not None: diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index 6740bfb6..b40f445f 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -5,11 +5,13 @@ from Components.Pixmap import Pixmap from Components.Label import Label from Components.EpgList import EPGList, EPG_TYPE_SINGLE, EPG_TYPE_SIMILAR, EPG_TYPE_MULTI from Components.ActionMap import ActionMap +from Components.TimerSanityCheck import TimerSanityCheck from Screens.TimerEdit import TimerSanityConflict from Screens.EventView import EventViewSimple +from Screens.MessageBox import MessageBox from TimeDateInput import TimeDateInput from enigma import eServiceReference -from RecordTimer import RecordTimerEntry, parseEvent +from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from TimerEntry import TimerEntry from ServiceReference import ServiceReference from time import localtime, time @@ -17,6 +19,9 @@ from time import localtime, time mepg_config_initialized = False class EPGSelection(Screen): + ADD_TIMER = 0 + REMOVE_TIMER = 1 + def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None): Screen.__init__(self, session) self.bouquetChangeCB = bouquetChangeCB @@ -58,6 +63,7 @@ class EPGSelection(Screen): self.zapFunc = zapFunc self["key_green"] = Button(_("Add timer")) + self.key_green_choice = self.ADD_TIMER self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = self.session.nav.RecordTimer) self["actions"] = ActionMap(["EPGSelectActions", "OkCancelActions"], @@ -179,14 +185,28 @@ class EPGSelection(Screen): if self.type == EPG_TYPE_MULTI: self["list"].updateMultiEPG(1) + def removeTimer(self, timer): + timer.afterEvent = AFTEREVENT.NONE + self.session.nav.RecordTimer.removeEntry(timer) + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + def timerAdd(self): cur = self["list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return - newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) - self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) + eventid = event.getEventId() + refstr = serviceref.ref.toString() + for timer in self.session.nav.RecordTimer.timer_list: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + cb_func = lambda ret : not ret or self.removeTimer(timer) + self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) + break + else: + newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) + self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) def finishedAdd(self, answer): print "finished add" @@ -200,8 +220,12 @@ class EPGSelection(Screen): self.session.nav.RecordTimer.record(entry) else: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER else: - print "Timeredit aborted" + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + print "Timeredit aborted" def finishSanityCorrection(self, answer): self.finishedAdd(answer) @@ -211,7 +235,7 @@ class EPGSelection(Screen): def moveDown(self): self["list"].moveDown() - + def applyButtonState(self, state): if state == 0: self["now_button"].hide() @@ -249,6 +273,7 @@ class EPGSelection(Screen): self["more_button_sel"].hide() def onSelectionChanged(self): + cur = self["list"].getCurrent() if self.type == EPG_TYPE_MULTI: count = self["list"].getCurrentChangeCount() if self.ask_time != -1: @@ -261,7 +286,7 @@ class EPGSelection(Screen): self.applyButtonState(1) days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ] datastr = "" - event = self["list"].getCurrent()[0] + event = cur[0] if event is not None: now = time() beg = event.getBeginTime() @@ -272,3 +297,23 @@ class EPGSelection(Screen): else: datestr = '%s %d.%d.'%(_("Today"), begTime[2], begTime[1]) self["date"].setText(datestr) + else: + event = cur[0] + + if event is None: + return + + serviceref = cur[1] + eventid = event.getEventId() + refstr = serviceref.ref.toString() + + for timer in self.session.nav.RecordTimer.timer_list: + if self.key_green_choice != self.REMOVE_TIMER: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER + break + else: + if self.key_green_choice != self.ADD_TIMER: + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 18ab2b79..59e2bd03 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -214,18 +214,6 @@ class TimerEditList(Screen): timer = cur timer.afterEvent = AFTEREVENT.NONE self.session.nav.RecordTimer.removeEntry(timer) - if not timer.dontSave: - for timer in self.session.nav.RecordTimer.timer_list: - if timer.dontSave and timer.autoincrease: - timer.end = timer.begin + (3600 * 24 * 356 * 1) - self.session.nav.RecordTimer.timeChanged(timer) - timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list,timer) - if not timersanitycheck.check(): - tsc_list = timersanitycheck.getSimulTimerList() - if len(tsc_list) > 1: - timer.end = tsc_list[1].begin - 30 - self.session.nav.RecordTimer.timeChanged(timer) - self.refill() self.updateState() @@ -261,6 +249,7 @@ class TimerEditList(Screen): def addTimer(self, timer): self.session.openWithCallback(self.finishedAdd, TimerEntry, timer) + def finishedEdit(self, answer): print "finished edit" @@ -335,6 +324,8 @@ class TimerSanityConflict(Screen): self.list.append((_("Conflicting timer") + " " + str(count), x)) self.list2.append((timer[count], False)) count += 1 + if count == 1: + self.list.append((_("Channel not in services list"))) self["list"] = MenuList(self.list) self["timer2"] = TimerList(self.list2) -- cgit v1.2.3 From 85209b4213f85d7b5f9f46ee5cfc1c6115c51828 Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 3 Jan 2009 10:36:40 +0100 Subject: small timer fixes by adenin --- lib/python/Components/EpgList.py | 36 ++++++++++++++-------- .../Extensions/GraphMultiEPG/GraphMultiEpg.py | 25 +++++++-------- lib/python/Screens/EpgSelection.py | 22 ++++++------- 3 files changed, 48 insertions(+), 35 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/EpgList.py b/lib/python/Components/EpgList.py index 01157842..30f566fd 100644 --- a/lib/python/Components/EpgList.py +++ b/lib/python/Components/EpgList.py @@ -55,6 +55,7 @@ class EPGList(HTMLComponent, GUIComponent): self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png')) self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png')) self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png')) + self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png')) def getEventFromId(self, service, eventid): event = None @@ -63,7 +64,7 @@ class EPGList(HTMLComponent, GUIComponent): return event def getCurrentChangeCount(self): - if self.type == EPG_TYPE_MULTI: + if self.type == EPG_TYPE_MULTI and self.l.getCurrentSelection() is not None: return self.l.getCurrentSelection()[0] return 0 @@ -95,11 +96,12 @@ class EPGList(HTMLComponent, GUIComponent): def selectionChanged(self): for x in self.onSelChanged: if x is not None: - try: - x() - except: # FIXME!!! - print "FIXME in EPGList.selectionChanged" - pass + x() +# try: +# x() +# except: # FIXME!!! +# print "FIXME in EPGList.selectionChanged" +# pass GUI_WIDGET = eListbox @@ -139,18 +141,28 @@ class EPGList(HTMLComponent, GUIComponent): self.service_rect = Rect(width/20*7, 0, width/20*13, height) def getClockPixmap(self, refstr, beginTime, duration, eventId): + pre_clock = 1 + post_clock = 2 + clock_type = 0 endTime = beginTime + duration for x in self.timer.timer_list: if x.service_ref.ref.toString() == refstr: - beg = x.begin - end = x.end if x.eit == eventId: return self.clock_pixmap - elif beginTime > beg and beginTime < end and endTime > end: - return self.clock_post_pixmap + beg = x.begin + end = x.end + if beginTime > beg and beginTime < end and endTime > end: + clock_type |= pre_clock elif beginTime < beg and endTime > beg and endTime < end: - return self.clock_pre_pixmap - return self.clock_add_pixmap + clock_type |= post_clock + if clock_type == 0: + return self.clock_add_pixmap + elif clock_type == pre_clock: + return self.clock_pre_pixmap + elif clock_type == post_clock: + return self.clock_post_pixmap + else: + return self.clock_prepost_pixmap def buildSingleEntry(self, service, eventId, beginTime, duration, EventName): rec=beginTime and (self.timer.isInTimer(eventId, beginTime, duration, service)) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index 441cb5d8..afae6b3a 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -155,11 +155,12 @@ class EPGList(HTMLComponent, GUIComponent): def selectionChanged(self): for x in self.onSelChanged: if x is not None: - try: - x() - except: # FIXME!!! - print "FIXME in EPGList.selectionChanged" - pass + x() +# try: +# x() +# except: # FIXME!!! +# print "FIXME in EPGList.selectionChanged" +# pass GUI_WIDGET = eListbox @@ -291,13 +292,13 @@ class EPGList(HTMLComponent, GUIComponent): self.time_base = int(stime) test = [ (service.ref.toString(), 0, self.time_base, self.time_epoch) for service in services ] test.insert(0, 'XRnITBD') - print "BEFORE:" - for x in test: - print x +# print "BEFORE:" +# for x in test: +# print x epg_data = self.queryEPG(test) - print "EPG:" - for x in epg_data: - print x +# print "EPG:" +# for x in epg_data: +# print x self.list = [ ] tmp_list = None service = "" @@ -535,7 +536,7 @@ class GraphMultiEPG(Screen): else: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) else: - print "Timeredit aborted" + print "Timeredit aborted" def finishSanityCorrection(self, answer): self.finishedAdd(answer) diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index b40f445f..f6793269 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -285,7 +285,7 @@ class EPGSelection(Screen): else: self.applyButtonState(1) days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ] - datastr = "" + datestr = "" event = cur[0] if event is not None: now = time() @@ -306,14 +306,14 @@ class EPGSelection(Screen): serviceref = cur[1] eventid = event.getEventId() refstr = serviceref.ref.toString() - + isRecordEvent = False for timer in self.session.nav.RecordTimer.timer_list: - if self.key_green_choice != self.REMOVE_TIMER: - if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: - self["key_green"].setText(_("Remove timer")) - self.key_green_choice = self.REMOVE_TIMER - break - else: - if self.key_green_choice != self.ADD_TIMER: - self["key_green"].setText(_("Add timer")) - self.key_green_choice = self.ADD_TIMER + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + isRecordEvent = True + break + if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER: + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER + elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER: + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER -- cgit v1.2.3 From 15171632716c0734526eefc55e3d0601be177b45 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 9 Jan 2009 18:42:01 +0100 Subject: fixes by adenin: - fixed "sometimes, timer changes would not be applied" - allow deleting timers in GraphMultiEPG - fix displayed clock icons in epg view, - fix button text for "zap", "add/remove timer" - multiepg and graphmultiepg will automatically switch to correct service --- lib/python/Components/EpgList.py | 6 + .../Extensions/GraphMultiEPG/GraphMultiEpg.py | 143 ++++++++++++++++++--- lib/python/Screens/EpgSelection.py | 40 ++++-- lib/python/Screens/EventView.py | 46 ++++++- lib/python/Screens/TimerEdit.py | 5 +- 5 files changed, 210 insertions(+), 30 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/EpgList.py b/lib/python/Components/EpgList.py index 30f566fd..8a7c8d45 100644 --- a/lib/python/Components/EpgList.py +++ b/lib/python/Components/EpgList.py @@ -284,6 +284,12 @@ class EPGList(HTMLComponent, GUIComponent): x = self.l.getCurrentSelection() return x and x[1] + def moveToService(self,serviceref): + for x in range(len(self.list)): + if self.list[x][1] == serviceref.toString(): + self.instance.moveSelectionTo(x) + break + def moveToEventId(self, eventId): index = 0 for x in self.list: diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index afae6b3a..b2e07e10 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -15,8 +15,9 @@ from Screens.TimeDateInput import TimeDateInput from Screens.TimerEntry import TimerEntry from Screens.EpgSelection import EPGSelection from Screens.TimerEdit import TimerSanityConflict +from Screens.MessageBox import MessageBox from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE -from RecordTimer import RecordTimerEntry, parseEvent +from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from ServiceReference import ServiceReference from Tools.LoadPixmap import LoadPixmap from enigma import eEPGCache, eListbox, gFont, eListboxPythonMultiContent, \ @@ -41,6 +42,10 @@ class EPGList(HTMLComponent, GUIComponent): self.l.setSelectableFunc(self.isSelectable) self.epgcache = eEPGCache.getInstance() self.clock_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock.png')) + self.clock_add_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_add.png')) + self.clock_pre_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_pre.png')) + self.clock_post_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_post.png')) + self.clock_prepost_pixmap = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/icons/epgclock_prepost.png')) self.time_base = None self.time_epoch = time_epoch self.list = None @@ -92,6 +97,22 @@ class EPGList(HTMLComponent, GUIComponent): event = self.epgcache.lookupEventId(service.ref, eventid) return event + def moveToService(self,serviceref): + for x in range(len(self.list)): + if self.list[x][0] == serviceref.toString(): + self.instance.moveSelectionTo(x) + break + + def getIndexFromService(self, serviceref): + for x in range(len(self.list)): + if self.list[x][0] == serviceref.toString(): + return x + return 0 + + def setCurrentIndex(self, index): + if self.instance is not None: + self.instance.moveSelectionTo(index) + def getCurrent(self): if self.cur_service is None: return ( None, None ) @@ -227,7 +248,7 @@ class EPGList(HTMLComponent, GUIComponent): borderColor = self.borderColor for ev in events: #(event_id, event_title, begin_time, duration) - rec=ev[2] and self.timer.isInTimer(ev[0], ev[2], ev[3], service) > ((ev[3]/10)*8) + rec=ev[2] and self.timer.isInTimer(ev[0], ev[2], ev[3], service) xpos, ewidth = self.calcEntryPosAndWidthHelper(ev[2], ev[3], start, end, width) res.append(MultiContentEntryText( pos = (left+xpos, top), size = (ewidth, height), @@ -237,7 +258,8 @@ class EPGList(HTMLComponent, GUIComponent): if rec and ewidth > 23: res.append(MultiContentEntryPixmapAlphaTest( pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21), - png = self.clock_pixmap, backcolor = backColor, + png = self.getClockPixmap(service, ev[2], ev[3], ev[0]), + backcolor = backColor, backcolor_sel = backColorSelected)) return res @@ -329,6 +351,30 @@ class EPGList(HTMLComponent, GUIComponent): def resetOffset(self): self.offs = 0 + + def getClockPixmap(self, refstr, beginTime, duration, eventId): + pre_clock = 1 + post_clock = 2 + clock_type = 0 + endTime = beginTime + duration + for x in self.timer.timer_list: + if x.service_ref.ref.toString() == refstr: + if x.eit == eventId: + return self.clock_pixmap + beg = x.begin + end = x.end + if beginTime > beg and beginTime < end and endTime > end: + clock_type |= pre_clock + elif beginTime < beg and endTime > beg and endTime < end: + clock_type |= post_clock + if clock_type == 0: + return self.clock_add_pixmap + elif clock_type == pre_clock: + return self.clock_pre_pixmap + elif clock_type == post_clock: + return self.clock_post_pixmap + else: + return self.clock_prepost_pixmap class TimelineText(HTMLComponent, GUIComponent): def __init__(self): @@ -356,6 +402,12 @@ config.misc.graph_mepg_prev_time=ConfigClock(default = time()) config.misc.graph_mepg_prev_time_period=ConfigInteger(default=120, limits=(60,300)) class GraphMultiEPG(Screen): + EMPTY = 0 + ADD_TIMER = 1 + REMOVE_TIMER = 2 + + ZAP = 1 + def __init__(self, session, services, zapFunc=None, bouquetChangeCB=None): Screen.__init__(self, session) self.bouquetChangeCB = bouquetChangeCB @@ -364,7 +416,9 @@ class GraphMultiEPG(Screen): self.ask_time = now - tmp self.closeRecursive = False self["key_red"] = Button("") - self["key_green"] = Button(_("Add timer")) + self["key_green"] = Button("") + self.key_green_choice = self.EMPTY + self.key_red_choice = self.EMPTY self["timeline_text"] = TimelineText() self["Event"] = Event() self.time_lines = [ ] @@ -488,6 +542,7 @@ class GraphMultiEPG(Screen): #just used in multipeg def onCreate(self): self["list"].fillMultiEPG(self.services, self.ask_time) + self["list"].moveToService(self.session.nav.getCurrentlyPlayingServiceReference()) self.moveTimeLines() def eventViewCallback(self, setEvent, setService, val): @@ -505,7 +560,7 @@ class GraphMultiEPG(Screen): setEvent(cur[0]) def zapTo(self): - if self.zapFunc and self["key_red"].getText() == "Zap": + if self.zapFunc and self.key_red_choice == self.ZAP: self.closeRecursive = True ref = self["list"].getCurrent()[1] if ref: @@ -514,14 +569,28 @@ class GraphMultiEPG(Screen): def eventSelected(self): self.infoKeyPressed() + def removeTimer(self, timer): + timer.afterEvent = AFTEREVENT.NONE + self.session.nav.RecordTimer.removeEntry(timer) + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + def timerAdd(self): cur = self["list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return - newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) - self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) + eventid = event.getEventId() + refstr = serviceref.ref.toString() + for timer in self.session.nav.RecordTimer.timer_list: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + cb_func = lambda ret : not ret or self.removeTimer(timer) + self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) + break + else: + newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) + self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) def finishedAdd(self, answer): print "finished add" @@ -535,25 +604,63 @@ class GraphMultiEPG(Screen): self.session.nav.RecordTimer.record(entry) else: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER else: + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER print "Timeredit aborted" def finishSanityCorrection(self, answer): self.finishedAdd(answer) def onSelectionChanged(self): - evt = self["list"].getCurrent() - self["Event"].newEvent(evt and evt[0]) - if evt and evt[0]: - evt = evt[0] - now = time() - start = evt.getBeginTime() - end = start + evt.getDuration() - if now >= start and now <= end: - self["key_red"].setText("Zap") - else: + cur = self["list"].getCurrent() + if cur is None: + if self.key_green_choice != self.EMPTY: + self["key_green"].setText("") + self.key_green_choice = self.EMPTY + if self.key_red_choice != self.EMPTY: self["key_red"].setText("") - + self.key_red_choice = self.EMPTY + return + + event = cur[0] + self["Event"].newEvent(event) + + if cur[1] is None or cur[1].getServiceName() == "": + if self.key_green_choice != self.EMPTY: + self["key_green"].setText("") + self.key_green_choice = self.EMPTY + if self.key_red_choice != self.EMPTY: + self["key_red"].setText("") + self.key_red_choice = self.EMPTY + return + elif self.key_red_choice != self.ZAP: + self["key_red"].setText("Zap") + self.key_red_choice = self.ZAP + + if not event: + if self.key_green_choice != self.EMPTY: + self["key_green"].setText("") + self.key_green_choice = self.EMPTY + return + + serviceref = cur[1] + eventid = event.getEventId() + refstr = serviceref.ref.toString() + isRecordEvent = False + for timer in self.session.nav.RecordTimer.timer_list: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + isRecordEvent = True + break + if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER: + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER + elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER: + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + def moveTimeLines(self, force=False): l = self["list"] event_rect = l.getEventRect() diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index f6793269..526576e1 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -19,8 +19,11 @@ from time import localtime, time mepg_config_initialized = False class EPGSelection(Screen): - ADD_TIMER = 0 - REMOVE_TIMER = 1 + EMPTY = 0 + ADD_TIMER = 1 + REMOVE_TIMER = 2 + + ZAP = 1 def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None): Screen.__init__(self, session) @@ -64,6 +67,7 @@ class EPGSelection(Screen): self["key_green"] = Button(_("Add timer")) self.key_green_choice = self.ADD_TIMER + self.key_red_choice = self.EMPTY self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = self.session.nav.RecordTimer) self["actions"] = ActionMap(["EPGSelectActions", "OkCancelActions"], @@ -131,6 +135,7 @@ class EPGSelection(Screen): l.recalcEntrySize() if self.type == EPG_TYPE_MULTI: l.fillMultiEPG(self.services, self.ask_time) + l.moveToService(self.session.nav.getCurrentlyPlayingServiceReference()) elif self.type == EPG_TYPE_SINGLE: l.fillSingleEPG(self.currentService) else: @@ -151,7 +156,7 @@ class EPGSelection(Screen): setEvent(cur[0]) def zapTo(self): # just used in multiepg - if self.zapFunc and self["key_red"].getText() == "Zap": + if self.zapFunc and self.key_red_choice == self.ZAP: lst = self["list"] count = lst.getCurrentChangeCount() if count == 0: @@ -250,13 +255,11 @@ class EPGSelection(Screen): self["key_red"].setText("") else: if state == 1: - self["key_red"].setText("Zap") self["now_button_sel"].show() self["now_button"].hide() else: self["now_button"].show() self["now_button_sel"].hide() - self["key_red"].setText("") if state == 2: self["next_button_sel"].show() @@ -274,6 +277,15 @@ class EPGSelection(Screen): def onSelectionChanged(self): cur = self["list"].getCurrent() + if cur is None: + if self.key_green_choice != self.EMPTY: + self["key_green"].setText("") + self.key_green_choice = self.EMPTY + if self.key_red_choice != self.EMPTY: + self["key_red"].setText("") + self.key_red_choice = self.EMPTY + return + event = cur[0] if self.type == EPG_TYPE_MULTI: count = self["list"].getCurrentChangeCount() if self.ask_time != -1: @@ -286,7 +298,6 @@ class EPGSelection(Screen): self.applyButtonState(1) days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ] datestr = "" - event = cur[0] if event is not None: now = time() beg = event.getBeginTime() @@ -297,10 +308,23 @@ class EPGSelection(Screen): else: datestr = '%s %d.%d.'%(_("Today"), begTime[2], begTime[1]) self["date"].setText(datestr) - else: - event = cur[0] + + if cur[1] is None or cur[1].getServiceName() == "": + if self.key_green_choice != self.EMPTY: + self["key_green"].setText("") + self.key_green_choice = self.EMPTY + if self.key_red_choice != self.EMPTY: + self["key_red"].setText("") + self.key_red_choice = self.EMPTY + return + elif self.key_red_choice != self.ZAP and self.type == EPG_TYPE_MULTI: + self["key_red"].setText("Zap") + self.key_red_choice = self.ZAP if event is None: + if self.key_green_choice != self.EMPTY: + self["key_green"].setText("") + self.key_green_choice = self.EMPTY return serviceref = cur[1] diff --git a/lib/python/Screens/EventView.py b/lib/python/Screens/EventView.py index 5d50d9bc..5d3786fb 100644 --- a/lib/python/Screens/EventView.py +++ b/lib/python/Screens/EventView.py @@ -1,17 +1,21 @@ from Screen import Screen from Screens.TimerEdit import TimerSanityConflict +from Screens.MessageBox import MessageBox from Components.ActionMap import ActionMap from Components.Button import Button from Components.Label import Label from Components.ScrollLabel import ScrollLabel from Components.TimerList import TimerList from enigma import eEPGCache, eTimer, eServiceReference -from RecordTimer import RecordTimerEntry, parseEvent +from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from TimerEntry import TimerEntry from time import localtime from Components.config import config class EventViewBase: + ADD_TIMER = 0 + REMOVE_TIMER = 1 + def __init__(self, Event, Ref, callback=None, similarEPGCB=None): self.similarEPGCB = similarEPGCB self.cbFunc = callback @@ -28,6 +32,7 @@ class EventViewBase: self.SimilarBroadcastTimer.callback.append(self.getSimilarEvents) else: self.SimilarBroadcastTimer = None + self.key_green_choice = self.ADD_TIMER if self.isRecording: self["key_green"] = Button("") else: @@ -59,8 +64,25 @@ class EventViewBase: if self.cbFunc is not None: self.cbFunc(self.setEvent, self.setService, +1) + def removeTimer(self, timer): + timer.afterEvent = AFTEREVENT.NONE + self.session.nav.RecordTimer.removeEntry(timer) + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + def timerAdd(self): - if not self.isRecording: + event = self.event + serviceref = self.currentService + if event is None: + return + eventid = event.getEventId() + refstr = serviceref.ref.toString() + for timer in self.session.nav.RecordTimer.timer_list: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + cb_func = lambda ret : not ret or self.removeTimer(timer) + self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) + break + else: newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) @@ -76,7 +98,11 @@ class EventViewBase: self.session.nav.RecordTimer.record(entry) else: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER else: + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER print "Timeredit aborted" def finishSanityCorrection(self, answer): @@ -123,6 +149,22 @@ class EventViewBase: if self.SimilarBroadcastTimer is not None: self.SimilarBroadcastTimer.start(400,True) + serviceref = self.currentService + eventid = self.event.getEventId() + refstr = serviceref.ref.toString() + isRecordEvent = False + for timer in self.session.nav.RecordTimer.timer_list: + if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: + isRecordEvent = True + break + if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER: + self["key_green"].setText(_("Remove timer")) + self.key_green_choice = self.REMOVE_TIMER + elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER: + self["key_green"].setText(_("Add timer")) + self.key_green_choice = self.ADD_TIMER + + def pageUp(self): self["epg_description"].pageUp() diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 59e2bd03..8cda8ca4 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -269,8 +269,9 @@ class TimerEditList(Screen): self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList()) else: print "Sanity check passed" - if not timersanitycheck.doubleCheck(): - self.session.nav.RecordTimer.timeChanged(entry) +# if not timersanitycheck.doubleCheck(): + self.session.nav.RecordTimer.timeChanged(entry) + self.fillTimerList() self.updateState() else: -- cgit v1.2.3 From 1076e4717bcf0eb93d803f73b2b75a8ae192b143 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 19 Jan 2009 11:15:37 +0100 Subject: timer fixes and improvements by adenin --- RecordTimer.py | 39 ++++++++++++++++---- .../Extensions/GraphMultiEPG/GraphMultiEpg.py | 43 ++++++++++++---------- lib/python/Screens/EpgSelection.py | 10 ++--- lib/python/Screens/EventView.py | 10 ++--- lib/python/Screens/InfoBarGenerics.py | 17 ++------- lib/python/Screens/TimerEdit.py | 33 ++++++++++------- 6 files changed, 88 insertions(+), 64 deletions(-) (limited to 'lib/python/Screens') diff --git a/RecordTimer.py b/RecordTimer.py index dcfdd578..6b306d4e 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -118,6 +118,7 @@ class RecordTimerEntry(timer.TimerEntry, object): self.dirname = dirname self.dirnameHadToFallback = False self.autoincrease = False + self.autoincreasetime = 3600 * 24 # 1 day self.tags = tags or [] self.log_entries = [] @@ -268,6 +269,11 @@ class RecordTimerEntry(timer.TimerEntry, object): return True elif next_state == self.StateEnded: + old_end = self.end + if self.setAutoincreaseEnd(): + self.log(12, "autoincrase recording %d minute(s)" % int((self.end - old_end)/60)) + self.state -= 1 + return True self.log(12, "stop recording") if not self.justplay: NavigationInstance.instance.stopRecordService(self.record_service) @@ -283,6 +289,29 @@ class RecordTimerEntry(timer.TimerEntry, object): Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20) return True + def setAutoincreaseEnd(self, entry = None): + if not self.autoincrease: + return False + if entry is None: + new_end = int(time.time()) + self.autoincreasetime + else: + new_end = entry.begin -30 + + dummyentry = RecordTimerEntry(self.service_ref, self.begin, new_end, self.name, self.description, self.eit, disabled=True, justplay = self.justplay, afterEvent = self.afterEvent, dirname = self.dirname, tags = self.tags) + dummyentry.disabled = self.disabled + timersanitycheck = TimerSanityCheck(NavigationInstance.instance.RecordTimer.timer_list, dummyentry) + if not timersanitycheck.check(): + simulTimerList = timersanitycheck.getSimulTimerList() + new_end = simulTimerList[1].begin + del simulTimerList + new_end -= 30 # 30 Sekunden Prepare-Zeit lassen + del dummyentry + if new_end <= time.time(): + return False + self.end = new_end + return True + + def sendStandbyNotification(self, answer): if answer: Notifications.AddNotification(Screens.Standby.Standby) @@ -656,6 +685,7 @@ class RecordTimer(timer.Timer): # abort timer. # this sets the end time to current time, so timer will be stopped. + entry.autoincrease = False entry.abort() if entry.state != entry.StateEnded: @@ -667,15 +697,8 @@ class RecordTimer(timer.Timer): # autoincrease instanttimer if possible if not entry.dontSave: for x in self.timer_list: - if x.dontSave and x.autoincrease: - x.end = x.begin + (3600 * 24 * 356 * 1) + if x.setAutoincreaseEnd(): self.timeChanged(x) - timersanitycheck = TimerSanityCheck(self.timer_list,x) - if not timersanitycheck.check(): - tsc_list = timersanitycheck.getSimulTimerList() - if len(tsc_list) > 1: - x.end = tsc_list[1].begin - 30 - self.timeChanged(x) # now the timer should be in the processed_timers list. remove it from there. self.processed_timers.remove(entry) self.saveTimer() diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index b2e07e10..b22c4b80 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -86,10 +86,10 @@ class EPGList(HTMLComponent, GUIComponent): return (event_list and len(event_list) and True) or False def setEpoch(self, epoch): - if self.cur_event is not None and self.cur_service is not None: - self.offs = 0 - self.time_epoch = epoch - self.fillMultiEPG(None) # refill +# if self.cur_event is not None and self.cur_service is not None: + self.offs = 0 + self.time_epoch = epoch + self.fillMultiEPG(None) # refill def getEventFromId(self, service, eventid): event = None @@ -98,16 +98,17 @@ class EPGList(HTMLComponent, GUIComponent): return event def moveToService(self,serviceref): - for x in range(len(self.list)): - if self.list[x][0] == serviceref.toString(): - self.instance.moveSelectionTo(x) - break + if serviceref is not None: + for x in range(len(self.list)): + if self.list[x][0] == serviceref.toString(): + self.instance.moveSelectionTo(x) + break def getIndexFromService(self, serviceref): - for x in range(len(self.list)): - if self.list[x][0] == serviceref.toString(): - return x - return 0 + if serviceref is not None: + for x in range(len(self.list)): + if self.list[x][0] == serviceref.toString(): + return x def setCurrentIndex(self, index): if self.instance is not None: @@ -598,11 +599,11 @@ class GraphMultiEPG(Screen): entry = answer[1] simulTimerList = self.session.nav.RecordTimer.record(entry) if simulTimerList is not None: - if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease): - simulTimerList[1].end = entry.begin - 30 - self.session.nav.RecordTimer.timeChanged(simulTimerList[1]) - self.session.nav.RecordTimer.record(entry) - else: + for x in simulTimerList: + if x.setAutoincreaseEnd(entry): + self.session.nav.RecordTimer.timeChanged(x) + simulTimerList = self.session.nav.RecordTimer.record(entry) + if simulTimerList is not None: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) self["key_green"].setText(_("Remove timer")) self.key_green_choice = self.REMOVE_TIMER @@ -662,6 +663,7 @@ class GraphMultiEPG(Screen): self.key_green_choice = self.ADD_TIMER def moveTimeLines(self, force=False): + self.updateTimelineTimer.start((60-(int(time())%60))*1000) #keep syncronised l = self["list"] event_rect = l.getEventRect() time_epoch = l.getTimeEpoch() @@ -669,6 +671,7 @@ class GraphMultiEPG(Screen): if event_rect is None or time_epoch is None or time_base is None: return time_steps = time_epoch > 180 and 60 or 30 + num_lines = time_epoch/time_steps incWidth=event_rect.width()/num_lines pos=event_rect.left() @@ -696,8 +699,7 @@ class GraphMultiEPG(Screen): now=time() timeline_now = self["timeline_now"] if now >= time_base and now < (time_base + time_epoch * 60): - bla = (event_rect.width() * 1000) / time_epoch - xpos = ((now/60) - (time_base/60)) * bla / 1000 + xpos = int((((now - time_base) * event_rect.width()) / (time_epoch * 60))-(timeline_now.instance.size().width()/2)) old_pos = timeline_now.position new_pos = (xpos+event_rect.left(), old_pos[1]) if old_pos != new_pos: @@ -705,3 +707,6 @@ class GraphMultiEPG(Screen): timeline_now.visible = True else: timeline_now.visible = False + # here no l.l.invalidate() is needed when the zPosition in the skin is correct! + + diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index 526576e1..e7388fc2 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -219,11 +219,11 @@ class EPGSelection(Screen): entry = answer[1] simulTimerList = self.session.nav.RecordTimer.record(entry) if simulTimerList is not None: - if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease): - simulTimerList[1].end = entry.begin - 30 - self.session.nav.RecordTimer.timeChanged(simulTimerList[1]) - self.session.nav.RecordTimer.record(entry) - else: + for x in simulTimerList: + if x.setAutoincreaseEnd(entry): + self.session.nav.RecordTimer.timeChanged(x) + simulTimerList = self.session.nav.RecordTimer.record(entry) + if simulTimerList is not None: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) self["key_green"].setText(_("Remove timer")) self.key_green_choice = self.REMOVE_TIMER diff --git a/lib/python/Screens/EventView.py b/lib/python/Screens/EventView.py index 5d3786fb..6aed1e11 100644 --- a/lib/python/Screens/EventView.py +++ b/lib/python/Screens/EventView.py @@ -92,11 +92,11 @@ class EventViewBase: entry = answer[1] simulTimerList = self.session.nav.RecordTimer.record(entry) if simulTimerList is not None: - if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease): - simulTimerList[1].end = entry.begin - 30 - self.session.nav.RecordTimer.timeChanged(simulTimerList[1]) - self.session.nav.RecordTimer.record(entry) - else: + for x in simulTimerList: + if x.setAutoincreaseEnd(entry): + self.session.nav.RecordTimer.timeChanged(x) + simulTimerList = self.session.nav.RecordTimer.record(entry) + if simulTimerList is not None: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) self["key_green"].setText(_("Remove timer")) self.key_green_choice = self.REMOVE_TIMER diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 79747a61..050e350b 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1428,7 +1428,7 @@ class InfoBarInstantRecord: pass begin = int(time()) - end = begin + 3600 * 24 * 365 * 1 # 1 year + end = begin + 3600 # dummy name = "instant record" description = "" eventid = None @@ -1450,18 +1450,9 @@ class InfoBarInstantRecord: recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value) recording.dontSave = True recording.autoincrease = True - - simulTimerList = self.session.nav.RecordTimer.record(recording) - if simulTimerList is not None: - print "timer conflict detected!" - if (len(simulTimerList) > 1): - print "tsc_list > 1" - recording.end = simulTimerList[1].begin - 30 - self.session.nav.RecordTimer.record(recording) - print "new endtime applied" - else: - print "conflict with only one timer? ! ?" - self.recording.append(recording) + if recording.setAutoincreaseEnd(): + self.session.nav.RecordTimer.record(recording) + self.recording.append(recording) def isInstantRecordRunning(self): print "self.recording:", self.recording diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 8cda8ca4..58cece6c 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -258,20 +258,25 @@ class TimerEditList(Screen): print "Edited timer" entry = answer[1] timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, entry) + success = False if not timersanitycheck.check(): simulTimerList = timersanitycheck.getSimulTimerList() - if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease): - simulTimerList[1].end = entry.begin - 30 - self.session.nav.RecordTimer.timeChanged(simulTimerList[1]) - self.session.nav.RecordTimer.timeChanged(entry) - else: - print "Sanity check failed" - self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList()) + if simulTimerList is not None: + for x in simulTimerList: + if x.setAutoincreaseEnd(entry): + self.session.nav.RecordTimer.timeChanged(x) + if not timersanitycheck.check(): + simulTimerList = timersanitycheck.getSimulTimerList() + if simulTimerList is not None: + self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList()) + else: + success = True else: + succsess = True + if success: print "Sanity check passed" -# if not timersanitycheck.doubleCheck(): self.session.nav.RecordTimer.timeChanged(entry) - + self.fillTimerList() self.updateState() else: @@ -283,11 +288,11 @@ class TimerEditList(Screen): entry = answer[1] simulTimerList = self.session.nav.RecordTimer.record(entry) if simulTimerList is not None: - if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease): - simulTimerList[1].end = entry.begin - 30 - self.session.nav.RecordTimer.timeChanged(simulTimerList[1]) - self.session.nav.RecordTimer.record(entry) - else: + for x in simulTimerList: + if x.setAutoincreaseEnd(entry): + self.session.nav.RecordTimer.timeChanged(x) + simulTimerList = self.session.nav.RecordTimer.record(entry) + if simulTimerList is not None: self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList) self.fillTimerList() self.updateState() -- cgit v1.2.3 From a2f2b1a1523b784e70cf3bd9a74b4cc5cfdbb3de Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 19 Jan 2009 13:24:54 +0100 Subject: add unicable support (thx to adenin) --- lib/dvb/frontend.cpp | 43 ++++ lib/dvb/frontend.h | 4 + lib/dvb/sec.cpp | 378 +++++++++++++++++++++++------------- lib/dvb/sec.h | 24 +++ lib/python/Components/NimManager.py | 183 ++++++++++++++++- lib/python/Screens/Satconfig.py | 76 ++++++-- 6 files changed, 545 insertions(+), 163 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 284844dc..aae7bbc2 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -587,6 +587,10 @@ int eDVBFrontend::closeFrontend(bool force) if (m_fd >= 0) { eDebugNoSimulate("close frontend %d", m_dvbid); + if (m_data[SATCR] != -1) + { + turnOffSatCR(m_data[SATCR]); + } setTone(iDVBFrontend::toneOff); setVoltage(iDVBFrontend::voltageOff); m_tuneTimer->stop(); @@ -2552,3 +2556,42 @@ arg_error: "eDVBFrontend::setSlotInfo must get a tuple with first param slotid, second param slot description and third param enabled boolean"); return false; } + +RESULT eDVBFrontend::turnOffSatCR(int satcr) +{ + eSecCommandList sec_sequence; + // check if voltage is disabled + eSecCommand::pair compare; + compare.steps = +9; //nothing to do + compare.voltage = iDVBFrontend::voltageOff; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50 ) ); + + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) ); + + eDVBDiseqcCommand diseqc; + memset(diseqc.data, 0, MAX_DISEQC_LENGTH); + diseqc.len = 5; + diseqc.data[0] = 0xE0; + diseqc.data[1] = 0x10; + diseqc.data[2] = 0x5A; + diseqc.data[3] = satcr << 5; + diseqc.data[4] = 0x00; + + sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50+20+14*diseqc.len) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) ); + setSecSequence(sec_sequence); + return 0; +} + +RESULT eDVBFrontend::ScanSatCR() +{ + setFrontend(); + usleep(20000); + setTone(iDVBFrontend::toneOff); + return 0; +} diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h index 6e272aca..81334886 100644 --- a/lib/dvb/frontend.h +++ b/lib/dvb/frontend.h @@ -63,6 +63,7 @@ public: FREQ_OFFSET, // current frequency offset CUR_VOLTAGE, // current voltage CUR_TONE, // current continuous tone + SATCR, // current SatCR NUM_DATA_ENTRIES }; Signal1 m_stateChanged; @@ -142,6 +143,9 @@ public: int closeFrontend(bool force=false); const char *getDescription() const { return m_description; } bool is_simulate() const { return m_simulate; } + + RESULT turnOffSatCR(int satcr); + RESULT ScanSatCR(); }; #endif // SWIG diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index da2439f9..6f64cf56 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -305,10 +305,16 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA lnb_param.m_satellites.find(sat.orbital_position); if ( sit != lnb_param.m_satellites.end()) { + eSecCommandList sec_sequence; + + lnb_param.guard_offset = 0; //HACK + + frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx); + eDVBSatelliteSwitchParameters &sw_param = sit->second; bool doSetFrontend = true; bool doSetVoltageToneFrontend = true; - bool sendDiSEqC = false; + bool forceStaticMode = true; bool forceChanged = false; bool needDiSEqCReset = false; long band=0, @@ -367,35 +373,54 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA if ( sat.frequency > lnb_param.m_lof_threshold ) band |= 1; - - if (band&1) - parm.FREQUENCY = sat.frequency - lnb_param.m_lof_hi; - else - parm.FREQUENCY = sat.frequency - lnb_param.m_lof_lo; - - parm.FREQUENCY = abs(parm.FREQUENCY); - - frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY); - if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical)) band |= 2; - if ( voltage_mode == eDVBSatelliteSwitchParameters::_14V - || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical - && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) - voltage = VOLTAGE(13); - else if ( voltage_mode == eDVBSatelliteSwitchParameters::_18V - || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical) - && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) - voltage = VOLTAGE(18); - if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON) - || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && (band&1) ) ) - tone = iDVBFrontend::toneOn; - else if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::OFF) - || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && !(band&1) ) ) - tone = iDVBFrontend::toneOff; + int lof = (band&1)?lnb_param.m_lof_hi:lnb_param.m_lof_lo; + + int local=0; - eSecCommandList sec_sequence; + + if(lnb_param.SatCR_idx == -1) + { + // calc Frequency + local = abs(sat.frequency + - ((lof - (lof % 1000)) + ((lof % 1000)>500 ? 1000 : 0)) ); //TODO für den Mist mal ein Macro schreiben + parm.FREQUENCY = (local - (local % 125)) + ((local % 125)>62 ? 125 : 0); + frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY); + + if ( voltage_mode == eDVBSatelliteSwitchParameters::_14V + || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical + && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) + voltage = VOLTAGE(13); + else if ( voltage_mode == eDVBSatelliteSwitchParameters::_18V + || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical) + && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) + voltage = VOLTAGE(18); + if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON) + || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && (band&1) ) ) + tone = iDVBFrontend::toneOn; + else if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::OFF) + || ( sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::HILO && !(band&1) ) ) + tone = iDVBFrontend::toneOff; + } + else + { + unsigned int tmp = abs(sat.frequency + - ((lof - (lof % 1000)) + ((lof % 1000)>500 ? 1000 : 0)) ) + + lnb_param.SatCRvco + - 1400000 + + lnb_param.guard_offset; + parm.FREQUENCY = (lnb_param.SatCRvco - (tmp % 4000))+((tmp%4000)>2000?4000:0)+lnb_param.guard_offset; + lnb_param.UnicableTuningWord = (((tmp / 4000)+((tmp%4000)>2000?1:0)) + | ((band & 1) ? 0x400 : 0) //HighLow + | ((band & 2) ? 0x800 : 0) //VertHor + | ((lnb_param.LNBNum & 1) ? 0 : 0x1000) //Umschaltung LNB1 LNB2 + | (lnb_param.SatCR_idx << 13)); //Adresse des SatCR + eDebug("[prepare] UnicableTuningWord %#04x",lnb_param.UnicableTuningWord); + eDebug("[prepare] guard_offset %d",lnb_param.guard_offset); + frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - ((lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 - lnb_param.SatCRvco + lof)); + } if (diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0) { @@ -668,14 +693,13 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA if (di_param.m_seq_repeat && seq_repeat == 0) sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_BEFORE_SEQUENCE_REPEAT]) ); } - sendDiSEqC = true; } eDebugNoSimulate("RotorCmd %02x, lastRotorCmd %02lx", RotorCmd, lastRotorCmd); if ( RotorCmd != -1 && RotorCmd != lastRotorCmd ) { eSecCommand::pair compare; - if (!send_mask) + if (!send_mask && lnb_param.SatCR_idx == -1) { compare.steps = +3; compare.tone = iDVBFrontend::toneOff; @@ -729,112 +753,113 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA diseqc.data[3] = RotorCmd; diseqc.data[4] = 0x00; } - - if ( rotor_param.m_inputpower_parameters.m_use ) - { // use measure rotor input power to detect rotor state - bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed); - eSecCommand::rotor cmd; - eSecCommand::pair compare; - if (turn_fast) - compare.voltage = VOLTAGE(18); + if(lnb_param.SatCR_idx == -1) + { + if ( rotor_param.m_inputpower_parameters.m_use ) + { // use measure rotor input power to detect rotor state + bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed); + eSecCommand::rotor cmd; + eSecCommand::pair compare; + if (turn_fast) + compare.voltage = VOLTAGE(18); + else + compare.voltage = VOLTAGE(13); + compare.steps = +3; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) ); + // measure idle power values + compare.steps = -2; + if (turn_fast) { + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) ); // wait 150msec after voltage change + sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) ); + compare.val = 1; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); + } + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) ); // wait 150msec before measure + sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) ); + compare.val = 0; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) ); + //////////////////////////// + sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) ); // 2 retries + sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) ); // 2 seconds rotor start timout + // rotor start loop + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); // 50msec delay + sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) ); + cmd.direction=1; // check for running rotor + cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta; + cmd.steps=+5; + cmd.okcount=0; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) ); // check if rotor has started + sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) ); // timeout .. we assume now the rotor is already at the correct position + sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) ); // goto loop start + sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) ); // timeout .. we assume now the rotor is already at the correct position + sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) ); // goto loop start + //////////////////// + sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) ); + if (turn_fast) + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*20) ); // 2 minutes running timeout + // rotor running loop + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); // wait 50msec + sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) ); + cmd.direction=0; // check for stopped rotor + cmd.steps=+3; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) ); + sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) ); // timeout ? this should never happen + sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) ); // running loop start + ///////////////////// + sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) ); + } else + { // use normal turning mode + doSetVoltageToneFrontend=false; + doSetFrontend=false; + eSecCommand::rotor cmd; + eSecCommand::pair compare; compare.voltage = VOLTAGE(13); - compare.steps = +3; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) ); -// measure idle power values - compare.steps = -2; - if (turn_fast) { - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) ); // wait 150msec after voltage change - sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) ); - compare.val = 1; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) ); + compare.steps = +3; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) ); // wait 150msec after voltage change + + sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); + + compare.voltage = voltage; + compare.steps = +3; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage? + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) ); // wait 2 second before set high voltage + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) ); + + compare.tone = tone; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) ); + + cmd.direction=1; // check for running rotor + cmd.deltaA=0; + cmd.steps=+3; + cmd.okcount=0; + sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*4) ); // 2 minutes running timeout + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) ); // 250msec delay + sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) ); + sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +3 ) ); + sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) ); // goto loop start + sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) ); + sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +3) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) ); + sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) ); } - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) ); // wait 150msec before measure - sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) ); - compare.val = 0; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) ); -//////////////////////////// - sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_DISEQC_RETRYS, m_params[MOTOR_COMMAND_RETRIES]) ); // 2 retries - sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, 40) ); // 2 seconds rotor start timout -// rotor start loop - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); // 50msec delay - sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) ); - cmd.direction=1; // check for running rotor - cmd.deltaA=rotor_param.m_inputpower_parameters.m_delta; - cmd.steps=+5; - cmd.okcount=0; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) ); // check if rotor has started - sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) ); // timeout .. we assume now the rotor is already at the correct position - sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) ); // goto loop start - sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, turn_fast ? 10 : 9 ) ); // timeout .. we assume now the rotor is already at the correct position - sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) ); // goto loop start -//////////////////// - sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) ); - if (turn_fast) - sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*20) ); // 2 minutes running timeout -// rotor running loop - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); // wait 50msec - sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_RUNNING_INPUTPOWER) ); - cmd.direction=0; // check for stopped rotor - cmd.steps=+3; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_INPUTPOWER_DELTA_GOTO, cmd ) ); - sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +2 ) ); // timeout ? this should never happen - sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) ); // running loop start -///////////////////// - sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) ); - } - else - { // use normal turning mode - doSetVoltageToneFrontend=false; - doSetFrontend=false; - eSecCommand::rotor cmd; - eSecCommand::pair compare; - compare.voltage = VOLTAGE(13); - compare.steps = +3; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) ); // wait 150msec after voltage change - - sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_ROTORPARMS) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_MOVING) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); - - compare.voltage = voltage; - compare.steps = +3; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) ); // correct final voltage? - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 2000) ); // wait 2 second before set high voltage - sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, voltage) ); - - compare.tone = tone; - sec_sequence.push_back( eSecCommand(eSecCommand::IF_TONE_GOTO, compare) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, tone) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_CONT_TONE]) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) ); - - cmd.direction=1; // check for running rotor - cmd.deltaA=0; - cmd.steps=+3; - cmd.okcount=0; - sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*4) ); // 2 minutes running timeout - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) ); // 250msec delay - sec_sequence.push_back( eSecCommand(eSecCommand::IF_TUNER_LOCKED_GOTO, cmd ) ); - sec_sequence.push_back( eSecCommand(eSecCommand::IF_TIMEOUT_GOTO, +3 ) ); - sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -3) ); // goto loop start - sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_ROTOR_STOPPED) ); - sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, +3) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) ); - sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) ); } sec_fe->setData(eDVBFrontend::NEW_ROTOR_CMD, RotorCmd); sec_fe->setData(eDVBFrontend::NEW_ROTOR_POS, sat.orbital_position); - sendDiSEqC = true; } } } @@ -844,14 +869,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA csw = band; } -// if (sendDiSEqC) - sec_sequence.push_front( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeStatic) ); - sec_fe->setData(eDVBFrontend::NEW_CSW, csw); sec_fe->setData(eDVBFrontend::NEW_UCSW, ucsw); sec_fe->setData(eDVBFrontend::NEW_TONEBURST, di_param.m_toneburst_param); - if (doSetVoltageToneFrontend) + if ((doSetVoltageToneFrontend) && (lnb_param.SatCR_idx == -1)) { eSecCommand::pair compare; compare.voltage = voltage; @@ -867,16 +889,45 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) ); + if(lnb_param.SatCR_idx != -1) + { + // check if voltage is disabled + eSecCommand::pair compare; + compare.steps = +3; + compare.voltage = iDVBFrontend::voltageOff; + sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50 ) ); + + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD]) ); // wait 150msec after voltage change + + eDVBDiseqcCommand diseqc; + memset(diseqc.data, 0, MAX_DISEQC_LENGTH); + diseqc.len = 5; + diseqc.data[0] = 0xE0; + diseqc.data[1] = 0x10; + diseqc.data[2] = 0x5A; + diseqc.data[3] = lnb_param.UnicableTuningWord >> 8; + diseqc.data[4] = lnb_param.UnicableTuningWord; + + sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) ); + } + if (doSetFrontend) { sec_sequence.push_back( eSecCommand(eSecCommand::START_TUNE_TIMEOUT, tunetimeout) ); sec_sequence.push_back( eSecCommand(eSecCommand::SET_FRONTEND) ); } - -// if (sendDiSEqC) - sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); - sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) ); - + + if (forceStaticMode) + { + sec_sequence.push_front( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeStatic) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SET_POWER_LIMITING_MODE, eSecCommand::modeDynamic) ); + } frontend.setSecSequence(sec_sequence); return 0; @@ -928,6 +979,7 @@ RESULT eDVBSatelliteEquipmentControl::clear() it->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, -1); it->m_frontend->setData(eDVBFrontend::ROTOR_POS, -1); it->m_frontend->setData(eDVBFrontend::ROTOR_CMD, -1); + it->m_frontend->setData(eDVBFrontend::SATCR, -1); } for (eSmartPtrList::iterator it(m_avail_simulate_frontends.begin()); it != m_avail_simulate_frontends.end(); ++it) @@ -937,6 +989,7 @@ RESULT eDVBSatelliteEquipmentControl::clear() it->m_frontend->setData(eDVBFrontend::LINKED_NEXT_PTR, -1); it->m_frontend->setData(eDVBFrontend::ROTOR_POS, -1); it->m_frontend->setData(eDVBFrontend::ROTOR_CMD, -1); + it->m_frontend->setData(eDVBFrontend::SATCR, -1); } return 0; @@ -1016,6 +1069,17 @@ RESULT eDVBSatelliteEquipmentControl::setLNBPrio(int prio) return 0; } +RESULT eDVBSatelliteEquipmentControl::setLNBNum(int LNBNum) +{ + eSecDebug("eDVBSatelliteEquipmentControl::setLNBNum(%d)", LNBNum); + if(!((LNBNum >= 1) && (LNBNum <= MAX_LNBNUM))) + return -EPERM; + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].LNBNum = LNBNum; + else + return -ENOENT; + return 0; +} /* DiSEqC Specific Parameters */ RESULT eDVBSatelliteEquipmentControl::setDiSEqCMode(int diseqcmode) @@ -1159,6 +1223,46 @@ RESULT eDVBSatelliteEquipmentControl::setInputpowerDelta(int delta) return 0; } +/* Unicable Specific Parameters */ +RESULT eDVBSatelliteEquipmentControl::setLNBSatCR(int SatCR_idx) +{ + eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCR(%d)", SatCR_idx); + if(!((SatCR_idx >=-1) && (SatCR_idx < MAX_SATCR))) + return -EPERM; + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].SatCR_idx = SatCR_idx; + else + return -ENOENT; + return 0; +} + +RESULT eDVBSatelliteEquipmentControl::setLNBSatCRvco(int SatCRvco) +{ + eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCRvco(%d)", SatCRvco); + if(!((SatCRvco >= 950*1000) && (SatCRvco <= 2150*1000))) + return -EPERM; + if(!((m_lnbs[m_lnbidx].SatCR_idx >= 0) && (m_lnbs[m_lnbidx].SatCR_idx < MAX_SATCR))) + return -ENOENT; + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].SatCRvco = SatCRvco; + else + return -ENOENT; + return 0; +} +RESULT eDVBSatelliteEquipmentControl::getLNBSatCR() +{ + if ( currentLNBValid() ) + return m_lnbs[m_lnbidx].SatCR_idx; + return -ENOENT; +} + +RESULT eDVBSatelliteEquipmentControl::getLNBSatCRvco() +{ + if ( currentLNBValid() ) + return m_lnbs[m_lnbidx].SatCRvco; + return -ENOENT; +} + /* Satellite Specific Parameters */ RESULT eDVBSatelliteEquipmentControl::addSatellite(int orbital_position) { diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h index 2efd0b49..5bff6bf7 100644 --- a/lib/dvb/sec.h +++ b/lib/dvb/sec.h @@ -245,6 +245,23 @@ public: int m_prio; // to override automatic tuner management ... -1 is Auto #endif +public: +#define guard_offset_min -8000 +#define guard_offset_max 8000 +#define guard_offset_step 8000 +#define MAX_SATCR 8 +#define MAX_LNBNUM 32 + + int SatCR_idx; + unsigned int SatCRvco; + unsigned int UnicableTuningWord; + unsigned int UnicableConfigWord; + int old_frequency; + int old_polarisation; + int old_orbital_position; + int guard_offset_old; + int guard_offset; + int LNBNum; }; class eDVBRegisteredFrontend; @@ -307,6 +324,7 @@ public: RESULT setLNBThreshold(int threshold); RESULT setLNBIncreasedVoltage(bool onoff); RESULT setLNBPrio(int prio); + RESULT setLNBNum(int LNBNum); /* DiSEqC Specific Parameters */ RESULT setDiSEqCMode(int diseqcmode); RESULT setToneburst(int toneburst); @@ -324,6 +342,12 @@ public: RESULT setUseInputpower(bool onoff); RESULT setInputpowerDelta(int delta); // delta between running and stopped rotor RESULT setRotorTurningSpeed(int speed); // set turning speed.. +/* Unicable Specific Parameters */ + RESULT setLNBSatCR(int SatCR_idx); + RESULT setLNBSatCRvco(int SatCRvco); +// RESULT checkGuardOffset(const eDVBFrontendParametersSatellite &sat); + RESULT getLNBSatCR(); + RESULT getLNBSatCRvco(); /* Satellite Specific Parameters */ RESULT addSatellite(int orbital_position); RESULT setVoltageMode(int mode); diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 168962e9..1fcbda1a 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -51,6 +51,8 @@ class SecConfigure: elif self.linked.has_key(slotid): for slot in self.linked[slotid]: tunermask |= (1 << slot) + sec.setLNBSatCR(-1) + sec.setLNBNum(1) sec.setLNBLOFL(9750000) sec.setLNBLOFH(10600000) sec.setLNBThreshold(11700000) @@ -255,6 +257,9 @@ class SecConfigure: currLnb = config.Nims[slotid].advanced.lnb[x] sec.addLNB() + if x < 33: + sec.setLNBNum(x) + tunermask = 1 << slotid if self.equal.has_key(slotid): for slot in self.equal[slotid]: @@ -263,10 +268,32 @@ class SecConfigure: for slot in self.linked[slotid]: tunermask |= (1 << slot) + if currLnb.lof.value != "unicable": + sec.setLNBSatCR(-1) + if currLnb.lof.value == "universal_lnb": sec.setLNBLOFL(9750000) sec.setLNBLOFH(10600000) sec.setLNBThreshold(11700000) + elif currLnb.lof.value == "unicable": + sec.setLNBLOFL(9750000) + sec.setLNBLOFH(10600000) + sec.setLNBThreshold(11700000) + if currLnb.unicable.value == "unicable_user": + sec.setLNBSatCR(currLnb.satcruser.index) + sec.setLNBSatCRvco(currLnb.satcrvcouser[currLnb.satcruser.index].value*1000) + elif currLnb.unicable.value == "unicable_matrix": + manufacturer_name = currLnb.unicableMatrixManufacturer.value + manufacturer = currLnb.unicableMatrix[manufacturer_name] + product_name = manufacturer.product.value + sec.setLNBSatCR(manufacturer.scr[product_name].index) + sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000) + elif currLnb.unicable.value == "unicable_lnb": + manufacturer_name = currLnb.unicableMatrixManufacturer.value + manufacturer = currLnb.unicableMatrix[manufacturer_name] + product_name = manufacturer.product.value + sec.setLNBSatCR(manufacturer.scr[product_name].index) + sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000) elif currLnb.lof.value == "c_band": sec.setLNBLOFL(5150000) sec.setLNBLOFH(5150000) @@ -892,6 +919,129 @@ def InitNimManager(nimmgr): for x in range(len(nimmgr.nim_slots)): config.Nims.append(ConfigSubsection()) + lnb_choices = { + "universal_lnb": _("Universal LNB"), + "unicable": _("Unicable"), + "c_band": _("C-Band"), + "user_defined": _("User defined")} + lnb_choices_default = "universal_lnb" + + unicablelnbproducts = { + "Humax": {"150 SCR":["1210","1420","1680","2040"]}, + "Inverto": {"IDLP-40UNIQD+S":["1680","1420","2040","1210"]}, + "Kathrein": {"UAS481":["1400","1516","1632","1748"]}, + "Kreiling": {"KR1440":["1680","1420","2040","1210"]}, + "Radix": {"Unicable LNB":["1680","1420","2040","1210"]}, + "Wisi": {"OC 05":["1210","1420","1680","2040"]}} + UnicableLnbManufacturers = unicablelnbproducts.keys() + UnicableLnbManufacturers.sort() + + unicablematrixproducts = { + "Ankaro": { + "UCS 51440":["1400","1632","1284","1516"], + "UCS 51820":["1400","1632","1284","1516","1864","2096","1748","1980"], + "UCS 51840":["1400","1632","1284","1516","1864","2096","1748","1980"], + "UCS 52240":["1400","1632"], + "UCS 52420":["1400","1632","1284","1516"], + "UCS 52440":["1400","1632","1284","1516"], + "UCS 91440":["1400","1632","1284","1516"], + "UCS 91820":["1400","1632","1284","1516","1864","2096","1748","1980"], + "UCS 91840":["1400","1632","1284","1516","1864","2096","1748","1980"], + "UCS 92240":["1400","1632"], + "UCS 92420":["1400","1632","1284","1516"], + "UCS 92440":["1400","1632","1284","1516"]}, + "DCT Delta": { + "SUM518":["1284","1400","1516","1632","1748","1864","1980","2096"], + "SUM918":["1284","1400","1516","1632","1748","1864","1980","2096"], + "SUM928":["1284","1400","1516","1632","1748","1864","1980","2096"]}, + "Inverto": { + "IDLP-UST11O-CUO1O-8PP":["1076","1178","1280","1382","1484","1586","1688","1790"]}, + "Kathrein": { + "EXR501":["1400","1516","1632","1748"], + "EXR551":["1400","1516","1632","1748"], + "EXR552":["1400","1516"]}, + "ROTEK": { + "EKL2/1":["1400","1516"], + "EKL2/1E":["0","0","1632","1748"]}, + "Smart": { + "DPA 51":["1284","1400","1516","1632","1748","1864","1980","2096"]}, + "Technisat": { + "TechniRouter 5/1x8 G":["1284","1400","1516","1632","1748","1864","1980","2096"], + "TechniRouter 5/1x8 K":["1284","1400","1516","1632","1748","1864","1980","2096"], + "TechniRouter 5/2x4 G":["1284","1400","1516","1632"], + "TechniRouter 5/2x4 K":["1284","1400","1516","1632"]}, + "Telstar": { + "SCR 5/1x8 G":["1284","1400","1516","1632","1748","1864","1980","2096"], + "SCR 5/1x8 K":["1284","1400","1516","1632","1748","1864","1980","2096"], + "SCR 5/2x4 G":["1284","1400","1516","1632"], + "SCR 5/2x4 K":["1284","1400","1516","1632"]}} + UnicableMatrixManufacturers = unicablematrixproducts.keys() + UnicableMatrixManufacturers.sort() + + unicable_choices = { + "unicable_lnb": _("Unicable LNB"), + "unicable_matrix": _("Unicable Martix"), + "unicable_user": "Unicable "+_("User defined")} + unicable_choices_default = "unicable_lnb" + + unicableLnb = ConfigSubDict() + for y in unicablelnbproducts: + products = unicablelnbproducts[y].keys() + products.sort() + unicableLnb[y] = ConfigSubsection() + unicableLnb[y].product = ConfigSelection(choices = products, default = products[0]) + unicableLnb[y].scr = ConfigSubDict() + unicableLnb[y].vco = ConfigSubDict() + for z in products: + scrlist = [] + vcolist = unicablelnbproducts[y][z] + unicableLnb[y].vco[z] = ConfigSubList() + for cnt in range(1,1+len(vcolist)): + scrlist.append(("%d" %cnt,"SCR %d" %cnt)) + vcofreq = int(vcolist[cnt-1]) + unicableLnb[y].vco[z].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq))) + unicableLnb[y].scr[z] = ConfigSelection(choices = scrlist, default = scrlist[0][0]) + + unicableMatrix = ConfigSubDict() + + for y in unicablematrixproducts: + products = unicablematrixproducts[y].keys() + products.sort() + unicableMatrix[y] = ConfigSubsection() + unicableMatrix[y].product = ConfigSelection(choices = products, default = products[0]) + unicableMatrix[y].scr = ConfigSubDict() + unicableMatrix[y].vco = ConfigSubDict() + for z in products: + scrlist = [] + vcolist = unicablematrixproducts[y][z] + unicableMatrix[y].vco[z] = ConfigSubList() + for cnt in range(1,1+len(vcolist)): + vcofreq = int(vcolist[cnt-1]) + if vcofreq == 0: + scrlist.append(("%d" %cnt,"SCR %d " %cnt +_("not used"))) + else: + scrlist.append(("%d" %cnt,"SCR %d" %cnt)) + unicableMatrix[y].vco[z].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq))) + unicableMatrix[y].scr[z] = ConfigSelection(choices = scrlist, default = scrlist[0][0]) + + satcrvcouser = ConfigSubList() + satcrvcouser.append(ConfigInteger(default=1284, limits = (0, 9999))) + satcrvcouser.append(ConfigInteger(default=1400, limits = (0, 9999))) + satcrvcouser.append(ConfigInteger(default=1516, limits = (0, 9999))) + satcrvcouser.append(ConfigInteger(default=1632, limits = (0, 9999))) + satcrvcouser.append(ConfigInteger(default=1748, limits = (0, 9999))) + satcrvcouser.append(ConfigInteger(default=1864, limits = (0, 9999))) + satcrvcouser.append(ConfigInteger(default=1980, limits = (0, 9999))) + satcrvcouser.append(ConfigInteger(default=2096, limits = (0, 9999))) + + prio_list = [ ("-1", _("Auto")) ] + for prio in range(65): + prio_list.append((str(prio), str(prio))) + for prio in range(14000,14065): + prio_list.append((str(prio), str(prio))) + for prio in range(19000,19065): + prio_list.append((str(prio), str(prio))) + for slot in nimmgr.nim_slots: x = slot.slot nim = config.Nims[x] @@ -990,12 +1140,36 @@ def InitNimManager(nimmgr): nim.advanced.lnb = ConfigSubList() nim.advanced.lnb.append(ConfigNothing()) + + for x in range(1, 37): nim.advanced.lnb.append(ConfigSubsection()) - nim.advanced.lnb[x].lof = ConfigSelection(choices={"universal_lnb": _("Universal LNB"), "c_band": _("C-Band"), "user_defined": _("User defined")}, default="universal_lnb") + nim.advanced.lnb[x].lof = ConfigSelection(choices = lnb_choices, default = lnb_choices_default) + nim.advanced.lnb[x].lofl = ConfigInteger(default=9750, limits = (0, 99999)) nim.advanced.lnb[x].lofh = ConfigInteger(default=10600, limits = (0, 99999)) nim.advanced.lnb[x].threshold = ConfigInteger(default=11700, limits = (0, 99999)) + + nim.advanced.lnb[x].unicable = ConfigSelection(choices = unicable_choices, default = unicable_choices_default) + + nim.advanced.lnb[x].unicableLnb = unicableLnb + nim.advanced.lnb[x].unicableLnbManufacturer = ConfigSelection(choices = UnicableLnbManufacturers, default = UnicableLnbManufacturers[0]) + + nim.advanced.lnb[x].unicableMatrix = unicableMatrix + nim.advanced.lnb[x].unicableMatrixManufacturer = ConfigSelection(choices = UnicableMatrixManufacturers, default = UnicableMatrixManufacturers[0]) + + nim.advanced.lnb[x].satcruser = ConfigSelection(choices=[ + ("1", "SatCR 1"), + ("2", "SatCR 2"), + ("3", "SatCR 3"), + ("4", "SatCR 4"), + ("5", "SatCR 5"), + ("6", "SatCR 6"), + ("7", "SatCR 7"), + ("8", "SatCR 8")], + default="1") + nim.advanced.lnb[x].satcrvcouser = satcrvcouser + # nim.advanced.lnb[x].output_12v = ConfigSelection(choices = [("0V", _("0 V")), ("12V", _("12 V"))], default="0V") nim.advanced.lnb[x].increased_voltage = ConfigYesNo(default=False) nim.advanced.lnb[x].toneburst = ConfigSelection(choices = [("none", _("None")), ("A", _("A")), ("B", _("B"))], default = "none") @@ -1028,13 +1202,6 @@ def InitNimManager(nimmgr): nim.advanced.lnb[x].fastTurningBegin = ConfigDateTime(default=mktime(btime.timetuple()), formatstring = _("%H:%M"), increment = 600) etime = datetime(1970, 1, 1, 19, 0); nim.advanced.lnb[x].fastTurningEnd = ConfigDateTime(default=mktime(etime.timetuple()), formatstring = _("%H:%M"), increment = 600) - prio_list = [ ("-1", _("Auto")) ] - for prio in range(65): - prio_list.append((str(prio), str(prio))) - for prio in range(14000,14065): - prio_list.append((str(prio), str(prio))) - for prio in range(19000,19065): - prio_list.append((str(prio), str(prio))) nim.advanced.lnb[x].prio = ConfigSelection(default="-1", choices=prio_list) elif slot.isCompatible("DVB-C"): nim.configMode = ConfigSelection( diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 320bea84..da6fcc12 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -87,6 +87,10 @@ class NimSetup(Screen, ConfigListScreen): self.uncommittedDiseqcCommand = None self.cableScanType = None self.have_advanced = False + self.advancedUnicable = None + self.advancedType = None + self.advancedManufacturer = None + self.advancedSCR = None if self.nim.isCompatible("DVB-S"): self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode) @@ -190,6 +194,7 @@ class NimSetup(Screen, ConfigListScreen): checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \ self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \ self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \ + self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, \ self.uncommittedDiseqcCommand, self.cableScanType) for x in checkList: if self["config"].getCurrent() == x: @@ -216,19 +221,57 @@ class NimSetup(Screen, ConfigListScreen): if isinstance(currLnb, ConfigNothing): currLnb = None - self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage)) - self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode)) - if currLnb and currLnb.diseqcMode.value == "1_2": - if lnbnum < 33: - self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals) - self.list.append(self.advancedUsalsEntry) - if not Sat.usals.value: - self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition)) - # LNBs self.advancedLnbsEntry = getConfigListEntry(_("LNB"), Sat.lnb) self.list.append(self.advancedLnbsEntry) + if currLnb: + self.list.append(getConfigListEntry(_("Priority"), currLnb.prio)) + self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof) + self.list.append(self.advancedLof) + if currLnb.lof.value == "user_defined": + self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl)) + self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh)) + self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold)) +# self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v)) + + if currLnb.lof.value == "unicable": + self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable) + self.list.append(self.advancedUnicable) + if currLnb.unicable.value == "unicable_user": + self.advancedSCR = getConfigListEntry(_("Channel"), currLnb.satcruser) + self.list.append(self.advancedSCR) + self.list.append(getConfigListEntry(_("Frequency"), currLnb.satcrvcouser[currLnb.satcruser.index])) + self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl)) + self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh)) + self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold)) + elif currLnb.unicable.value == "unicable_matrix": + manufacturer_name = currLnb.unicableMatrixManufacturer.value + manufacturer = currLnb.unicableMatrix[manufacturer_name] + product_name = manufacturer.product.value + self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer) + self.advancedType = getConfigListEntry(_("Type"), manufacturer.product) + self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name]) + self.list.append(self.advancedManufacturer) + self.list.append(self.advancedType) + self.list.append(self.advancedSCR) + self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) + elif currLnb.unicable.value == "unicable_lnb": + manufacturer_name = currLnb.unicableLnbManufacturer.value + manufacturer = currLnb.unicableLnb[manufacturer_name] + product_name = manufacturer.product.value + self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer) + self.advancedType = getConfigListEntry(_("Type"), manufacturer.product) + self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name]) + self.list.append(self.advancedManufacturer) + self.list.append(self.advancedType) + self.list.append(self.advancedSCR) + self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) + else: #kein Unicable + self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage)) + self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage)) + self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode)) + if lnbnum < 33: self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode) self.list.append(self.advancedDiseqcMode) @@ -275,15 +318,12 @@ class NimSetup(Screen, ConfigListScreen): if currLnb.powerMeasurement.value: currLnb.powerMeasurement.value = False currLnb.powerMeasurement.save() - self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof) - self.list.append(self.advancedLof) - if currLnb.lof.value == "user_defined": - self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl)) - self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh)) - self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold)) -# self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v)) - self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage)) - self.list.append(getConfigListEntry(_("Priority"), currLnb.prio)) + self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals) + self.list.append(self.advancedUsalsEntry) + if not Sat.usals.value: + self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition)) + + def fillAdvancedList(self): self.list = [ ] -- cgit v1.2.3 From 4be13de9082e1c79de77db6fa3eeab18a3955715 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 19 Jan 2009 21:05:45 +0100 Subject: remove nested structures because of the fact that swig cannot handle this now we no more need the bad duplicate definitions of eDVBFrontendParametersSatellite/Cables/Terrestrial content i.e. eDVBFrontendParametersSatellite.System_DVB_S or eDVBFrontendParametersSatellite.FEC_Auto.... --- lib/dvb/db.cpp | 16 +- lib/dvb/frontend.cpp | 530 ++++++++------------- lib/dvb/frontendparms.h | 124 +++-- lib/dvb/sec.cpp | 20 +- .../SystemPlugins/PositionerSetup/plugin.py | 32 +- .../Plugins/SystemPlugins/Satfinder/plugin.py | 32 +- lib/python/Screens/ScanSetup.py | 343 +++++++------ lib/service/servicedvb.cpp | 177 ++++--- 8 files changed, 577 insertions(+), 697 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index e5a94392..719ff35e 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -327,10 +327,10 @@ void eDVBDB::loadServicelist(const char *file) eDVBFrontendParametersSatellite sat; int frequency, symbol_rate, polarisation, fec, orbital_position, inversion, flags=0, - system=eDVBFrontendParametersSatellite::System::DVB_S, - modulation=eDVBFrontendParametersSatellite::Modulation::QPSK, - rolloff=eDVBFrontendParametersSatellite::RollOff::alpha_0_35, - pilot=eDVBFrontendParametersSatellite::Pilot::Unknown; + system=eDVBFrontendParametersSatellite::System_DVB_S, + modulation=eDVBFrontendParametersSatellite::Modulation_QPSK, + rolloff=eDVBFrontendParametersSatellite::RollOff_alpha_0_35, + pilot=eDVBFrontendParametersSatellite::Pilot_Unknown; if (version == 3) sscanf(line+3, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &polarisation, &fec, &orbital_position, &inversion, &system, &modulation, &rolloff, &pilot); else @@ -368,9 +368,9 @@ void eDVBDB::loadServicelist(const char *file) { eDVBFrontendParametersCable cab; int frequency, symbol_rate, - inversion=eDVBFrontendParametersCable::Inversion::Unknown, - modulation=eDVBFrontendParametersCable::Modulation::Auto, - fec_inner=eDVBFrontendParametersCable::FEC::fAuto, + inversion=eDVBFrontendParametersCable::Inversion_Unknown, + modulation=eDVBFrontendParametersCable::Modulation_Auto, + fec_inner=eDVBFrontendParametersCable::FEC_Auto, flags=0; sscanf(line+3, "%d:%d:%d:%d:%d:%d", &frequency, &symbol_rate, &inversion, &modulation, &fec_inner, &flags); cab.frequency = frequency; @@ -495,7 +495,7 @@ void eDVBDB::saveServicelist(const char *file) ch.m_frontendParameters->getFlags(flags); if (!ch.m_frontendParameters->getDVBS(sat)) { - if (sat.system == eDVBFrontendParametersSatellite::System::DVB_S2) + if (sat.system == eDVBFrontendParametersSatellite::System_DVB_S2) { fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n", sat.frequency, sat.symbol_rate, diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index aae7bbc2..5fe3799d 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -1,4 +1,5 @@ #include +#include #include #include // access to python config #include @@ -148,10 +149,10 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto symbol_rate = descriptor.getSymbolRate() * 100; polarisation = descriptor.getPolarization(); fec = descriptor.getFecInner(); - if ( fec != FEC::fNone && fec > FEC::f9_10 ) - fec = FEC::fAuto; - inversion = Inversion::Unknown; - pilot = Pilot::Unknown; + if ( fec != eDVBFrontendParametersSatellite::FEC_None && fec > eDVBFrontendParametersSatellite::FEC_9_10 ) + fec = eDVBFrontendParametersSatellite::FEC_Auto; + inversion = eDVBFrontendParametersSatellite::Inversion_Unknown; + pilot = eDVBFrontendParametersSatellite::Pilot_Unknown; orbital_position = ((descriptor.getOrbitalPosition() >> 12) & 0xF) * 1000; orbital_position += ((descriptor.getOrbitalPosition() >> 8) & 0xF) * 100; orbital_position += ((descriptor.getOrbitalPosition() >> 4) & 0xF) * 10; @@ -160,13 +161,13 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto orbital_position = 3600 - orbital_position; system = descriptor.getModulationSystem(); modulation = descriptor.getModulation(); - if (system == System::DVB_S && modulation == Modulation::M8PSK) + if (system == eDVBFrontendParametersSatellite::System_DVB_S && modulation == eDVBFrontendParametersSatellite::Modulation_8PSK) { eDebug("satellite_delivery_descriptor non valid modulation type.. force QPSK"); - modulation=QPSK; + modulation=eDVBFrontendParametersSatellite::Modulation_QPSK; } rolloff = descriptor.getRollOff(); - if (system == System::DVB_S2) + if (system == eDVBFrontendParametersSatellite::System_DVB_S2) { eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, rolloff %d", frequency, @@ -192,11 +193,11 @@ void eDVBFrontendParametersCable::set(const CableDeliverySystemDescriptor &descr symbol_rate = descriptor.getSymbolRate() * 100; fec_inner = descriptor.getFecInner(); if ( fec_inner == 0xF ) - fec_inner = FEC::fNone; + fec_inner = eDVBFrontendParametersCable::FEC_None; modulation = descriptor.getModulation(); if ( modulation > 0x5 ) - modulation = Modulation::Auto; - inversion = Inversion::Unknown; + modulation = eDVBFrontendParametersCable::Modulation_Auto; + inversion = eDVBFrontendParametersCable::Inversion_Unknown; eDebug("Cable freq %d, mod %d, sr %d, fec %d", frequency, modulation, symbol_rate, fec_inner); @@ -207,24 +208,24 @@ void eDVBFrontendParametersTerrestrial::set(const TerrestrialDeliverySystemDescr frequency = descriptor.getCentreFrequency() * 10; bandwidth = descriptor.getBandwidth(); if ( bandwidth > 2 ) // 5Mhz forced to auto - bandwidth = Bandwidth::BwAuto; + bandwidth = eDVBFrontendParametersTerrestrial::Bandwidth_Auto; code_rate_HP = descriptor.getCodeRateHpStream(); if (code_rate_HP > 4) - code_rate_HP = FEC::fAuto; + code_rate_HP = eDVBFrontendParametersTerrestrial::FEC_Auto; code_rate_LP = descriptor.getCodeRateLpStream(); if (code_rate_LP > 4) - code_rate_LP = FEC::fAuto; + code_rate_LP = eDVBFrontendParametersTerrestrial::FEC_Auto; transmission_mode = descriptor.getTransmissionMode(); if (transmission_mode > 1) // TM4k forced to auto - transmission_mode = TransmissionMode::TMAuto; + transmission_mode = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto; guard_interval = descriptor.getGuardInterval(); if (guard_interval > 3) - guard_interval = GuardInterval::GI_Auto; + guard_interval = eDVBFrontendParametersTerrestrial::GuardInterval_Auto; hierarchy = descriptor.getHierarchyInformation()&3; modulation = descriptor.getConstellation(); if (modulation > 2) - modulation = Modulation::Auto; - inversion = Inversion::Unknown; + modulation = eDVBFrontendParametersTerrestrial::Modulation_Auto; + inversion = eDVBFrontendParametersTerrestrial::Inversion_Unknown; eDebug("Terr freq %d, bw %d, cr_hp %d, cr_lp %d, tm_mode %d, guard %d, hierarchy %d, const %d", frequency, bandwidth, code_rate_HP, code_rate_LP, transmission_mode, guard_interval, hierarchy, modulation); @@ -316,9 +317,9 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters diff = 1<<29; else if (sat.polarisation != osat.polarisation) diff = 1<<28; - else if (exact && sat.fec != osat.fec && sat.fec != eDVBFrontendParametersSatellite::FEC::fAuto && osat.fec != eDVBFrontendParametersSatellite::FEC::fAuto) + else if (exact && sat.fec != osat.fec && sat.fec != eDVBFrontendParametersSatellite::FEC_Auto && osat.fec != eDVBFrontendParametersSatellite::FEC_Auto) diff = 1<<27; - else if (exact && sat.modulation != osat.modulation && sat.modulation != eDVBFrontendParametersSatellite::Modulation::Auto && osat.modulation != eDVBFrontendParametersSatellite::Modulation::Auto) + else if (exact && sat.modulation != osat.modulation && sat.modulation != eDVBFrontendParametersSatellite::Modulation_Auto && osat.modulation != eDVBFrontendParametersSatellite::Modulation_Auto) diff = 1<<27; else { @@ -333,10 +334,10 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters return -2; if (exact && cable.modulation != ocable.modulation - && cable.modulation != eDVBFrontendParametersCable::Modulation::Auto - && ocable.modulation != eDVBFrontendParametersCable::Modulation::Auto) + && cable.modulation != eDVBFrontendParametersCable::Modulation_Auto + && ocable.modulation != eDVBFrontendParametersCable::Modulation_Auto) diff = 1 << 29; - else if (exact && cable.fec_inner != ocable.fec_inner && cable.fec_inner != eDVBFrontendParametersCable::FEC::fAuto && ocable.fec_inner != eDVBFrontendParametersCable::FEC::fAuto) + else if (exact && cable.fec_inner != ocable.fec_inner && cable.fec_inner != eDVBFrontendParametersCable::FEC_Auto && ocable.fec_inner != eDVBFrontendParametersCable::FEC_Auto) diff = 1 << 27; else { @@ -350,32 +351,32 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters return -2; if (exact && oterrestrial.bandwidth != terrestrial.bandwidth && - oterrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto && - terrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto) + oterrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth_Auto && + terrestrial.bandwidth != eDVBFrontendParametersTerrestrial::Bandwidth_Auto) diff = 1 << 30; else if (exact && oterrestrial.modulation != terrestrial.modulation && - oterrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation::Auto && - terrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation::Auto) + oterrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation_Auto && + terrestrial.modulation != eDVBFrontendParametersTerrestrial::Modulation_Auto) diff = 1 << 30; else if (exact && oterrestrial.transmission_mode != terrestrial.transmission_mode && - oterrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto && - terrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto) + oterrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode_Auto && + terrestrial.transmission_mode != eDVBFrontendParametersTerrestrial::TransmissionMode_Auto) diff = 1 << 30; else if (exact && oterrestrial.guard_interval != terrestrial.guard_interval && - oterrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto && - terrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto) + oterrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval_Auto && + terrestrial.guard_interval != eDVBFrontendParametersTerrestrial::GuardInterval_Auto) diff = 1 << 30; else if (exact && oterrestrial.hierarchy != terrestrial.hierarchy && - oterrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy::HAuto && - terrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy::HAuto) + oterrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy_Auto && + terrestrial.hierarchy != eDVBFrontendParametersTerrestrial::Hierarchy_Auto) diff = 1 << 30; else if (exact && oterrestrial.code_rate_LP != terrestrial.code_rate_LP && - oterrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC::fAuto && - terrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC::fAuto) + oterrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC_Auto && + terrestrial.code_rate_LP != eDVBFrontendParametersTerrestrial::FEC_Auto) diff = 1 << 30; else if (exact && oterrestrial.code_rate_HP != terrestrial.code_rate_HP && - oterrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC::fAuto && - terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC::fAuto) + oterrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto && + terrestrial.code_rate_HP != eDVBFrontendParametersTerrestrial::FEC_Auto) diff = 1 << 30; else diff = abs(terrestrial.frequency - oterrestrial.frequency); @@ -963,120 +964,79 @@ void PutToDict(ePyObject &dict, const char*key, const char *value) void fillDictWithSatelliteData(ePyObject dict, const FRONTENDPARAMETERS &parm, eDVBFrontend *fe) { long freq_offset=0; - const char *tmp=0; + long tmp=0; fe->getData(eDVBFrontend::FREQ_OFFSET, freq_offset); int frequency = parm_frequency + freq_offset; PutToDict(dict, "frequency", frequency); PutToDict(dict, "symbol_rate", parm_u_qpsk_symbol_rate); switch(parm_u_qpsk_fec_inner) { - case FEC_1_2: - tmp = "FEC_1_2"; - break; - case FEC_2_3: - tmp = "FEC_2_3"; - break; - case FEC_3_4: - tmp = "FEC_3_4"; - break; - case FEC_5_6: - tmp = "FEC_5_6"; - break; - case FEC_7_8: - tmp = "FEC_7_8"; - break; - case FEC_NONE: - tmp = "FEC_NONE"; + case FEC_1_2: tmp = eDVBFrontendParametersSatellite::FEC_1_2; break; + case FEC_2_3: tmp = eDVBFrontendParametersSatellite::FEC_2_3; break; + case FEC_3_4: tmp = eDVBFrontendParametersSatellite::FEC_3_4; break; + case FEC_5_6: tmp = eDVBFrontendParametersSatellite::FEC_5_6; break; + case FEC_7_8: tmp = eDVBFrontendParametersSatellite::FEC_7_8; break; + case FEC_NONE: tmp = eDVBFrontendParametersSatellite::FEC_None; break; default: - case FEC_AUTO: - tmp = "FEC_AUTO"; - break; + case FEC_AUTO: tmp = eDVBFrontendParametersSatellite::FEC_Auto; break; #if HAVE_DVB_API_VERSION >=3 - case FEC_S2_8PSK_1_2: - case FEC_S2_QPSK_1_2: - tmp = "FEC_1_2"; - break; + case FEC_S2_8PSK_1_2: + case FEC_S2_QPSK_1_2: tmp = eDVBFrontendParametersSatellite::FEC_1_2; break; case FEC_S2_8PSK_2_3: - case FEC_S2_QPSK_2_3: - tmp = "FEC_2_3"; - break; + case FEC_S2_QPSK_2_3: tmp = eDVBFrontendParametersSatellite::FEC_2_3; break; case FEC_S2_8PSK_3_4: - case FEC_S2_QPSK_3_4: - tmp = "FEC_3_4"; - break; + case FEC_S2_QPSK_3_4: tmp = eDVBFrontendParametersSatellite::FEC_3_4; break; case FEC_S2_8PSK_5_6: - case FEC_S2_QPSK_5_6: - tmp = "FEC_5_6"; - break; + case FEC_S2_QPSK_5_6: tmp = eDVBFrontendParametersSatellite::FEC_5_6; break; case FEC_S2_8PSK_7_8: - case FEC_S2_QPSK_7_8: - tmp = "FEC_7_8"; - break; + case FEC_S2_QPSK_7_8: tmp = eDVBFrontendParametersSatellite::FEC_7_8; break; case FEC_S2_8PSK_8_9: - case FEC_S2_QPSK_8_9: - tmp = "FEC_8_9"; - break; + case FEC_S2_QPSK_8_9: tmp = eDVBFrontendParametersSatellite::FEC_8_9; break; case FEC_S2_8PSK_3_5: - case FEC_S2_QPSK_3_5: - tmp = "FEC_3_5"; - break; + case FEC_S2_QPSK_3_5: tmp = eDVBFrontendParametersSatellite::FEC_3_5; break; case FEC_S2_8PSK_4_5: - case FEC_S2_QPSK_4_5: - tmp = "FEC_4_5"; - break; + case FEC_S2_QPSK_4_5: tmp = eDVBFrontendParametersSatellite::FEC_4_5; break; case FEC_S2_8PSK_9_10: - case FEC_S2_QPSK_9_10: - tmp = "FEC_9_10"; - break; + case FEC_S2_QPSK_9_10: tmp = eDVBFrontendParametersSatellite::FEC_9_10; break; #endif } PutToDict(dict, "fec_inner", tmp); #if HAVE_DVB_API_VERSION >=3 PutToDict(dict, "modulation", - parm_u_qpsk_fec_inner > FEC_S2_QPSK_9_10 ? "8PSK": "QPSK" ); + parm_u_qpsk_fec_inner > FEC_S2_QPSK_9_10 ? + eDVBFrontendParametersSatellite::Modulation_8PSK : + eDVBFrontendParametersSatellite::Modulation_QPSK ); if (parm_u_qpsk_fec_inner > FEC_AUTO) { switch(parm_inversion & 0xc) { default: // unknown rolloff - case 0: // 0.35 - tmp = "ROLLOFF_0_35"; - break; - case 4: // 0.25 - tmp = "ROLLOFF_0_25"; - break; - case 8: // 0.20 - tmp = "ROLLOFF_0_20"; - break; + case 0: tmp = eDVBFrontendParametersSatellite::RollOff_alpha_0_35; break; + case 4: tmp = eDVBFrontendParametersSatellite::RollOff_alpha_0_25; break; + case 8: tmp = eDVBFrontendParametersSatellite::RollOff_alpha_0_20; break; } PutToDict(dict, "rolloff", tmp); switch(parm_inversion & 0x30) { - case 0: // pilot off - tmp = "PILOT_OFF"; - break; - case 0x10: // pilot on - tmp = "PILOT_ON"; - break; - case 0x20: // pilot auto - tmp = "PILOT_AUTO"; - break; + case 0: tmp = eDVBFrontendParametersSatellite::Pilot_Off; break; + case 0x10: tmp = eDVBFrontendParametersSatellite::Pilot_On; break; + case 0x20: tmp = eDVBFrontendParametersSatellite::Pilot_Unknown; break; } PutToDict(dict, "pilot", tmp); - tmp = "DVB-S2"; + tmp = eDVBFrontendParametersSatellite::System_DVB_S2; } else - tmp = "DVB-S"; + tmp = eDVBFrontendParametersSatellite::System_DVB_S; #else - PutToDict(dict, "modulation", "QPSK" ); - tmp = "DVB-S"; + PutToDict(dict, "modulation", eDVBFrontendParametersSatellite::Modulation_QPSK ); + tmp = eDVBFrontendParametersSatellite::System_DVB_S; #endif PutToDict(dict, "system", tmp); } void fillDictWithCableData(ePyObject dict, const FRONTENDPARAMETERS &parm) { - const char *tmp=0; + long tmp=0; #if HAVE_DVB_API_VERSION < 3 PutToDict(dict, "frequency", parm_frequency); #else @@ -1085,196 +1045,102 @@ void fillDictWithCableData(ePyObject dict, const FRONTENDPARAMETERS &parm) PutToDict(dict, "symbol_rate", parm_u_qam_symbol_rate); switch(parm_u_qam_fec_inner) { - case FEC_NONE: - tmp = "FEC_NONE"; - break; - case FEC_1_2: - tmp = "FEC_1_2"; - break; - case FEC_2_3: - tmp = "FEC_2_3"; - break; - case FEC_3_4: - tmp = "FEC_3_4"; - break; - case FEC_5_6: - tmp = "FEC_5_6"; - break; - case FEC_7_8: - tmp = "FEC_7_8"; - break; + case FEC_NONE: tmp = eDVBFrontendParametersCable::FEC_None; break; + case FEC_1_2: tmp = eDVBFrontendParametersCable::FEC_1_2; break; + case FEC_2_3: tmp = eDVBFrontendParametersCable::FEC_2_3; break; + case FEC_3_4: tmp = eDVBFrontendParametersCable::FEC_3_4; break; + case FEC_5_6: tmp = eDVBFrontendParametersCable::FEC_5_6; break; + case FEC_7_8: tmp = eDVBFrontendParametersCable::FEC_7_8; break; #if HAVE_DVB_API_VERSION >= 3 - case FEC_8_9: - tmp = "FEC_8_9"; - break; + case FEC_8_9: tmp = eDVBFrontendParametersCable::FEC_7_8; break; #endif default: - case FEC_AUTO: - tmp = "FEC_AUTO"; - break; + case FEC_AUTO: tmp = eDVBFrontendParametersCable::FEC_Auto; break; } PutToDict(dict, "fec_inner", tmp); switch(parm_u_qam_modulation) { - case QAM_16: - tmp = "QAM_16"; - break; - case QAM_32: - tmp = "QAM_32"; - break; - case QAM_64: - tmp = "QAM_64"; - break; - case QAM_128: - tmp = "QAM_128"; - break; - case QAM_256: - tmp = "QAM_256"; - break; + case QAM_16: tmp = eDVBFrontendParametersCable::Modulation_QAM16; break; + case QAM_32: tmp = eDVBFrontendParametersCable::Modulation_QAM32; break; + case QAM_64: tmp = eDVBFrontendParametersCable::Modulation_QAM64; break; + case QAM_128: tmp = eDVBFrontendParametersCable::Modulation_QAM128; break; + case QAM_256: tmp = eDVBFrontendParametersCable::Modulation_QAM256; break; default: - case QAM_AUTO: - tmp = "QAM_AUTO"; - break; + case QAM_AUTO: tmp = eDVBFrontendParametersCable::Modulation_Auto; break; } PutToDict(dict, "modulation", tmp); } void fillDictWithTerrestrialData(ePyObject dict, const FRONTENDPARAMETERS &parm) { - const char *tmp=0; + long tmp=0; PutToDict(dict, "frequency", parm_frequency); switch (parm_u_ofdm_bandwidth) { - case BANDWIDTH_8_MHZ: - tmp = "BANDWIDTH_8_MHZ"; - break; - case BANDWIDTH_7_MHZ: - tmp = "BANDWIDTH_7_MHZ"; - break; - case BANDWIDTH_6_MHZ: - tmp = "BANDWIDTH_6_MHZ"; - break; + case BANDWIDTH_8_MHZ: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_8MHz; break; + case BANDWIDTH_7_MHZ: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_7MHz; break; + case BANDWIDTH_6_MHZ: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_6MHz; break; default: - case BANDWIDTH_AUTO: - tmp = "BANDWIDTH_AUTO"; - break; + case BANDWIDTH_AUTO: tmp = eDVBFrontendParametersTerrestrial::Bandwidth_Auto; break; } PutToDict(dict, "bandwidth", tmp); switch (parm_u_ofdm_code_rate_LP) { - case FEC_1_2: - tmp = "FEC_1_2"; - break; - case FEC_2_3: - tmp = "FEC_2_3"; - break; - case FEC_3_4: - tmp = "FEC_3_4"; - break; - case FEC_5_6: - tmp = "FEC_5_6"; - break; - case FEC_7_8: - tmp = "FEC_7_8"; - break; + case FEC_1_2: tmp = eDVBFrontendParametersTerrestrial::FEC_1_2; break; + case FEC_2_3: tmp = eDVBFrontendParametersTerrestrial::FEC_2_3; break; + case FEC_3_4: tmp = eDVBFrontendParametersTerrestrial::FEC_3_4; break; + case FEC_5_6: tmp = eDVBFrontendParametersTerrestrial::FEC_5_6; break; + case FEC_7_8: tmp = eDVBFrontendParametersTerrestrial::FEC_7_8; break; default: - case FEC_AUTO: - tmp = "FEC_AUTO"; - break; + case FEC_AUTO: tmp = eDVBFrontendParametersTerrestrial::FEC_Auto; break; } PutToDict(dict, "code_rate_lp", tmp); switch (parm_u_ofdm_code_rate_HP) { - case FEC_1_2: - tmp = "FEC_1_2"; - break; - case FEC_2_3: - tmp = "FEC_2_3"; - break; - case FEC_3_4: - tmp = "FEC_3_4"; - break; - case FEC_5_6: - tmp = "FEC_5_6"; - break; - case FEC_7_8: - tmp = "FEC_7_8"; - break; + case FEC_1_2: tmp = eDVBFrontendParametersTerrestrial::FEC_1_2; break; + case FEC_2_3: tmp = eDVBFrontendParametersTerrestrial::FEC_2_3; break; + case FEC_3_4: tmp = eDVBFrontendParametersTerrestrial::FEC_3_4; break; + case FEC_5_6: tmp = eDVBFrontendParametersTerrestrial::FEC_5_6; break; + case FEC_7_8: tmp = eDVBFrontendParametersTerrestrial::FEC_7_8; break; default: - case FEC_AUTO: - tmp = "FEC_AUTO"; - break; + case FEC_AUTO: tmp = eDVBFrontendParametersTerrestrial::FEC_Auto; break; } PutToDict(dict, "code_rate_hp", tmp); switch (parm_u_ofdm_constellation) { - case QPSK: - tmp = "QPSK"; - break; - case QAM_16: - tmp = "QAM_16"; - break; - case QAM_64: - tmp = "QAM_64"; - break; + case QPSK: tmp = eDVBFrontendParametersTerrestrial::Modulation_QPSK; break; + case QAM_16: tmp = eDVBFrontendParametersTerrestrial::Modulation_QAM16; break; + case QAM_64: tmp = eDVBFrontendParametersTerrestrial::Modulation_QAM64; break; default: - case QAM_AUTO: - tmp = "QAM_AUTO"; - break; + case QAM_AUTO: tmp = eDVBFrontendParametersTerrestrial::Modulation_Auto; break; } PutToDict(dict, "constellation", tmp); switch (parm_u_ofdm_transmission_mode) { - case TRANSMISSION_MODE_2K: - tmp = "TRANSMISSION_MODE_2K"; - break; - case TRANSMISSION_MODE_8K: - tmp = "TRANSMISSION_MODE_8K"; - break; + case TRANSMISSION_MODE_2K: tmp = eDVBFrontendParametersTerrestrial::TransmissionMode_2k; break; + case TRANSMISSION_MODE_8K: tmp = eDVBFrontendParametersTerrestrial::TransmissionMode_8k; break; default: - case TRANSMISSION_MODE_AUTO: - tmp = "TRANSMISSION_MODE_AUTO"; - break; + case TRANSMISSION_MODE_AUTO: tmp = eDVBFrontendParametersTerrestrial::TransmissionMode_Auto; break; } PutToDict(dict, "transmission_mode", tmp); switch (parm_u_ofdm_guard_interval) { - case GUARD_INTERVAL_1_32: - tmp = "GUARD_INTERVAL_1_32"; - break; - case GUARD_INTERVAL_1_16: - tmp = "GUARD_INTERVAL_1_16"; - break; - case GUARD_INTERVAL_1_8: - tmp = "GUARD_INTERVAL_1_8"; - break; - case GUARD_INTERVAL_1_4: - tmp = "GUARD_INTERVAL_1_4"; - break; + case GUARD_INTERVAL_1_32: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_32; break; + case GUARD_INTERVAL_1_16: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_16; break; + case GUARD_INTERVAL_1_8: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_8; break; + case GUARD_INTERVAL_1_4: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_1_4; break; default: - case GUARD_INTERVAL_AUTO: - tmp = "GUARD_INTERVAL_AUTO"; - break; + case GUARD_INTERVAL_AUTO: tmp = eDVBFrontendParametersTerrestrial::GuardInterval_Auto; break; } PutToDict(dict, "guard_interval", tmp); switch (parm_u_ofdm_hierarchy_information) { - case HIERARCHY_NONE: - tmp = "HIERARCHY_NONE"; - break; - case HIERARCHY_1: - tmp = "HIERARCHY_1"; - break; - case HIERARCHY_2: - tmp = "HIERARCHY_2"; - break; - case HIERARCHY_4: - tmp = "HIERARCHY_4"; - break; + case HIERARCHY_NONE: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_None; break; + case HIERARCHY_1: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_1; break; + case HIERARCHY_2: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_2; break; + case HIERARCHY_4: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_4; break; default: - case HIERARCHY_AUTO: - tmp = "HIERARCHY_AUTO"; - break; + case HIERARCHY_AUTO: tmp = eDVBFrontendParametersTerrestrial::Hierarchy_Auto; break; } PutToDict(dict, "hierarchy_information", tmp); } @@ -1342,20 +1208,18 @@ void eDVBFrontend::getTransponderData(ePyObject dest, bool original) } { const FRONTENDPARAMETERS &parm = original || m_simulate ? this->parm : front; - const char *tmp = "INVERSION_AUTO"; + long tmp = eDVBFrontendParametersSatellite::Inversion_Unknown; switch(parm_inversion & 3) { case INVERSION_ON: - tmp = "INVERSION_ON"; + tmp = eDVBFrontendParametersSatellite::Inversion_On; break; case INVERSION_OFF: - tmp = "INVERSION_OFF"; - break; + tmp = eDVBFrontendParametersSatellite::Inversion_Off; default: break; } - if (tmp) - PutToDict(dest, "inversion", tmp); + PutToDict(dest, "inversion", tmp); switch(m_type) { @@ -1889,41 +1753,41 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm, parm_u_qpsk_symbol_rate = feparm.symbol_rate; switch (feparm.inversion) { - case eDVBFrontendParametersSatellite::Inversion::On: + case eDVBFrontendParametersSatellite::Inversion_On: parm_inversion = INVERSION_ON; break; - case eDVBFrontendParametersSatellite::Inversion::Off: + case eDVBFrontendParametersSatellite::Inversion_Off: parm_inversion = INVERSION_OFF; break; default: - case eDVBFrontendParametersSatellite::Inversion::Unknown: + case eDVBFrontendParametersSatellite::Inversion_Unknown: parm_inversion = INVERSION_AUTO; break; } - if (feparm.system == eDVBFrontendParametersSatellite::System::DVB_S) + if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S) switch (feparm.fec) { - case eDVBFrontendParametersSatellite::FEC::fNone: + case eDVBFrontendParametersSatellite::FEC_None: parm_u_qpsk_fec_inner = FEC_NONE; break; - case eDVBFrontendParametersSatellite::FEC::f1_2: + case eDVBFrontendParametersSatellite::FEC_1_2: parm_u_qpsk_fec_inner = FEC_1_2; break; - case eDVBFrontendParametersSatellite::FEC::f2_3: + case eDVBFrontendParametersSatellite::FEC_2_3: parm_u_qpsk_fec_inner = FEC_2_3; break; - case eDVBFrontendParametersSatellite::FEC::f3_4: + case eDVBFrontendParametersSatellite::FEC_3_4: parm_u_qpsk_fec_inner = FEC_3_4; break; - case eDVBFrontendParametersSatellite::FEC::f5_6: + case eDVBFrontendParametersSatellite::FEC_5_6: parm_u_qpsk_fec_inner = FEC_5_6; break; - case eDVBFrontendParametersSatellite::FEC::f7_8: + case eDVBFrontendParametersSatellite::FEC_7_8: parm_u_qpsk_fec_inner = FEC_7_8; break; default: eDebugNoSimulate("no valid fec for DVB-S set.. assume auto"); - case eDVBFrontendParametersSatellite::FEC::fAuto: + case eDVBFrontendParametersSatellite::FEC_Auto: parm_u_qpsk_fec_inner = FEC_AUTO; break; } @@ -1932,31 +1796,31 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm, { switch (feparm.fec) { - case eDVBFrontendParametersSatellite::FEC::f1_2: + case eDVBFrontendParametersSatellite::FEC_1_2: parm_u_qpsk_fec_inner = FEC_S2_QPSK_1_2; break; - case eDVBFrontendParametersSatellite::FEC::f2_3: + case eDVBFrontendParametersSatellite::FEC_2_3: parm_u_qpsk_fec_inner = FEC_S2_QPSK_2_3; break; - case eDVBFrontendParametersSatellite::FEC::f3_4: + case eDVBFrontendParametersSatellite::FEC_3_4: parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_4; break; - case eDVBFrontendParametersSatellite::FEC::f3_5: + case eDVBFrontendParametersSatellite::FEC_3_5: parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_5; break; - case eDVBFrontendParametersSatellite::FEC::f4_5: + case eDVBFrontendParametersSatellite::FEC_4_5: parm_u_qpsk_fec_inner = FEC_S2_QPSK_4_5; break; - case eDVBFrontendParametersSatellite::FEC::f5_6: + case eDVBFrontendParametersSatellite::FEC_5_6: parm_u_qpsk_fec_inner = FEC_S2_QPSK_5_6; break; - case eDVBFrontendParametersSatellite::FEC::f7_8: + case eDVBFrontendParametersSatellite::FEC_7_8: parm_u_qpsk_fec_inner = FEC_S2_QPSK_7_8; break; - case eDVBFrontendParametersSatellite::FEC::f8_9: + case eDVBFrontendParametersSatellite::FEC_8_9: parm_u_qpsk_fec_inner = FEC_S2_QPSK_8_9; break; - case eDVBFrontendParametersSatellite::FEC::f9_10: + case eDVBFrontendParametersSatellite::FEC_9_10: parm_u_qpsk_fec_inner = FEC_S2_QPSK_9_10; break; default: @@ -1965,7 +1829,7 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm, } parm_inversion |= (feparm.rolloff << 2); // Hack.. we use bit 2..3 of inversion param for rolloff parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot - if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) { + if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation_8PSK) { parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)parm_u_qpsk_fec_inner+9); // 8PSK fec driver values are decimal 9 bigger } @@ -1992,66 +1856,66 @@ RESULT eDVBFrontend::prepare_cable(const eDVBFrontendParametersCable &feparm) parm_u_qam_symbol_rate = feparm.symbol_rate; switch (feparm.modulation) { - case eDVBFrontendParametersCable::Modulation::QAM16: + case eDVBFrontendParametersCable::Modulation_QAM16: parm_u_qam_modulation = QAM_16; break; - case eDVBFrontendParametersCable::Modulation::QAM32: + case eDVBFrontendParametersCable::Modulation_QAM32: parm_u_qam_modulation = QAM_32; break; - case eDVBFrontendParametersCable::Modulation::QAM64: + case eDVBFrontendParametersCable::Modulation_QAM64: parm_u_qam_modulation = QAM_64; break; - case eDVBFrontendParametersCable::Modulation::QAM128: + case eDVBFrontendParametersCable::Modulation_QAM128: parm_u_qam_modulation = QAM_128; break; - case eDVBFrontendParametersCable::Modulation::QAM256: + case eDVBFrontendParametersCable::Modulation_QAM256: parm_u_qam_modulation = QAM_256; break; default: - case eDVBFrontendParametersCable::Modulation::Auto: + case eDVBFrontendParametersCable::Modulation_Auto: parm_u_qam_modulation = QAM_AUTO; break; } switch (feparm.inversion) { - case eDVBFrontendParametersCable::Inversion::On: + case eDVBFrontendParametersCable::Inversion_On: parm_inversion = INVERSION_ON; break; - case eDVBFrontendParametersCable::Inversion::Off: + case eDVBFrontendParametersCable::Inversion_Off: parm_inversion = INVERSION_OFF; break; default: - case eDVBFrontendParametersCable::Inversion::Unknown: + case eDVBFrontendParametersCable::Inversion_Unknown: parm_inversion = INVERSION_AUTO; break; } switch (feparm.fec_inner) { - case eDVBFrontendParametersCable::FEC::fNone: + case eDVBFrontendParametersCable::FEC_None: parm_u_qam_fec_inner = FEC_NONE; break; - case eDVBFrontendParametersCable::FEC::f1_2: + case eDVBFrontendParametersCable::FEC_1_2: parm_u_qam_fec_inner = FEC_1_2; break; - case eDVBFrontendParametersCable::FEC::f2_3: + case eDVBFrontendParametersCable::FEC_2_3: parm_u_qam_fec_inner = FEC_2_3; break; - case eDVBFrontendParametersCable::FEC::f3_4: + case eDVBFrontendParametersCable::FEC_3_4: parm_u_qam_fec_inner = FEC_3_4; break; - case eDVBFrontendParametersCable::FEC::f5_6: + case eDVBFrontendParametersCable::FEC_5_6: parm_u_qam_fec_inner = FEC_5_6; break; - case eDVBFrontendParametersCable::FEC::f7_8: + case eDVBFrontendParametersCable::FEC_7_8: parm_u_qam_fec_inner = FEC_7_8; break; #if HAVE_DVB_API_VERSION >= 3 - case eDVBFrontendParametersCable::FEC::f8_9: + case eDVBFrontendParametersCable::FEC_8_9: parm_u_qam_fec_inner = FEC_8_9; break; #endif default: - case eDVBFrontendParametersCable::FEC::fAuto: + case eDVBFrontendParametersCable::FEC_Auto: parm_u_qam_fec_inner = FEC_AUTO; break; } @@ -2070,141 +1934,141 @@ RESULT eDVBFrontend::prepare_terrestrial(const eDVBFrontendParametersTerrestrial switch (feparm.bandwidth) { - case eDVBFrontendParametersTerrestrial::Bandwidth::Bw8MHz: + case eDVBFrontendParametersTerrestrial::Bandwidth_8MHz: parm_u_ofdm_bandwidth = BANDWIDTH_8_MHZ; break; - case eDVBFrontendParametersTerrestrial::Bandwidth::Bw7MHz: + case eDVBFrontendParametersTerrestrial::Bandwidth_7MHz: parm_u_ofdm_bandwidth = BANDWIDTH_7_MHZ; break; - case eDVBFrontendParametersTerrestrial::Bandwidth::Bw6MHz: + case eDVBFrontendParametersTerrestrial::Bandwidth_6MHz: parm_u_ofdm_bandwidth = BANDWIDTH_6_MHZ; break; default: - case eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto: + case eDVBFrontendParametersTerrestrial::Bandwidth_Auto: parm_u_ofdm_bandwidth = BANDWIDTH_AUTO; break; } switch (feparm.code_rate_LP) { - case eDVBFrontendParametersTerrestrial::FEC::f1_2: + case eDVBFrontendParametersTerrestrial::FEC_1_2: parm_u_ofdm_code_rate_LP = FEC_1_2; break; - case eDVBFrontendParametersTerrestrial::FEC::f2_3: + case eDVBFrontendParametersTerrestrial::FEC_2_3: parm_u_ofdm_code_rate_LP = FEC_2_3; break; - case eDVBFrontendParametersTerrestrial::FEC::f3_4: + case eDVBFrontendParametersTerrestrial::FEC_3_4: parm_u_ofdm_code_rate_LP = FEC_3_4; break; - case eDVBFrontendParametersTerrestrial::FEC::f5_6: + case eDVBFrontendParametersTerrestrial::FEC_5_6: parm_u_ofdm_code_rate_LP = FEC_5_6; break; - case eDVBFrontendParametersTerrestrial::FEC::f7_8: + case eDVBFrontendParametersTerrestrial::FEC_7_8: parm_u_ofdm_code_rate_LP = FEC_7_8; break; default: - case eDVBFrontendParametersTerrestrial::FEC::fAuto: + case eDVBFrontendParametersTerrestrial::FEC_Auto: parm_u_ofdm_code_rate_LP = FEC_AUTO; break; } switch (feparm.code_rate_HP) { - case eDVBFrontendParametersTerrestrial::FEC::f1_2: + case eDVBFrontendParametersTerrestrial::FEC_1_2: parm_u_ofdm_code_rate_HP = FEC_1_2; break; - case eDVBFrontendParametersTerrestrial::FEC::f2_3: + case eDVBFrontendParametersTerrestrial::FEC_2_3: parm_u_ofdm_code_rate_HP = FEC_2_3; break; - case eDVBFrontendParametersTerrestrial::FEC::f3_4: + case eDVBFrontendParametersTerrestrial::FEC_3_4: parm_u_ofdm_code_rate_HP = FEC_3_4; break; - case eDVBFrontendParametersTerrestrial::FEC::f5_6: + case eDVBFrontendParametersTerrestrial::FEC_5_6: parm_u_ofdm_code_rate_HP = FEC_5_6; break; - case eDVBFrontendParametersTerrestrial::FEC::f7_8: + case eDVBFrontendParametersTerrestrial::FEC_7_8: parm_u_ofdm_code_rate_HP = FEC_7_8; break; default: - case eDVBFrontendParametersTerrestrial::FEC::fAuto: + case eDVBFrontendParametersTerrestrial::FEC_Auto: parm_u_ofdm_code_rate_HP = FEC_AUTO; break; } switch (feparm.modulation) { - case eDVBFrontendParametersTerrestrial::Modulation::QPSK: + case eDVBFrontendParametersTerrestrial::Modulation_QPSK: parm_u_ofdm_constellation = QPSK; break; - case eDVBFrontendParametersTerrestrial::Modulation::QAM16: + case eDVBFrontendParametersTerrestrial::Modulation_QAM16: parm_u_ofdm_constellation = QAM_16; break; - case eDVBFrontendParametersTerrestrial::Modulation::QAM64: + case eDVBFrontendParametersTerrestrial::Modulation_QAM64: parm_u_ofdm_constellation = QAM_64; break; default: - case eDVBFrontendParametersTerrestrial::Modulation::Auto: + case eDVBFrontendParametersTerrestrial::Modulation_Auto: parm_u_ofdm_constellation = QAM_AUTO; break; } switch (feparm.transmission_mode) { - case eDVBFrontendParametersTerrestrial::TransmissionMode::TM2k: + case eDVBFrontendParametersTerrestrial::TransmissionMode_2k: parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_2K; break; - case eDVBFrontendParametersTerrestrial::TransmissionMode::TM8k: + case eDVBFrontendParametersTerrestrial::TransmissionMode_8k: parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_8K; break; default: - case eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto: + case eDVBFrontendParametersTerrestrial::TransmissionMode_Auto: parm_u_ofdm_transmission_mode = TRANSMISSION_MODE_AUTO; break; } switch (feparm.guard_interval) { - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_32: + case eDVBFrontendParametersTerrestrial::GuardInterval_1_32: parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_32; break; - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_16: + case eDVBFrontendParametersTerrestrial::GuardInterval_1_16: parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_16; break; - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_8: + case eDVBFrontendParametersTerrestrial::GuardInterval_1_8: parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_8; break; - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_4: + case eDVBFrontendParametersTerrestrial::GuardInterval_1_4: parm_u_ofdm_guard_interval = GUARD_INTERVAL_1_4; break; default: - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto: + case eDVBFrontendParametersTerrestrial::GuardInterval_Auto: parm_u_ofdm_guard_interval = GUARD_INTERVAL_AUTO; break; } switch (feparm.hierarchy) { - case eDVBFrontendParametersTerrestrial::Hierarchy::HNone: + case eDVBFrontendParametersTerrestrial::Hierarchy_None: parm_u_ofdm_hierarchy_information = HIERARCHY_NONE; break; - case eDVBFrontendParametersTerrestrial::Hierarchy::H1: + case eDVBFrontendParametersTerrestrial::Hierarchy_1: parm_u_ofdm_hierarchy_information = HIERARCHY_1; break; - case eDVBFrontendParametersTerrestrial::Hierarchy::H2: + case eDVBFrontendParametersTerrestrial::Hierarchy_2: parm_u_ofdm_hierarchy_information = HIERARCHY_2; break; - case eDVBFrontendParametersTerrestrial::Hierarchy::H4: + case eDVBFrontendParametersTerrestrial::Hierarchy_4: parm_u_ofdm_hierarchy_information = HIERARCHY_4; break; default: - case eDVBFrontendParametersTerrestrial::Hierarchy::HAuto: + case eDVBFrontendParametersTerrestrial::Hierarchy_Auto: parm_u_ofdm_hierarchy_information = HIERARCHY_AUTO; break; } switch (feparm.inversion) { - case eDVBFrontendParametersTerrestrial::Inversion::On: + case eDVBFrontendParametersTerrestrial::Inversion_On: parm_inversion = INVERSION_ON; break; - case eDVBFrontendParametersTerrestrial::Inversion::Off: + case eDVBFrontendParametersTerrestrial::Inversion_Off: parm_inversion = INVERSION_OFF; break; default: - case eDVBFrontendParametersTerrestrial::Inversion::Unknown: + case eDVBFrontendParametersTerrestrial::Inversion_Unknown: parm_inversion = INVERSION_AUTO; break; } @@ -2514,10 +2378,10 @@ int eDVBFrontend::isCompatibleWith(ePtr &feparm) eDVBFrontendParametersSatellite sat_parm; int ret = feparm->getDVBS(sat_parm); ASSERT(!ret); - if (sat_parm.system == eDVBFrontendParametersSatellite::System::DVB_S2 && !m_can_handle_dvbs2) + if (sat_parm.system == eDVBFrontendParametersSatellite::System_DVB_S2 && !m_can_handle_dvbs2) return 0; ret = m_sec->canTune(sat_parm, this, 1 << m_slotid); - if (ret > 1 && sat_parm.system == eDVBFrontendParametersSatellite::System::DVB_S && m_can_handle_dvbs2) + if (ret > 1 && sat_parm.system == eDVBFrontendParametersSatellite::System_DVB_S && m_can_handle_dvbs2) ret -= 1; return ret; } diff --git a/lib/dvb/frontendparms.h b/lib/dvb/frontendparms.h index 961dfd00..b537963f 100644 --- a/lib/dvb/frontendparms.h +++ b/lib/dvb/frontendparms.h @@ -12,42 +12,35 @@ struct eDVBFrontendParametersSatellite #ifndef SWIG void set(const SatelliteDeliverySystemDescriptor &); #endif - struct Polarisation { - enum { - Horizontal, Vertical, CircularLeft, CircularRight - }; + enum { + Polarisation_Horizontal, Polarisation_Vertical, Polarisation_CircularLeft, Polarisation_CircularRight }; - struct Inversion { - enum { - Off, On, Unknown - }; + + enum { + Inversion_Off, Inversion_On, Inversion_Unknown }; - struct FEC { - enum { - fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, f3_5, f4_5, f9_10, fNone=15 - }; + + enum { + FEC_Auto, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_3_5, FEC_4_5, FEC_9_10, FEC_None=15 }; - struct System { - enum { - DVB_S, DVB_S2 - }; + + enum { + System_DVB_S, System_DVB_S2 }; - struct Modulation { - enum { - Auto, QPSK, M8PSK, QAM_16 - }; + + enum { + Modulation_Auto, Modulation_QPSK, Modulation_8PSK, Modulation_QAM16 }; + // dvb-s2 - struct RollOff { - enum { - alpha_0_35, alpha_0_25, alpha_0_20 - }; + enum { + RollOff_alpha_0_35, RollOff_alpha_0_25, RollOff_alpha_0_20 }; - struct Pilot { - enum { - Off, On, Unknown - }; + + enum { + Pilot_Off, Pilot_On, Pilot_Unknown }; + bool no_rotor_command_on_tune; unsigned int frequency, symbol_rate; int polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot; @@ -59,21 +52,18 @@ struct eDVBFrontendParametersCable #ifndef SWIG void set(const CableDeliverySystemDescriptor &); #endif - struct Inversion { - enum { - Off, On, Unknown - }; + enum { + Inversion_Off, Inversion_On, Inversion_Unknown }; - struct FEC { - enum { - fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, f8_9, fNone=15 - }; + + enum { + FEC_Auto, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_None=15 }; - struct Modulation { - enum { - Auto, QAM16, QAM32, QAM64, QAM128, QAM256 - }; + + enum { + Modulation_Auto, Modulation_QAM16, Modulation_QAM32, Modulation_QAM64, Modulation_QAM128, Modulation_QAM256 }; + unsigned int frequency, symbol_rate; int modulation, inversion, fec_inner; }; @@ -84,42 +74,34 @@ struct eDVBFrontendParametersTerrestrial #ifndef SWIG void set(const TerrestrialDeliverySystemDescriptor &); #endif - struct Bandwidth { - enum { - Bw8MHz, Bw7MHz, Bw6MHz, /*Bw5MHz,*/ BwAuto - }; // Bw5Mhz nyi (compatibilty with enigma1) - }; - struct FEC { - enum { - f1_2, f2_3, f3_4, f5_6, f7_8, fAuto - }; - }; - struct TransmissionMode { - enum { - TM2k, TM8k, /*TM4k,*/ TMAuto - }; // TM4k nyi (compatibility with enigma1) + enum { + Bandwidth_8MHz, Bandwidth_7MHz, Bandwidth_6MHz, /*Bandwidth_5MHz,*/ Bandwidth_Auto + }; // Bw5Mhz nyi (compatibilty with enigma1) + + enum { + FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_Auto }; - struct GuardInterval { - enum { - GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto - }; + + enum { + TransmissionMode_2k, TransmissionMode_8k, /*TransmissionMode_4k,*/ TransmissionMode_Auto + }; // TM4k nyi (compatibility with enigma1) + + enum { + GuardInterval_1_32, GuardInterval_1_16, GuardInterval_1_8, GuardInterval_1_4, GuardInterval_Auto }; - struct Hierarchy { - enum { - HNone, H1, H2, H4, HAuto - }; + + enum { + Hierarchy_None, Hierarchy_1, Hierarchy_2, Hierarchy_4, Hierarchy_Auto }; - struct Modulation { - enum { - QPSK, QAM16, QAM64, Auto - }; + + enum { + Modulation_QPSK, Modulation_QAM16, Modulation_QAM64, Modulation_Auto }; - struct Inversion - { - enum { - Off, On, Unknown - }; + + enum { + Inversion_Off, Inversion_On, Inversion_Unknown }; + unsigned int frequency; int bandwidth; int code_rate_HP, code_rate_LP; diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 6f64cf56..ac1a2028 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -99,7 +99,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite if ( sat.frequency > lnb_param.m_lof_threshold ) band |= 1; - if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical)) + if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical)) band |= 2; if (di_param.m_diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0) @@ -373,7 +373,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA if ( sat.frequency > lnb_param.m_lof_threshold ) band |= 1; - if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical)) + if (!(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical)) band |= 2; int lof = (band&1)?lnb_param.m_lof_hi:lnb_param.m_lof_lo; @@ -390,11 +390,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY); if ( voltage_mode == eDVBSatelliteSwitchParameters::_14V - || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical + || ( sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) voltage = VOLTAGE(13); else if ( voltage_mode == eDVBSatelliteSwitchParameters::_18V - || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation::Vertical) + || ( !(sat.polarisation & eDVBFrontendParametersSatellite::Polarisation_Vertical) && voltage_mode == eDVBSatelliteSwitchParameters::HV ) ) voltage = VOLTAGE(18); if ( (sw_param.m_22khz_signal == eDVBSatelliteSwitchParameters::ON) @@ -936,12 +936,12 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA eDebugNoSimulate("found no useable satellite configuration for %s freq %d%s %s on orbital position (%d)", sat.system ? "DVB-S2" : "DVB-S", sat.frequency, - sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Horizontal ? "H" : - eDVBFrontendParametersSatellite::Polarisation::Vertical ? "V" : - eDVBFrontendParametersSatellite::Polarisation::CircularLeft ? "CL" : "CR", - sat.modulation == eDVBFrontendParametersSatellite::Modulation::Auto ? "AUTO" : - eDVBFrontendParametersSatellite::Modulation::QPSK ? "QPSK" : - eDVBFrontendParametersSatellite::Modulation::M8PSK ? "8PSK" : "QAM16", + sat.polarisation == eDVBFrontendParametersSatellite::Polarisation_Horizontal ? "H" : + eDVBFrontendParametersSatellite::Polarisation_Vertical ? "V" : + eDVBFrontendParametersSatellite::Polarisation_CircularLeft ? "CL" : "CR", + sat.modulation == eDVBFrontendParametersSatellite::Modulation_Auto ? "AUTO" : + eDVBFrontendParametersSatellite::Modulation_QPSK ? "QPSK" : + eDVBFrontendParametersSatellite::Modulation_8PSK ? "8PSK" : "QAM16", sat.orbital_position ); return -1; } diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py index d3714440..69ef3774 100644 --- a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py +++ b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py @@ -478,14 +478,14 @@ class TunerScreen(ScanSetup): self.list.append(self.systemEntry) else: # downgrade to dvb-s, in case a -s2 config was active - self.scan_sat.system.value = "dvb-s" + self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S 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)) - if self.scan_sat.system.value == "dvb-s": + if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S: self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec)) - elif self.scan_sat.system.value == "dvb-s2": + elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2: self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2)) self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation) self.list.append(self.modulationEntry) @@ -570,31 +570,21 @@ class TunerScreen(ScanSetup): returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) satpos = int(tuning.sat.value) if tuning.type.value == "manual_transponder": - if self.scan_sat.system.value == "dvb-s2": + if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2: fec = self.scan_sat.fec_s2.value else: fec = self.scan_sat.fec.value returnvalue = ( self.scan_sat.frequency.value, self.scan_sat.symbolrate.value, - self.scan_sat.polarization.index, - { "auto": 0, - "1_2": 1, - "2_3": 2, - "3_4": 3, - "5_6": 4, - "7_8": 5, - "8_9": 6, - "3_5": 7, - "4_5": 8, - "9_10": 9, - "none": 15 }[fec], - self.scan_sat.inversion.index, + self.scan_sat.polarization.value, + fec, + self.scan_sat.inversion.value, satpos, - self.scan_sat.system.index, - self.scan_sat.modulation.index == 1 and 2 or 1, - self.scan_sat.rolloff.index, - self.scan_sat.pilot.index) + self.scan_sat.system.value, + self.scan_sat.modulation.value, + self.scan_sat.rolloff.value, + self.scan_sat.pilot.value) elif tuning.type.value == "predefined_transponder": transponder = nimmanager.getTransponders(satpos)[tuning.transponder.index] returnvalue = (transponder[1] / 1000, transponder[2] / 1000, diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py index 87dc81e4..8174eb64 100644 --- a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py +++ b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py @@ -77,14 +77,14 @@ class Satfinder(ScanSetup): self.list.append(self.systemEntry) else: # downgrade to dvb-s, in case a -s2 config was active - self.scan_sat.system.value = "dvb-s" + self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S 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)) - if self.scan_sat.system.value == "dvb-s": + if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S: self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec)) - elif self.scan_sat.system.value == "dvb-s2": + elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2: self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2)) self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation) self.list.append(self.modulationEntry) @@ -111,31 +111,21 @@ class Satfinder(ScanSetup): returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) satpos = int(self.tuning_sat.value) if self.tuning_type.value == "manual_transponder": - if self.scan_sat.system.value == "dvb-s2": + if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2: fec = self.scan_sat.fec_s2.value else: fec = self.scan_sat.fec.value returnvalue = ( self.scan_sat.frequency.value, self.scan_sat.symbolrate.value, - self.scan_sat.polarization.index, - { "auto": 0, - "1_2": 1, - "2_3": 2, - "3_4": 3, - "5_6": 4, - "7_8": 5, - "8_9": 6, - "3_5": 7, - "4_5": 8, - "9_10": 9, - "none": 15 }[fec], - self.scan_sat.inversion.index, + self.scan_sat.polarization.value, + fec, + self.scan_sat.inversion.value, satpos, - self.scan_sat.system.index, - self.scan_sat.modulation.index == 1 and 2 or 1, - self.scan_sat.rolloff.index, - self.scan_sat.pilot.index) + self.scan_sat.system.value, + self.scan_sat.modulation.value, + self.scan_sat.rolloff.value, + self.scan_sat.pilot.value) self.tune(returnvalue) elif self.tuning_type.value == "predefined_transponder": tps = nimmanager.getTransponders(satpos) diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index f32904a1..7089074a 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -17,64 +17,17 @@ def buildTerTransponder(frequency, inversion=2, bandwidth = 3, fechigh = 6, feclow = 6, modulation = 2, transmission = 2, guard = 4, hierarchy = 4): - # print "freq", frequency, "inv", inversion, "bw", bandwidth, "fech", fechigh, "fecl", feclow, "mod", modulation, "tm", transmission, "guard", guard, "hierarchy", hierarchy - - # WARNING: normally, enums are working directly. - # Don't copy this (very bad)!! Instead either fix swig (good) or - # move this into a central place. - Bw8MHz = 0 - Bw7MHz = 1 - Bw6MHz = 2 - #Bw5MHz = 3 #not implemented for e1 compatibilty - BwAuto = 3 - - f1_2 = 0 - f2_3 = 1 - f3_4 = 2 - f5_6 = 3 - f7_8 = 4 - fAuto = 5 - - TM2k = 0 - TM8k = 1 - #TM4k = 2 #not implemented for e1 compatibilty - TMAuto = 2 - - GI_1_32 = 0 - GI_1_16 = 1 - GI_1_8 = 2 - GI_1_4 = 3 - GI_Auto = 4 - - HNone = 0 - H1 = 1 - H2 = 2 - H4 = 3 - HAuto = 4 - - QPSK = 0 - QAM16 = 1 - QAM64 = 2 - Auto = 3 - - Off = 0 - On = 1 - Unknown = 2 - parm = eDVBFrontendParametersTerrestrial() - parm.frequency = frequency - - parm.inversion = [Off, On, Unknown][inversion] - parm.bandwidth = [Bw8MHz, Bw7MHz, Bw6MHz, BwAuto][bandwidth] # Bw5MHz unsupported - parm.code_rate_HP = [f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][fechigh] - parm.code_rate_LP = [f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][feclow] - parm.modulation = [QPSK, QAM16, QAM64, Auto][modulation] - parm.transmission_mode = [TM2k, TM8k, TMAuto][transmission] # TM4k unsupported - parm.guard_interval = [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto][guard] - parm.hierarchy = [HNone, H1, H2, H4, HAuto][hierarchy] - + parm.inversion = inversion + parm.bandwidth = bandwidth + parm.code_rate_HP = fechigh + parm.code_rate_LP = feclow + parm.modulation = modulation + parm.transmission_mode = transmission + parm.guard_interval = guard + parm.hierarchy = hierarchy return parm def getInitialTransponderList(tlist, pos): @@ -103,7 +56,7 @@ def getInitialCableTransponderList(tlist, nim): parm.symbol_rate = x[2] parm.modulation = x[3] parm.fec_inner = x[4] - parm.inversion = 2 # AUTO + parm.inversion = parm.Inversion_Unknown #print "frequency:", x[1] #print "symbol_rate:", x[2] #print "modulation:", x[3] @@ -178,10 +131,22 @@ class CableTransponderSearchSupport: if len(data): if data[0] == 'OK': print str - qam = { "QAM16" : 1, "QAM32" : 2, "QAM64" : 3, "QAM128" : 4, "QAM256" : 5 } - inv = { "INVERSION_OFF" : 0, "INVERSION_ON" : 1 } - fec = { "FEC_AUTO" : 0, "FEC_1_2" : 1, "FEC_2_3" : 2, "FEC_3_4" : 3, "FEC_5_6": 4, "FEC_7_8" : 5, "FEC_8_9" : 6, "FEC_NONE" : 15 } parm = eDVBFrontendParametersCable() + qam = { "QAM16" : parm.Modulation_QAM16, + "QAM32" : parm.Modulation_QAM32, + "QAM64" : parm.Modulation_QAM64, + "QAM128" : parm.Modulation_QAM128, + "QAM256" : parm.Modulation_QAM256 } + inv = { "INVERSION_OFF" : parm.Inversion_Off, + "INVERSION_ON" : parm.Inversion_On } + fec = { "FEC_AUTO" : parm.FEC_Auto, + "FEC_1_2" : parm.FEC_1_2, + "FEC_2_3" : parm.FEC_2_3, + "FEC_3_4" : parm.FEC_3_4, + "FEC_5_6": parm.FEC_5_6, + "FEC_7_8" : parm.FEC_7_8, + "FEC_8_9" : parm.FEC_8_9, + "FEC_NONE" : parm.FEC_None } parm.frequency = int(data[1]) parm.symbol_rate = int(data[2]) parm.fec_inner = fec[data[3]] @@ -381,15 +346,15 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): self.list.append(self.systemEntry) else: # downgrade to dvb-s, in case a -s2 config was active - self.scan_sat.system.value = "dvb-s" + self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S self.list.append(getConfigListEntry(_('Satellite'), self.scan_satselection[index_to_scan])) 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)) - if self.scan_sat.system.value == "dvb-s": + if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S: self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec)) - elif self.scan_sat.system.value == "dvb-s2": + elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2: self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2)) self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation) self.list.append(self.modulationEntry) @@ -447,7 +412,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): if cur == self.typeOfScanEntry or \ cur == self.tunerEntry or \ cur == self.systemEntry or \ - (self.modulationEntry and self.systemEntry[1].value == "dvb-s2" and cur == self.modulationEntry): + (self.modulationEntry and self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2 and cur == self.modulationEntry): self.createSetup() def createConfig(self, frontendData): @@ -481,34 +446,65 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): #("Transmission Mode", frontendData["transmission_mode"], TYPE_TEXT), #("Guard Interval", frontendData["guard_interval"], TYPE_TEXT), #("Hierarchy Inform.", frontendData["hierarchy_information"], TYPE_TEXT), - defaultSat = { "orbpos": 192, "system": "dvb-s", "frequency": 11836, "inversion": "auto", "symbolrate": 27500, "polarization": "horizontal", "fec": "auto", "fec_s2": "9_10", "modulation": "qpsk" } - defaultCab = {"frequency": 466, "inversion": "auto", "modulation": "64qam", "fec": "auto", "symbolrate": 6900} + defaultSat = { + "orbpos": 192, + "system": eDVBFrontendParametersSatellite.System_DVB_S, + "frequency": 11836, + "inversion": eDVBFrontendParametersSatellite.Inversion_Unknown, + "symbolrate": 27500, + "polarization": eDVBFrontendParametersSatellite.Polarisation_Horizontal, + "fec": eDVBFrontendParametersSatellite.FEC_Auto, + "fec_s2": eDVBFrontendParametersSatellite.FEC_9_10, + "modulation": eDVBFrontendParametersSatellite.Modulation_QPSK } + defaultCab = { + "frequency": 466, + "inversion": eDVBFrontendParametersCable.Inversion_Unknown, + "modulation": eDVBFrontendParametersCable.Modulation_QAM64, + "fec": eDVBFrontendParametersCable.FEC_Auto, + "symbolrate": 6900 } + defaultTer = { + "frequency" : 466000, + "inversion" : eDVBFrontendParametersTerrestrial.Inversion_Unknown, + "bandwidth" : eDVBFrontendParametersTerrestrial.Bandwidth_7MHz, + "fechigh" : eDVBFrontendParametersTerrestrial.FEC_Auto, + "feclow" : eDVBFrontendParametersTerrestrial.FEC_Auto, + "modulation" : eDVBFrontendParametersTerrestrial.Modulation_Auto, + "transmission_mode" : eDVBFrontendParametersTerrestrial.TransmissionMode_Auto, + "guard_interval" : eDVBFrontendParametersTerrestrial.GuardInterval_Auto, + "hierarchy": eDVBFrontendParametersTerrestrial.Hierarchy_Auto } + if frontendData is not None: ttype = frontendData.get("tuner_type", "UNKNOWN") if ttype == "DVB-S": - defaultSat["system"] = {"DVB-S": "dvb-s", "DVB-S2": "dvb-s2"}[frontendData.get("system", "DVB-S")] + defaultSat["system"] = frontendData.get("system", eDVBFrontendParametersSatellite.System_DVB_S) defaultSat["frequency"] = frontendData.get("frequency", 0) / 1000 - defaultSat["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")] + defaultSat["inversion"] = frontendData.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown) defaultSat["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000 - defaultSat["polarization"] = {"HORIZONTAL": "horizontal", "VERTICAL": "vertical", "CIRCULAR_LEFT": "circular_left", "CIRCULAR_RIGHT": "circular_right", "UNKNOWN": None}[frontendData.get("polarization", "HORIZONTAL")] - - if frontendData.get("system", "DVB-S") == "DVB-S2": - defaultSat["fec_s2"] = {"FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_4_5": "4_5", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_9_10": "9_10"} \ - [frontendData.get("fec_inner", "FEC_AUTO")] - defaultSat["rolloff"] = {"ROLLOFF_0_35" : "0_35", "ROLLOFF_0_25" : "0_25", "ROLLOFF_0_20" : "0_20"}[frontendData.get("rolloff", "ROLLOFF_0_35")] - defaultSat["pilot"] = {"PILOT_ON" : "on", "PILOT_OFF" : "off", "PILOT_AUTO" : "auto"}[frontendData.get("pilot", "PILOT_AUTO")] + defaultSat["polarization"] = frontendData.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal) + if defaultSat["system"] == eDVBFrontendParametersSatellite.System_DVB_S2: + defaultSat["fec_s2"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto) + defaultSat["rolloff"] = frontendData.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35) + defaultSat["pilot"] = frontendData.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown) else: - defaultSat["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_NONE": "none"} \ - [frontendData.get("fec_inner", "FEC_AUTO")] - - defaultSat["modulation"] = {"QPSK": "qpsk", "8PSK": "8psk"}[frontendData.get("modulation", "QPSK")] + defaultSat["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto) + defaultSat["modulation"] = frontendData.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK) defaultSat["orbpos"] = frontendData.get("orbital_position", 0) elif ttype == "DVB-C": defaultCab["frequency"] = frontendData.get("frequency", 0) / 1000 defaultCab["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000 - defaultCab["inversion"] = {"INVERSION_OFF": "off", "INVERSION_ON": "on", "INVERSION_AUTO": "auto"}[frontendData.get("inversion", "INVERSION_AUTO")] - defaultCab["fec"] = {"FEC_AUTO": "auto", "FEC_1_2": "1_2", "FEC_2_3": "2_3", "FEC_3_4": "3_4", "FEC_5_6": "5_6", "FEC_7_8": "7_8", "FEC_8_9": "8_9", "FEC_NONE": "none"}[frontendData.get("fec_inner", "FEC_AUTO")] - defaultCab["modulation"] = {"QAM_AUTO": "auto", "QAM_16": "16qam", "QAM_32": "32qam", "QAM_64": "64qam", "QAM_128": "128qam", "QAM_256": "256qam"}[frontendData.get("modulation", "QAM_16")] + defaultCab["inversion"] = frontendData.get("inversion", eDVBFrontendParametersCable.Inversion_Unknown) + defaultCab["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersCable.FEC_Auto) + defaultCab["modulation"] = frontendData.get("modulation", eDVBFrontendParametersCable.Modulation_QAM16) + elif ttype == "DVB-T": + defaultTer["frequency"] = frontendData.get("frequency", 0) + defaultTer["inversion"] = frontendData.get("inversion", eDVBFrontendParametersTerrestrial.Inversion_Unknown) + defaultTer["bandwidth"] = frontendData.get("bandwidth", eDVBFrontendParametersTerrestrial.Bandwidth_7MHz) + defaultTer["fechigh"] = frontendData.get("code_rate_hp", eDVBFrontendParametersTerrestrial.FEC_Auto) + defaultTer["feclow"] = frontendData.get("code_rate_lp", eDVBFrontendParametersTerrestrial.FEC_Auto) + defaultTer["modulation"] = frontendData.get("constellation", eDVBFrontendParametersTerrestrial.Modulation_Auto) + defaultTer["transmission_mode"] = frontendData.get("transmission_mode", eDVBFrontendParametersTerrestrial.TransmissionMode_Auto) + defaultTer["guard_interval"] = frontendData.get("guard_interval", eDVBFrontendParametersTerrestrial.GuardInterval_Auto) + defaultTer["hierarchy"] = frontendData.get("hierarchy_information", eDVBFrontendParametersTerrestrial.Hierarchy_Auto) self.scan_sat = ConfigSubsection() self.scan_cab = ConfigSubsection() @@ -538,36 +534,120 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): self.scan_ber.enabled = False # sat - self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [("dvb-s", _("DVB-S")), ("dvb-s2", _("DVB-S2"))]) + self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [ + (eDVBFrontendParametersSatellite.System_DVB_S, _("DVB-S")), + (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2"))]) self.scan_sat.frequency = ConfigInteger(default = defaultSat["frequency"], limits = (1, 99999)) - self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))]) + self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [ + (eDVBFrontendParametersSatellite.Inversion_Off, _("off")), + (eDVBFrontendParametersSatellite.Inversion_On, _("on")), + (eDVBFrontendParametersSatellite.Inversion_Unknown, _("Auto"))]) self.scan_sat.symbolrate = ConfigInteger(default = defaultSat["symbolrate"], limits = (1, 99999)) - self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [("horizontal", _("horizontal")), ("vertical", _("vertical")), ("circular_left", _("circular left")), ("circular_right", _("circular right"))]) - self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [("auto", _("Auto")), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("none", _("None"))]) - self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("3_5", "3/5"), ("4_5", "4/5"), ("5_6", "5/6"), ("7_8", "7/8"), ("8_9", "8/9"), ("9_10", "9/10")]) - self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [("qpsk", "QPSK"), ("8psk", "8PSK")]) - self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", "0_35"), choices = [("0_35", "0.35"), ("0_25", "0.25"), ("0_20", "0.20")]) - self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", "auto"), choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))]) + self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [ + (eDVBFrontendParametersSatellite.Polarisation_Horizontal, _("horizontal")), + (eDVBFrontendParametersSatellite.Polarisation_Vertical, _("vertical")), + (eDVBFrontendParametersSatellite.Polarisation_CircularLeft, _("circular left")), + (eDVBFrontendParametersSatellite.Polarisation_CircularRight, _("circular right"))]) + self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [ + (eDVBFrontendParametersSatellite.FEC_Auto, _("Auto")), + (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"), + (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"), + (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"), + (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"), + (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"), + (eDVBFrontendParametersSatellite.FEC_None, _("None"))]) + self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [ + (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"), + (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"), + (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"), + (eDVBFrontendParametersSatellite.FEC_3_5, "3/5"), + (eDVBFrontendParametersSatellite.FEC_4_5, "4/5"), + (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"), + (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"), + (eDVBFrontendParametersSatellite.FEC_8_9, "8/9"), + (eDVBFrontendParametersSatellite.FEC_9_10, "9/10")]) + self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [ + (eDVBFrontendParametersSatellite.Modulation_QPSK, "QPSK"), + (eDVBFrontendParametersSatellite.Modulation_8PSK, "8PSK")]) + self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35), choices = [ + (eDVBFrontendParametersSatellite.RollOff_alpha_0_35, "0.35"), + (eDVBFrontendParametersSatellite.RollOff_alpha_0_25, "0.25"), + (eDVBFrontendParametersSatellite.RollOff_alpha_0_20, "0.20")]) + self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown), choices = [ + (eDVBFrontendParametersSatellite.Pilot_Off, _("off")), + (eDVBFrontendParametersSatellite.Pilot_On, _("on")), + (eDVBFrontendParametersSatellite.Pilot_Unknown, _("Auto"))]) # cable self.scan_cab.frequency = ConfigInteger(default = defaultCab["frequency"], limits = (50, 999)) - self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))]) - self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [("16qam", "16-QAM"), ("32qam", "32-QAM"), ("64qam", "64-QAM"), ("128qam", "128-QAM"), ("256qam", "256-QAM")]) - self.scan_cab.fec = ConfigSelection(default = defaultCab["fec"], choices = [("auto", _("Auto")), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("8_9", "8/9"), ("none", _("None"))]) + self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [ + (eDVBFrontendParametersCable.Inversion_Off, _("off")), + (eDVBFrontendParametersCable.Inversion_On, _("on")), + (eDVBFrontendParametersCable.Inversion_Unknown, _("Auto"))]) + self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [ + (eDVBFrontendParametersCable.Modulation_QAM16, "16-QAM"), + (eDVBFrontendParametersCable.Modulation_QAM32, "32-QAM"), + (eDVBFrontendParametersCable.Modulation_QAM64, "64-QAM"), + (eDVBFrontendParametersCable.Modulation_QAM128, "128-QAM"), + (eDVBFrontendParametersCable.Modulation_QAM256, "256-QAM")]) + self.scan_cab.fec = ConfigSelection(default = defaultCab["fec"], choices = [ + (eDVBFrontendParametersCable.FEC_Auto, _("Auto")), + (eDVBFrontendParametersCable.FEC_1_2, "1/2"), + (eDVBFrontendParametersCable.FEC_2_3, "2/3"), + (eDVBFrontendParametersCable.FEC_3_4, "3/4"), + (eDVBFrontendParametersCable.FEC_5_6, "5/6"), + (eDVBFrontendParametersCable.FEC_7_8, "7/8"), + (eDVBFrontendParametersCable.FEC_8_9, "8/9"), + (eDVBFrontendParametersCable.FEC_None, _("None"))]) self.scan_cab.symbolrate = ConfigInteger(default = defaultCab["symbolrate"], limits = (1, 99999)) # terrestial self.scan_ter.frequency = ConfigInteger(default = 466000, limits = (50000, 999000)) - self.scan_ter.inversion = ConfigSelection(default = "auto", choices = [("off", _("off")), ("on", _("on")), ("auto", _("Auto"))]) + self.scan_ter.inversion = ConfigSelection(default = defaultTer["inversion"], choices = [ + (eDVBFrontendParametersTerrestrial.Inversion_Off, _("off")), + (eDVBFrontendParametersTerrestrial.Inversion_On, _("on")), + (eDVBFrontendParametersTerrestrial.Inversion_Unknown, _("Auto"))]) # WORKAROUND: we can't use BW-auto - self.scan_ter.bandwidth = ConfigSelection(default = "8MHz", choices = [("8MHz", "8MHz"), ("7MHz", "7MHz"), ("6MHz", "6MHz")]) - #, ("auto", _("Auto")))) - self.scan_ter.fechigh = ConfigSelection(default = "auto", choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("auto", _("Auto"))]) - self.scan_ter.feclow = ConfigSelection(default = "auto", choices = [("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("auto", _("Auto"))]) - self.scan_ter.modulation = ConfigSelection(default = "auto", choices = [("qpsk", "QPSK"), ("qam16", "QAM16"), ("qam64", "QAM64"), ("auto", _("Auto"))]) - self.scan_ter.transmission = ConfigSelection(default = "auto", choices = [("2k", "2K"), ("8k", "8K"), ("auto", _("Auto"))]) - self.scan_ter.guard = ConfigSelection(default = "auto", choices = [("1_32", "1/32"), ("1_16", "1/16"), ("1_8", "1/8"), ("1_4", "1/4"), ("auto", _("Auto"))]) - self.scan_ter.hierarchy = ConfigSelection(default = "auto", choices = [("none", _("None")), ("1", "1"), ("2", "2"), ("4", "4"), ("auto", _("Auto"))]) + self.scan_ter.bandwidth = ConfigSelection(default = defaultTer["bandwidth"], choices = [ + (eDVBFrontendParametersTerrestrial.Bandwidth_8MHz, "8MHz"), + (eDVBFrontendParametersTerrestrial.Bandwidth_7MHz, "7MHz"), + (eDVBFrontendParametersTerrestrial.Bandwidth_6MHz, "6MHz")]) + #, (eDVBFrontendParametersTerrestrial.Bandwidth_Auto, _("Auto")))) + self.scan_ter.fechigh = ConfigSelection(default = defaultTer["fechigh"], choices = [ + (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"), + (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"), + (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"), + (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"), + (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"), + (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))]) + self.scan_ter.feclow = ConfigSelection(default = defaultTer["feclow"], choices = [ + (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"), + (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"), + (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"), + (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"), + (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"), + (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))]) + self.scan_ter.modulation = ConfigSelection(default = defaultTer["modulation"], choices = [ + (eDVBFrontendParametersTerrestrial.Modulation_QPSK, "QPSK"), + (eDVBFrontendParametersTerrestrial.Modulation_QAM16, "QAM16"), + (eDVBFrontendParametersTerrestrial.Modulation_QAM64, "QAM64"), + (eDVBFrontendParametersTerrestrial.Modulation_Auto, _("Auto"))]) + self.scan_ter.transmission = ConfigSelection(default = defaultTer["transmission_mode"], choices = [ + (eDVBFrontendParametersTerrestrial.TransmissionMode_2k, "2K"), + (eDVBFrontendParametersTerrestrial.TransmissionMode_8k, "8K"), + (eDVBFrontendParametersTerrestrial.TransmissionMode_Auto, _("Auto"))]) + self.scan_ter.guard = ConfigSelection(default = defaultTer["guard_interval"], choices = [ + (eDVBFrontendParametersTerrestrial.GuardInterval_1_32, "1/32"), + (eDVBFrontendParametersTerrestrial.GuardInterval_1_16, "1/16"), + (eDVBFrontendParametersTerrestrial.GuardInterval_1_8, "1/8"), + (eDVBFrontendParametersTerrestrial.GuardInterval_1_4, "1/4"), + (eDVBFrontendParametersTerrestrial.GuardInterval_Auto, _("Auto"))]) + self.scan_ter.hierarchy = ConfigSelection(default = defaultTer["hierarchy"], choices = [ + (eDVBFrontendParametersTerrestrial.Hierarchy_None, _("None")), + (eDVBFrontendParametersTerrestrial.Hierarchy_1, "1"), + (eDVBFrontendParametersTerrestrial.Hierarchy_2, "2"), + (eDVBFrontendParametersTerrestrial.Hierarchy_4, "4"), + (eDVBFrontendParametersTerrestrial.Hierarchy_Auto, _("Auto"))]) self.scan_scansat = {} for sat in nimmanager.satList: @@ -594,32 +674,16 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): def updateStatus(self): print "updatestatus" - fecmap = { "auto": 0, - "1_2": 1, - "2_3": 2, - "3_4": 3, - "5_6": 4, - "7_8": 5, - "8_9": 6, - "3_5": 7, - "4_5": 8, - "9_10": 9, - "none": 15 - } - def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot): - print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(self.fecmap[fec]) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot) + print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(fec) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot) print "orbpos: " + str(orbital_position) parm = eDVBFrontendParametersSatellite() - if modulation == 1: - parm.modulation = 2 # eDVBFrontendParametersSatellite.Modulation.8PSK - else: - parm.modulation = 1 # eDVBFrontendParametersSatellite.Modulation.QPSK + parm.modulation = modulation parm.system = system parm.frequency = frequency * 1000 parm.symbol_rate = symbol_rate * 1000 parm.polarisation = polarisation - parm.fec = self.fecmap[fec] + parm.fec = fec parm.inversion = inversion parm.orbital_position = orbital_position parm.rolloff = rolloff @@ -632,7 +696,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): parm.frequency = frequency * 1000 parm.symbol_rate = symbol_rate * 1000 parm.modulation = modulation - parm.fec = self.fecmap[fec] + parm.fec = fec parm.inversion = inversion tlist.append(parm) @@ -665,21 +729,21 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): # however, the satList itself could be empty. in that case, "index" is 0 (for "None"). if len(nimsats): orbpos = nimsats[selsatidx][0] - if self.scan_sat.system.value == "dvb-s": + if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S: fec = self.scan_sat.fec.value else: fec = self.scan_sat.fec_s2.value print "add sat transponder" self.addSatTransponder(tlist, self.scan_sat.frequency.value, self.scan_sat.symbolrate.value, - self.scan_sat.polarization.index, + self.scan_sat.polarization.value, fec, - self.scan_sat.inversion.index, + self.scan_sat.inversion.value, orbpos, - self.scan_sat.system.index, - self.scan_sat.modulation.index, - self.scan_sat.rolloff.index, - self.scan_sat.pilot.index) + self.scan_sat.system.value, + self.scan_sat.modulation.value, + self.scan_sat.rolloff.value, + self.scan_sat.pilot.value) removeAll = False elif self.scan_type.value == "single_satellite": sat = self.satList[index_to_scan][self.scan_satselection[index_to_scan].index] @@ -693,12 +757,11 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): elif nim.isCompatible("DVB-C"): if self.scan_typecable.value == "single_transponder": - fec = self.scan_cab.fec.value self.addCabTransponder(tlist, self.scan_cab.frequency.value, self.scan_cab.symbolrate.value, - self.scan_cab.modulation.index + 1, - fec, - self.scan_cab.inversion.index) + self.scan_cab.modulation.value, + self.scan_cab.fec.value, + self.scan_cab.inversion.value) removeAll = False elif self.scan_typecable.value == "complete": if config.Nims[index_to_scan].cable.scan_type.value == "provider": @@ -710,14 +773,14 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport): if self.scan_typeterrestrial.value == "single_transponder": self.addTerTransponder(tlist, self.scan_ter.frequency.value * 1000, - inversion = self.scan_ter.inversion.index, - bandwidth = self.scan_ter.bandwidth.index, - fechigh = self.scan_ter.fechigh.index, - feclow = self.scan_ter.feclow.index, - modulation = self.scan_ter.modulation.index, - transmission = self.scan_ter.transmission.index, - guard = self.scan_ter.guard.index, - hierarchy = self.scan_ter.hierarchy.index) + inversion = self.scan_ter.inversion.value, + bandwidth = self.scan_ter.bandwidth.value, + fechigh = self.scan_ter.fechigh.value, + feclow = self.scan_ter.feclow.value, + modulation = self.scan_ter.modulation.value, + transmission = self.scan_ter.transmission.value, + guard = self.scan_ter.guard.value, + hierarchy = self.scan_ter.hierarchy.value) removeAll = False elif self.scan_typeterrestrial.value == "complete": getInitialTerrestrialTransponderList(tlist, nimmanager.getTerrestrialDescription(index_to_scan)) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index dcd7017c..bcf005e4 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -122,64 +122,64 @@ void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &fe PutToDictAsStr(dict, "orbital position", feparm.orbital_position); switch (feparm.inversion) { - case eDVBFrontendParametersSatellite::Inversion::On: tmp="ON"; break; - case eDVBFrontendParametersSatellite::Inversion::Off: tmp="OFF"; break; + case eDVBFrontendParametersSatellite::Inversion_On: tmp="ON"; break; + case eDVBFrontendParametersSatellite::Inversion_Off: tmp="OFF"; break; default: - case eDVBFrontendParametersSatellite::Inversion::Unknown: tmp="AUTO"; break; + case eDVBFrontendParametersSatellite::Inversion_Unknown: tmp="AUTO"; break; } PutToDict(dict, "inversion", tmp); switch (feparm.fec) { - case eDVBFrontendParametersSatellite::FEC::fNone: tmp="NONE"; break; - case eDVBFrontendParametersSatellite::FEC::f1_2: tmp="1/2"; break; - case eDVBFrontendParametersSatellite::FEC::f2_3: tmp="2/3"; break; - case eDVBFrontendParametersSatellite::FEC::f3_4: tmp="3/4"; break; - case eDVBFrontendParametersSatellite::FEC::f5_6: tmp="5/6"; break; - case eDVBFrontendParametersSatellite::FEC::f7_8: tmp="7/8"; break; - case eDVBFrontendParametersSatellite::FEC::f3_5: tmp="3/5"; break; - case eDVBFrontendParametersSatellite::FEC::f4_5: tmp="4/5"; break; - case eDVBFrontendParametersSatellite::FEC::f8_9: tmp="8/9"; break; - case eDVBFrontendParametersSatellite::FEC::f9_10: tmp="9/10"; break; + case eDVBFrontendParametersSatellite::FEC_None: tmp="NONE"; break; + case eDVBFrontendParametersSatellite::FEC_1_2: tmp="1/2"; break; + case eDVBFrontendParametersSatellite::FEC_2_3: tmp="2/3"; break; + case eDVBFrontendParametersSatellite::FEC_3_4: tmp="3/4"; break; + case eDVBFrontendParametersSatellite::FEC_5_6: tmp="5/6"; break; + case eDVBFrontendParametersSatellite::FEC_7_8: tmp="7/8"; break; + case eDVBFrontendParametersSatellite::FEC_3_5: tmp="3/5"; break; + case eDVBFrontendParametersSatellite::FEC_4_5: tmp="4/5"; break; + case eDVBFrontendParametersSatellite::FEC_8_9: tmp="8/9"; break; + case eDVBFrontendParametersSatellite::FEC_9_10: tmp="9/10"; break; default: - case eDVBFrontendParametersSatellite::FEC::fAuto: tmp="AUTO"; break; + case eDVBFrontendParametersSatellite::FEC_Auto: tmp="AUTO"; break; } PutToDict(dict, "fec inner", tmp); switch (feparm.modulation) { - case eDVBFrontendParametersSatellite::Modulation::Auto: tmp="AUTO"; break; - case eDVBFrontendParametersSatellite::Modulation::QPSK: tmp="QPSK"; break; - case eDVBFrontendParametersSatellite::Modulation::M8PSK: tmp="8PSK"; break; - case eDVBFrontendParametersSatellite::Modulation::QAM_16: tmp="QAM16"; break; + case eDVBFrontendParametersSatellite::Modulation_Auto: tmp="AUTO"; break; + case eDVBFrontendParametersSatellite::Modulation_QPSK: tmp="QPSK"; break; + case eDVBFrontendParametersSatellite::Modulation_8PSK: tmp="8PSK"; break; + case eDVBFrontendParametersSatellite::Modulation_QAM16: tmp="QAM16"; break; } PutToDict(dict, "modulation", tmp); switch(feparm.polarisation) { - case eDVBFrontendParametersSatellite::Polarisation::Horizontal: tmp="HORIZONTAL"; break; - case eDVBFrontendParametersSatellite::Polarisation::Vertical: tmp="VERTICAL"; break; - case eDVBFrontendParametersSatellite::Polarisation::CircularLeft: tmp="CIRCULAR LEFT"; break; + case eDVBFrontendParametersSatellite::Polarisation_Horizontal: tmp="HORIZONTAL"; break; + case eDVBFrontendParametersSatellite::Polarisation_Vertical: tmp="VERTICAL"; break; + case eDVBFrontendParametersSatellite::Polarisation_CircularLeft: tmp="CIRCULAR LEFT"; break; default: - case eDVBFrontendParametersSatellite::Polarisation::CircularRight: tmp="CIRCULAR RIGHT"; break; + case eDVBFrontendParametersSatellite::Polarisation_CircularRight: tmp="CIRCULAR RIGHT"; break; } PutToDict(dict, "polarization", tmp); switch(feparm.system) { default: - case eDVBFrontendParametersSatellite::System::DVB_S: tmp="DVB-S"; break; - case eDVBFrontendParametersSatellite::System::DVB_S2: + case eDVBFrontendParametersSatellite::System_DVB_S: tmp="DVB-S"; break; + case eDVBFrontendParametersSatellite::System_DVB_S2: switch(feparm.rolloff) { default: - case eDVBFrontendParametersSatellite::RollOff::alpha_0_35: tmp="0.35"; break; - case eDVBFrontendParametersSatellite::RollOff::alpha_0_25: tmp="0.25"; break; - case eDVBFrontendParametersSatellite::RollOff::alpha_0_20: tmp="0.20"; break; + case eDVBFrontendParametersSatellite::RollOff_alpha_0_35: tmp="0.35"; break; + case eDVBFrontendParametersSatellite::RollOff_alpha_0_25: tmp="0.25"; break; + case eDVBFrontendParametersSatellite::RollOff_alpha_0_20: tmp="0.20"; break; } PutToDict(dict, "roll off", tmp); switch(feparm.pilot) { - case eDVBFrontendParametersSatellite::Pilot::On: tmp="ON"; break; - case eDVBFrontendParametersSatellite::Pilot::Off: tmp="OFF"; break; + case eDVBFrontendParametersSatellite::Pilot_On: tmp="ON"; break; + case eDVBFrontendParametersSatellite::Pilot_Off: tmp="OFF"; break; default: - case eDVBFrontendParametersSatellite::Pilot::Unknown: tmp="AUTO"; break; + case eDVBFrontendParametersSatellite::Pilot_Unknown: tmp="AUTO"; break; } PutToDict(dict, "pilot", tmp); tmp="DVB-S2"; @@ -195,78 +195,78 @@ void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial const char *tmp=0; switch (feparm.bandwidth) { - case eDVBFrontendParametersTerrestrial::Bandwidth::Bw8MHz: tmp="8 MHz"; break; - case eDVBFrontendParametersTerrestrial::Bandwidth::Bw7MHz: tmp="7 MHz"; break; - case eDVBFrontendParametersTerrestrial::Bandwidth::Bw6MHz: tmp="6 MHz"; break; + case eDVBFrontendParametersTerrestrial::Bandwidth_8MHz: tmp="8 MHz"; break; + case eDVBFrontendParametersTerrestrial::Bandwidth_7MHz: tmp="7 MHz"; break; + case eDVBFrontendParametersTerrestrial::Bandwidth_6MHz: tmp="6 MHz"; break; default: - case eDVBFrontendParametersTerrestrial::Bandwidth::BwAuto: tmp="AUTO"; break; + case eDVBFrontendParametersTerrestrial::Bandwidth_Auto: tmp="AUTO"; break; } PutToDict(dict, "bandwidth", tmp); switch (feparm.code_rate_LP) { - case eDVBFrontendParametersTerrestrial::FEC::f1_2: tmp="1/2"; break; - case eDVBFrontendParametersTerrestrial::FEC::f2_3: tmp="2/3"; break; - case eDVBFrontendParametersTerrestrial::FEC::f3_4: tmp="3/4"; break; - case eDVBFrontendParametersTerrestrial::FEC::f5_6: tmp="5/6"; break; - case eDVBFrontendParametersTerrestrial::FEC::f7_8: tmp="7/8"; break; + case eDVBFrontendParametersTerrestrial::FEC_1_2: tmp="1/2"; break; + case eDVBFrontendParametersTerrestrial::FEC_2_3: tmp="2/3"; break; + case eDVBFrontendParametersTerrestrial::FEC_3_4: tmp="3/4"; break; + case eDVBFrontendParametersTerrestrial::FEC_5_6: tmp="5/6"; break; + case eDVBFrontendParametersTerrestrial::FEC_7_8: tmp="7/8"; break; default: - case eDVBFrontendParametersTerrestrial::FEC::fAuto: tmp="AUTO"; break; + case eDVBFrontendParametersTerrestrial::FEC_Auto: tmp="AUTO"; break; } PutToDict(dict, "code rate lp", tmp); switch (feparm.code_rate_HP) { - case eDVBFrontendParametersTerrestrial::FEC::f1_2: tmp="1/2"; break; - case eDVBFrontendParametersTerrestrial::FEC::f2_3: tmp="2/3"; break; - case eDVBFrontendParametersTerrestrial::FEC::f3_4: tmp="3/4"; break; - case eDVBFrontendParametersTerrestrial::FEC::f5_6: tmp="5/6"; break; - case eDVBFrontendParametersTerrestrial::FEC::f7_8: tmp="7/8"; break; + case eDVBFrontendParametersTerrestrial::FEC_1_2: tmp="1/2"; break; + case eDVBFrontendParametersTerrestrial::FEC_2_3: tmp="2/3"; break; + case eDVBFrontendParametersTerrestrial::FEC_3_4: tmp="3/4"; break; + case eDVBFrontendParametersTerrestrial::FEC_5_6: tmp="5/6"; break; + case eDVBFrontendParametersTerrestrial::FEC_7_8: tmp="7/8"; break; default: - case eDVBFrontendParametersTerrestrial::FEC::fAuto: tmp="AUTO"; break; + case eDVBFrontendParametersTerrestrial::FEC_Auto: tmp="AUTO"; break; } PutToDict(dict, "code rate hp", tmp); switch (feparm.modulation) { - case eDVBFrontendParametersTerrestrial::Modulation::QPSK: tmp="QPSK"; break; - case eDVBFrontendParametersTerrestrial::Modulation::QAM16: tmp="QAM16"; break; - case eDVBFrontendParametersTerrestrial::Modulation::QAM64: tmp="QAM64"; break; + case eDVBFrontendParametersTerrestrial::Modulation_QPSK: tmp="QPSK"; break; + case eDVBFrontendParametersTerrestrial::Modulation_QAM16: tmp="QAM16"; break; + case eDVBFrontendParametersTerrestrial::Modulation_QAM64: tmp="QAM64"; break; default: - case eDVBFrontendParametersTerrestrial::Modulation::Auto: tmp="AUTO"; break; + case eDVBFrontendParametersTerrestrial::Modulation_Auto: tmp="AUTO"; break; } PutToDict(dict, "constellation", tmp); switch (feparm.transmission_mode) { - case eDVBFrontendParametersTerrestrial::TransmissionMode::TM2k: tmp="2k"; break; - case eDVBFrontendParametersTerrestrial::TransmissionMode::TM8k: tmp="8k"; break; + case eDVBFrontendParametersTerrestrial::TransmissionMode_2k: tmp="2k"; break; + case eDVBFrontendParametersTerrestrial::TransmissionMode_8k: tmp="8k"; break; default: - case eDVBFrontendParametersTerrestrial::TransmissionMode::TMAuto: tmp="AUTO"; break; + case eDVBFrontendParametersTerrestrial::TransmissionMode_Auto: tmp="AUTO"; break; } PutToDict(dict, "transmission mode", tmp); switch (feparm.guard_interval) { - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_32: tmp="1/32"; break; - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_16: tmp="1/16"; break; - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_8: tmp="1/8"; break; - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_1_4: tmp="1/4"; break; + case eDVBFrontendParametersTerrestrial::GuardInterval_1_32: tmp="1/32"; break; + case eDVBFrontendParametersTerrestrial::GuardInterval_1_16: tmp="1/16"; break; + case eDVBFrontendParametersTerrestrial::GuardInterval_1_8: tmp="1/8"; break; + case eDVBFrontendParametersTerrestrial::GuardInterval_1_4: tmp="1/4"; break; default: - case eDVBFrontendParametersTerrestrial::GuardInterval::GI_Auto: tmp="AUTO"; break; + case eDVBFrontendParametersTerrestrial::GuardInterval_Auto: tmp="AUTO"; break; } PutToDict(dict, "guard interval", tmp); switch (feparm.hierarchy) { - case eDVBFrontendParametersTerrestrial::Hierarchy::HNone: tmp="NONE"; break; - case eDVBFrontendParametersTerrestrial::Hierarchy::H1: tmp="1"; break; - case eDVBFrontendParametersTerrestrial::Hierarchy::H2: tmp="2"; break; - case eDVBFrontendParametersTerrestrial::Hierarchy::H4: tmp="4"; break; + case eDVBFrontendParametersTerrestrial::Hierarchy_None: tmp="NONE"; break; + case eDVBFrontendParametersTerrestrial::Hierarchy_1: tmp="1"; break; + case eDVBFrontendParametersTerrestrial::Hierarchy_2: tmp="2"; break; + case eDVBFrontendParametersTerrestrial::Hierarchy_4: tmp="4"; break; default: - case eDVBFrontendParametersTerrestrial::Hierarchy::HAuto: tmp="AUTO"; break; + case eDVBFrontendParametersTerrestrial::Hierarchy_Auto: tmp="AUTO"; break; } PutToDict(dict, "hierarchy", tmp); switch (feparm.inversion) { - case eDVBFrontendParametersSatellite::Inversion::On: tmp="ON"; break; - case eDVBFrontendParametersSatellite::Inversion::Off: tmp="OFF"; break; + case eDVBFrontendParametersSatellite::Inversion_On: tmp="ON"; break; + case eDVBFrontendParametersSatellite::Inversion_Off: tmp="OFF"; break; default: - case eDVBFrontendParametersSatellite::Inversion::Unknown: tmp="AUTO"; break; + case eDVBFrontendParametersSatellite::Inversion_Unknown: tmp="AUTO"; break; } PutToDict(dict, "inversion", tmp); } @@ -279,34 +279,34 @@ void PutCableDataToDict(ePyObject &dict, eDVBFrontendParametersCable &feparm) PutToDictAsStr(dict, "symbolrate", feparm.symbol_rate); switch (feparm.modulation) { - case eDVBFrontendParametersCable::Modulation::QAM16: tmp="QAM16"; break; - case eDVBFrontendParametersCable::Modulation::QAM32: tmp="QAM32"; break; - case eDVBFrontendParametersCable::Modulation::QAM64: tmp="QAM64"; break; - case eDVBFrontendParametersCable::Modulation::QAM128: tmp="QAM128"; break; - case eDVBFrontendParametersCable::Modulation::QAM256: tmp="QAM256"; break; + case eDVBFrontendParametersCable::Modulation_QAM16: tmp="QAM16"; break; + case eDVBFrontendParametersCable::Modulation_QAM32: tmp="QAM32"; break; + case eDVBFrontendParametersCable::Modulation_QAM64: tmp="QAM64"; break; + case eDVBFrontendParametersCable::Modulation_QAM128: tmp="QAM128"; break; + case eDVBFrontendParametersCable::Modulation_QAM256: tmp="QAM256"; break; default: - case eDVBFrontendParametersCable::Modulation::Auto: tmp="AUTO"; break; + case eDVBFrontendParametersCable::Modulation_Auto: tmp="AUTO"; break; } PutToDict(dict, "modulation", tmp); switch (feparm.inversion) { - case eDVBFrontendParametersCable::Inversion::On: tmp="ON"; break; - case eDVBFrontendParametersCable::Inversion::Off: tmp="OFF"; break; + case eDVBFrontendParametersCable::Inversion_On: tmp="ON"; break; + case eDVBFrontendParametersCable::Inversion_Off: tmp="OFF"; break; default: - case eDVBFrontendParametersCable::Inversion::Unknown: tmp="AUTO"; break; + case eDVBFrontendParametersCable::Inversion_Unknown: tmp="AUTO"; break; } PutToDict(dict, "inversion", tmp); switch (feparm.fec_inner) { - case eDVBFrontendParametersCable::FEC::fNone: tmp="NONE"; break; - case eDVBFrontendParametersCable::FEC::f1_2: tmp="1/2"; break; - case eDVBFrontendParametersCable::FEC::f2_3: tmp="2/3"; break; - case eDVBFrontendParametersCable::FEC::f3_4: tmp="3/4"; break; - case eDVBFrontendParametersCable::FEC::f5_6: tmp="5/6"; break; - case eDVBFrontendParametersCable::FEC::f7_8: tmp="7/8"; break; - case eDVBFrontendParametersCable::FEC::f8_9: tmp="8/9"; break; + case eDVBFrontendParametersCable::FEC_None: tmp="NONE"; break; + case eDVBFrontendParametersCable::FEC_1_2: tmp="1/2"; break; + case eDVBFrontendParametersCable::FEC_2_3: tmp="2/3"; break; + case eDVBFrontendParametersCable::FEC_3_4: tmp="3/4"; break; + case eDVBFrontendParametersCable::FEC_5_6: tmp="5/6"; break; + case eDVBFrontendParametersCable::FEC_7_8: tmp="7/8"; break; + case eDVBFrontendParametersCable::FEC_8_9: tmp="8/9"; break; default: - case eDVBFrontendParametersCable::FEC::fAuto: tmp="AUTO"; break; + case eDVBFrontendParametersCable::FEC_Auto: tmp="AUTO"; break; } PutToDict(dict, "fec inner", tmp); } @@ -2028,16 +2028,7 @@ PyObject *eDVBServiceBase::getTransponderData(bool original) if (!feparm->getDVBS(osat)) { PutToDict(ret, "orbital_position", osat.orbital_position); - const char *tmp = "UNKNOWN"; - switch(osat.polarisation) - { - case eDVBFrontendParametersSatellite::Polarisation::Horizontal: tmp="HORIZONTAL"; break; - case eDVBFrontendParametersSatellite::Polarisation::Vertical: tmp="VERTICAL"; break; - case eDVBFrontendParametersSatellite::Polarisation::CircularLeft: tmp="CIRCULAR_LEFT"; break; - case eDVBFrontendParametersSatellite::Polarisation::CircularRight: tmp="CIRCULAR_RIGHT"; break; - default:break; - } - PutToDict(ret, "polarization", tmp); + PutToDict(ret, "polarization", osat.polarisation); } } } -- cgit v1.2.3 From bfcc745e958a34a457086f003013ca9b69959dea Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 19 Jan 2009 22:30:53 +0100 Subject: getInfoObject sTransponderData now also returns transponder data values (not strings) .. compatible to getFrontendData --- lib/python/Screens/ServiceInfo.py | 20 ++-- lib/service/servicedvb.cpp | 225 +++++--------------------------------- 2 files changed, 38 insertions(+), 207 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/ServiceInfo.py b/lib/python/Screens/ServiceInfo.py index 4606f883..d233c981 100644 --- a/lib/python/Screens/ServiceInfo.py +++ b/lib/python/Screens/ServiceInfo.py @@ -134,24 +134,24 @@ class ServiceInfo(Screen): conv = { "type" : _("Transponder Type"), "system" : _("System"), "modulation" : _("Modulation"), - "orbital position" : _("Orbital Position"), + "orbital_position" : _("Orbital Position"), "frequency" : _("Frequency"), - "symbolrate" : _("Symbolrate"), + "symbol_rate" : _("Symbolrate"), "bandwidth" : _("Bandwidth"), "polarization" : _("Polarization"), "inversion" : _("Inversion"), "pilot" : _("Pilot"), - "roll off" : _("Rolloff"), - "fec inner" : _("FEC"), - "code rate lp" : _("Coderate LP"), - "code rate hp" : _("Coderate HP"), + "rolloff" : _("Rolloff"), + "fec_inner" : _("FEC"), + "code_rate_lp" : _("Coderate LP"), + "code_rate_hp" : _("Coderate HP"), "constellation" : _("Constellation"), - "transmission mode": _("Transmission Mode"), - "guard interval" : _("Guard Interval"), - "hierarchy" : _("Hierarchy Information") } + "transmission_mode": _("Transmission Mode"), + "guard_interval" : _("Guard Interval"), + "hierarchy_information": _("Hierarchy Information") } Labels = [ ] for i in self.transponder_info.keys(): - Labels.append( (conv[i], self.transponder_info[i], TYPE_TEXT) ) + Labels.append( (conv[i], self.transponder_info[i], TYPE_VALUE_DEC) ) self.fillList(Labels) def pids(self): diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index bcf005e4..0dbc8be0 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -96,219 +96,50 @@ int eStaticServiceDVBInformation::isPlayable(const eServiceReference &ref, const return false; } -static void PutToDictAsStr(ePyObject &dict, const char*key, long value) -{ - ePyObject item = PyString_FromFormat("%d", value); - if (item) - { - if (PyDict_SetItemString(dict, key, item)) - eDebug("put %s to dict failed", key); - Py_DECREF(item); - } - else - eDebug("could not create PyObject for %s", key); -} - extern void PutToDict(ePyObject &dict, const char*key, long value); // defined in dvb/frontend.cpp extern void PutToDict(ePyObject &dict, const char*key, ePyObject item); // defined in dvb/frontend.cpp extern void PutToDict(ePyObject &dict, const char*key, const char *value); // defined in dvb/frontend.cpp void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &feparm) { - const char *tmp=0; - PutToDict(dict, "type", "Satellite"); - PutToDictAsStr(dict, "frequency", feparm.frequency); - PutToDictAsStr(dict, "symbolrate", feparm.symbol_rate); - PutToDictAsStr(dict, "orbital position", feparm.orbital_position); - switch (feparm.inversion) - { - case eDVBFrontendParametersSatellite::Inversion_On: tmp="ON"; break; - case eDVBFrontendParametersSatellite::Inversion_Off: tmp="OFF"; break; - default: - case eDVBFrontendParametersSatellite::Inversion_Unknown: tmp="AUTO"; break; - } - PutToDict(dict, "inversion", tmp); - switch (feparm.fec) - { - case eDVBFrontendParametersSatellite::FEC_None: tmp="NONE"; break; - case eDVBFrontendParametersSatellite::FEC_1_2: tmp="1/2"; break; - case eDVBFrontendParametersSatellite::FEC_2_3: tmp="2/3"; break; - case eDVBFrontendParametersSatellite::FEC_3_4: tmp="3/4"; break; - case eDVBFrontendParametersSatellite::FEC_5_6: tmp="5/6"; break; - case eDVBFrontendParametersSatellite::FEC_7_8: tmp="7/8"; break; - case eDVBFrontendParametersSatellite::FEC_3_5: tmp="3/5"; break; - case eDVBFrontendParametersSatellite::FEC_4_5: tmp="4/5"; break; - case eDVBFrontendParametersSatellite::FEC_8_9: tmp="8/9"; break; - case eDVBFrontendParametersSatellite::FEC_9_10: tmp="9/10"; break; - default: - case eDVBFrontendParametersSatellite::FEC_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "fec inner", tmp); - switch (feparm.modulation) + PutToDict(dict, "type", "DVB-S"); + PutToDict(dict, "frequency", feparm.frequency); + PutToDict(dict, "symbol_rate", feparm.symbol_rate); + PutToDict(dict, "orbital_position", feparm.orbital_position); + PutToDict(dict, "inversion", feparm.inversion); + PutToDict(dict, "fec_inner", feparm.fec); + PutToDict(dict, "modulation", feparm.modulation); + PutToDict(dict, "polarization", feparm.polarisation); + if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S2) { - case eDVBFrontendParametersSatellite::Modulation_Auto: tmp="AUTO"; break; - case eDVBFrontendParametersSatellite::Modulation_QPSK: tmp="QPSK"; break; - case eDVBFrontendParametersSatellite::Modulation_8PSK: tmp="8PSK"; break; - case eDVBFrontendParametersSatellite::Modulation_QAM16: tmp="QAM16"; break; + PutToDict(dict, "rolloff", feparm.rolloff); + PutToDict(dict, "pilot", feparm.pilot); } - PutToDict(dict, "modulation", tmp); - switch(feparm.polarisation) - { - case eDVBFrontendParametersSatellite::Polarisation_Horizontal: tmp="HORIZONTAL"; break; - case eDVBFrontendParametersSatellite::Polarisation_Vertical: tmp="VERTICAL"; break; - case eDVBFrontendParametersSatellite::Polarisation_CircularLeft: tmp="CIRCULAR LEFT"; break; - default: - case eDVBFrontendParametersSatellite::Polarisation_CircularRight: tmp="CIRCULAR RIGHT"; break; - } - PutToDict(dict, "polarization", tmp); - switch(feparm.system) - { - default: - case eDVBFrontendParametersSatellite::System_DVB_S: tmp="DVB-S"; break; - case eDVBFrontendParametersSatellite::System_DVB_S2: - switch(feparm.rolloff) - { - default: - case eDVBFrontendParametersSatellite::RollOff_alpha_0_35: tmp="0.35"; break; - case eDVBFrontendParametersSatellite::RollOff_alpha_0_25: tmp="0.25"; break; - case eDVBFrontendParametersSatellite::RollOff_alpha_0_20: tmp="0.20"; break; - } - PutToDict(dict, "roll off", tmp); - switch(feparm.pilot) - { - case eDVBFrontendParametersSatellite::Pilot_On: tmp="ON"; break; - case eDVBFrontendParametersSatellite::Pilot_Off: tmp="OFF"; break; - default: - case eDVBFrontendParametersSatellite::Pilot_Unknown: tmp="AUTO"; break; - } - PutToDict(dict, "pilot", tmp); - tmp="DVB-S2"; - break; - } - PutToDict(dict, "system", tmp); + PutToDict(dict, "system", feparm.system); } void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial &feparm) { - PutToDict(dict, "type", "Terrestrial"); - PutToDictAsStr(dict, "frequency", feparm.frequency); - const char *tmp=0; - switch (feparm.bandwidth) - { - case eDVBFrontendParametersTerrestrial::Bandwidth_8MHz: tmp="8 MHz"; break; - case eDVBFrontendParametersTerrestrial::Bandwidth_7MHz: tmp="7 MHz"; break; - case eDVBFrontendParametersTerrestrial::Bandwidth_6MHz: tmp="6 MHz"; break; - default: - case eDVBFrontendParametersTerrestrial::Bandwidth_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "bandwidth", tmp); - switch (feparm.code_rate_LP) - { - case eDVBFrontendParametersTerrestrial::FEC_1_2: tmp="1/2"; break; - case eDVBFrontendParametersTerrestrial::FEC_2_3: tmp="2/3"; break; - case eDVBFrontendParametersTerrestrial::FEC_3_4: tmp="3/4"; break; - case eDVBFrontendParametersTerrestrial::FEC_5_6: tmp="5/6"; break; - case eDVBFrontendParametersTerrestrial::FEC_7_8: tmp="7/8"; break; - default: - case eDVBFrontendParametersTerrestrial::FEC_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "code rate lp", tmp); - switch (feparm.code_rate_HP) - { - case eDVBFrontendParametersTerrestrial::FEC_1_2: tmp="1/2"; break; - case eDVBFrontendParametersTerrestrial::FEC_2_3: tmp="2/3"; break; - case eDVBFrontendParametersTerrestrial::FEC_3_4: tmp="3/4"; break; - case eDVBFrontendParametersTerrestrial::FEC_5_6: tmp="5/6"; break; - case eDVBFrontendParametersTerrestrial::FEC_7_8: tmp="7/8"; break; - default: - case eDVBFrontendParametersTerrestrial::FEC_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "code rate hp", tmp); - switch (feparm.modulation) - { - case eDVBFrontendParametersTerrestrial::Modulation_QPSK: tmp="QPSK"; break; - case eDVBFrontendParametersTerrestrial::Modulation_QAM16: tmp="QAM16"; break; - case eDVBFrontendParametersTerrestrial::Modulation_QAM64: tmp="QAM64"; break; - default: - case eDVBFrontendParametersTerrestrial::Modulation_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "constellation", tmp); - switch (feparm.transmission_mode) - { - case eDVBFrontendParametersTerrestrial::TransmissionMode_2k: tmp="2k"; break; - case eDVBFrontendParametersTerrestrial::TransmissionMode_8k: tmp="8k"; break; - default: - case eDVBFrontendParametersTerrestrial::TransmissionMode_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "transmission mode", tmp); - switch (feparm.guard_interval) - { - case eDVBFrontendParametersTerrestrial::GuardInterval_1_32: tmp="1/32"; break; - case eDVBFrontendParametersTerrestrial::GuardInterval_1_16: tmp="1/16"; break; - case eDVBFrontendParametersTerrestrial::GuardInterval_1_8: tmp="1/8"; break; - case eDVBFrontendParametersTerrestrial::GuardInterval_1_4: tmp="1/4"; break; - default: - case eDVBFrontendParametersTerrestrial::GuardInterval_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "guard interval", tmp); - switch (feparm.hierarchy) - { - case eDVBFrontendParametersTerrestrial::Hierarchy_None: tmp="NONE"; break; - case eDVBFrontendParametersTerrestrial::Hierarchy_1: tmp="1"; break; - case eDVBFrontendParametersTerrestrial::Hierarchy_2: tmp="2"; break; - case eDVBFrontendParametersTerrestrial::Hierarchy_4: tmp="4"; break; - default: - case eDVBFrontendParametersTerrestrial::Hierarchy_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "hierarchy", tmp); - switch (feparm.inversion) - { - case eDVBFrontendParametersSatellite::Inversion_On: tmp="ON"; break; - case eDVBFrontendParametersSatellite::Inversion_Off: tmp="OFF"; break; - default: - case eDVBFrontendParametersSatellite::Inversion_Unknown: tmp="AUTO"; break; - } - PutToDict(dict, "inversion", tmp); + PutToDict(dict, "type", "DVB-T"); + PutToDict(dict, "frequency", feparm.frequency); + PutToDict(dict, "bandwidth", feparm.bandwidth); + PutToDict(dict, "code_rate_lp", feparm.code_rate_LP); + PutToDict(dict, "code_rate_hp", feparm.code_rate_HP); + PutToDict(dict, "constellation", feparm.modulation); + PutToDict(dict, "transmission_mode", feparm.transmission_mode); + PutToDict(dict, "guard_interval", feparm.guard_interval); + PutToDict(dict, "hierarchy_information", feparm.hierarchy); + PutToDict(dict, "inversion", feparm.inversion); } void PutCableDataToDict(ePyObject &dict, eDVBFrontendParametersCable &feparm) { - const char *tmp=0; - PutToDict(dict, "type", "Cable"); - PutToDictAsStr(dict, "frequency", feparm.frequency); - PutToDictAsStr(dict, "symbolrate", feparm.symbol_rate); - switch (feparm.modulation) - { - case eDVBFrontendParametersCable::Modulation_QAM16: tmp="QAM16"; break; - case eDVBFrontendParametersCable::Modulation_QAM32: tmp="QAM32"; break; - case eDVBFrontendParametersCable::Modulation_QAM64: tmp="QAM64"; break; - case eDVBFrontendParametersCable::Modulation_QAM128: tmp="QAM128"; break; - case eDVBFrontendParametersCable::Modulation_QAM256: tmp="QAM256"; break; - default: - case eDVBFrontendParametersCable::Modulation_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "modulation", tmp); - switch (feparm.inversion) - { - case eDVBFrontendParametersCable::Inversion_On: tmp="ON"; break; - case eDVBFrontendParametersCable::Inversion_Off: tmp="OFF"; break; - default: - case eDVBFrontendParametersCable::Inversion_Unknown: tmp="AUTO"; break; - } - PutToDict(dict, "inversion", tmp); - switch (feparm.fec_inner) - { - case eDVBFrontendParametersCable::FEC_None: tmp="NONE"; break; - case eDVBFrontendParametersCable::FEC_1_2: tmp="1/2"; break; - case eDVBFrontendParametersCable::FEC_2_3: tmp="2/3"; break; - case eDVBFrontendParametersCable::FEC_3_4: tmp="3/4"; break; - case eDVBFrontendParametersCable::FEC_5_6: tmp="5/6"; break; - case eDVBFrontendParametersCable::FEC_7_8: tmp="7/8"; break; - case eDVBFrontendParametersCable::FEC_8_9: tmp="8/9"; break; - default: - case eDVBFrontendParametersCable::FEC_Auto: tmp="AUTO"; break; - } - PutToDict(dict, "fec inner", tmp); + PutToDict(dict, "type", "DVB-C"); + PutToDict(dict, "frequency", feparm.frequency); + PutToDict(dict, "symbol_rate", feparm.symbol_rate); + PutToDict(dict, "modulation", feparm.modulation); + PutToDict(dict, "inversion", feparm.inversion); + PutToDict(dict, "fec_inner", feparm.fec_inner); } PyObject *eStaticServiceDVBInformation::getInfoObject(const eServiceReference &r, int what) -- cgit v1.2.3 From 4f4a0a7483b746cc148fa94665eb2975e6c8df90 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 20 Jan 2009 01:21:02 +0100 Subject: cleanup, convert to human readable --- lib/python/Screens/ServiceInfo.py | 19 +++++++------ lib/python/Tools/Makefile.am | 2 +- lib/python/Tools/Transponder.py | 56 +++++++++++++++++++++++++++++++++++++++ lib/service/servicedvb.cpp | 6 ++--- 4 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 lib/python/Tools/Transponder.py (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/ServiceInfo.py b/lib/python/Screens/ServiceInfo.py index d233c981..e07b3208 100644 --- a/lib/python/Screens/ServiceInfo.py +++ b/lib/python/Screens/ServiceInfo.py @@ -5,6 +5,7 @@ from Components.ActionMap import ActionMap from Components.Label import Label from ServiceReference import ServiceReference from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation, eServiceCenter +from Tools.Transponder import ConvertToHumanReadable RT_HALIGN_LEFT = 0 @@ -131,7 +132,8 @@ class ServiceInfo(Screen): self.fillList(Labels) else: if self.transponder_info: - conv = { "type" : _("Transponder Type"), + tp_info = ConvertToHumanReadable(self.transponder_info) + conv = { "tuner_type" : _("Transponder Type"), "system" : _("System"), "modulation" : _("Modulation"), "orbital_position" : _("Orbital Position"), @@ -150,8 +152,8 @@ class ServiceInfo(Screen): "guard_interval" : _("Guard Interval"), "hierarchy_information": _("Hierarchy Information") } Labels = [ ] - for i in self.transponder_info.keys(): - Labels.append( (conv[i], self.transponder_info[i], TYPE_VALUE_DEC) ) + for i in tp_info.keys(): + Labels.append( (conv[i], tp_info[i], TYPE_VALUE_DEC) ) self.fillList(Labels) def pids(self): @@ -180,9 +182,10 @@ class ServiceInfo(Screen): if self.type == TYPE_SERVICE_INFO: self.showFrontendData(False) - def getFEData(self, frontendData): - if frontendData and len(frontendData): - if frontendData["tuner_type"] == "DVB-S": + def getFEData(self, frontendDataOrg): + if frontendDataOrg and len(frontendDataOrg): + frontendData = ConvertToHumanReadable(frontendDataOrg) + if frontendDataOrg["tuner_type"] == "DVB-S": return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT), ("Type", frontendData["system"], TYPE_TEXT), ("Modulation", frontendData["modulation"], TYPE_TEXT), @@ -194,7 +197,7 @@ class ServiceInfo(Screen): ("FEC inner", frontendData["fec_inner"], TYPE_TEXT), ("Pilot", frontendData.get("pilot", None), TYPE_TEXT), ("Rolloff", frontendData.get("rolloff", None), TYPE_TEXT)) - elif frontendData["tuner_type"] == "DVB-C": + elif frontendDataOrg["tuner_type"] == "DVB-C": return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT), ("Type", frontendData["tuner_type"], TYPE_TEXT), ("Frequency", frontendData["frequency"], TYPE_VALUE_DEC), @@ -202,7 +205,7 @@ class ServiceInfo(Screen): ("Modulation", frontendData["modulation"], TYPE_TEXT), ("Inversion", frontendData["inversion"], TYPE_TEXT), ("FEC inner", frontendData["fec_inner"], TYPE_TEXT)) - elif frontendData["tuner_type"] == "DVB-T": + elif frontendDataOrg["tuner_type"] == "DVB-T": return (("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT), ("Type", frontendData["tuner_type"], TYPE_TEXT), ("Frequency", frontendData["frequency"], TYPE_VALUE_DEC), diff --git a/lib/python/Tools/Makefile.am b/lib/python/Tools/Makefile.am index 609f3bab..5617cb66 100644 --- a/lib/python/Tools/Makefile.am +++ b/lib/python/Tools/Makefile.am @@ -4,4 +4,4 @@ install_PYTHON = \ FuzzyDate.py XMLTools.py Directories.py NumericalTextInput.py \ KeyBindings.py BoundFunction.py ISO639.py Notifications.py __init__.py \ RedirectOutput.py DreamboxHardware.py Import.py Event.py CList.py \ - LoadPixmap.py Profile.py HardwareInfo.py + LoadPixmap.py Profile.py HardwareInfo.py Transponder.py diff --git a/lib/python/Tools/Transponder.py b/lib/python/Tools/Transponder.py new file mode 100644 index 00000000..108397b6 --- /dev/null +++ b/lib/python/Tools/Transponder.py @@ -0,0 +1,56 @@ +from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParametersCable, eDVBFrontendParametersTerrestrial + +def ConvertToHumanReadable(tp): + ret = { } + type = tp.get("tuner_type", "None") + if type == "DVB-S": + ret["tuner_type"] = _("Satellite") + ret["frequency"] = tp["frequency"] + ret["symbol_rate"] = tp["symbol_rate"] + ret["orbital_position"] = tp["orbital_position"] + ret["inversion"] = { + eDVBFrontendParametersSatellite.Inversion_Unknown : _("Auto"), + eDVBFrontendParametersSatellite.Inversion_On : _("On"), + eDVBFrontendParametersSatellite.Inversion_Off : _("Off")}[tp["inversion"]] + ret["fec_inner"] = { + eDVBFrontendParametersSatellite.FEC_None : _("None"), + eDVBFrontendParametersSatellite.FEC_Auto : _("Auto"), + eDVBFrontendParametersSatellite.FEC_1_2 : "1/2", + eDVBFrontendParametersSatellite.FEC_2_3 : "2/3", + eDVBFrontendParametersSatellite.FEC_3_4 : "3/4", + eDVBFrontendParametersSatellite.FEC_5_6 : "5/6", + eDVBFrontendParametersSatellite.FEC_7_8 : "7/8", + eDVBFrontendParametersSatellite.FEC_3_5 : "3/5", + eDVBFrontendParametersSatellite.FEC_4_5 : "4/5", + eDVBFrontendParametersSatellite.FEC_8_9 : "8/9", + eDVBFrontendParametersSatellite.FEC_9_10 : "9/10"}[tp["fec_inner"]] + ret["modulation"] = { + eDVBFrontendParametersSatellite.Modulation_Auto : _("Auto"), + eDVBFrontendParametersSatellite.Modulation_QPSK : "QPSK", + eDVBFrontendParametersSatellite.Modulation_QAM16 : "QAM16", + eDVBFrontendParametersSatellite.Modulation_8PSK : "8PSK"}[tp["modulation"]] + ret["polarization"] = { + eDVBFrontendParametersSatellite.Polarisation_Horizontal : _("Horizontal"), + eDVBFrontendParametersSatellite.Polarisation_Vertical : _("Vertical"), + eDVBFrontendParametersSatellite.Polarisation_CircularLeft : _("Circular left"), + eDVBFrontendParametersSatellite.Polarisation_CircularRight : _("Circular right")}[tp["polarization"]] + ret["system"] = { + eDVBFrontendParametersSatellite.System_DVB_S : "DVB-S", + eDVBFrontendParametersSatellite.System_DVB_S2 : "DVB-S2"}[tp["system"]] + if ret["system"] == "DVB-S2": + ret["rolloff"] = { + eDVBFrontendParametersSatellite.RollOff_alpha_0_35 : "0.35", + eDVBFrontendParametersSatellite.RollOff_alpha_0_25 : "0.25", + eDVBFrontendParametersSatellite.RollOff_alpha_0_20 : "0.20"}[tp["rolloff"]] + ret["pilot"] = { + eDVBFrontendParametersSatellite.Pilot_Unknown : _("Auto"), + eDVBFrontendParametersSatellite.Pilot_On : _("On"), + eDVBFrontendParametersSatellite.Pilot_Off : _("Off")}[tp["pilot"]] + elif type == "DVB-C": + ret["tuner_type"] = _("Cable") + elif type == "DVB-T": + ret["tuner_type"] = _("Terrestrial") + for x in tp.keys(): + if not ret.has_key(x): + ret[x] = tp[x] + return ret diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 0dbc8be0..59831680 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -102,7 +102,7 @@ extern void PutToDict(ePyObject &dict, const char*key, const char *value); // de void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &feparm) { - PutToDict(dict, "type", "DVB-S"); + PutToDict(dict, "tuner_type", "DVB-S"); PutToDict(dict, "frequency", feparm.frequency); PutToDict(dict, "symbol_rate", feparm.symbol_rate); PutToDict(dict, "orbital_position", feparm.orbital_position); @@ -120,7 +120,7 @@ void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &fe void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial &feparm) { - PutToDict(dict, "type", "DVB-T"); + PutToDict(dict, "tuner_type", "DVB-T"); PutToDict(dict, "frequency", feparm.frequency); PutToDict(dict, "bandwidth", feparm.bandwidth); PutToDict(dict, "code_rate_lp", feparm.code_rate_LP); @@ -134,7 +134,7 @@ void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial void PutCableDataToDict(ePyObject &dict, eDVBFrontendParametersCable &feparm) { - PutToDict(dict, "type", "DVB-C"); + PutToDict(dict, "tuner_type", "DVB-C"); PutToDict(dict, "frequency", feparm.frequency); PutToDict(dict, "symbol_rate", feparm.symbol_rate); PutToDict(dict, "modulation", feparm.modulation); -- cgit v1.2.3 From f12d2ae45356b4519383de70ad1be1bc755c4391 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 26 Jan 2009 23:32:25 +0100 Subject: timer fixes by adenin: properly handle conflicting timer in immediate record --- lib/python/Screens/InfoBarGenerics.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 050e350b..986e2a41 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1449,10 +1449,28 @@ class InfoBarInstantRecord: recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value) recording.dontSave = True - recording.autoincrease = True - if recording.setAutoincreaseEnd(): - self.session.nav.RecordTimer.record(recording) - self.recording.append(recording) + + if event is None or limitEvent == False: + recording.autoincrease = True + if recording.setAutoincreaseEnd(): + self.session.nav.RecordTimer.record(recording) + self.recording.append(recording) + else: + simulTimerList = self.session.nav.RecordTimer.record(recording) + if simulTimerList is not None: # conflict with other recording + name = simulTimerList[1].name + name_date = name + strftime(" %c", localtime(simulTimerList[1].begin)) + print "[TIMER] conflicts with", name_date + recording.autoincrease = True # start with max available length, then increment + if recording.setAutoincreaseEnd(): + self.session.nav.RecordTimer.record(recording) + self.recording.append(recording) + self.session.open(MessageBox, _("Record time limited due to conflicting timer %s" % name_date), MessageBox.TYPE_INFO) + else: + self.session.open(MessageBox, _("Couldn't record due to conflicting timer %s" % name), MessageBox.TYPE_INFO) + recording.autoincrease = False + else: + self.recording.append(recording) def isInstantRecordRunning(self): print "self.recording:", self.recording -- cgit v1.2.3 From 15d7074f55a2c3dd38ce9877626be6ec32b448d2 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 27 Jan 2009 00:04:59 +0100 Subject: fixes for python 2.6 by Moritz Venn --- keymapparser.py | 15 +++++++++++---- lib/actions/parseactions.py | 4 ++-- lib/dvb/epgcache.cpp | 8 ++++++++ lib/python/Components/Converter/EventTime.py | 4 ++-- lib/python/Components/Converter/MovieInfo.py | 4 ++-- lib/python/Components/Converter/ServicePosition.py | 4 ++-- lib/python/Components/Converter/ServiceTime.py | 4 ++-- lib/python/Components/Element.py | 7 +++++++ lib/python/Components/NimManager.py | 6 ++---- lib/python/Components/Renderer/Canvas.py | 2 +- lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py | 2 +- lib/python/Screens/ChannelSelection.py | 2 +- lib/python/Screens/Setup.py | 9 ++++++++- lib/python/Tools/LoadPixmap.py | 2 +- lib/python/python.h | 11 +++++++++++ mytest.py | 2 +- skin.py | 4 ++-- 17 files changed, 64 insertions(+), 26 deletions(-) (limited to 'lib/python/Screens') diff --git a/keymapparser.py b/keymapparser.py index 5023e944..63bca0f9 100644 --- a/keymapparser.py +++ b/keymapparser.py @@ -1,11 +1,18 @@ import enigma import xml.etree.cElementTree -from keyids import KEYIDS; +from keyids import KEYIDS # these are only informational (for help)... from Tools.KeyBindings import addKeyBinding +class KeymapError(Exception): + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message + def parseKeys(context, filename, actionmap, device, keys): for x in keys.findall("key"): get_attr = x.attrib.get @@ -29,12 +36,12 @@ def parseKeys(context, filename, actionmap, device, keys): elif id[1] == 'd': keyid = int(id[2:]) | 0x8000 else: - raise "key id '" + str(id) + "' is neither hex nor dec" + raise KeymapError("key id '" + str(id) + "' is neither hex nor dec") else: try: keyid = KEYIDS[id] except: - raise "key id '" + str(id) + "' is illegal" + raise KeymapError("key id '" + str(id) + "' is illegal") # print context + "::" + mapto + " -> " + device + "." + hex(keyid) actionmap.bindKey(filename, device, keyid, flags, context, mapto) addKeyBinding(filename, keyid, context, mapto, flags) @@ -48,7 +55,7 @@ def readKeymap(filename): try: dom = xml.etree.cElementTree.parse(source) except: - raise "keymap %s not well-formed." % filename + raise KeymapError("keymap %s not well-formed." % filename) keymap = dom.getroot() diff --git a/lib/actions/parseactions.py b/lib/actions/parseactions.py index 4ab71af7..2462a751 100644 --- a/lib/actions/parseactions.py +++ b/lib/actions/parseactions.py @@ -65,7 +65,7 @@ def do_file(f, mode): except: pass - raise "action enum must be simple." + raise Exception("action enum must be simple.") counter = 0 @@ -82,7 +82,7 @@ def do_file(f, mode): if counter: if t != ",": - raise "no comma" + raise Exception("no comma") t = tokens.next() if firsthit: diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index a8eca85b..fdcbe0e9 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -2058,7 +2058,11 @@ PyObject *eEPGCache::search(ePyObject arg) ePyObject obj = PyTuple_GET_ITEM(arg,0); if (PyString_Check(obj)) { +#if PY_VERSION_HEX < 0x02060000 argcount = PyString_GET_SIZE(obj); +#else + argcount = PyString_Size(obj); +#endif argstring = PyString_AS_STRING(obj); for (int i=0; i < argcount; ++i) switch(argstring[i]) @@ -2156,7 +2160,11 @@ PyObject *eEPGCache::search(ePyObject arg) { int casetype = PyLong_AsLong(PyTuple_GET_ITEM(arg, 4)); const char *str = PyString_AS_STRING(obj); +#if PY_VERSION_HEX < 0x02060000 int textlen = PyString_GET_SIZE(obj); +#else + int textlen = PyString_Size(obj); +#endif if (querytype == 1) eDebug("lookup for events with '%s' as title(%s)", str, casetype?"ignore case":"case sensitive"); else diff --git a/lib/python/Components/Converter/EventTime.py b/lib/python/Components/Converter/EventTime.py index 966f2ca8..41f1ebf3 100644 --- a/lib/python/Components/Converter/EventTime.py +++ b/lib/python/Components/Converter/EventTime.py @@ -1,7 +1,7 @@ from Converter import Converter from Poll import Poll from time import time -from Components.Element import cached +from Components.Element import cached, ElementError class EventTime(Poll, Converter, object): STARTTIME = 0 @@ -28,7 +28,7 @@ class EventTime(Poll, Converter, object): self.poll_interval = 30*1000 self.poll_enabled = True else: - raise str("'%s' is not for EventTime converter" % type) + raise ElementError("'%s' is not for EventTime converter" % type) @cached def getTime(self): diff --git a/lib/python/Components/Converter/MovieInfo.py b/lib/python/Components/Converter/MovieInfo.py index 068d24d3..be28dcce 100644 --- a/lib/python/Components/Converter/MovieInfo.py +++ b/lib/python/Components/Converter/MovieInfo.py @@ -1,5 +1,5 @@ from Components.Converter.Converter import Converter -from Components.Element import cached +from Components.Element import cached, ElementError from enigma import iServiceInformation from ServiceReference import ServiceReference @@ -16,7 +16,7 @@ class MovieInfo(Converter, object): elif type == "RecordServiceName": self.type = self.MOVIE_REC_SERVICE_NAME else: - raise str("'%s' is not for MovieInfo converter" % type) + raise ElementError("'%s' is not for MovieInfo converter" % type) Converter.__init__(self, type) @cached diff --git a/lib/python/Components/Converter/ServicePosition.py b/lib/python/Components/Converter/ServicePosition.py index d7a55dae..2bcc5492 100644 --- a/lib/python/Components/Converter/ServicePosition.py +++ b/lib/python/Components/Converter/ServicePosition.py @@ -1,7 +1,7 @@ from Converter import Converter from Poll import Poll from enigma import iPlayableService -from Components.Element import cached +from Components.Element import cached, ElementError class ServicePosition(Converter, Poll, object): TYPE_LENGTH = 0 @@ -35,7 +35,7 @@ class ServicePosition(Converter, Poll, object): elif type == "Gauge": self.type = self.TYPE_GAUGE else: - raise "type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours|NoSeconds}" + raise ElementError("type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours|NoSeconds}") self.poll_enabled = self.type != self.TYPE_LENGTH diff --git a/lib/python/Components/Converter/ServiceTime.py b/lib/python/Components/Converter/ServiceTime.py index 16bcae3a..89965067 100644 --- a/lib/python/Components/Converter/ServiceTime.py +++ b/lib/python/Components/Converter/ServiceTime.py @@ -1,5 +1,5 @@ from Converter import Converter -from Components.Element import cached +from Components.Element import cached, ElementError from enigma import iServiceInformation class ServiceTime(Converter, object): @@ -16,7 +16,7 @@ class ServiceTime(Converter, object): elif type == "Duration": self.type = self.DURATION else: - raise str("'%s' is not for eEventTime converter" % type) + raise ElementError("'%s' is not for eEventTime converter" % type) @cached def getTime(self): diff --git a/lib/python/Components/Element.py b/lib/python/Components/Element.py index 2af57793..f4a8f127 100644 --- a/lib/python/Components/Element.py +++ b/lib/python/Components/Element.py @@ -16,6 +16,13 @@ def cached(f): return cache[name][1] return wrapper +class ElementError(Exception): + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message + class Element(object): CHANGED_DEFAULT = 0 # initial "pull" state CHANGED_ALL = 1 # really everything changed diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 1fcbda1a..2692cb5b 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -14,8 +14,6 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \ from time import localtime, mktime from datetime import datetime -from sets import Set - def getConfigSatlist(orbpos, satlist): default_orbpos = None for x in satlist: @@ -123,7 +121,7 @@ class SecConfigure: def update(self): sec = secClass.getInstance() - self.configuredSatellites = Set() + self.configuredSatellites = set() sec.clear() ## this do unlinking NIMs too !! print "sec config cleared" @@ -442,7 +440,7 @@ class SecConfigure: def __init__(self, nimmgr): self.NimManager = nimmgr - self.configuredSatellites = Set() + self.configuredSatellites = set() self.update() class NIM(object): diff --git a/lib/python/Components/Renderer/Canvas.py b/lib/python/Components/Renderer/Canvas.py index bd7ffb5e..acf0dbf7 100644 --- a/lib/python/Components/Renderer/Canvas.py +++ b/lib/python/Components/Renderer/Canvas.py @@ -35,7 +35,7 @@ class Canvas(Renderer): self.instance.writeText(eRect(l[1], l[2], l[3], l[4]), gRGB(l[5]), gRGB(l[6]), l[7], l[8], l[9]) else: print "drawlist entry:", l - raise "invalid drawlist entry" + raise RuntimeError("invalid drawlist entry") def changed(self, what): self.pull_updates() diff --git a/lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py b/lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py index a63562c8..69f935e4 100644 --- a/lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py +++ b/lib/python/Plugins/DemoPlugins/TestPlugin/plugin.py @@ -51,7 +51,7 @@ class Test(Screen): def mycallback(self, answer): print "answer:", answer if answer: - raise "test-crash" + raise Exception("test-crash") self.close() def keyLeft(self): diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index b203b24e..ebfbe812 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -76,7 +76,7 @@ def append_when_current_valid(current, menu, args, level = 0): class ChannelContextMenu(Screen): def __init__(self, session, csel): Screen.__init__(self, session) - #raise "we need a better summary screen here" + #raise Exception("we need a better summary screen here") self.csel = csel self.bsel = None diff --git a/lib/python/Screens/Setup.py b/lib/python/Screens/Setup.py index 35918b5b..1d035b8a 100644 --- a/lib/python/Screens/Setup.py +++ b/lib/python/Screens/Setup.py @@ -19,6 +19,13 @@ except: setupdom = xml.etree.cElementTree.parse(setupfile) setupfile.close() +class SetupError(Exception): + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message + class SetupSummary(Screen): skin = """ @@ -145,4 +152,4 @@ def getSetupTitle(id): for x in xmldata.findall("setup"): if x.get("key") == id: return x.get("title", "").encode("UTF-8") - raise "unknown setup id '%s'!" % repr(id) + raise SetupError("unknown setup id '%s'!" % repr(id)) diff --git a/lib/python/Tools/LoadPixmap.py b/lib/python/Tools/LoadPixmap.py index 53e04e54..fff414ad 100644 --- a/lib/python/Tools/LoadPixmap.py +++ b/lib/python/Tools/LoadPixmap.py @@ -14,7 +14,7 @@ def LoadPixmap(path, desktop = None, cached = False): alpha = loadPNG(path + "a.png") ptr = loadJPG(path + "rgb.jpg", alpha) else: - raise "neither .png nor .jpg, please fix file extension" + raise Exception("neither .png nor .jpg, please fix file extension") if ptr and desktop: desktop.makeCompatiblePixmap(ptr) diff --git a/lib/python/python.h b/lib/python/python.h index f56d49bb..52ec6c1e 100644 --- a/lib/python/python.h +++ b/lib/python/python.h @@ -24,6 +24,7 @@ public: #ifdef PYTHON_REFCOUNT_DEBUG inline ePyObject(PyObject *ob, const char *file, int line); #endif + inline ePyObject(PyVarObject *ob); inline ePyObject(PyDictObject *ob); inline ePyObject(PyTupleObject *ob); inline ePyObject(PyListObject *ob); @@ -32,11 +33,13 @@ public: operator bool() { return !!m_ob; } ePyObject &operator=(const ePyObject &); ePyObject &operator=(PyObject *); + ePyObject &operator=(PyVarObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyDictObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyTupleObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyListObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyStringObject *ob) { return operator=((PyObject*)ob); } operator PyObject*(); + operator PyVarObject*() { return (PyVarObject*)operator PyVarObject*(); } operator PyTupleObject*() { return (PyTupleObject*)operator PyObject*(); } operator PyListObject*() { return (PyListObject*)operator PyObject*(); } operator PyStringObject*() { return (PyStringObject*)operator PyObject*(); } @@ -84,6 +87,14 @@ inline ePyObject::ePyObject(PyObject *ob, const char* file, int line) } #endif +inline ePyObject::ePyObject(PyVarObject *ob) + :m_ob((PyObject*)ob) +#ifdef PYTHON_REFCOUNT_DEBUG + ,m_file(0), m_line(0), m_from(0), m_to(0), m_erased(false) +#endif +{ +} + inline ePyObject::ePyObject(PyDictObject *ob) :m_ob((PyObject*)ob) #ifdef PYTHON_REFCOUNT_DEBUG diff --git a/mytest.py b/mytest.py index 014f94c9..8f23beac 100644 --- a/mytest.py +++ b/mytest.py @@ -277,7 +277,7 @@ class Session: def open(self, screen, *arguments, **kwargs): if len(self.dialog_stack) and not self.in_exec: - raise "modal open are allowed only from a screen which is modal!" + raise RuntimeError("modal open are allowed only from a screen which is modal!") # ...unless it's the very first screen. self.pushCurrent() diff --git a/skin.py b/skin.py index eae6ea4b..03fe96bb 100644 --- a/skin.py +++ b/skin.py @@ -274,7 +274,7 @@ def loadSingleSkinData(desktop, skin, path_prefix): colorNames[name] = parseColor(color) #print "Color:", name, color else: - raise ("need color and name, got %s %s" % (name, color)) + raise SkinError("need color and name, got %s %s" % (name, color)) for c in skin.findall("fonts"): for font in c.findall("font"): @@ -335,7 +335,7 @@ def loadSingleSkinData(desktop, skin, path_prefix): try: style.setColor(eWindowStyleSkinned.__dict__["col" + type], color) except: - raise ("Unknown color %s" % (type)) + raise SkinError("Unknown color %s" % (type)) #pass #print " color:", type, color -- cgit v1.2.3 From e5423277b5d9dd89918a9b123c10d31057b3dc52 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 27 Jan 2009 00:05:57 +0100 Subject: make gettext happy --- lib/python/Screens/InfoBarGenerics.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 986e2a41..197594fd 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1465,9 +1465,9 @@ class InfoBarInstantRecord: if recording.setAutoincreaseEnd(): self.session.nav.RecordTimer.record(recording) self.recording.append(recording) - self.session.open(MessageBox, _("Record time limited due to conflicting timer %s" % name_date), MessageBox.TYPE_INFO) + self.session.open(MessageBox, _("Record time limited due to conflicting timer %s") % name_date, MessageBox.TYPE_INFO) else: - self.session.open(MessageBox, _("Couldn't record due to conflicting timer %s" % name), MessageBox.TYPE_INFO) + self.session.open(MessageBox, _("Couldn't record due to conflicting timer %s") % name, MessageBox.TYPE_INFO) recording.autoincrease = False else: self.recording.append(recording) -- cgit v1.2.3 From fe1c9f7cf4e292566548eb5ce2fed90ad669a186 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 27 Jan 2009 19:51:34 +0100 Subject: fix possible typos --- lib/python/Screens/TimerEdit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 58cece6c..bb2d3c76 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -408,7 +408,7 @@ class TimerSanityConflict(Screen): self["actions"].actions.update({"green":self.toggleTimer1}) self["key_green"].setText(_("Enable")) self.key_green_choice = self.ENABLE - elif self.timer[0].isRunning() and not timer[0].repeated and self.key_green_choice != self.EMPTY: + elif self.timer[0].isRunning() and not self.timer[0].repeated and self.key_green_choice != self.EMPTY: self.removeAction("green") self["key_green"].setText(" ") self.key_green_choice = self.EMPTY @@ -428,7 +428,7 @@ class TimerSanityConflict(Screen): self["actions"].actions.update({"blue":self.toggleTimer2}) self["key_blue"].setText(_("Enable")) self.key_blue_choice = self.ENABLE - elif self.timer[x].isRunning() and not timer[x].repeated and self.key_blue_choice != self.EMPTY: + elif self.timer[x].isRunning() and not self.timer[x].repeated and self.key_blue_choice != self.EMPTY: self.removeAction("blue") self["key_blue"].setText(" ") self.key_blue_choice = self.EMPTY -- cgit v1.2.3 From be53117395c453d1a62f878d42beba927ddfbfe1 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 6 Feb 2009 17:59:27 +0100 Subject: fix standby for hardware without scart switch --- lib/python/Screens/Standby.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Standby.py b/lib/python/Screens/Standby.py index 4c3a1720..d09f28af 100644 --- a/lib/python/Screens/Standby.py +++ b/lib/python/Screens/Standby.py @@ -2,6 +2,7 @@ from Screen import Screen from Components.ActionMap import ActionMap from Components.config import config from Components.AVSwitch import AVSwitch +from Components.SystemInfo import SystemInfo from enigma import eDVBVolumecontrol inStandby = None @@ -49,7 +50,10 @@ class Standby(Screen): #stop actual played dvb-service self.session.nav.stopService() #set input to vcr scart - self.avswitch.setInput("SCART") + if SystemInfo["ScartSwitch"]: + self.avswitch.setInput("SCART") + else: + self.avswitch.setInput("AUX") #set lcd brightness to standby value config.lcd.standby.apply() self.onShow.append(self.__onShow) -- cgit v1.2.3 From 6e9093ff8e37f7ec7679a058418e2b494328446c Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 7 Feb 2009 00:24:10 +0100 Subject: use default record path when current doesnt exist --- RecordTimer.py | 2 +- lib/python/Screens/InfoBarGenerics.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/python/Screens') diff --git a/RecordTimer.py b/RecordTimer.py index 6b306d4e..897c281a 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -141,7 +141,7 @@ class RecordTimerEntry(timer.TimerEntry, object): if self.name: filename += " - " + self.name - if self.dirname and not Directories.pathExists(self.dirname): + if self.dirname and not Directories.fileExists(self.dirname, 'w'): self.dirnameHadToFallback = True self.Filename = Directories.getRecordingFilename(filename, None) else: diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 197594fd..7003ed87 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -29,7 +29,7 @@ from Screens.TimeDateInput import TimeDateInput from ServiceReference import ServiceReference from Tools import Notifications -from Tools.Directories import SCOPE_HDD, resolveFilename, pathExists +from Tools.Directories import SCOPE_HDD, resolveFilename, fileExists from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \ iPlayableService, eServiceReference, eEPGCache @@ -1548,7 +1548,7 @@ class InfoBarInstantRecord: def instantRecord(self): dir = config.movielist.last_videodir.value - if not pathExists(dir): + if not fileExists(dir, 'w'): dir = resolveFilename(SCOPE_HDD) try: stat = os_stat(dir) -- cgit v1.2.3 From e967924bde9d73086127f17f88d33eb6a918b750 Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 7 Feb 2009 16:12:15 +0100 Subject: change record option ordering --- lib/python/Screens/InfoBarGenerics.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 7003ed87..d0aa44b8 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1560,21 +1560,21 @@ class InfoBarInstantRecord: if self.isInstantRecordRunning(): self.session.openWithCallback(self.recordQuestionCallback, ChoiceBox, \ title=_("A recording is currently running.\nWhat do you want to do?"), \ - list=[(_("stop recording"), "stop"), \ - (_("change recording (duration)"), "changeduration"), \ - (_("change recording (endtime)"), "changeendtime"), \ - (_("add recording (indefinitely)"), "indefinitely"), \ - (_("add recording (stop after current event)"), "event"), \ + list=[(_("add recording (stop after current event)"), "event"), \ (_("add recording (enter recording duration)"), "manualduration"), \ (_("add recording (enter recording endtime)"), "manualendtime"), \ + (_("add recording (indefinitely)"), "indefinitely"), \ + (_("change recording (duration)"), "changeduration"), \ + (_("change recording (endtime)"), "changeendtime"), \ + (_("stop recording"), "stop"), \ (_("do nothing"), "no")]) else: self.session.openWithCallback(self.recordQuestionCallback, ChoiceBox, \ title=_("Start recording?"), \ - list=[(_("add recording (indefinitely)"), "indefinitely"), \ - (_("add recording (stop after current event)"), "event"), \ + list=[(_("add recording (stop after current event)"), "event"), \ (_("add recording (enter recording duration)"), "manualduration"), \ (_("add recording (enter recording endtime)"), "manualendtime"), \ + (_("add recording (indefinitely)"), "indefinitely"), \ (_("don't record"), "no")]) from Tools.ISO639 import LanguageCodes -- cgit v1.2.3 From 718ab3c10238548b0daf968ee35867d5008b1a4a Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 9 Feb 2009 13:30:05 +0100 Subject: fix 'play' doesn't disappear when config.usage.show_infobar_on_skip is set --- lib/python/Screens/InfoBarGenerics.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index d0aa44b8..9e0e50af 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1024,7 +1024,13 @@ class InfoBarPVRState: def __playStateChanged(self, state): playstateString = state[3] self.pvrStateDialog["state"].setText(playstateString) - self._mayShow() + + # if we return into "PLAY" state, ensure that the dialog gets hidden if there will be no infobar displayed + if not config.usage.show_infobar_on_skip.value and self.seekstate == self.SEEK_STATE_PLAY: + self.pvrStateDialog.hide() + else: + self._mayShow() + class InfoBarTimeshiftState(InfoBarPVRState): def __init__(self): -- cgit v1.2.3