1 from Screen import Screen
2 from ServiceScan import ServiceScan
3 from Components.config import config, ConfigSubsection, ConfigSelection, \
4 ConfigYesNo, ConfigInteger, getConfigListEntry, ConfigSlider, ConfigEnableDisable
5 from Components.ActionMap import NumberActionMap, ActionMap
6 from Components.Sources.StaticText import StaticText
7 from Components.SystemInfo import SystemInfo
8 from Components.ConfigList import ConfigListScreen
9 from Components.NimManager import nimmanager, getConfigSatlist
10 from Components.Label import Label
11 from Tools.HardwareInfo import HardwareInfo
12 from Tools.Transponder import getChannelNumber, supportedChannels, channel2frequency
13 from Screens.InfoBar import InfoBar
14 from Screens.MessageBox import MessageBox
15 from enigma import eTimer, eDVBFrontendParametersSatellite, eComponentScan, \
16 eDVBSatelliteEquipmentControl, eDVBFrontendParametersTerrestrial, \
17 eDVBFrontendParametersCable, eConsoleAppContainer, eDVBResourceManager
19 def buildTerTransponder(frequency,
20 inversion=2, bandwidth = 7000000, fechigh = 6, feclow = 6,
21 modulation = 2, transmission = 2, guard = 4,
22 hierarchy = 4, system = 0, plpid = 0):
23 # print "freq", frequency, "inv", inversion, "bw", bandwidth, "fech", fechigh, "fecl", feclow, "mod", modulation, "tm", transmission, "guard", guard, "hierarchy", hierarchy
24 parm = eDVBFrontendParametersTerrestrial()
25 parm.frequency = frequency
26 parm.inversion = inversion
27 parm.bandwidth = bandwidth
28 parm.code_rate_HP = fechigh
29 parm.code_rate_LP = feclow
30 parm.modulation = modulation
31 parm.transmission_mode = transmission
32 parm.guard_interval = guard
33 parm.hierarchy = hierarchy
38 def getInitialTransponderList(tlist, pos):
39 list = nimmanager.getTransponders(pos)
42 parm = eDVBFrontendParametersSatellite()
44 parm.symbol_rate = x[2]
45 parm.polarisation = x[3]
48 parm.orbital_position = pos
50 parm.modulation = x[6]
55 def getInitialCableTransponderList(tlist, nim):
56 list = nimmanager.getTranspondersCable(nim)
59 parm = eDVBFrontendParametersCable()
61 parm.symbol_rate = x[2]
62 parm.modulation = x[3]
68 def getInitialTerrestrialTransponderList(tlist, region, tsystem = eDVBFrontendParametersTerrestrial.System_DVB_T_T2, skip_t2 = False):
69 list = nimmanager.getTranspondersTerrestrial(region)
71 #self.transponders[self.parsedTer].append((2,freq,bw,const,crh,crl,guard,transm,hierarchy,inv))
73 #def buildTerTransponder(frequency, inversion = 2, bandwidth = 3, fechigh = 6, feclow = 6,
74 #modulation = 2, transmission = 2, guard = 4, hierarchy = 4):
77 if x[0] == 2: #TERRESTRIAL
78 if tsystem == eDVBFrontendParametersTerrestrial.System_DVB_T_T2:
80 if skip_t2 and x[10] == eDVBFrontendParametersTerrestrial.System_DVB_T2:
81 # Should be searching on TerrestrialTransponderSearchSupport.
83 parm = buildTerTransponder(x[1], x[9], x[2], x[4], x[5], x[3], x[7], x[6], x[8], tsystem, x[11])
87 "DVBC_BAND_EU_VHF_I" : 1 << 0,
88 "DVBC_BAND_EU_MID" : 1 << 1,
89 "DVBC_BAND_EU_VHF_III" : 1 << 2,
90 "DVBC_BAND_EU_SUPER" : 1 << 3,
91 "DVBC_BAND_EU_HYPER" : 1 << 4,
92 "DVBC_BAND_EU_UHF_IV" : 1 << 5,
93 "DVBC_BAND_EU_UHF_V" : 1 << 6,
94 "DVBC_BAND_US_LO" : 1 << 7,
95 "DVBC_BAND_US_MID" : 1 << 8,
96 "DVBC_BAND_US_HI" : 1 << 9,
97 "DVBC_BAND_US_SUPER" : 1 << 10,
98 "DVBC_BAND_US_HYPER" : 1 << 11,
101 cable_autoscan_nimtype = {
104 'TURBO' : 'vuplus_turbo_c'
107 terrestrial_autoscan_nimtype = {
108 'SSH108' : 'ssh108_t2_scan',
109 'TT3L10' : 'tt3l10_t2_scan',
110 'TURBO' : 'vuplus_turbo_t'
113 def GetDeviceId(filter, nim_idx):
117 for nim in nimmanager.nim_slots:
118 name_token = nim.description.split(' ')
119 name = name_token[-1][4:-1]
121 if socket_id == nim_idx:
130 class CableTransponderSearchSupport:
135 def tryGetRawFrontend(self, feid):
136 res_mgr = eDVBResourceManager.getInstance()
138 raw_channel = res_mgr.allocateRawChannel(self.feid)
140 frontend = raw_channel.getFrontend()
142 frontend.closeFrontend() # immediate close...
148 def cableTransponderSearchSessionClosed(self, *val):
149 print "cableTransponderSearchSessionClosed, val", val
150 self.cable_search_container.appClosed.remove(self.cableTransponderSearchClosed)
151 self.cable_search_container.dataAvail.remove(self.getCableTransponderData)
154 self.setCableTransponderSearchResult(self.__tlist)
156 self.cable_search_container.sendCtrlC()
157 self.setCableTransponderSearchResult(None)
158 self.cable_search_container = None
159 self.cable_search_session = None
161 self.cableTransponderSearchFinished()
163 def cableTransponderSearchClosed(self, retval):
164 print "cableTransponderSearch finished", retval
165 self.cable_search_session.close(True)
167 def getCableTransponderData(self, str):
168 #prepend any remaining data from the previous call
169 str = self.remainingdata + str
171 lines = str.split('\n')
172 #'str' should end with '\n', so when splitting, the last line should be empty. If this is not the case, we received an incomplete line
174 #remember this data for next time
175 self.remainingdata = lines[-1]
178 self.remainingdata = ""
183 if data[0] == 'OK' and data[4] != 'NOT_IMPLEMENTED':
185 parm = eDVBFrontendParametersCable()
186 qam = { "QAM16" : parm.Modulation_QAM16,
187 "QAM32" : parm.Modulation_QAM32,
188 "QAM64" : parm.Modulation_QAM64,
189 "QAM128" : parm.Modulation_QAM128,
190 "QAM256" : parm.Modulation_QAM256 }
191 inv = { "INVERSION_OFF" : parm.Inversion_Off,
192 "INVERSION_ON" : parm.Inversion_On,
193 "INVERSION_AUTO" : parm.Inversion_Unknown }
194 fec = { "FEC_AUTO" : parm.FEC_Auto,
195 "FEC_1_2" : parm.FEC_1_2,
196 "FEC_2_3" : parm.FEC_2_3,
197 "FEC_3_4" : parm.FEC_3_4,
198 "FEC_5_6" : parm.FEC_5_6,
199 "FEC_7_8" : parm.FEC_7_8,
200 "FEC_8_9" : parm.FEC_8_9,
201 "FEC_3_5" : parm.FEC_3_5,
202 "FEC_4_5" : parm.FEC_4_5,
203 "FEC_9_10" : parm.FEC_9_10,
204 "FEC_NONE" : parm.FEC_None }
205 parm.frequency = int(data[1])
206 parm.symbol_rate = int(data[2])
207 parm.fec_inner = fec[data[3]]
208 parm.modulation = qam[data[4]]
209 parm.inversion = inv[data[5]]
210 self.__tlist.append(parm)
211 tmpstr = _("Try to find used transponders in cable network.. please wait...")
213 tmpstr += data[1].isdigit() and "%s MHz " % (int(data[1]) / 1000.) or data[1]
215 self.cable_search_session["text"].setText(tmpstr)
217 def startCableTransponderSearch(self, nim_idx):
218 def GetCommand(nim_idx):
219 global cable_autoscan_nimtype
221 nim_name = nimmanager.getNimName(nim_idx)
222 if nim_name is not None and nim_name != "":
224 nim_name = nim_name.split(' ')[-1][4:-1]
225 if nim_name == 'TT3L10':
227 device_id = GetDeviceId('TT3L10', nim_idx)
228 device_id = "--device=%s" % (device_id)
229 except Exception, err:
230 print "GetCommand ->", err
231 device_id = "--device=0"
232 command = "%s %s" % (cable_autoscan_nimtype[nim_name], device_id)
234 except Exception, err:
235 print "GetCommand ->", err
238 if not self.tryGetRawFrontend(nim_idx):
239 self.session.nav.stopService()
240 if not self.tryGetRawFrontend(nim_idx):
241 if self.session.pipshown:
242 self.session.infobar.showPiP()
243 if not self.tryGetRawFrontend(nim_idx):
244 self.cableTransponderSearchFinished()
247 self.remainingdata = ""
248 self.cable_search_container = eConsoleAppContainer()
249 self.cable_search_container.appClosed.append(self.cableTransponderSearchClosed)
250 self.cable_search_container.dataAvail.append(self.getCableTransponderData)
251 cableConfig = config.Nims[nim_idx].cable
252 tunername = nimmanager.getNimName(nim_idx)
254 bus = nimmanager.getI2CDevice(nim_idx)
256 print "ERROR: could not get I2C device for nim", nim_idx, "for cable transponder search"
261 if HardwareInfo().get_device_name() == "dm500hd":
267 bus = 2 # DM8000 first nim is /dev/i2c/2
269 bus = 4 # DM8000 second num is /dev/i2c/4
272 if tunername == "CXD1981":
274 cmd = "cxd1978 --init --scan --verbose --wakeup --inv 2 --bus %d" % bus
275 elif tunername.startswith("Sundtek"):
276 bin_name = "mediaclient"
277 cmd = "/opt/bin/mediaclient --blindscan %d" % nim_idx
279 bin_name = GetCommand(nim_idx)
280 cmd = "%(BIN_NAME)s --init --scan --verbose --wakeup --inv 2 --bus %(BUS)d" % {'BIN_NAME':bin_name, 'BUS':bus}
282 if cableConfig.scan_type.value == "bands":
283 cmd += " --scan-bands "
285 if cableConfig.scan_band_EU_VHF_I.value:
286 bands |= cable_bands["DVBC_BAND_EU_VHF_I"]
287 if cableConfig.scan_band_EU_MID.value:
288 bands |= cable_bands["DVBC_BAND_EU_MID"]
289 if cableConfig.scan_band_EU_VHF_III.value:
290 bands |= cable_bands["DVBC_BAND_EU_VHF_III"]
291 if cableConfig.scan_band_EU_UHF_IV.value:
292 bands |= cable_bands["DVBC_BAND_EU_UHF_IV"]
293 if cableConfig.scan_band_EU_UHF_V.value:
294 bands |= cable_bands["DVBC_BAND_EU_UHF_V"]
295 if cableConfig.scan_band_EU_SUPER.value:
296 bands |= cable_bands["DVBC_BAND_EU_SUPER"]
297 if cableConfig.scan_band_EU_HYPER.value:
298 bands |= cable_bands["DVBC_BAND_EU_HYPER"]
299 if cableConfig.scan_band_US_LOW.value:
300 bands |= cable_bands["DVBC_BAND_US_LO"]
301 if cableConfig.scan_band_US_MID.value:
302 bands |= cable_bands["DVBC_BAND_US_MID"]
303 if cableConfig.scan_band_US_HIGH.value:
304 bands |= cable_bands["DVBC_BAND_US_HI"]
305 if cableConfig.scan_band_US_SUPER.value:
306 bands |= cable_bands["DVBC_BAND_US_SUPER"]
307 if cableConfig.scan_band_US_HYPER.value:
308 bands |= cable_bands["DVBC_BAND_US_HYPER"]
311 cmd += " --scan-stepsize "
312 cmd += str(cableConfig.scan_frequency_steps.value)
313 if cableConfig.scan_mod_qam16.value:
315 if cableConfig.scan_mod_qam32.value:
317 if cableConfig.scan_mod_qam64.value:
319 if cableConfig.scan_mod_qam128.value:
321 if cableConfig.scan_mod_qam256.value:
323 if cableConfig.scan_sr_6900.value:
324 cmd += " --sr 6900000"
325 if cableConfig.scan_sr_6875.value:
326 cmd += " --sr 6875000"
327 if cableConfig.scan_sr_ext1.value > 450:
329 cmd += str(cableConfig.scan_sr_ext1.value)
331 if cableConfig.scan_sr_ext2.value > 450:
333 cmd += str(cableConfig.scan_sr_ext2.value)
335 print bin_name, " CMD is", cmd
337 self.cable_search_container.execute(cmd)
338 tmpstr = _("Try to find used transponders in cable network.. please wait...")
340 self.cable_search_session = self.session.openWithCallback(self.cableTransponderSearchSessionClosed, MessageBox, tmpstr, MessageBox.TYPE_INFO)
342 class TerrestrialTransponderSearchSupport:
344 def terrestrialTransponderSearchSessionClosed(self, *val):
345 print "TerrestrialTransponderSearchSessionClosed, val", val
346 self.terrestrial_search_container.appClosed.remove(self.terrestrialTransponderSearchClosed)
347 self.terrestrial_search_container.dataAvail.remove(self.getTerrestrialTransponderData)
350 self.setTerrestrialTransponderSearchResult(self.__tlist)
352 self.terrestrial_search_container.sendCtrlC()
353 self.setTerrestrialTransponderSearchResult(None)
354 self.terrestrial_search_container = None
355 self.terrestrial_search_session = None
357 self.terrestrialTransponderSearchFinished()
359 def terrestrialTransponderSearchClosed(self, retval):
360 if self.terrestrial_tunerName.startswith("Sundtek"):
361 self.terrestrial_search_session.close(True)
363 self.setTerrestrialTransponderData()
364 opt = self.terrestrialTransponderGetOpt()
366 print "terrestrialTransponderSearch finished", retval
367 self.terrestrial_search_session.close(True)
369 (freq, bandWidth) = opt
370 self.terrestrialTransponderSearch(freq, bandWidth)
372 def getTerrestrialTransponderData(self, str):
374 if self.terrestrial_tunerName.startswith("Sundtek"):
375 str = self.remaining_data + str
376 lines = str.split('\n')
378 self.remaining_data = lines[-1]
381 self.remaining_data = ""
385 if 'MODE' in data[0]:
386 parm = eDVBFrontendParametersTerrestrial()
387 parm.frequency = int(data[3])
388 parm.bandwidth = self.terrestrialTransponderconvBandwidth_P(int(data[5]))
389 parm.inversion = parm.Inversion_Unknown
390 parm.code_rate_HP = parm.FEC_Auto
391 parm.code_rate_LP = parm.FEC_Auto
392 parm.modulation = parm.Modulation_Auto
393 parm.transmission_mode = parm.TransmissionMode_Auto
394 parm.guard_interval = parm.GuardInterval_Auto
395 parm.hierarchy = parm.Hierarchy_Auto
396 parm.system = 'DVB-T2' in data[1] and parm.System_DVB_T_T2 or parm.System_DVB_T
398 self.__tlist.append(parm)
399 tmpstr = _("Try to find used transponders in terrestrial network... please wait...")
406 self.terrestrial_search_session["text"].setText(tmpstr)
408 self.terrestrial_search_data += str
410 def setTerrestrialTransponderData(self):
411 data = self.terrestrial_search_data.split()
413 # print "[setTerrestrialTransponderData] data : ", data
415 # DVB-T : OK frequency bandwidth delivery system -1
416 # DVB-T2 : OK frequency bandwidth delivery system number_of_plp plp_id0:plp_type0
417 if data[3] == 1: # DVB-T
418 parm = eDVBFrontendParametersTerrestrial()
419 parm.frequency = int(data[1])
420 parm.bandwidth = int(data[2])
421 parm.inversion = parm.Inversion_Unknown
422 parm.code_rate_HP = parm.FEC_Auto
423 parm.code_rate_LP = parm.FEC_Auto
424 parm.modulation = parm.Modulation_Auto
425 parm.transmission_mode = parm.TransmissionMode_Auto
426 parm.guard_interval = parm.GuardInterval_Auto
427 parm.hierarchy = parm.Hierarchy_Auto
428 parm.system = parm.System_DVB_T
430 self.__tlist.append(parm)
433 plp_num = int(data[4])
434 if len(plp_list) > plp_num:
435 plp_list = plp_list[:plp_num]
437 (plp_id, plp_type) = plp.split(':')
438 if plp_type == '0': # common PLP:
440 parm = eDVBFrontendParametersTerrestrial()
441 parm.frequency = int(data[1])
442 parm.bandwidth = self.terrestrialTransponderconvBandwidth_P(int(data[2]))
443 parm.inversion = parm.Inversion_Unknown
444 parm.code_rate_HP = parm.FEC_Auto
445 parm.code_rate_LP = parm.FEC_Auto
446 parm.modulation = parm.Modulation_Auto
447 parm.transmission_mode = parm.TransmissionMode_Auto
448 parm.guard_interval = parm.GuardInterval_Auto
449 parm.hierarchy = parm.Hierarchy_Auto
450 parm.system = parm.System_DVB_T2
451 parm.plpid = int(plp_id)
452 self.__tlist.append(parm)
453 tmpstr = _("Try to find used transponders in terrestrial network... please wait...")
455 tmpstr += data[1][:-3]
458 self.terrestrial_search_session["text"].setText(tmpstr)
460 def terrestrialTransponderInitSearchList(self, searchList, region):
461 tpList = nimmanager.getTranspondersTerrestrial(region)
463 if x[0] == 2: #TERRESTRIAL
464 freq = x[1] # frequency
465 bandWidth = self.terrestrialTransponderConvBandwidth_I(x[2]) # bandWidth
466 parm = (freq, bandWidth)
467 searchList.append(parm)
469 def terrestrialTransponderConvBandwidth_I(self, _bandWidth):
471 eDVBFrontendParametersTerrestrial.Bandwidth_8MHz : 8000000,
472 eDVBFrontendParametersTerrestrial.Bandwidth_7MHz : 7000000,
473 eDVBFrontendParametersTerrestrial.Bandwidth_6MHz : 6000000,
474 eDVBFrontendParametersTerrestrial.Bandwidth_5MHz : 5000000,
475 eDVBFrontendParametersTerrestrial.Bandwidth_1_712MHz : 1712000,
476 eDVBFrontendParametersTerrestrial.Bandwidth_10MHz : 10000000,
477 }.get(_bandWidth, 8000000)
480 def terrestrialTransponderconvBandwidth_P(self, _bandWidth):
482 8000000 : eDVBFrontendParametersTerrestrial.Bandwidth_8MHz,
483 7000000 : eDVBFrontendParametersTerrestrial.Bandwidth_7MHz,
484 6000000 : eDVBFrontendParametersTerrestrial.Bandwidth_6MHz,
485 5000000 : eDVBFrontendParametersTerrestrial.Bandwidth_5MHz,
486 1712000 : eDVBFrontendParametersTerrestrial.Bandwidth_1_712MHz,
487 10000000 : eDVBFrontendParametersTerrestrial.Bandwidth_10MHz,
488 }.get(_bandWidth, eDVBFrontendParametersTerrestrial.Bandwidth_8MHz)
491 def terrestrialTransponderGetOpt(self):
492 if len(self.terrestrial_search_list) > 0:
493 return self.terrestrial_search_list.pop(0)
497 def terrestrialTransponderGetCmd(self, nim_idx):
498 global terrestrial_autoscan_nimtype
500 if self.terrestrial_tunerName is not None and self.terrestrial_tunerName != "":
502 tunerName = self.terrestrial_tunerName.split(' ')[-1][4:-1]
503 if tunerName == 'TT3L10':
505 device_id = GetDeviceId('TT3L10', nim_idx)
506 device_id = "--device %s" % (device_id)
507 except Exception, err:
508 print "terrestrialTransponderGetCmd ->", err
509 device_id = "--device 0"
510 command = "%s %s" % (terrestrial_autoscan_nimtype[tunerName], device_id)
512 except Exception, err:
513 print "terrestrialTransponderGetCmd ->", err
516 def startTerrestrialTransponderSearch(self, nim_idx, region):
517 if not self.tryGetRawFrontend(nim_idx):
518 self.session.nav.stopService()
519 if not self.tryGetRawFrontend(nim_idx):
520 if self.session.pipshown:
521 self.session.infobar.showPiP()
522 if not self.tryGetRawFrontend(nim_idx):
523 self.terrestrialTransponderSearchFinished()
526 self.remaining_data = ""
527 self.terrestrial_search_container = eConsoleAppContainer()
528 self.terrestrial_search_container.appClosed.append(self.terrestrialTransponderSearchClosed)
529 self.terrestrial_search_container.dataAvail.append(self.getTerrestrialTransponderData)
530 self.terrestrial_tunerName = nimmanager.getNimName(nim_idx)
531 if self.terrestrial_tunerName.startswith("Sundtek"):
532 cmd = "/opt/bin/mediaclient --blindscan /dev/dvb/adapter1/frontend0"
533 print "SCAN CMD : ",cmd
534 self.terrestrial_search_container.execute(cmd)
536 self.terrestrial_search_binName = self.terrestrialTransponderGetCmd(nim_idx)
537 self.terrestrial_search_bus = nimmanager.getI2CDevice(nim_idx)
538 if self.terrestrial_search_bus is None:
539 # print "ERROR: could not get I2C device for nim", nim_idx, "for terrestrial transponder search"
540 self.terrestrial_search_bus = 2
542 self.terrestrial_search_list = []
543 self.terrestrialTransponderInitSearchList(self.terrestrial_search_list ,region)
544 (freq, bandWidth) = self.terrestrialTransponderGetOpt()
545 self.terrestrialTransponderSearch(freq, bandWidth)
546 tmpstr = _("Try to find used transponders in terrestrial network... please wait...")
548 self.terrestrial_search_session = self.session.openWithCallback(self.terrestrialTransponderSearchSessionClosed, MessageBox, tmpstr, MessageBox.TYPE_INFO)
550 def terrestrialTransponderSearch(self, freq, bandWidth):
551 self.terrestrial_search_data = ""
552 cmd = "%s --freq %d --bw %d --bus %d --ds 2" % (self.terrestrial_search_binName, freq, bandWidth, self.terrestrial_search_bus)
553 print "SCAN CMD : ",cmd
554 self.terrestrial_search_container.execute(cmd)
556 class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, TerrestrialTransponderSearchSupport):
557 def __init__(self, session):
558 Screen.__init__(self, session)
559 Screen.setTitle(self, _("Manual Scan"))
561 self.finished_cb = None
563 self.service = session.nav.getCurrentService()
567 if self.service is not None:
568 self.feinfo = self.service.frontendInfo()
569 frontendData = self.feinfo and self.feinfo.getAll(True)
571 self.ter_channel_input = False
572 self.ter_tnumber = None
573 self.createConfig(frontendData)
578 self.session.postScanService = session.nav.getCurrentlyPlayingServiceOrGroup()
580 self["key_red"] = StaticText(_("Close"))
581 self["key_green"] = StaticText(_("Scan"))
583 self["actions"] = NumberActionMap(["SetupActions", "MenuActions", "ColorActions"],
587 "cancel": self.keyCancel,
588 "red": self.keyCancel,
590 "menu": self.doCloseRecursive,
593 self.statusTimer = eTimer()
594 self.statusTimer.callback.append(self.updateStatus)
595 #self.statusTimer.start(5000, True)
598 ConfigListScreen.__init__(self, self.list)
599 self["header"] = Label(_("Manual Scan"))
600 if not self.scan_nims.value == "":
602 self["introduction"] = Label(_("Press OK to start the scan"))
604 self["introduction"] = Label(_("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."))
606 def runAsync(self, finished_cb):
607 self.finished_cb = finished_cb
610 def updateSatList(self):
612 for slot in nimmanager.nim_slots:
613 if slot.isCompatible("DVB-S"):
614 self.satList.append(nimmanager.getSatListForNim(slot.slot))
616 self.satList.append(None)
618 def createSetup(self):
620 self.multiscanlist = []
621 index_to_scan = int(self.scan_nims.value)
622 print "ID: ", index_to_scan
624 self.tunerEntry = getConfigListEntry(_("Tuner"), self.scan_nims)
625 self.list.append(self.tunerEntry)
627 if self.scan_nims == [ ]:
630 self.typeOfScanEntry = None
631 self.typeOfInputEntry = None
632 self.systemEntry = None
633 self.modulationEntry = None
634 self.preDefSatList = None
635 self.TerrestrialTransponders = None
636 self.TerrestrialRegionEntry = None
637 self.TerrestrialCompleteEntry = None
638 nim = nimmanager.nim_slots[index_to_scan]
639 if nim.isCompatible("DVB-S"):
640 self.typeOfScanEntry = getConfigListEntry(_("Type of scan"), self.scan_type)
641 self.list.append(self.typeOfScanEntry)
642 elif nim.isCompatible("DVB-C"):
643 if config.Nims[index_to_scan].cable.scan_type.value != "provider": # only show predefined transponder if in provider mode
644 if self.scan_typecable.value == "predefined_transponder":
645 self.scan_typecable.value = self.cable_toggle[self.last_scan_typecable]
646 self.last_scan_typecable = self.scan_typecable.value
647 self.typeOfScanEntry = getConfigListEntry(_("Type of scan"), self.scan_typecable)
648 self.list.append(self.typeOfScanEntry)
649 elif nim.isCompatible("DVB-T"):
650 self.typeOfScanEntry = getConfigListEntry(_("Type of scan"), self.scan_typeterrestrial)
651 self.list.append(self.typeOfScanEntry)
652 if self.scan_typeterrestrial.value == "single_transponder":
653 self.typeOfInputEntry = getConfigListEntry(_("Use frequency or channel"), self.scan_input_as)
654 if self.ter_channel_input:
655 self.list.append(self.typeOfInputEntry)
657 self.scan_input_as.value = self.scan_input_as.choices[0]
659 self.scan_networkScan.value = False
660 if nim.isCompatible("DVB-S"):
661 if self.scan_type.value == "single_transponder":
663 if nim.isCompatible("DVB-S2"):
664 self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
665 self.list.append(self.systemEntry)
667 # downgrade to dvb-s, in case a -s2 config was active
668 self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
669 self.list.append(getConfigListEntry(_('Satellite'), self.scan_satselection[index_to_scan]))
670 self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
671 self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
672 self.list.append(getConfigListEntry(_('Symbol rate'), self.scan_sat.symbolrate))
673 self.list.append(getConfigListEntry(_('Polarization'), self.scan_sat.polarization))
674 if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
675 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
676 elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
677 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
678 self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
679 self.list.append(self.modulationEntry)
680 self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
681 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
682 elif self.scan_type.value == "predefined_transponder" and self.satList[index_to_scan]:
684 self.preDefSatList = getConfigListEntry(_('Satellite'), self.scan_satselection[index_to_scan])
685 self.list.append(self.preDefSatList)
686 sat = self.satList[index_to_scan][self.scan_satselection[index_to_scan].index]
687 self.predefinedTranspondersList(sat[0])
688 self.list.append(getConfigListEntry(_('Transponder'), self.preDefTransponders))
689 elif self.scan_type.value == "single_satellite":
691 print self.scan_satselection[index_to_scan]
692 self.list.append(getConfigListEntry(_("Satellite"), self.scan_satselection[index_to_scan]))
693 self.scan_networkScan.value = True
694 elif "multisat" in self.scan_type.value:
696 SatList = nimmanager.getSatListForNim(index_to_scan)
698 if self.Satexists(tlist, x[0]) == 0:
700 sat = ConfigEnableDisable(default = "_yes" in self.scan_type.value and True or False)
701 configEntry = getConfigListEntry(nimmanager.getSatDescription(x[0]), sat)
702 self.list.append(configEntry)
703 self.multiscanlist.append((x[0], sat))
704 self.scan_networkScan.value = True
705 elif nim.isCompatible("DVB-C"):
706 if self.scan_typecable.value == "single_transponder":
707 self.list.append(getConfigListEntry(_("Frequency"), self.scan_cab.frequency))
708 self.list.append(getConfigListEntry(_("Inversion"), self.scan_cab.inversion))
709 self.list.append(getConfigListEntry(_("Symbol rate"), self.scan_cab.symbolrate))
710 self.list.append(getConfigListEntry(_("Modulation"), self.scan_cab.modulation))
711 self.list.append(getConfigListEntry(_("FEC"), self.scan_cab.fec))
712 elif self.scan_typecable.value == "predefined_transponder":
713 self.predefinedCabTranspondersList()
714 self.list.append(getConfigListEntry(_('Transponder'), self.CableTransponders))
715 if config.Nims[index_to_scan].cable.scan_networkid.value:
716 self.networkid = config.Nims[index_to_scan].cable.scan_networkid.value
717 self.scan_networkScan.value = True
718 elif nim.isCompatible("DVB-T"):
719 if self.scan_typeterrestrial.value == "single_transponder":
720 if nim.isCompatible("DVB-T2"):
721 self.systemEntry = getConfigListEntry(_('System'), self.scan_ter.system)
722 self.list.append(self.systemEntry)
724 self.scan_ter.system.value = eDVBFrontendParametersTerrestrial.System_DVB_T
725 if self.ter_channel_input and self.scan_input_as.value == "channel":
726 channel = getChannelNumber(self.scan_ter.frequency.value*1000, self.ter_tnumber)
728 self.scan_ter.channel.value = int(channel.replace("+","").replace("-",""))
729 self.list.append(getConfigListEntry(_("Channel"), self.scan_ter.channel))
731 prev_val = self.scan_ter.frequency.value
732 self.scan_ter.frequency.value = channel2frequency(self.scan_ter.channel.value, self.ter_tnumber)/1000
733 if self.scan_ter.frequency.value == 474000:
734 self.scan_ter.frequency.value = prev_val
735 self.list.append(getConfigListEntry(_("Frequency"), self.scan_ter.frequency))
736 self.list.append(getConfigListEntry(_("Inversion"), self.scan_ter.inversion))
737 self.list.append(getConfigListEntry(_("Bandwidth"), self.scan_ter.bandwidth))
738 self.list.append(getConfigListEntry(_("Code rate HP"), self.scan_ter.fechigh))
739 self.list.append(getConfigListEntry(_("Code rate LP"), self.scan_ter.feclow))
740 self.list.append(getConfigListEntry(_("Modulation"), self.scan_ter.modulation))
741 self.list.append(getConfigListEntry(_("Transmission mode"), self.scan_ter.transmission))
742 self.list.append(getConfigListEntry(_("Guard interval"), self.scan_ter.guard))
743 self.list.append(getConfigListEntry(_("Hierarchy info"), self.scan_ter.hierarchy))
744 if self.scan_ter.system.value == eDVBFrontendParametersTerrestrial.System_DVB_T2:
745 self.list.append(getConfigListEntry(_('PLP ID'), self.scan_ter.plp_id))
746 elif self.scan_typeterrestrial.value == "predefined_transponder":
747 if nim.isCompatible("DVB-T2"):
748 self.systemEntry = getConfigListEntry(_('System'), self.scan_ter.system)
749 self.list.append(self.systemEntry)
751 self.scan_ter.system.value = eDVBFrontendParametersTerrestrial.System_DVB_T
752 self.TerrestrialRegion = self.terrestrial_nims_regions[index_to_scan]
753 self.TerrestrialRegionEntry = getConfigListEntry(_('Region'), self.TerrestrialRegion)
754 self.list.append(self.TerrestrialRegionEntry)
755 self.predefinedTerrTranspondersList()
756 self.list.append(getConfigListEntry(_('Transponder'), self.TerrestrialTransponders))
757 elif self.scan_typeterrestrial.value == "complete":
758 self.TerrestrialRegion = self.terrestrial_nims_regions[index_to_scan]
759 if nimmanager.getNimName(nim.slot).startswith("Sundtek"):
760 self.TerrestrialCompleteEntry = getConfigListEntry(_('Scan options'), self.scan_ter_complete_type)
761 self.list.append(self.TerrestrialCompleteEntry)
762 if self.TerrestrialCompleteEntry is None or self.scan_ter_complete_type.value == "extended":
763 if nim.isCompatible("DVB-T2"):
764 self.systemEntry = getConfigListEntry(_('System'), self.scan_ter.system)
765 self.list.append(self.systemEntry)
767 self.scan_ter.system.value = eDVBFrontendParametersTerrestrial.System_DVB_T
768 self.TerrestrialRegionEntry = getConfigListEntry(_('Region'), self.TerrestrialRegion)
769 self.list.append(self.TerrestrialRegionEntry)
770 self.list.append(getConfigListEntry(_("Network scan"), self.scan_networkScan))
771 self.list.append(getConfigListEntry(_("Clear before scan"), self.scan_clearallservices))
772 self.list.append(getConfigListEntry(_("Only free scan"), self.scan_onlyfree))
773 self["config"].list = self.list
774 self["config"].l.setList(self.list)
776 def Satexists(self, tlist, pos):
783 cur = self["config"].getCurrent()
785 if cur == self.typeOfScanEntry or \
786 cur == self.typeOfInputEntry or \
787 cur == self.tunerEntry or \
788 cur == self.systemEntry or \
789 cur == self.preDefSatList or \
790 cur == self.TerrestrialRegionEntry or \
791 cur == self.TerrestrialCompleteEntry or \
792 (self.modulationEntry and self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2 and cur == self.modulationEntry):
795 def createConfig(self, frontendData):
798 "system": eDVBFrontendParametersSatellite.System_DVB_S,
800 "inversion": eDVBFrontendParametersSatellite.Inversion_Unknown,
802 "polarization": eDVBFrontendParametersSatellite.Polarisation_Horizontal,
803 "fec": eDVBFrontendParametersSatellite.FEC_Auto,
804 "fec_s2": eDVBFrontendParametersSatellite.FEC_9_10,
805 "modulation": eDVBFrontendParametersSatellite.Modulation_QPSK }
808 "inversion": eDVBFrontendParametersCable.Inversion_Unknown,
809 "modulation": eDVBFrontendParametersCable.Modulation_QAM64,
810 "fec": eDVBFrontendParametersCable.FEC_Auto,
812 "system": eDVBFrontendParametersCable.System_DVB_C_ANNEX_A }
814 "frequency" : 474000,
815 "inversion" : eDVBFrontendParametersTerrestrial.Inversion_Unknown,
816 "bandwidth" : 8000000,
817 "fechigh" : eDVBFrontendParametersTerrestrial.FEC_Auto,
818 "feclow" : eDVBFrontendParametersTerrestrial.FEC_Auto,
819 "modulation" : eDVBFrontendParametersTerrestrial.Modulation_Auto,
820 "transmission_mode" : eDVBFrontendParametersTerrestrial.TransmissionMode_Auto,
821 "guard_interval" : eDVBFrontendParametersTerrestrial.GuardInterval_Auto,
822 "hierarchy": eDVBFrontendParametersTerrestrial.Hierarchy_Auto,
823 "system": eDVBFrontendParametersTerrestrial.System_DVB_T,
826 if frontendData is not None:
827 ttype = frontendData.get("tuner_type", "UNKNOWN")
829 defaultSat["system"] = frontendData.get("system", eDVBFrontendParametersSatellite.System_DVB_S)
830 defaultSat["frequency"] = frontendData.get("frequency", 0) / 1000
831 defaultSat["inversion"] = frontendData.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown)
832 defaultSat["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
833 defaultSat["polarization"] = frontendData.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal)
834 if defaultSat["system"] == eDVBFrontendParametersSatellite.System_DVB_S2:
835 defaultSat["fec_s2"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
836 defaultSat["rolloff"] = frontendData.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35)
837 defaultSat["pilot"] = frontendData.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown)
839 defaultSat["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
840 defaultSat["modulation"] = frontendData.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK)
841 defaultSat["orbpos"] = frontendData.get("orbital_position", 0)
842 elif ttype == "DVB-C":
843 defaultCab["frequency"] = frontendData.get("frequency", 0) / 1000
844 defaultCab["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
845 defaultCab["inversion"] = frontendData.get("inversion", eDVBFrontendParametersCable.Inversion_Unknown)
846 defaultCab["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersCable.FEC_Auto)
847 defaultCab["modulation"] = frontendData.get("modulation", eDVBFrontendParametersCable.Modulation_QAM16)
848 defaultCab["system"] = frontendData.get("system", eDVBFrontendParametersCable.System_DVB_C_ANNEX_A)
849 elif ttype == "DVB-T":
850 defaultTer["frequency"] = frontendData.get("frequency", 47400000) / 1000
851 defaultTer["inversion"] = frontendData.get("inversion", eDVBFrontendParametersTerrestrial.Inversion_Unknown)
852 defaultTer["bandwidth"] = frontendData.get("bandwidth", 8000000)
853 defaultTer["fechigh"] = frontendData.get("code_rate_hp", eDVBFrontendParametersTerrestrial.FEC_Auto)
854 defaultTer["feclow"] = frontendData.get("code_rate_lp", eDVBFrontendParametersTerrestrial.FEC_Auto)
855 defaultTer["modulation"] = frontendData.get("constellation", eDVBFrontendParametersTerrestrial.Modulation_Auto)
856 defaultTer["transmission_mode"] = frontendData.get("transmission_mode", eDVBFrontendParametersTerrestrial.TransmissionMode_Auto)
857 defaultTer["guard_interval"] = frontendData.get("guard_interval", eDVBFrontendParametersTerrestrial.GuardInterval_Auto)
858 defaultTer["hierarchy"] = frontendData.get("hierarchy_information", eDVBFrontendParametersTerrestrial.Hierarchy_Auto)
859 defaultTer["system"] = frontendData.get("system", eDVBFrontendParametersTerrestrial.System_DVB_T)
860 defaultTer["plp_id"] = frontendData.get("plp_id", 0)
862 self.scan_sat = ConfigSubsection()
863 self.scan_cab = ConfigSubsection()
864 self.scan_ter = ConfigSubsection()
867 # collect all nims which are *not* set to "nothing"
868 for n in nimmanager.nim_slots:
869 if n.config_mode == "nothing":
871 if n.config_mode == "advanced" and len(nimmanager.getSatListForNim(n.slot)) < 1:
873 if n.config_mode in ("loopthrough", "satposdepends"):
874 root_id = nimmanager.sec.getRoot(n.slot_id, int(n.config.connectedTo.value))
875 if n.type == nimmanager.nim_slots[root_id].type: # check if connected from a DVB-S to DVB-S2 Nim or vice versa
877 nim_list.append((str(n.slot), n.friendly_full_description))
879 self.scan_nims = ConfigSelection(choices = nim_list)
880 if frontendData is not None and len(nim_list) > 0:
881 self.scan_nims.value = str(frontendData.get("tuner_number", nim_list[0][0]))
883 for slot in nimmanager.nim_slots:
884 if slot.isCompatible("DVB-T"):
885 self.ter_tnumber = slot.slot
886 if self.ter_tnumber is not None:
887 self.ter_channel_input = supportedChannels(self.ter_tnumber)
890 self.scan_snr = ConfigSlider()
891 self.scan_snr.enabled = False
892 self.scan_agc = ConfigSlider()
893 self.scan_agc.enabled = False
894 self.scan_ber = ConfigSlider()
895 self.scan_ber.enabled = False
898 self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [
899 (eDVBFrontendParametersSatellite.System_DVB_S, _("DVB-S")),
900 (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2"))])
901 self.scan_sat.frequency = ConfigInteger(default = defaultSat["frequency"], limits = (1, 99999))
902 self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [
903 (eDVBFrontendParametersSatellite.Inversion_Off, _("Off")),
904 (eDVBFrontendParametersSatellite.Inversion_On, _("On")),
905 (eDVBFrontendParametersSatellite.Inversion_Unknown, _("Auto"))])
906 self.scan_sat.symbolrate = ConfigInteger(default = defaultSat["symbolrate"], limits = (1, 99999))
907 self.scan_sat.polarization = ConfigSelection(default = defaultSat["polarization"], choices = [
908 (eDVBFrontendParametersSatellite.Polarisation_Horizontal, _("horizontal")),
909 (eDVBFrontendParametersSatellite.Polarisation_Vertical, _("vertical")),
910 (eDVBFrontendParametersSatellite.Polarisation_CircularLeft, _("circular left")),
911 (eDVBFrontendParametersSatellite.Polarisation_CircularRight, _("circular right"))])
912 self.scan_sat.fec = ConfigSelection(default = defaultSat["fec"], choices = [
913 (eDVBFrontendParametersSatellite.FEC_Auto, _("Auto")),
914 (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"),
915 (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"),
916 (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"),
917 (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"),
918 (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"),
919 (eDVBFrontendParametersSatellite.FEC_None, _("None"))])
920 self.scan_sat.fec_s2 = ConfigSelection(default = defaultSat["fec_s2"], choices = [
921 (eDVBFrontendParametersSatellite.FEC_1_2, "1/2"),
922 (eDVBFrontendParametersSatellite.FEC_2_3, "2/3"),
923 (eDVBFrontendParametersSatellite.FEC_3_4, "3/4"),
924 (eDVBFrontendParametersSatellite.FEC_3_5, "3/5"),
925 (eDVBFrontendParametersSatellite.FEC_4_5, "4/5"),
926 (eDVBFrontendParametersSatellite.FEC_5_6, "5/6"),
927 (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"),
928 (eDVBFrontendParametersSatellite.FEC_8_9, "8/9"),
929 (eDVBFrontendParametersSatellite.FEC_9_10, "9/10")])
930 self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [
931 (eDVBFrontendParametersSatellite.Modulation_QPSK, "QPSK"),
932 (eDVBFrontendParametersSatellite.Modulation_8PSK, "8PSK")])
933 self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35), choices = [
934 (eDVBFrontendParametersSatellite.RollOff_alpha_0_35, "0.35"),
935 (eDVBFrontendParametersSatellite.RollOff_alpha_0_25, "0.25"),
936 (eDVBFrontendParametersSatellite.RollOff_alpha_0_20, "0.20"),
937 (eDVBFrontendParametersSatellite.RollOff_auto, _("Auto"))])
938 self.scan_sat.pilot = ConfigSelection(default = defaultSat.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown), choices = [
939 (eDVBFrontendParametersSatellite.Pilot_Off, _("Off")),
940 (eDVBFrontendParametersSatellite.Pilot_On, _("On")),
941 (eDVBFrontendParametersSatellite.Pilot_Unknown, _("Auto"))])
944 self.scan_cab.frequency = ConfigInteger(default = defaultCab["frequency"], limits = (50, 999))
945 self.scan_cab.inversion = ConfigSelection(default = defaultCab["inversion"], choices = [
946 (eDVBFrontendParametersCable.Inversion_Off, _("Off")),
947 (eDVBFrontendParametersCable.Inversion_On, _("On")),
948 (eDVBFrontendParametersCable.Inversion_Unknown, _("Auto"))])
949 self.scan_cab.modulation = ConfigSelection(default = defaultCab["modulation"], choices = [
950 (eDVBFrontendParametersCable.Modulation_QAM16, "16-QAM"),
951 (eDVBFrontendParametersCable.Modulation_QAM32, "32-QAM"),
952 (eDVBFrontendParametersCable.Modulation_QAM64, "64-QAM"),
953 (eDVBFrontendParametersCable.Modulation_QAM128, "128-QAM"),
954 (eDVBFrontendParametersCable.Modulation_QAM256, "256-QAM")])
955 self.scan_cab.fec = ConfigSelection(default = defaultCab["fec"], choices = [
956 (eDVBFrontendParametersCable.FEC_Auto, _("Auto")),
957 (eDVBFrontendParametersCable.FEC_1_2, "1/2"),
958 (eDVBFrontendParametersCable.FEC_2_3, "2/3"),
959 (eDVBFrontendParametersCable.FEC_3_4, "3/4"),
960 (eDVBFrontendParametersCable.FEC_5_6, "5/6"),
961 (eDVBFrontendParametersCable.FEC_7_8, "7/8"),
962 (eDVBFrontendParametersCable.FEC_8_9, "8/9"),
963 (eDVBFrontendParametersCable.FEC_3_5, "3/5"),
964 (eDVBFrontendParametersCable.FEC_4_5, "4/5"),
965 (eDVBFrontendParametersCable.FEC_9_10, "9/10"),
966 (eDVBFrontendParametersCable.FEC_None, _("None"))])
967 self.scan_cab.symbolrate = ConfigInteger(default = defaultCab["symbolrate"], limits = (1, 99999))
968 self.scan_cab.system = ConfigSelection(default = defaultCab["system"], choices = [
969 (eDVBFrontendParametersCable.System_DVB_C_ANNEX_A, _("DVB-C")),
970 (eDVBFrontendParametersCable.System_DVB_C_ANNEX_C, _("DVB-C ANNEX C"))])
973 self.scan_ter.frequency = ConfigInteger(default = defaultTer["frequency"], limits = (50000, 999000))
974 self.scan_ter.channel = ConfigInteger(default = 21, limits = (1, 99))
975 self.scan_ter.inversion = ConfigSelection(default = defaultTer["inversion"], choices = [
976 (eDVBFrontendParametersTerrestrial.Inversion_Off, _("Off")),
977 (eDVBFrontendParametersTerrestrial.Inversion_On, _("On")),
978 (eDVBFrontendParametersTerrestrial.Inversion_Unknown, _("Auto"))])
979 # WORKAROUND: we can't use BW-auto
980 self.scan_ter.bandwidth = ConfigSelection(default = defaultTer["bandwidth"], choices = [
981 (1712000, "1.712MHz"),
988 #, (eDVBFrontendParametersTerrestrial.Bandwidth_Auto, _("Auto"))))
989 self.scan_ter.fechigh = ConfigSelection(default = defaultTer["fechigh"], choices = [
990 (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"),
991 (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"),
992 (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"),
993 (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"),
994 (eDVBFrontendParametersTerrestrial.FEC_6_7, "6/7"),
995 (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"),
996 (eDVBFrontendParametersTerrestrial.FEC_8_9, "8/9"),
997 (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))])
998 self.scan_ter.feclow = ConfigSelection(default = defaultTer["feclow"], choices = [
999 (eDVBFrontendParametersTerrestrial.FEC_1_2, "1/2"),
1000 (eDVBFrontendParametersTerrestrial.FEC_2_3, "2/3"),
1001 (eDVBFrontendParametersTerrestrial.FEC_3_4, "3/4"),
1002 (eDVBFrontendParametersTerrestrial.FEC_5_6, "5/6"),
1003 (eDVBFrontendParametersTerrestrial.FEC_6_7, "6/7"),
1004 (eDVBFrontendParametersTerrestrial.FEC_7_8, "7/8"),
1005 (eDVBFrontendParametersTerrestrial.FEC_8_9, "8/9"),
1006 (eDVBFrontendParametersTerrestrial.FEC_Auto, _("Auto"))])
1007 self.scan_ter.modulation = ConfigSelection(default = defaultTer["modulation"], choices = [
1008 (eDVBFrontendParametersTerrestrial.Modulation_QPSK, "QPSK"),
1009 (eDVBFrontendParametersTerrestrial.Modulation_QAM16, "QAM16"),
1010 (eDVBFrontendParametersTerrestrial.Modulation_QAM64, "QAM64"),
1011 (eDVBFrontendParametersTerrestrial.Modulation_QAM256, "QAM256"),
1012 (eDVBFrontendParametersTerrestrial.Modulation_Auto, _("Auto"))])
1013 self.scan_ter.transmission = ConfigSelection(default = defaultTer["transmission_mode"], choices = [
1014 (eDVBFrontendParametersTerrestrial.TransmissionMode_1k, "1K"),
1015 (eDVBFrontendParametersTerrestrial.TransmissionMode_2k, "2K"),
1016 (eDVBFrontendParametersTerrestrial.TransmissionMode_4k, "4K"),
1017 (eDVBFrontendParametersTerrestrial.TransmissionMode_8k, "8K"),
1018 (eDVBFrontendParametersTerrestrial.TransmissionMode_16k, "16K"),
1019 (eDVBFrontendParametersTerrestrial.TransmissionMode_32k, "32K"),
1020 (eDVBFrontendParametersTerrestrial.TransmissionMode_Auto, _("Auto"))])
1021 self.scan_ter.guard = ConfigSelection(default = defaultTer["guard_interval"], choices = [
1022 (eDVBFrontendParametersTerrestrial.GuardInterval_1_32, "1/32"),
1023 (eDVBFrontendParametersTerrestrial.GuardInterval_1_16, "1/16"),
1024 (eDVBFrontendParametersTerrestrial.GuardInterval_1_8, "1/8"),
1025 (eDVBFrontendParametersTerrestrial.GuardInterval_1_4, "1/4"),
1026 (eDVBFrontendParametersTerrestrial.GuardInterval_1_128, "1/128"),
1027 (eDVBFrontendParametersTerrestrial.GuardInterval_19_128, "19/128"),
1028 (eDVBFrontendParametersTerrestrial.GuardInterval_19_256, "19/256"),
1029 (eDVBFrontendParametersTerrestrial.GuardInterval_Auto, _("Auto"))])
1030 self.scan_ter.hierarchy = ConfigSelection(default = defaultTer["hierarchy"], choices = [
1031 (eDVBFrontendParametersTerrestrial.Hierarchy_None, _("None")),
1032 (eDVBFrontendParametersTerrestrial.Hierarchy_1, "1"),
1033 (eDVBFrontendParametersTerrestrial.Hierarchy_2, "2"),
1034 (eDVBFrontendParametersTerrestrial.Hierarchy_4, "4"),
1035 (eDVBFrontendParametersTerrestrial.Hierarchy_Auto, _("Auto"))])
1036 self.scan_ter.system = ConfigSelection(default = defaultTer["system"], choices = [
1037 (eDVBFrontendParametersTerrestrial.System_DVB_T_T2, _("Auto")),
1038 (eDVBFrontendParametersTerrestrial.System_DVB_T, _("DVB-T")),
1039 (eDVBFrontendParametersTerrestrial.System_DVB_T2, _("DVB-T2"))])
1040 self.scan_ter.plp_id = ConfigInteger(default = defaultTer["plp_id"], limits = (0, 255))
1042 self.scan_scansat = {}
1043 for sat in nimmanager.satList:
1045 self.scan_scansat[sat[0]] = ConfigYesNo(default = False)
1047 self.scan_satselection = []
1048 for slot in nimmanager.nim_slots:
1049 if slot.isCompatible("DVB-S"):
1050 self.scan_satselection.append(getConfigSatlist(defaultSat["orbpos"], self.satList[slot.slot]))
1052 self.scan_satselection.append(None)
1054 self.terrestrial_nims_regions = []
1055 for slot in nimmanager.nim_slots:
1056 if slot.isCompatible("DVB-T"):
1057 self.terrestrial_nims_regions.append(self.getTerrestrialRegionsList(slot.slot))
1059 self.terrestrial_nims_regions.append(None)
1061 if frontendData is not None and ttype == "DVB-S" and self.predefinedTranspondersList(defaultSat["orbpos"]) is not None:
1062 defaultSatSearchType = "predefined_transponder"
1064 defaultSatSearchType = "single_transponder"
1065 if frontendData is not None and ttype == "DVB-T" and self.predefinedTerrTranspondersList() is not None:
1066 defaultTerrSearchType = "predefined_transponder"
1068 defaultTerrSearchType = "single_transponder"
1070 if frontendData is not None and ttype == "DVB-C" and self.predefinedCabTranspondersList() is not None:
1071 defaultCabSearchType = "predefined_transponder"
1073 defaultCabSearchType = "single_transponder"
1075 self.scan_type = ConfigSelection(default = defaultSatSearchType, choices = [("single_transponder", _("User defined transponder")), ("predefined_transponder", _("Predefined transponder")), ("single_satellite", _("Single satellite")), ("multisat", _("Multisat")), ("multisat_yes", _("Multisat all select"))])
1076 self.scan_typecable = ConfigSelection(default = defaultCabSearchType, choices = [("single_transponder", _("User defined transponder")), ("predefined_transponder", _("Predefined transponder")), ("complete", _("Complete"))])
1077 self.last_scan_typecable = "single_transponder"
1078 self.cable_toggle = {"single_transponder":"complete", "complete":"single_transponder"}
1079 self.scan_typeterrestrial = ConfigSelection(default = defaultTerrSearchType, choices = [("single_transponder", _("User defined transponder")), ("predefined_transponder", _("Predefined transponder")), ("complete", _("Complete"))])
1080 self.scan_input_as = ConfigSelection(default = "channel", choices = [("frequency", _("Frequency")), ("channel", _("Channel"))])
1081 self.scan_ter_complete_type = ConfigSelection(default = "all", choices = [("all", _("All frequency")), ("extended", _("Extended"))])
1082 self.scan_clearallservices = ConfigSelection(default = "no", choices = [("no", _("no")), ("yes", _("yes")), ("yes_hold_feeds", _("yes (keep feeds)"))])
1083 self.scan_onlyfree = ConfigYesNo(default = False)
1084 self.scan_networkScan = ConfigYesNo(default = False)
1089 ConfigListScreen.keyLeft(self)
1093 ConfigListScreen.keyRight(self)
1096 def handleKeyFileCallback(self, answer):
1097 ConfigListScreen.handleKeyFileCallback(self, answer)
1100 def updateStatus(self):
1101 print "updatestatus"
1103 def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot):
1104 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)
1105 print "orbpos: " + str(orbital_position)
1106 parm = eDVBFrontendParametersSatellite()
1107 parm.modulation = modulation
1108 parm.system = system
1109 parm.frequency = frequency * 1000
1110 parm.symbol_rate = symbol_rate * 1000
1111 parm.polarisation = polarisation
1113 parm.inversion = inversion
1114 parm.orbital_position = orbital_position
1115 parm.rolloff = rolloff
1119 def addCabTransponder(self, tlist, frequency, symbol_rate, modulation, fec, inversion):
1120 print "Add Cab: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(modulation) + " fec: " + str(fec) + " inversion: " + str(inversion)
1121 parm = eDVBFrontendParametersCable()
1122 parm.frequency = frequency
1123 parm.symbol_rate = symbol_rate
1124 parm.modulation = modulation
1125 parm.fec_inner = fec
1126 parm.inversion = inversion
1129 def addTerTransponder(self, tlist, *args, **kwargs):
1130 tlist.append(buildTerTransponder(*args, **kwargs))
1133 infoBarInstance = InfoBar.instance
1135 infoBarInstance.checkTimeshiftRunning(self.keyGoCheckTimeshiftCallback)
1137 self.keyGoCheckTimeshiftCallback(True)
1139 def keyGoCheckTimeshiftCallback(self, answer):
1141 SEARCH_CABLE_TRANSPONDERS = 1
1142 SEARCH_TERRESTRIAL2_TRANSPONDERS = 2
1143 if not answer or self.scan_nims.value == "":
1149 index_to_scan = int(self.scan_nims.value)
1151 if self.scan_nims == [ ]:
1152 self.session.open(MessageBox, _("No tuner is enabled!\nPlease setup your tuner settings before you start a service scan."), MessageBox.TYPE_ERROR)
1155 nim = nimmanager.nim_slots[index_to_scan]
1156 print "nim", nim.slot
1157 if nim.isCompatible("DVB-S"):
1158 print "is compatible with DVB-S"
1159 if self.scan_type.value == "single_transponder":
1160 # these lists are generated for each tuner, so this has work.
1161 assert len(self.satList) > index_to_scan
1162 assert len(self.scan_satselection) > index_to_scan
1164 nimsats = self.satList[index_to_scan]
1165 selsatidx = self.scan_satselection[index_to_scan].index
1167 # however, the satList itself could be empty. in that case, "index" is 0 (for "None").
1169 orbpos = nimsats[selsatidx][0]
1170 if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
1171 fec = self.scan_sat.fec.value
1173 fec = self.scan_sat.fec_s2.value
1174 print "add sat transponder"
1175 self.addSatTransponder(tlist, self.scan_sat.frequency.value,
1176 self.scan_sat.symbolrate.value,
1177 self.scan_sat.polarization.value,
1179 self.scan_sat.inversion.value,
1181 self.scan_sat.system.value,
1182 self.scan_sat.modulation.value,
1183 self.scan_sat.rolloff.value,
1184 self.scan_sat.pilot.value)
1186 elif self.scan_type.value == "predefined_transponder":
1187 nimsats = self.satList[index_to_scan]
1188 selsatidx = self.scan_satselection[index_to_scan].index
1190 orbpos = nimsats[selsatidx][0]
1191 tps = nimmanager.getTransponders(orbpos)
1192 if len(tps) and len(tps) > self.preDefTransponders.index:
1193 tp = tps[self.preDefTransponders.index]
1194 self.addSatTransponder(tlist, tp[1] / 1000, tp[2] / 1000, tp[3], tp[4], tp[7], orbpos, tp[5], tp[6], tp[8], tp[9])
1196 elif self.scan_type.value == "single_satellite":
1197 sat = self.satList[index_to_scan][self.scan_satselection[index_to_scan].index]
1198 getInitialTransponderList(tlist, sat[0])
1199 elif "multisat" in self.scan_type.value:
1200 SatList = nimmanager.getSatListForNim(index_to_scan)
1201 for x in self.multiscanlist:
1203 print " " + str(x[0])
1204 getInitialTransponderList(tlist, x[0])
1206 elif nim.isCompatible("DVB-C"):
1207 if self.scan_typecable.value == "single_transponder":
1208 self.addCabTransponder(tlist, self.scan_cab.frequency.value*1000,
1209 self.scan_cab.symbolrate.value*1000,
1210 self.scan_cab.modulation.value,
1211 self.scan_cab.fec.value,
1212 self.scan_cab.inversion.value)
1214 elif self.scan_typecable.value == "predefined_transponder":
1215 tps = nimmanager.getTranspondersCable(index_to_scan)
1216 if len(tps) and len(tps) > self.CableTransponders.index :
1217 tp = tps[self.CableTransponders.index]
1218 # 0 transponder type, 1 freq, 2 sym, 3 mod, 4 fec, 5 inv, 6 sys
1219 self.addCabTransponder(tlist, tp[1], tp[2], tp[3], tp[4], tp[5])
1221 elif self.scan_typecable.value == "complete":
1222 if config.Nims[index_to_scan].cable.scan_type.value == "provider":
1223 getInitialCableTransponderList(tlist, index_to_scan)
1225 action = SEARCH_CABLE_TRANSPONDERS
1227 elif nim.isCompatible("DVB-T"):
1228 if self.scan_typeterrestrial.value == "single_transponder":
1229 if self.scan_input_as.value == "channel":
1230 frequency = channel2frequency(self.scan_ter.channel.value, self.ter_tnumber)
1232 frequency = self.scan_ter.frequency.value * 1000
1233 self.addTerTransponder(tlist,
1235 inversion = self.scan_ter.inversion.value,
1236 bandwidth = self.scan_ter.bandwidth.value,
1237 fechigh = self.scan_ter.fechigh.value,
1238 feclow = self.scan_ter.feclow.value,
1239 modulation = self.scan_ter.modulation.value,
1240 transmission = self.scan_ter.transmission.value,
1241 guard = self.scan_ter.guard.value,
1242 hierarchy = self.scan_ter.hierarchy.value,
1243 system = self.scan_ter.system.value,
1244 plpid = self.scan_ter.plp_id.value)
1246 elif self.scan_typeterrestrial.value == "predefined_transponder":
1247 if self.TerrestrialTransponders is not None:
1248 region = self.terrestrial_nims_regions[index_to_scan].value
1249 tps = nimmanager.getTranspondersTerrestrial(region)
1250 if len(tps) and len(tps) > self.TerrestrialTransponders.index:
1251 tp = tps[self.TerrestrialTransponders.index]
1252 tlist.append(buildTerTransponder(tp[1], tp[9], tp[2], tp[4], tp[5], tp[3], tp[7], tp[6], tp[8], self.scan_ter.system.value, tp[11]))
1254 elif self.scan_typeterrestrial.value == "complete":
1256 if nimmanager.getNimName(nim.slot).startswith("Sundtek") and self.scan_ter_complete_type.value == "all":
1257 action = SEARCH_TERRESTRIAL2_TRANSPONDERS
1258 elif SystemInfo["Blindscan_t2_available"]:
1260 if nim.isCompatible("DVB-T2"):
1261 if len(self.terrestrialTransponderGetCmd(nim.slot)):
1262 action = SEARCH_TERRESTRIAL2_TRANSPONDERS
1265 getInitialTerrestrialTransponderList(tlist, self.TerrestrialRegion.value, int(self.scan_ter.system.value), skip_t2)
1267 flags = self.scan_networkScan.value and eComponentScan.scanNetworkSearch or 0
1269 tmp = self.scan_clearallservices.value
1271 flags |= eComponentScan.scanRemoveServices
1272 elif tmp == "yes_hold_feeds":
1273 flags |= eComponentScan.scanRemoveServices
1274 flags |= eComponentScan.scanDontRemoveFeeds
1276 if tmp != "no" and not removeAll:
1277 flags |= eComponentScan.scanDontRemoveUnscanned
1279 if self.scan_onlyfree.value:
1280 flags |= eComponentScan.scanOnlyFree
1282 for x in self["config"].list:
1285 if action == START_SCAN:
1286 self.startScan(tlist, flags, index_to_scan, self.networkid)
1287 elif action == SEARCH_CABLE_TRANSPONDERS:
1289 self.feid = index_to_scan
1291 self.startCableTransponderSearch(self.feid)
1292 elif action == SEARCH_TERRESTRIAL2_TRANSPONDERS:
1294 self.feid = index_to_scan
1296 self.startTerrestrialTransponderSearch(self.feid, nimmanager.getTerrestrialDescription(self.feid))
1298 def setCableTransponderSearchResult(self, tlist):
1301 def cableTransponderSearchFinished(self):
1302 if self.tlist is None:
1305 self.startScan(self.tlist, self.flags, self.feid)
1307 def setTerrestrialTransponderSearchResult(self, tlist):
1310 def terrestrialTransponderSearchFinished(self):
1311 if self.tlist is None:
1314 self.startScan(self.tlist, self.flags, self.feid)
1316 def predefinedTranspondersList(self, orbpos):
1318 if orbpos is not None:
1320 if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
1321 fec = self.scan_sat.fec_s2.value
1323 fec = self.scan_sat.fec.value
1324 compare = [0, self.scan_sat.frequency.value*1000, self.scan_sat.symbolrate.value*1000, self.scan_sat.polarization.value, fec]
1326 tps = nimmanager.getTransponders(orbpos)
1329 if default is None and self.compareTransponders(tp, compare):
1331 list.append((str(i), self.humanReadableTransponder(tp)))
1333 self.preDefTransponders = ConfigSelection(choices = list, default = default)
1336 def humanReadableTransponder(self, tp):
1337 if tp[3] in range (4) and tp[4] in range (11):
1338 pol_list = ['H','V','L','R']
1339 fec_list = ['Auto','1/2','2/3','3/4','5/6','7/8','8/9','3/5','4/5','9/10','None']
1340 return str(tp[1] / 1000) + " " + pol_list[tp[3]] + " " + str(tp[2] / 1000) + " " + fec_list[tp[4]]
1341 return _("Invalid transponder data")
1343 def compareTransponders(self, tp, compare):
1344 frequencyTolerance = 2000 #2 MHz
1345 symbolRateTolerance = 10
1346 return abs(tp[1] - compare[1]) <= frequencyTolerance and abs(tp[2] - compare[2]) <= symbolRateTolerance and tp[3] == compare[3] and (not tp[4] or tp[4] == compare[4])
1348 def predefinedTerrTranspondersList(self):
1351 compare = [2, self.scan_ter.frequency.value*1000]
1353 index_to_scan = int(self.scan_nims.value)
1354 channels = supportedChannels(index_to_scan)
1355 region = self.terrestrial_nims_regions[index_to_scan].value
1356 tps = nimmanager.getTranspondersTerrestrial(region)
1358 if tp[0] == 2: #TERRESTRIAL
1361 channel = _(' (Channel %s)') % (getChannelNumber(tp[1], index_to_scan))
1362 if default is None and self.compareTerrTransponders(tp, compare):
1364 list.append((str(i), '%s MHz %s' % (str(tp[1] / 1000000), channel)))
1366 print "channel", channel
1367 self.TerrestrialTransponders = ConfigSelection(choices = list, default = default)
1370 def compareTerrTransponders(self, tp, compare):
1371 frequencyTolerance = 1000000 #1 MHz
1372 return abs(tp[1] - compare[1]) <= frequencyTolerance
1374 def getTerrestrialRegionsList(self, index_to_scan = None):
1377 if index_to_scan is None:
1378 index_to_scan = int(self.scan_nims.value)
1379 defaultRegionForNIM = nimmanager.getTerrestrialDescription(index_to_scan)
1380 for r in nimmanager.terrestrialsList:
1381 if default is None and r[0] == defaultRegionForNIM:
1383 list.append((r[0], r[0][:46]))
1384 return ConfigSelection(choices = list, default = default)
1386 def predefinedCabTranspondersList(self):
1389 # 0 transponder type, 1 freq, 2 sym, 3 mod, 4 fec, 5 inv, 6 sys
1390 compare = [1, self.scan_cab.frequency.value*1000, self.scan_cab.symbolrate.value*1000, self.scan_cab.modulation.value, self.scan_cab.fec.value, self.scan_cab.inversion.value, self.scan_cab.system.value]
1392 index_to_scan = int(self.scan_nims.value)
1393 tps = nimmanager.getTranspondersCable(index_to_scan)
1395 if tp[0] == 1: #CABLE
1396 if default is None and self.compareCabTransponders(tp, compare):
1398 list.append((str(i), self.humanReadableCabTransponder(tp)))
1400 self.CableTransponders = ConfigSelection(choices = list, default = default)
1403 def humanReadableCabTransponder(self, tp):
1404 if tp[3] in range (6) and (tp[4] in range (10) or tp[4] == 15):
1405 mod_list = ['Auto', '16-QAM','32-QAM','64-QAM','128-QAM', '256-QAM']
1406 fec_list = {0:"Auto", 1:'1/2', 2:'2/3', 3:'3/4', 4:'5/6', 5:'7/8', 6:'8/9', 7:'3/5', 8:'4/5', 9:'9/10', 15:'None'}
1407 print str(tp[1]/1000) + " MHz " + fec_list[tp[4]] + " " + str(tp[2]/1000) + " " + mod_list[tp[3]]
1408 return str(tp[1]/1000) + " MHz " + fec_list[tp[4]] + " " + str(tp[2]/1000) + " " + mod_list[tp[3]]
1409 return _("Invalid transponder data")
1411 def compareCabTransponders(self, tp, compare):
1412 frequencyTolerance = 1000000 #1 MHz
1413 symbolRateTolerance = 10
1414 return abs(tp[1] - compare[1]) <= frequencyTolerance and abs(tp[2] - compare[2]) <= symbolRateTolerance and tp[3] == compare[3] and (not tp[4] or tp[4] == compare[4])
1416 def startScan(self, tlist, flags, feid, networkid = 0):
1418 # flags |= eComponentScan.scanSearchBAT
1419 if self.finished_cb:
1420 self.session.openWithCallback(self.finished_cb, ServiceScan, [{"transponders": tlist, "feid": feid, "flags": flags, "networkid": networkid}])
1422 self.session.openWithCallback(self.startScanCallback, ServiceScan, [{"transponders": tlist, "feid": feid, "flags": flags, "networkid": networkid}])
1424 if self.finished_cb:
1425 self.session.openWithCallback(self.finished_cb, MessageBox, _("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."), MessageBox.TYPE_ERROR)
1427 self.session.open(MessageBox, _("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."), MessageBox.TYPE_ERROR)
1429 def startScanCallback(self, answer=True):
1431 self.doCloseRecursive()
1433 def keyCancel(self):
1434 self.session.nav.playService(self.session.postScanService)
1435 for x in self["config"].list:
1439 def doCloseRecursive(self):
1440 self.session.nav.playService(self.session.postScanService)
1441 self.closeRecursive()
1443 class ScanSimple(ConfigListScreen, Screen, CableTransponderSearchSupport, TerrestrialTransponderSearchSupport):
1444 def getNetworksForNim(self, nim):
1445 if nim.isCompatible("DVB-S"):
1446 networks = nimmanager.getSatListForNim(nim.slot)
1447 elif nim.isCompatible("DVB-C"):
1448 networks = nimmanager.getTranspondersCable(nim.slot)
1449 if not networks and config.Nims[nim.slot].configMode.value == "enabled":
1450 networks = [ nim.type ]
1451 elif nim.isCompatible("DVB-T"):
1452 networks = nimmanager.getTerrestrialDescription(nim.slot)
1454 networks = [ nim.type ] # "DVB-C" or "DVB-T". TODO: seperate networks for different C/T tuners, if we want to support that.
1456 # empty tuners provide no networks.
1460 def __init__(self, session):
1461 Screen.__init__(self, session)
1462 Screen.setTitle(self, _("Automatic Scan"))
1464 self["key_red"] = StaticText(_("Close"))
1465 self["key_green"] = StaticText(_("Scan"))
1467 self["actions"] = ActionMap(["SetupActions", "MenuActions", "ColorActions"],
1471 "cancel": self.keyCancel,
1472 "menu": self.doCloseRecursive,
1473 "red": self.keyCancel,
1474 "green": self.keyGo,
1477 self.session.postScanService = session.nav.getCurrentlyPlayingServiceOrGroup()
1482 known_networks = [ ]
1484 self.finished_cb = None
1486 for nim in nimmanager.nim_slots:
1487 # collect networks provided by this tuner
1490 networks = self.getNetworksForNim(nim)
1492 print "nim %d provides" % nim.slot, networks
1493 print "known:", known_networks
1495 # we only need to scan on the first tuner which provides a network.
1496 # this gives the first tuner for each network priority for scanning.
1498 if x not in known_networks:
1500 print x, "not in ", known_networks
1501 known_networks.append(x)
1503 # don't offer to scan nims if nothing is connected
1504 if not nimmanager.somethingConnected(nim.slot):
1508 nims_to_scan.append(nim)
1510 # we save the config elements to use them on keyGo
1511 self.nim_enable = [ ]
1513 if len(nims_to_scan):
1514 self.scan_networkScan = ConfigYesNo(default = True)
1515 self.scan_clearallservices = ConfigSelection(default = "yes", choices = [("no", _("no")), ("yes", _("yes")), ("yes_hold_feeds", _("yes (keep feeds)"))])
1516 self.list.append(getConfigListEntry(_("Network scan"), self.scan_networkScan))
1517 self.list.append(getConfigListEntry(_("Clear before scan"), self.scan_clearallservices))
1519 for nim in nims_to_scan:
1520 nimconfig = ConfigYesNo(default = True)
1521 nimconfig.nim_index = nim.slot
1522 self.nim_enable.append(nimconfig)
1523 self.list.append(getConfigListEntry(_("Scan ") + nim.slot_name + " (" + nim.friendly_type + ")", nimconfig))
1525 ConfigListScreen.__init__(self, self.list)
1526 self["header"] = Label(_("Automatic scan"))
1527 self["footer"] = Label(_("Press OK to scan"))
1529 def runAsync(self, finished_cb):
1530 self.finished_cb = finished_cb
1534 InfoBarInstance = InfoBar.instance
1536 InfoBarInstance.checkTimeshiftRunning(self.keyGoCheckTimeshiftCallback)
1538 self.keyGoCheckTimeshiftCallback(True)
1540 def keyGoCheckTimeshiftCallback(self, answer):
1543 self.known_networks = set()
1545 self.buildTransponderList()
1547 def buildTransponderList(self): # this method is called multiple times because of asynchronous stuff
1549 SEARCH_CABLE_TRANSPONDERS = 1
1550 SEARCH_TERRESTRIAL2_TRANSPONDERS = 2
1553 n = self.nim_iter < len(self.nim_enable) and self.nim_enable[self.nim_iter] or None
1556 if n.value: # check if nim is enabled
1558 nim = nimmanager.nim_slots[n.nim_index]
1559 networks = set(self.getNetworksForNim(nim))
1562 # don't scan anything twice
1563 networks.discard(self.known_networks)
1566 if nim.isCompatible("DVB-S"):
1567 # get initial transponders for each satellite to be scanned
1568 for sat in networks:
1569 getInitialTransponderList(tlist, sat[0])
1570 elif nim.isCompatible("DVB-C"):
1571 if config.Nims[nim.slot].cable.scan_type.value == "provider":
1572 getInitialCableTransponderList(tlist, nim.slot)
1574 action = SEARCH_CABLE_TRANSPONDERS
1575 networkid = config.Nims[nim.slot].cable.scan_networkid.value
1576 elif nim.isCompatible("DVB-T"):
1578 if SystemInfo["Blindscan_t2_available"]:
1580 if nim.isCompatible("DVB-T2"):
1581 if len(self.terrestrialTransponderGetCmd(nim.slot)):
1582 action = SEARCH_TERRESTRIAL2_TRANSPONDERS
1585 getInitialTerrestrialTransponderList(tlist, nimmanager.getTerrestrialDescription(nim.slot), skip_t2=skip_t2)
1589 flags = self.scan_networkScan.value and eComponentScan.scanNetworkSearch or 0
1590 tmp = self.scan_clearallservices.value
1592 flags |= eComponentScan.scanRemoveServices
1593 elif tmp == "yes_hold_feeds":
1594 flags |= eComponentScan.scanRemoveServices
1595 flags |= eComponentScan.scanDontRemoveFeeds
1597 if action == APPEND_NOW:
1598 self.scanList.append({"transponders": tlist, "feid": nim.slot, "flags": flags})
1599 elif action == SEARCH_CABLE_TRANSPONDERS:
1601 self.feid = nim.slot
1602 self.networkid = networkid
1603 self.startCableTransponderSearch(nim.slot)
1605 elif action == SEARCH_TERRESTRIAL2_TRANSPONDERS:
1608 self.feid = nim.slot
1609 self.startTerrestrialTransponderSearch(nim.slot, nimmanager.getTerrestrialDescription(nim.slot))
1614 self.buildTransponderList() # recursive call of this function !!!
1616 # when we are here, then the recursion is finished and all enabled nims are checked
1617 # so we now start the real transponder scan
1618 self.startScan(self.scanList)
1620 def startScan(self, scanList):
1622 if self.finished_cb:
1623 self.session.openWithCallback(self.finished_cb, ServiceScan, scanList = scanList)
1625 self.session.open(ServiceScan, scanList = scanList)
1627 if self.finished_cb:
1628 self.session.openWithCallback(self.finished_cb, MessageBox, _("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."), MessageBox.TYPE_ERROR)
1630 self.session.open(MessageBox, _("Nothing to scan!\nPlease setup your tuner settings before you start a service scan."), MessageBox.TYPE_ERROR)
1632 def setCableTransponderSearchResult(self, tlist):
1633 if tlist is not None:
1634 self.scanList.append({"transponders": tlist, "feid": self.feid, "flags": self.flags})
1636 def cableTransponderSearchFinished(self):
1637 self.buildTransponderList()
1639 def setTerrestrialTransponderSearchResult(self, tlist):
1640 if tlist is not None:
1641 self.tlist.extend(tlist)
1642 if self.tlist is not None:
1643 self.scanList.append({"transponders": self.tlist, "feid": self.feid, "flags": self.flags})
1645 def terrestrialTransponderSearchFinished(self):
1646 self.buildTransponderList()
1648 def keyCancel(self):
1649 self.session.nav.playService(self.session.postScanService)
1652 def doCloseRecursive(self):
1653 self.session.nav.playService(self.session.postScanService)
1654 self.closeRecursive()
1656 def Satexists(self, tlist, pos):