X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/72e9e185140710dddf75ef73f79b78c99e43d4c9..2b8587722d707e88dbc8d381a74c12c380c6db04:/lib/python/Components/NimManager.py?ds=sidebyside diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index abe75c40..01ef4bf4 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -4,13 +4,26 @@ from config import configElement from config import ConfigSubsection from config import ConfigSlider from config import configSelection +from config import configSequence +from config import configsequencearg from config import configSatlist + import xml.dom.minidom from xml.dom import EMPTY_NAMESPACE from skin import elementsWithTag from Tools import XMLTools +from xml.sax import make_parser +from xml.sax.handler import ContentHandler + +class boundFunction: + def __init__(self, fnc, *args): + self.fnc = fnc + self.args = args + def __call__(self, *args): + self.fnc(*self.args + args) + class nimSlot: def __init__(self, slotid, nimtype, name): self.slotid = slotid @@ -18,21 +31,41 @@ class nimSlot: self.name = name class NimManager: + class parseSats(ContentHandler): + def __init__(self, satList, satellites): + self.isPointsElement, self.isReboundsElement = 0, 0 + self.satList = satList + self.satellites = satellites + + def startElement(self, name, attrs): + if (name == "sat"): + #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',"")) + tpos = attrs.get('position',"") + tname = attrs.get('name',"") + self.satellites[tpos] = tname + self.satList.append( (tname, tpos) ) + def readSatsfromFile(self): self.satellites = { } + #FIXME: path ok??? - satfile = file('/etc/tuxbox/satellites.xml', 'r') - satdom = xml.dom.minidom.parseString(satfile.read()) - satfile.close() - - for entries in elementsWithTag(satdom.childNodes, "satellites"): - for x in elementsWithTag(entries.childNodes, "sat"): - #print "found sat " + x.getAttribute('name') + " " + str(x.getAttribute('position')) - tpos = x.getAttribute('position') - tname = x.getAttribute('name') - #tname.encode('utf8') - self.satellites[tpos] = tname - self.satList.append( (tname, tpos) ) + print "Reading satellites.xml" + parser = make_parser() + satHandler = self.parseSats(self.satList, self.satellites) + parser.setContentHandler(satHandler) + parser.parse('/etc/tuxbox/satellites.xml') + + #satdom = xml.dom.minidom.parse('/etc/tuxbox/satellites.xml') + + + #for entries in elementsWithTag(satdom.childNodes, "satellites"): + #for x in elementsWithTag(entries.childNodes, "sat"): + ##print "found sat " + x.getAttribute('name') + " " + str(x.getAttribute('position')) + #tpos = x.getAttribute('position') + #tname = x.getAttribute('name') + ##tname.encode('utf8') + #self.satellites[tpos] = tname + #self.satList.append( (tname, tpos) ) def getNimType(self, slotID): #FIXME get it from /proc @@ -63,7 +96,7 @@ class NimManager: self.readSatsfromFile() self.nimCount = self.getNimSocketCount() - + self.nimslots = [ ] x = 0 while x < self.nimCount: @@ -87,34 +120,60 @@ class NimManager: list.append((nimText, slot)) return list + #callbacks for c++ config + def nimConfigModeChanged(self, slotid, mode): + print "nimConfigModeChanged set to " + str(mode) + def nimDiseqcModeChanged(self, slotid, mode): + print "nimDiseqcModeChanged set to " + str(mode) + def nimPortAChanged(self, slotid, val): + print "nimDiseqcA set to " + str(val) + def nimPortBChanged(self, slotid, val): + print "nimDiseqcB set to " + str(val) + def nimPortCChanged(self, slotid, val): + print "nimDiseqcC set to " + str(val) + def nimPortDChanged(self, slotid, val): + print "nimDiseqcD set to " + str(val) + + def InitNimManager(nimmgr): config.Nims = [ConfigSubsection()] * nimmgr.nimCount + def nimConfigModeChanged(slotid, configElement): + nimmgr.nimConfigModeChanged(slotid, configElement.value) + def nimDiseqcModeChanged(slotid, configElement): + nimmgr.nimDiseqcModeChanged(slotid, configElement.value) + + def nimPortAChanged(slotid, configElement): + nimmgr.nimPortAChanged(slotid, configElement.vals[configElement.value][1]) + def nimPortBChanged(slotid, configElement): + nimmgr.nimPortBChanged(slotid, configElement.vals[configElement.value][1]) + def nimPortCChanged(slotid, configElement): + nimmgr.nimPortCChanged(slotid, configElement.vals[configElement.value][1]) + def nimPortDChanged(slotid, configElement): + nimmgr.nimPortDChanged(slotid, configElement.vals[configElement.value][1]) + for slot in nimmgr.nimslots: x = slot.slotid cname = nimmgr.getConfigPrefix(x) if slot.nimType == nimmgr.nimType["DVB-S"]: - #use custom configElement which can handle a dict (for sats) config.Nims[x].configMode = configElement(cname + "configMode",configSelection, 0, ("Simple", "Advanced")); - config.Nims[x].diseqcMode = configElement(cname + "diseqcMode",configSelection, 0, ("Single", "Toneburst A/B", "DiSEqC A/B", "DiSEqC A/B/C/D")); - config.Nims[x].diseqcA = configElement(cname + "diseqcA",configSatlist, 0, nimmgr.satList); - config.Nims[x].diseqcB = configElement(cname + "diseqcB",configSatlist, 0, nimmgr.satList); + config.Nims[x].diseqcMode = configElement(cname + "diseqcMode",configSelection, 2, ("Single", "Toneburst A/B", "DiSEqC A/B", "DiSEqC A/B/C/D", "Positioner")); + config.Nims[x].diseqcA = configElement(cname + "diseqcA",configSatlist, 192, nimmgr.satList); + config.Nims[x].diseqcB = configElement(cname + "diseqcB",configSatlist, 130, nimmgr.satList); config.Nims[x].diseqcC = configElement(cname + "diseqcC",configSatlist, 0, nimmgr.satList); config.Nims[x].diseqcD = configElement(cname + "diseqcD",configSatlist, 0, nimmgr.satList); + config.Nims[x].longitude = configElement(cname + "longitude",configSequence, [0,0], configsequencearg.get("FLOAT", [(1,90),(1,999)])); + config.Nims[x].latitude = configElement(cname + "latitude",configSequence, [0,0], configsequencearg.get("FLOAT", [(1,90),(1,999)])); + + #perhaps the instance of the slot is more useful? + config.Nims[x].configMode.addNotifier(boundFunction(nimConfigModeChanged,x)) + config.Nims[x].diseqcMode.addNotifier(boundFunction(nimDiseqcModeChanged,x)) + config.Nims[x].diseqcA.addNotifier(boundFunction(nimPortAChanged,x)) + config.Nims[x].diseqcB.addNotifier(boundFunction(nimPortBChanged,x)) + config.Nims[x].diseqcC.addNotifier(boundFunction(nimPortCChanged,x)) + config.Nims[x].diseqcD.addNotifier(boundFunction(nimPortDChanged,x)) else: print "pls add support for this frontend type!" - #def nimConfig - - #def inputDevicesRepeatChanged(configElement): - # iDevices.setRepeat(configElement.value); - - #def inputDevicesDelayChanged(configElement): - # iDevices.setDelay(configElement.value); - - # this will call the "setup-val" initial - #config.inputDevices.repeat.addNotifier(inputDevicesRepeatChanged); - #config.inputDevices.delay.addNotifier(inputDevicesDelayChanged); - nimmanager = NimManager()