-from config import config, ConfigSubsection, ConfigSelection, ConfigFloat, ConfigSatlist, ConfigYesNo, ConfigInteger, ConfigSubList, ConfigNothing, ConfigSubDict, ConfigOnOff, ConfigDateTime
+from config import config, ConfigSubsection, ConfigSelection, ConfigFloat, \
+ ConfigSatlist, ConfigYesNo, ConfigInteger, ConfigSubList, ConfigNothing, \
+ ConfigSubDict, ConfigOnOff, ConfigDateTime
from enigma import eDVBSatelliteEquipmentControl as secClass, \
eDVBSatelliteLNBParameters as lnbParam, \
eDVBSatelliteDiseqcParameters as diseqcParam, \
eDVBSatelliteSwitchParameters as switchParam, \
eDVBSatelliteRotorParameters as rotorParam, \
- eDVBResourceManager
-
-from xml.sax import make_parser
-from xml.sax.handler import ContentHandler
+ eDVBResourceManager, eDVBDB
from time import localtime, mktime
from datetime import datetime
+from sets import Set
+
def getConfigSatlist(orbpos, satlist):
default_orbpos = None
for x in satlist:
return procFile
class SecConfigure:
+ def getConfiguredSats(self):
+ return self.configuredSatellites
+
+ def addSatellite(self, sec, orbpos):
+ sec.addSatellite(orbpos)
+ self.configuredSatellites.add(orbpos)
+
def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50):
+ if orbpos is None:
+ return
#simple defaults
sec.addLNB()
tunermask = 1 << slotid
#print "set orbpos to:" + str(orbpos)
if 0 <= diseqcmode < 3:
- sec.addSatellite(orbpos)
- self.satList.append(orbpos)
+ self.addSatellite(sec, orbpos)
elif (diseqcmode == 3): # diseqc 1.2
if self.satposdepends.has_key(slotid):
tunermask |= (1 << self.satposdepends[slotid])
for x in self.NimManager.satList:
print "Add sat " + str(x[0])
- sec.addSatellite(int(x[0]))
+ self.addSatellite(sec, int(x[0]))
sec.setVoltageMode(0)
sec.setToneMode(0)
sec.setRotorPosNum(0) # USALS
- self.satList.append(int(x[0]))
sec.setLNBSlotMask(tunermask)
print "link tuner", nim1, "to tuner", nim2
sec.setTunerLinked(nim1, nim2)
- def getSatList(self):
- return self.satList
-
def update(self):
sec = secClass.getInstance()
+ self.configuredSatellites = Set()
sec.clear() ## this do unlinking NIMs too !!
print "sec config cleared"
- self.satList = []
self.linked = { }
self.satposdepends = { }
used_nim_slots = [ ]
+ for slot in nim_slots:
+ if slot.type is not None:
+ used_nim_slots.append((slot.slot, slot.description, slot.config.configMode.value != "nothing" and True or False))
+ eDVBResourceManager.getInstance().setFrontendSlotInformations(used_nim_slots)
+
for slot in nim_slots:
x = slot.slot
nim = slot.config
self.setSatposDepends(sec, x, int(nim.satposDependsTo.value))
self.satposdepends[int(nim.satposDependsTo.value)]=x
- if slot.type is not None:
- used_nim_slots.append((slot.slot, slot.description, nim.configMode.value != "nothing" and True or False))
-
- eDVBResourceManager.getInstance().setFrontendSlotInformations(used_nim_slots)
-
for slot in nim_slots:
x = slot.slot
nim = slot.config
# finally add the orbital positions
for y in lnbSat[x]:
- sec.addSatellite(y)
+ self.addSatellite(sec, y)
currSat = config.Nims[slotid].advanced.sat[y]
if currSat.voltage.value == "polarization":
def __init__(self, nimmgr):
self.NimManager = nimmgr
+ self.configuredSatellites = Set()
self.update()
class NIM(object):
empty = property(lambda self: self.type is None)
class NimManager:
- class parseSats(ContentHandler):
- def __init__(self, satList, satellites, transponders):
- self.isPointsElement, self.isReboundsElement = 0, 0
- self.satList = satList
- self.satellites = satellites
- self.transponders = transponders
-
- def startElement(self, name, attrs):
- if (name == "sat"):
- #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
- tpos = int(attrs.get('position',""))
- if tpos < 0:
- tpos = 3600 + tpos
- tname = attrs.get('name',"").encode("UTF-8")
- self.satellites[tpos] = tname
- self.satList.append( (tpos, tname) )
- self.parsedSat = int(tpos)
- elif (name == "transponder"):
- modulation = int(attrs.get('modulation',"1")) # QPSK default
- system = int(attrs.get('system',"0")) # DVB-S default
- freq = int(attrs.get('frequency',""))
- sr = int(attrs.get('symbol_rate',""))
- pol = int(attrs.get('polarization',""))
- fec = int(attrs.get('fec_inner',"0")) # AUTO default
- if self.parsedSat in self.transponders:
- pass
- else:
- self.transponders[self.parsedSat] = [ ]
-
- self.transponders[self.parsedSat].append((0, freq, sr, pol, fec, system, modulation))
-
- class parseCables(ContentHandler):
- def __init__(self, cablesList, transponders):
- self.isPointsElement, self.isReboundsElement = 0, 0
- self.cablesList = cablesList
- for x in self.cablesList:
- self.cablesList.remove(x)
- self.transponders = transponders
-
- def startElement(self, name, attrs):
- if (name == "cable"):
- #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
- tname = attrs.get('name',"").encode("UTF-8")
- tflags = int(attrs.get('flags',"0"))
- self.cablesList.append((tname, tflags))
- self.parsedCab = tname
- elif (name == "transponder"):
- freq = int(attrs.get('frequency',""))
- while freq > 999999:
- freq /= 10
- sr = int(attrs.get('symbol_rate',"0"))
- mod = int(attrs.get('modulation',"3")) # QAM64 default
- fec = int(attrs.get('fec_inner',"0")) # AUTO default
- if self.parsedCab in self.transponders:
- pass
- else:
- self.transponders[self.parsedCab] = [ ]
- self.transponders[self.parsedCab].append((1, freq, sr, mod, fec))
-
- class parseTerrestrials(ContentHandler):
- def __init__(self, terrestrialsList, transponders):
- self.isPointsElement, self.isReboundsElement = 0, 0
- self.terrestrialsList = terrestrialsList
- self.transponders = transponders
-
- def startElement(self, name, attrs):
- if (name == "terrestrial"):
- #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
- tname = attrs.get('name',"").encode("UTF-8")
- tflags = attrs.get('flags',"")
- self.terrestrialsList.append((tname, tflags))
- self.parsedTer = str(tname)
- elif (name == "transponder"):
- # TODO finish this!
- freq = int(attrs.get('centre_frequency',""))
- bw = int(attrs.get('bandwidth',"3")) # AUTO
- const = int(attrs.get('constellation',"1")) # AUTO
- crh = int(attrs.get('code_rate_hp',"5")) # AUTO
- if crh > 5: # our terrestrial.xml is buggy... 6 for AUTO
- crh = 5
- crl = int(attrs.get('code_rate_lp',"5")) # AUTO
- if crl > 5: # our terrestrial.xml is buggy... 6 for AUTO
- crl = 5
- guard = int(attrs.get('guard_interval',"4")) # AUTO
- transm = int(attrs.get('transmission_mode',"2")) # AUTO
- hierarchy = int(attrs.get('hierarchy_information',"4")) # AUTO
- inv = int(attrs.get('inversion',"2")) # AUTO
- if self.parsedTer in self.transponders:
- pass
- else:
- self.transponders[self.parsedTer] = [ ]
-
- self.transponders[self.parsedTer].append((2, freq, bw, const, crh, crl, guard, transm, hierarchy, inv))
+ def getConfiguredSats(self):
+ return self.sec.getConfiguredSats()
def getTransponders(self, pos):
if self.transponders.has_key(pos):
def getTerrestrialFlags(self, nim):
return self.terrestrialsList[config.Nims[nim].terrestrial.index][1]
- def getConfiguredSats(self):
- return self.sec.getSatList()
-
def getSatDescription(self, pos):
return self.satellites[pos]
- def readSatsfromFile(self):
+ def readTransponders(self):
# read initial networks from file. we only read files which we are interested in,
# which means only these where a compatible tuner exists.
self.satellites = { }
self.transponders = { }
self.transponderscable = { }
- self.transpondersterrestrial = { }
-
- parser = make_parser()
-
+ self.transpondersterrestrial = { }
+ db = eDVBDB.getInstance()
if self.hasNimType("DVB-S"):
print "Reading satellites.xml"
- satHandler = self.parseSats(self.satList, self.satellites, self.transponders)
- parser.setContentHandler(satHandler)
- parser.parse('/etc/tuxbox/satellites.xml')
+ db.readSatellites(self.satList, self.satellites, self.transponders)
+# print "SATLIST", self.satList
+# print "SATS", self.satellites
+# print "TRANSPONDERS", self.transponders
if self.hasNimType("DVB-C"):
print "Reading cables.xml"
- cabHandler = self.parseCables(self.cablesList, self.transponderscable)
- parser.setContentHandler(cabHandler)
- parser.parse('/etc/tuxbox/cables.xml')
+ db.readCables(self.cablesList, self.transponderscable)
+# print "CABLIST", self.cablesList
+# print "TRANSPONDERS", self.transponders
if self.hasNimType("DVB-T"):
print "Reading terrestrial.xml"
- terHandler = self.parseTerrestrials(self.terrestrialsList, self.transpondersterrestrial)
- parser.setContentHandler(terHandler)
- parser.parse('/etc/tuxbox/terrestrial.xml')
+ db.readTerrestrials(self.terrestrialsList, self.transpondersterrestrial)
+# print "TERLIST", self.terrestrialsList
+# print "TRANSPONDERS", self.transpondersterrestrial
def enumerateNIMs(self):
# enum available NIMs. This is currently very dreambox-centric and uses the /proc/bus/nim_sockets interface.
#
# Type will be either "DVB-S", "DVB-S2", "DVB-T", "DVB-C" or None.
+ # nim_slots is an array which has exactly one entry for each slot, even for empty ones.
+ self.nim_slots = [ ]
+
nimfile = tryOpen("/proc/bus/nim_sockets")
if nimfile is None:
entries[current_slot]["name"] = _("N/A")
nimfile.close()
- # nim_slots is an array which has exactly one entry for each slot, even for empty ones.
- self.nim_slots = [ ]
-
for id, entry in entries.items():
if not (entry.has_key("name") and entry.has_key("type")):
entry["name"] = _("N/A")
self.cablesList = []
self.terrestrialsList = []
self.enumerateNIMs()
- self.readSatsfromFile()
-
+ self.readTransponders()
InitNimManager(self) #init config stuff
# get a list with the friendly full description
possible_scan_types = [("bands", _("Frequency bands")), ("steps", _("Frequency steps"))]
if n:
possible_scan_types.append(("provider", _("Provider")))
+ nim.cable.scan_provider = ConfigSelection(default = "0", choices = list)
nim.cable.scan_type = ConfigSelection(default = "bands", choices = possible_scan_types)
- nim.cable.scan_provider = ConfigSelection(default = "0", choices = list)
nim.cable.scan_band_EU_VHF_I = ConfigYesNo(default = True)
nim.cable.scan_band_EU_MID = ConfigYesNo(default = True)
nim.cable.scan_band_EU_VHF_III = ConfigYesNo(default = True)