1 from enigma import eDVBDB
2 from Screen import Screen
3 from Components.SystemInfo import SystemInfo
4 from Components.ActionMap import ActionMap
5 from Components.ConfigList import ConfigListScreen
6 from Components.MenuList import MenuList
7 from Components.NimManager import nimmanager
8 from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement,\
10 from Components.Sources.List import List
11 from Screens.MessageBox import MessageBox
12 from Screens.ChoiceBox import ChoiceBox
13 from Screens.ServiceStopScreen import ServiceStopScreen
15 from time import mktime, localtime
16 from datetime import datetime
18 class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
19 def createSimpleSetup(self, list, mode):
22 list.append(getConfigListEntry(_("Satellite"), nim.diseqcA))
23 list.append(getConfigListEntry(_("Send DiSEqC"), nim.simpleSingleSendDiSEqC))
25 list.append(getConfigListEntry(_("Port A"), nim.diseqcA))
27 if mode in ("toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
28 list.append(getConfigListEntry(_("Port B"), nim.diseqcB))
29 if mode == "diseqc_a_b_c_d":
30 list.append(getConfigListEntry(_("Port C"), nim.diseqcC))
31 list.append(getConfigListEntry(_("Port D"), nim.diseqcD))
32 if mode != "toneburst_a_b":
33 list.append(getConfigListEntry(_("Set Voltage and 22KHz"), nim.simpleDiSEqCSetVoltageTone))
34 list.append(getConfigListEntry(_("Send DiSEqC only on satellite change"), nim.simpleDiSEqCOnlyOnSatChange))
36 def createPositionerSetup(self, list):
38 list.append(getConfigListEntry(_("Longitude"), nim.longitude))
39 list.append(getConfigListEntry(" ", nim.longitudeOrientation))
40 list.append(getConfigListEntry(_("Latitude"), nim.latitude))
41 list.append(getConfigListEntry(" ", nim.latitudeOrientation))
42 if SystemInfo["CanMeasureFrontendInputPower"]:
43 self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), nim.powerMeasurement)
44 list.append(self.advancedPowerMeasurement)
45 if nim.powerMeasurement.value:
46 list.append(getConfigListEntry(_("Power threshold in mA"), nim.powerThreshold))
47 self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), nim.turningSpeed)
48 list.append(self.turningSpeed)
49 if nim.turningSpeed.value == "fast epoch":
50 self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), nim.fastTurningBegin)
51 self.turnFastEpochEnd = getConfigListEntry(_("End time"), nim.fastTurningEnd)
52 list.append(self.turnFastEpochBegin)
53 list.append(self.turnFastEpochEnd)
55 if nim.powerMeasurement.value:
56 nim.powerMeasurement.value = False
57 nim.powerMeasurement.save()
59 def createConfigMode(self):
60 if self.nim.isCompatible("DVB-S"):
61 choices = { "nothing": _("not configured"),
62 "simple": _("simple"),
63 "advanced": _("advanced")}
64 #if len(nimmanager.getNimListOfType(nimmanager.getNimType(self.slotid), exception = x)) > 0:
65 # choices["equal"] = _("equal to")
66 # choices["satposdepends"] = _("second cable of motorized LNB")
67 if len(nimmanager.canEqualTo(self.slotid)) > 0:
68 choices["equal"] = _("equal to")
69 if len(nimmanager.canDependOn(self.slotid)) > 0:
70 choices["satposdepends"] = _("second cable of motorized LNB")
71 if len(nimmanager.canConnectTo(self.slotid)) > 0:
72 choices["loopthrough"] = _("loopthrough to")
73 self.nimConfig.configMode.setChoices(choices, default = "nothing")
75 def createSetup(self):
76 print "Creating setup"
80 self.configMode = None
81 self.diseqcModeEntry = None
82 self.advancedSatsEntry = None
83 self.advancedLnbsEntry = None
84 self.advancedDiseqcMode = None
85 self.advancedUsalsEntry = None
86 self.advancedLof = None
87 self.advancedPowerMeasurement = None
88 self.turningSpeed = None
89 self.turnFastEpochBegin = None
90 self.turnFastEpochEnd = None
91 self.uncommittedDiseqcCommand = None
92 self.cableScanType = None
93 self.have_advanced = False
94 self.advancedUnicable = None
95 self.advancedType = None
96 self.advancedManufacturer = None
97 self.advancedSCR = None
98 self.advancedConnected = None
100 if self.nim.isMultiType():
101 multiType = self.nimConfig.multiType
102 self.multiType = getConfigListEntry(_("Tuner type"), multiType)
103 self.list.append(self.multiType)
105 if self.nim.isCompatible("DVB-S"):
106 self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
107 self.list.append(self.configMode)
109 if self.nimConfig.configMode.value == "simple": #simple setup
110 self.diseqcModeEntry = getConfigListEntry(_("Mode"), self.nimConfig.diseqcMode)
111 self.list.append(self.diseqcModeEntry)
112 if self.nimConfig.diseqcMode.value in ("single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
113 self.createSimpleSetup(self.list, self.nimConfig.diseqcMode.value)
114 if self.nimConfig.diseqcMode.value == "positioner":
115 self.createPositionerSetup(self.list)
116 elif self.nimConfig.configMode.value == "equal":
118 nimlist = nimmanager.canEqualTo(self.nim.slot)
120 #choices.append((str(id), str(chr(65 + id))))
121 choices.append((str(id), nimmanager.getNimDescription(id)))
122 self.nimConfig.connectedTo.setChoices(choices)
123 #self.nimConfig.connectedTo = updateConfigElement(self.nimConfig.connectedTo, ConfigSelection(choices = choices))
124 self.list.append(getConfigListEntry(_("Tuner"), self.nimConfig.connectedTo))
125 elif self.nimConfig.configMode.value == "satposdepends":
127 nimlist = nimmanager.canDependOn(self.nim.slot)
129 #choices.append((str(id), str(chr(65 + id))))
130 choices.append((str(id), nimmanager.getNimDescription(id)))
131 self.nimConfig.connectedTo.setChoices(choices)
132 #self.nimConfig.connectedTo = updateConfigElement(self.nimConfig.connectedTo, ConfigSelection(choices = choices))
133 self.list.append(getConfigListEntry(_("Tuner"), self.nimConfig.connectedTo))
134 elif self.nimConfig.configMode.value == "loopthrough":
136 print "connectable to:", nimmanager.canConnectTo(self.slotid)
137 connectable = nimmanager.canConnectTo(self.slotid)
138 for id in connectable:
139 choices.append((str(id), nimmanager.getNimDescription(id)))
140 self.nimConfig.connectedTo.setChoices(choices)
141 #self.nimConfig.connectedTo = updateConfigElement(self.nimConfig.connectedTo, ConfigSelection(choices = choices))
142 self.list.append(getConfigListEntry(_("Connected to"), self.nimConfig.connectedTo))
143 elif self.nimConfig.configMode.value == "nothing":
145 elif self.nimConfig.configMode.value == "advanced": # advanced
147 self.advancedSatsEntry = getConfigListEntry(_("Satellite"), self.nimConfig.advanced.sats)
148 self.list.append(self.advancedSatsEntry)
149 cur_orb_pos = self.nimConfig.advanced.sats.orbital_position
150 satlist = self.nimConfig.advanced.sat.keys()
151 if cur_orb_pos is not None:
152 if cur_orb_pos not in satlist:
153 cur_orb_pos = satlist[0]
154 currSat = self.nimConfig.advanced.sat[cur_orb_pos]
155 self.fillListWithAdvancedSatEntrys(currSat)
156 self.have_advanced = True
157 if self.nim.description == "Alps BSBE2" and config.usage.setup_level.index >= 2: # expert
158 self.list.append(getConfigListEntry(_("Tone Amplitude"), self.nimConfig.toneAmplitude))
159 elif self.nim.isCompatible("DVB-C"):
160 self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
161 self.list.append(self.configMode)
162 if self.nimConfig.configMode.value == "enabled":
163 self.cableScanType=getConfigListEntry(_("Used service scan type"), self.nimConfig.cable.scan_type)
164 self.list.append(self.cableScanType)
165 if self.nimConfig.cable.scan_type.value == "provider":
166 self.list.append(getConfigListEntry(_("Provider to scan"), self.nimConfig.cable.scan_provider))
168 if self.nimConfig.cable.scan_type.value == "bands":
169 self.list.append(getConfigListEntry(_("Scan band EU VHF I"), self.nimConfig.cable.scan_band_EU_VHF_I))
170 self.list.append(getConfigListEntry(_("Scan band EU MID"), self.nimConfig.cable.scan_band_EU_MID))
171 self.list.append(getConfigListEntry(_("Scan band EU VHF III"), self.nimConfig.cable.scan_band_EU_VHF_III))
172 self.list.append(getConfigListEntry(_("Scan band EU UHF IV"), self.nimConfig.cable.scan_band_EU_UHF_IV))
173 self.list.append(getConfigListEntry(_("Scan band EU UHF V"), self.nimConfig.cable.scan_band_EU_UHF_V))
174 self.list.append(getConfigListEntry(_("Scan band EU SUPER"), self.nimConfig.cable.scan_band_EU_SUPER))
175 self.list.append(getConfigListEntry(_("Scan band EU HYPER"), self.nimConfig.cable.scan_band_EU_HYPER))
176 self.list.append(getConfigListEntry(_("Scan band US LOW"), self.nimConfig.cable.scan_band_US_LOW))
177 self.list.append(getConfigListEntry(_("Scan band US MID"), self.nimConfig.cable.scan_band_US_MID))
178 self.list.append(getConfigListEntry(_("Scan band US HIGH"), self.nimConfig.cable.scan_band_US_HIGH))
179 self.list.append(getConfigListEntry(_("Scan band US SUPER"), self.nimConfig.cable.scan_band_US_SUPER))
180 self.list.append(getConfigListEntry(_("Scan band US HYPER"), self.nimConfig.cable.scan_band_US_HYPER))
181 elif self.nimConfig.cable.scan_type.value == "steps":
182 self.list.append(getConfigListEntry(_("Frequency scan step size(khz)"), self.nimConfig.cable.scan_frequency_steps))
183 self.list.append(getConfigListEntry(_("Scan QAM16"), self.nimConfig.cable.scan_mod_qam16))
184 self.list.append(getConfigListEntry(_("Scan QAM32"), self.nimConfig.cable.scan_mod_qam32))
185 self.list.append(getConfigListEntry(_("Scan QAM64"), self.nimConfig.cable.scan_mod_qam64))
186 self.list.append(getConfigListEntry(_("Scan QAM128"), self.nimConfig.cable.scan_mod_qam128))
187 self.list.append(getConfigListEntry(_("Scan QAM256"), self.nimConfig.cable.scan_mod_qam256))
188 self.list.append(getConfigListEntry(_("Scan SR6900"), self.nimConfig.cable.scan_sr_6900))
189 self.list.append(getConfigListEntry(_("Scan SR6875"), self.nimConfig.cable.scan_sr_6875))
190 self.list.append(getConfigListEntry(_("Scan additional SR"), self.nimConfig.cable.scan_sr_ext1))
191 self.list.append(getConfigListEntry(_("Scan additional SR"), self.nimConfig.cable.scan_sr_ext2))
192 self.have_advanced = False
193 elif self.nim.isCompatible("DVB-T"):
194 self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
195 self.list.append(self.configMode)
196 self.have_advanced = False
197 if self.nimConfig.configMode.value == "enabled":
198 self.list.append(getConfigListEntry(_("Terrestrial provider"), self.nimConfig.terrestrial))
199 self.list.append(getConfigListEntry(_("Enable 5V for active antenna"), self.nimConfig.terrestrial_5V))
201 self.have_advanced = False
202 self["config"].list = self.list
203 self["config"].l.setList(self.list)
206 checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
207 self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
208 self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
209 self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, self.advancedConnected, \
210 self.uncommittedDiseqcCommand, self.cableScanType, self.multiType)
211 if self["config"].getCurrent() == self.multiType:
212 from Components.NimManager import InitNimManager
213 InitNimManager(nimmanager)
214 self.nim = nimmanager.nim_slots[self.slotid]
215 self.nimConfig = self.nim.config
218 if self["config"].getCurrent() == x:
223 if self.have_advanced and self.nim.config_mode == "advanced":
224 self.fillAdvancedList()
226 if x in (self.turnFastEpochBegin, self.turnFastEpochEnd):
227 # workaround for storing only hour*3600+min*60 value in configfile
228 # not really needed.. just for cosmetics..
229 tm = localtime(x[1].value)
230 dt = datetime(1970, 1, 1, tm.tm_hour, tm.tm_min)
231 x[1].value = int(mktime(dt.timetuple()))
233 nimmanager.sec.update()
236 def fillListWithAdvancedSatEntrys(self, Sat):
237 lnbnum = int(Sat.lnb.value)
238 currLnb = self.nimConfig.advanced.lnb[lnbnum]
240 if isinstance(currLnb, ConfigNothing):
244 self.advancedLnbsEntry = getConfigListEntry(_("LNB"), Sat.lnb)
245 self.list.append(self.advancedLnbsEntry)
248 self.list.append(getConfigListEntry(_("Priority"), currLnb.prio))
249 self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
250 self.list.append(self.advancedLof)
251 if currLnb.lof.value == "user_defined":
252 self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
253 self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
254 self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
255 # self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v))
257 if currLnb.lof.value == "unicable":
258 self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable)
259 self.list.append(self.advancedUnicable)
260 if currLnb.unicable.value == "unicable_user":
261 self.advancedSCR = getConfigListEntry(_("Channel"), currLnb.satcruser)
262 self.list.append(self.advancedSCR)
263 self.list.append(getConfigListEntry(_("Frequency"), currLnb.satcrvcouser[currLnb.satcruser.index]))
264 self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
265 self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
266 self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
267 elif currLnb.unicable.value == "unicable_matrix":
268 manufacturer_name = currLnb.unicableMatrixManufacturer.value
269 manufacturer = currLnb.unicableMatrix[manufacturer_name]
270 product_name = manufacturer.product.value
271 self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer)
272 self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
273 self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
274 self.list.append(self.advancedManufacturer)
275 self.list.append(self.advancedType)
276 self.list.append(self.advancedSCR)
277 self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index]))
278 elif currLnb.unicable.value == "unicable_lnb":
279 manufacturer_name = currLnb.unicableLnbManufacturer.value
280 manufacturer = currLnb.unicableLnb[manufacturer_name]
281 product_name = manufacturer.product.value
282 self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer)
283 self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
284 self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
285 self.list.append(self.advancedManufacturer)
286 self.list.append(self.advancedType)
287 self.list.append(self.advancedSCR)
288 self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index]))
291 connectable = nimmanager.canConnectTo(self.slotid)
292 for id in connectable:
293 choices.append((str(id), nimmanager.getNimDescription(id)))
295 self.advancedConnected = getConfigListEntry(_("connected"), self.nimConfig.advanced.unicableconnected)
296 self.list.append(self.advancedConnected)
297 if self.nimConfig.advanced.unicableconnected.value == True:
298 self.nimConfig.advanced.unicableconnectedTo.setChoices(choices)
299 self.list.append(getConfigListEntry(_("Connected to"),self.nimConfig.advanced.unicableconnectedTo))
302 self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
303 self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
304 self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
307 self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
308 self.list.append(self.advancedDiseqcMode)
309 if currLnb.diseqcMode.value != "none":
310 self.list.append(getConfigListEntry(_("Toneburst"), currLnb.toneburst))
311 self.list.append(getConfigListEntry(_("Committed DiSEqC command"), currLnb.commitedDiseqcCommand))
312 self.list.append(getConfigListEntry(_("Fast DiSEqC"), currLnb.fastDiseqc))
313 self.list.append(getConfigListEntry(_("Sequence repeat"), currLnb.sequenceRepeat))
314 if currLnb.diseqcMode.value == "1_0":
315 self.list.append(getConfigListEntry(_("Command order"), currLnb.commandOrder1_0))
317 if currLnb.uncommittedDiseqcCommand.index:
318 if currLnb.commandOrder.value == "ct":
319 currLnb.commandOrder.value = "cut"
320 elif currLnb.commandOrder.value == "tc":
321 currLnb.commandOrder.value = "tcu"
323 if currLnb.commandOrder.index & 1:
324 currLnb.commandOrder.value = "tc"
326 currLnb.commandOrder.value = "ct"
327 self.list.append(getConfigListEntry(_("Command order"), currLnb.commandOrder))
328 self.uncommittedDiseqcCommand = getConfigListEntry(_("Uncommitted DiSEqC command"), currLnb.uncommittedDiseqcCommand)
329 self.list.append(self.uncommittedDiseqcCommand)
330 self.list.append(getConfigListEntry(_("DiSEqC repeats"), currLnb.diseqcRepeats))
331 if currLnb.diseqcMode.value == "1_2":
332 self.list.append(getConfigListEntry(_("Longitude"), currLnb.longitude))
333 self.list.append(getConfigListEntry(" ", currLnb.longitudeOrientation))
334 self.list.append(getConfigListEntry(_("Latitude"), currLnb.latitude))
335 self.list.append(getConfigListEntry(" ", currLnb.latitudeOrientation))
336 if SystemInfo["CanMeasureFrontendInputPower"]:
337 self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), currLnb.powerMeasurement)
338 self.list.append(self.advancedPowerMeasurement)
339 if currLnb.powerMeasurement.value:
340 self.list.append(getConfigListEntry(_("Power threshold in mA"), currLnb.powerThreshold))
341 self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), currLnb.turningSpeed)
342 self.list.append(self.turningSpeed)
343 if currLnb.turningSpeed.value == "fast epoch":
344 self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), currLnb.fastTurningBegin)
345 self.turnFastEpochEnd = getConfigListEntry(_("End time"), currLnb.fastTurningEnd)
346 self.list.append(self.turnFastEpochBegin)
347 self.list.append(self.turnFastEpochEnd)
349 if currLnb.powerMeasurement.value:
350 currLnb.powerMeasurement.value = False
351 currLnb.powerMeasurement.save()
352 self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals)
353 self.list.append(self.advancedUsalsEntry)
354 if not Sat.usals.value:
355 self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition))
359 def fillAdvancedList(self):
361 self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
362 self.list.append(self.configMode)
363 self.advancedSatsEntry = getConfigListEntry(_("Satellite"), self.nimConfig.advanced.sats)
364 self.list.append(self.advancedSatsEntry)
365 for x in self.nimConfig.advanced.sat.keys():
366 Sat = self.nimConfig.advanced.sat[x]
367 self.fillListWithAdvancedSatEntrys(Sat)
368 self["config"].list = self.list
370 def checkLoopthrough(self):
371 if self.nimConfig.configMode.value == "loopthrough":
372 loopthrough_count = 0
373 dvbs_slots = nimmanager.getNimListOfType('DVB-S')
374 dvbs_slots_len = len(dvbs_slots)
378 nim_slot = nimmanager.nim_slots[x]
379 if nim_slot == self.nimConfig:
381 if nim_slot.config.configMode.value == "loopthrough":
382 loopthrough_count += 1
384 if loopthrough_count >= dvbs_slots_len:
387 self.slot_dest_list = []
388 def checkRecursiveConnect(slot_id):
389 if slot_id in self.slot_dest_list:
391 self.slot_dest_list.append(slot_id)
392 slot_config = nimmanager.nim_slots[slot_id].config
393 if slot_config.configMode.value == "loopthrough":
394 return checkRecursiveConnect(int(slot_config.connectedTo.value))
397 return checkRecursiveConnect(self.slotid)
400 if not self.checkLoopthrough():
401 self.session.open(MessageBox, _("The loopthrough setting is wrong."),MessageBox.TYPE_ERROR,timeout=10)
404 old_configured_sats = nimmanager.getConfiguredSats()
406 new_configured_sats = nimmanager.getConfiguredSats()
407 self.unconfed_sats = old_configured_sats - new_configured_sats
408 self.satpos_to_remove = None
409 self.deleteConfirmed((None, "no"))
411 def deleteConfirmed(self, confirmed):
412 if confirmed[1] == "yes" or confirmed[1] == "yestoall":
413 eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove)
415 if self.satpos_to_remove is not None:
416 self.unconfed_sats.remove(self.satpos_to_remove)
418 self.satpos_to_remove = None
419 for orbpos in self.unconfed_sats:
420 self.satpos_to_remove = orbpos
421 orbpos = self.satpos_to_remove
423 # why we need this cast?
424 sat_name = str(nimmanager.getSatDescription(orbpos))
426 if orbpos > 1800: # west
427 orbpos = 3600 - orbpos
431 sat_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10)
433 if confirmed[1] == "yes" or confirmed[1] == "no":
434 self.session.openWithCallback(self.deleteConfirmed, ChoiceBox, _("Delete no more configured satellite\n%s?") %(sat_name), [(_("Yes"), "yes"), (_("No"), "no"), (_("Yes to all"), "yestoall"), (_("No to all"), "notoall")])
435 if confirmed[1] == "yestoall" or confirmed[1] == "notoall":
436 self.deleteConfirmed(confirmed)
439 self.restoreService(_("Zap back to service before tuner setup?"))
441 def __init__(self, session, slotid):
442 Screen.__init__(self, session)
445 ServiceStopScreen.__init__(self)
448 ConfigListScreen.__init__(self, self.list)
450 self["actions"] = ActionMap(["SetupActions", "SatlistShortcutAction"],
453 "cancel": self.keyCancel,
454 "nothingconnected": self.nothingConnectedShortcut
458 self.nim = nimmanager.nim_slots[slotid]
459 self.nimConfig = self.nim.config
460 self.createConfigMode()
464 ConfigListScreen.keyLeft(self)
468 ConfigListScreen.keyRight(self)
472 if self["config"].isChanged():
473 self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?"))
475 self.restoreService(_("Zap back to service before tuner setup?"))
478 if self.nim.isCompatible("DVB-S"):
479 # reset connectedTo to all choices to properly store the default value
481 nimlist = nimmanager.getNimListOfType("DVB-S", self.slotid)
483 choices.append((str(id), nimmanager.getNimDescription(id)))
484 self.nimConfig.connectedTo.setChoices(choices)
485 for x in self["config"].list:
488 def cancelConfirm(self, result):
492 for x in self["config"].list:
494 # we need to call saveAll to reset the connectedTo choices
496 self.restoreService(_("Zap back to service before tuner setup?"))
498 def nothingConnectedShortcut(self):
499 if type(self["config"].getCurrent()[1]) is ConfigSatlist:
500 self["config"].getCurrent()[1].setValue("3601")
501 self["config"].invalidateCurrent()
503 class NimSelection(Screen):
504 def __init__(self, session):
505 Screen.__init__(self, session)
507 self.list = [None] * nimmanager.getSlotCount()
508 self["nimlist"] = List(self.list)
511 self.setResultClass()
513 self["actions"] = ActionMap(["OkCancelActions"],
515 "ok": self.okbuttonClick ,
519 def setResultClass(self):
520 self.resultclass = NimSetup
522 def okbuttonClick(self):
523 nim = self["nimlist"].getCurrent()
525 if nim is not None and not nim.empty and nim.isSupported():
526 self.session.openWithCallback(self.updateList, self.resultclass, nim.slot)
528 def showNim(self, nim):
531 def updateList(self):
533 for x in nimmanager.nim_slots:
535 nimConfig = nimmanager.getNimConfig(x.slot)
536 text = nimConfig.configMode.value
538 if x.isCompatible("DVB-S"):
539 if nimConfig.configMode.value in ("loopthrough", "equal", "satposdepends"):
540 text = { "loopthrough": _("loopthrough to"),
541 "equal": _("equal to"),
542 "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
543 text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
544 elif nimConfig.configMode.value == "nothing":
545 text = _("not configured")
546 elif nimConfig.configMode.value == "simple":
547 if nimConfig.diseqcMode.value in ("single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
548 text = {"single": _("Single"), "toneburst_a_b": _("Toneburst A/B"), "diseqc_a_b": _("DiSEqC A/B"), "diseqc_a_b_c_d": _("DiSEqC A/B/C/D")}[nimConfig.diseqcMode.value] + "\n"
549 text += _("Sats") + ": "
551 if nimConfig.diseqcA.orbital_position != 3601:
552 satnames.append(nimmanager.getSatName(int(nimConfig.diseqcA.value)))
553 if nimConfig.diseqcMode.value in ("toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
554 if nimConfig.diseqcB.orbital_position != 3601:
555 satnames.append(nimmanager.getSatName(int(nimConfig.diseqcB.value)))
556 if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
557 if nimConfig.diseqcC.orbital_position != 3601:
558 satnames.append(nimmanager.getSatName(int(nimConfig.diseqcC.value)))
559 if nimConfig.diseqcD.orbital_position != 3601:
560 satnames.append(nimmanager.getSatName(int(nimConfig.diseqcD.value)))
561 if len(satnames) <= 2:
562 text += ", ".join(satnames)
563 elif len(satnames) > 2:
564 # we need a newline here, since multi content lists don't support automtic line wrapping
565 text += ", ".join(satnames[:2]) + ",\n"
566 text += " " + ", ".join(satnames[2:])
567 elif nimConfig.diseqcMode.value == "positioner":
568 text = _("Positioner") + ":"
569 if nimConfig.positionerMode.value == "usals":
571 elif nimConfig.positionerMode.value == "manual":
575 elif nimConfig.configMode.value == "advanced":
577 elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
578 if nimConfig.configMode.value == "nothing":
579 text = _("nothing connected")
580 elif nimConfig.configMode.value == "enabled":
583 text = _("Switchable tuner types:") + "(" + ','.join(x.getMultiTypeList().values()) + ")" + "\n" + text
584 if not x.isSupported():
585 text = _("tuner is not supported")
587 self.list.append((slotid, x.friendly_full_description, text, x))
588 self["nimlist"].setList(self.list)
589 self["nimlist"].updateList(self.list)