def __init__(self, session, request):
		WebScreen.__init__(self, session, request)
		from WebComponents.Sources.About import About
		from WebComponents.Sources.Frontend import Frontend
		from WebComponents.Sources.Hdd import Hdd
		from WebComponents.Sources.Network import Network
		from Components.config import config
		from Components.About import about
		from Components.Sources.StaticText import StaticText
		try:
			from Tools.StbHardware import getFPVersion
		except:
			from Tools.DreamboxHardware import getFPVersion
		from Tools.HardwareInfo import HardwareInfo

		hw = HardwareInfo()

		self["About"] = About(session)

		self["Network"] = Network()
		self["Hdd"] = Hdd()
		self["Frontends"] = Frontend()
		try:
			from enigma import getImageVersionString, getBuildVersionString, getEnigmaVersionString
			self["EnigmaVersion"] = StaticText(getEnigmaVersionString())
			self["ImageVersion"] = StaticText(getVersionString() + '.' + getBuildVersionString())
		except:
			self["EnigmaVersion"] = StaticText(about.getEnigmaVersionString())
			self["ImageVersion"] = StaticText(about.getVersionString())
		self["WebIfVersion"] = StaticText(config.plugins.Webinterface.version.value)
		self["FpVersion"] = StaticText(str(getFPVersion()))
		self["DeviceName"] = StaticText(hw.get_device_name())
示例#2
0
文件: flasher.py 项目: TitanNit/tdt
	def __init__(self, session, cancelable = True, close_on_finish = False):
		self.skin = NFIFlash.skin
		Screen.__init__(self, session)
		
		self["job_progressbar"] = Progress()
		self["job_progresslabel"] = StaticText("")
		
		self["finished"] = Boolean()

		self["infolabel"] = StaticText("")
		self["statusbar"] = StaticText(_("Please select .NFI flash image file from medium"))
		self["listlabel"] = StaticText(_("select .NFI flash file")+":")
		
		self["key_green"] = StaticText()
		self["key_yellow"] = StaticText()
		self["key_blue"] = StaticText()

		self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions"],
		{
			"green": self.ok,
			"yellow": self.reboot,
			"ok": self.ok,
			"left": self.left,
			"right": self.right,
			"up": self.up,
			"down": self.down
		}, -1)

		currDir = "/media/usb/"
		self.filelist = FileList(currDir, matchingPattern = "^.*\.(nfi|NFI)")
		self["filelist"] = self.filelist
		self.nfifile = ""
		self.md5sum = ""
		self.job = None
		self.box = HardwareInfo().get_device_name()
示例#3
0
 def __init__(self):
     self.model = HardwareInfo().get_device_model()
     # cfg files has modelname  rcname entries.
     # modelname is boxname optionally followed by .rctype
     for line in open((resolveFilename(SCOPE_SKIN, "rc_models/rc_models.cfg")), "r"):
         if line.startswith(self.model):
             m, r = line.strip().split()
             self.RcModels[m] = r
示例#4
0
	def __init__(self):
		self.model = HardwareInfo().get_device_model()
		# cfg files has modelname  rcname entries.
		# modelname is boxname optionally followed by .rctype
		for line in open((resolveFilename(SCOPE_SKIN, 'rc_models/rc_models.cfg')), 'r'):
			if line[:len(self.model)] == self.model:
				m, r = line.strip().split()
				self.RcModels[m] = r
				# on spark has only one rc
				break
示例#5
0
	def getDeviceName(self):
		device_name = "unknown"
		try:
			file = open("/proc/stb/info/vumodel", "r")
			device_name = file.readline().strip()
			file.close()
		except IOError:
			from Tools.HardwareInfo import HardwareInfo
			device_name = HardwareInfo.get_device_name()

		return device_name
示例#6
0
文件: RcModel.py 项目: wslee2/enigma2
class RcModel:
        RcModels = {}

	def __init__(self):
		self.model = HardwareInfo().get_device_model()
		# cfg files has modelname  rcname entries.
		# modelname is boxname optionally followed by .rctype
		if "technomate" in open("/etc/.brandtype","r").readline():
			for line in open((resolveFilename(SCOPE_SKIN, 'rc_models/rc_models_te.cfg')), 'r'):
				if line.startswith(self.model):
					m, r = line.strip().split()
					self.RcModels[m] = r

		elif "edision" in open("/etc/.brandtype","r").readline():
			for line in open((resolveFilename(SCOPE_SKIN, 'rc_models/rc_models_ed.cfg')), 'r'):
				if line.startswith(self.model):
					m, r = line.strip().split()
					self.RcModels[m] = r

		else:
			for line in open((resolveFilename(SCOPE_SKIN, 'rc_models/rc_models.cfg')), 'r'):
				if line.startswith(self.model):
					m, r = line.strip().split()
					self.RcModels[m] = r

	def rcIsDefault(self):
		# Default RC can only happen with DMM type remote controls...
		return self.model.startswith('dm')

	def getRcFile(self, ext):
		# check for rc/type every time so rctype changes will be noticed
		if os.path.exists('/proc/stb/ir/rc/type'):
			rc = open('/proc/stb/ir/rc/type').read().strip()
			modeltype = '%s.%s' % (self.model, rc)
		else:
			modeltype = None

		if modeltype is not None and modeltype in self.RcModels.keys():
			remote = self.RcModels[modeltype]
		elif self.model in self.RcModels.keys():
			remote = self.RcModels[self.model]
		else:
			remote = 'dmm'	# default. Assume files for dmm exists
		f = resolveFilename(SCOPE_SKIN, 'rc_models/' + remote + '.' + ext)
		if not os.path.exists(f):
			f = resolveFilename(SCOPE_SKIN, 'rc_models/dmm.' + ext)
		return f

	def getRcImg(self):
		return self.getRcFile('png')

	def getRcPositions(self):
		return self.getRcFile('xml')
示例#7
0
文件: RcModel.py 项目: wslee2/enigma2
	def __init__(self):
		self.model = HardwareInfo().get_device_model()
		# cfg files has modelname  rcname entries.
		# modelname is boxname optionally followed by .rctype
		if "technomate" in open("/etc/.brandtype","r").readline():
			for line in open((resolveFilename(SCOPE_SKIN, 'rc_models/rc_models_te.cfg')), 'r'):
				if line.startswith(self.model):
					m, r = line.strip().split()
					self.RcModels[m] = r

		elif "edision" in open("/etc/.brandtype","r").readline():
			for line in open((resolveFilename(SCOPE_SKIN, 'rc_models/rc_models_ed.cfg')), 'r'):
				if line.startswith(self.model):
					m, r = line.strip().split()
					self.RcModels[m] = r

		else:
			for line in open((resolveFilename(SCOPE_SKIN, 'rc_models/rc_models.cfg')), 'r'):
				if line.startswith(self.model):
					m, r = line.strip().split()
					self.RcModels[m] = r
示例#8
0
class RcModel:
    RcModels = {}

    def __init__(self):
        self.model = HardwareInfo().get_device_model()
        # cfg files has modelname  rcname entries.
        # modelname is boxname optionally followed by .rctype
        for line in open((resolveFilename(SCOPE_SKIN, "rc_models/rc_models.cfg")), "r"):
            if line.startswith(self.model):
                m, r = line.strip().split()
                self.RcModels[m] = r

    def rcIsDefault(self):
        # Default RC can only happen with DMM type remote controls...
        return self.model.startswith("dm")

    def getRcFile(self, ext):
        # check for rc/type every time so rctype changes will be noticed
        if os.path.exists("/proc/stb/ir/rc/type"):
            rc = open("/proc/stb/ir/rc/type").read().strip()
            modeltype = "%s.%s" % (self.model, rc)
        else:
            modeltype = None

        if modeltype is not None and modeltype in self.RcModels.keys():
            remote = self.RcModels[modeltype]
        elif self.model in self.RcModels.keys():
            remote = self.RcModels[self.model]
        else:
            remote = "dmm"  # default. Assume files for dmm exists
        f = resolveFilename(SCOPE_SKIN, "rc_models/" + remote + "." + ext)
        if not os.path.exists(f):
            f = resolveFilename(SCOPE_SKIN, "rc_models/dmm." + ext)
        return f

    def getRcImg(self):
        return self.getRcFile("png")

    def getRcPositions(self):
        return self.getRcFile("xml")
示例#9
0
    def __init__(self):
        self.iService = None
        self.iServiceReference = None
        self.iAudioDelay = None
        self.channelAudio = AC3
        self.whichAudio = AC3
        self.bIsRecording = False

        # Current audio- delay
        self.systemDelay = {}

        self.getAudioInformation()

        self.activateTimer = eTimer()
        self.activateTimer.callback.append(self.activateDelay)
        self.activateWait = config.plugins.AC3LipSync.activationDelay.getValue()
        
        # Current value for movie start behaviour
        self.movieStart = config.usage.on_movie_start.getValue()

        # find out box type
        self.oHWInfo = HardwareInfo()
        self.bHasToRestartService = self.oHWInfo.get_device_name() == "dm7025"
示例#10
0
    def VideoChangeDetect(self):
        global resolutionlabel
        config_port = config.av.videoport.value
        config_mode = str(config.av.videomode[config_port].value).replace(
            '\n', '')
        config_res = str(config.av.videomode[config_port].value[:-1]).replace(
            '\n', '')
        config_pol = str(config.av.videomode[config_port].value[-1:]).replace(
            '\n', '')
        config_rate = str(config.av.videorate[config_mode].value).replace(
            'Hz', '').replace('\n', '')

        f = open("/proc/stb/video/videomode")
        current_mode = f.read()[:-1].replace('\n', '')
        f.close()
        if current_mode.upper() in ('PAL', 'NTSC'):
            current_mode = current_mode.upper()

        current_pol = ''
        if 'i' in current_mode:
            current_pol = 'i'
        elif 'p' in current_mode:
            current_pol = 'p'
        current_res = current_pol and current_mode.split(
            current_pol)[0].replace('\n', '') or ""
        current_rate = current_pol and current_mode.split(
            current_pol)[0].replace(
                '\n', '') and current_mode.split(current_pol)[1].replace(
                    '\n', '') or ""

        video_height = None
        video_width = None
        video_pol = None
        video_rate = None
        if path.exists("/proc/stb/vmpeg/0/yres"):
            f = open("/proc/stb/vmpeg/0/yres", "r")
            try:
                video_height = int(f.read(), 16)
            except:
                pass
            f.close()
        if path.exists("/proc/stb/vmpeg/0/xres"):
            f = open("/proc/stb/vmpeg/0/xres", "r")
            try:
                video_width = int(f.read(), 16)
            except:
                pass
            f.close()
        if path.exists("/proc/stb/vmpeg/0/progressive"):
            f = open("/proc/stb/vmpeg/0/progressive", "r")
            try:
                video_pol = "p" if int(f.read(), 16) else "i"
            except:
                pass
            f.close()
        if path.exists("/proc/stb/vmpeg/0/framerate"):
            f = open("/proc/stb/vmpeg/0/framerate", "r")
            try:
                video_rate = int(f.read())
            except:
                pass
            f.close()

        if not video_height or not video_width or not video_pol or not video_rate:
            service = self.session.nav.getCurrentService()
            if service is not None:
                info = service.info()
            else:
                info = None

            if info:
                video_height = int(
                    info.getInfo(iServiceInformation.sVideoHeight))
                video_width = int(info.getInfo(
                    iServiceInformation.sVideoWidth))
                video_pol = ("i", "p")[info.getInfo(
                    iServiceInformation.sProgressive)]
                video_rate = int(info.getInfo(iServiceInformation.sFrameRate))

        if video_height and video_width and video_pol and video_rate:
            resolutionlabel["content"].setText(
                _("Video content: %ix%i%s %iHz") %
                (video_width, video_height, video_pol,
                 (video_rate + 500) / 1000))
            if (700 < video_width <= 720
                ) and video_height <= 480 and video_rate in (23976, 24000,
                                                             29970, 59940):
                new_res = "480"
            elif (700 < video_width <= 720
                  ) and video_height <= 576 and video_rate in (25000, 50000):
                new_res = "576"
            elif (video_width == 1280) and video_height <= 720:
                new_res = "720"
            else:
                new_res = config_res

            if video_rate != -1:
                if video_rate == 25000 and video_pol == 'i':
                    new_rate = 50000
                elif video_rate == 59940 or (
                        video_rate == 29970 and video_pol
                        == 'i') or (video_rate == 29970 and video_pol == 'p'
                                    and config.av.autores.value == 'disabled'):
                    new_rate = 60000
                elif video_rate == 23976:
                    new_rate = 24000
                elif video_rate == 29970:
                    new_rate = 30000
                else:
                    new_rate = video_rate
                new_rate = str((new_rate + 500) / 1000)
            else:
                new_rate = config_rate

            if video_pol != -1:
                new_pol = str(video_pol)
            else:
                new_pol = config_pol

            write_mode = None
            new_mode = None
            if config_mode in ('PAL', 'NTSC'):
                write_mode = config_mode
            elif config.av.autores.value == 'all' or (
                    config.av.autores.value == 'hd' and int(new_res) >= 720):
                if (config.av.autores_deinterlace.value
                        and HardwareInfo().is_nextgen()) or (
                            config.av.autores_deinterlace.value
                            and not HardwareInfo().is_nextgen()
                            and int(new_res) <= 720):
                    new_pol = new_pol.replace('i', 'p')
                if new_res + new_pol + new_rate in iAVSwitch.modes_available:
                    new_mode = new_res + new_pol + new_rate
                    if new_mode == '480p24' or new_mode == '576p24':
                        new_mode = config.av.autores_480p24.value
                    if new_mode == '720p24':
                        new_mode = config.av.autores_720p24.value
                    if new_mode == '1080p24':
                        new_mode = config.av.autores_1080p24.value
                    if new_mode == '1080p25':
                        new_mode = config.av.autores_1080p25.value
                    if new_mode == '1080p30':
                        new_mode = config.av.autores_1080p30.value
                elif new_res + new_pol in iAVSwitch.modes_available:
                    new_mode = new_res + new_pol
                else:
                    new_mode = config_mode + new_rate

                write_mode = new_mode
            elif config.av.autores.value == 'hd' and int(new_res) <= 576:
                if (config.av.autores_deinterlace.value
                        and HardwareInfo().is_nextgen()) or (
                            config.av.autores_deinterlace.value
                            and not HardwareInfo().is_nextgen()
                            and not config.av.autores_sd.value == '1080i'):
                    new_mode = config.av.autores_sd.value.replace(
                        'i', 'p') + new_rate
                else:
                    if new_pol in 'p':
                        new_mode = config.av.autores_sd.value.replace(
                            'i', 'p') + new_rate
                    else:
                        new_mode = config.av.autores_sd.value + new_rate

                if new_mode == '720p24':
                    new_mode = config.av.autores_720p24.value
                if new_mode == '1080p24':
                    new_mode = config.av.autores_1080p24.value
                if new_mode == '1080p25':
                    new_mode = config.av.autores_1080p25.value
                if new_mode == '1080p30':
                    new_mode = config.av.autores_1080p30.value

                write_mode = new_mode
            else:
                if path.exists('/proc/stb/video/videomode_%shz' %
                               new_rate) and config_rate == 'multi':
                    f = open("/proc/stb/video/videomode_%shz" % new_rate, "r")
                    multi_videomode = f.read().replace('\n', '')
                    f.close()
                    if multi_videomode and (current_mode != multi_videomode):
                        write_mode = multi_videomode
                    else:
                        write_mode = config_mode + new_rate
            if write_mode and current_mode != write_mode:
                resolutionlabel["restxt"].setText(
                    _("Video mode: %s") % write_mode)
                if config.av.autores.value != "disabled" and config.av.autores_label_timeout.value != '0':
                    resolutionlabel.show()
                print "[VideoMode] setMode - port: %s, mode: %s" % (
                    config_port, write_mode)
                f = open("/proc/stb/video/videomode", "w")
                f.write(write_mode)
                f.close()

        iAVSwitch.setAspect(config.av.aspect)
        iAVSwitch.setWss(config.av.wss)
        iAVSwitch.setPolicy43(config.av.policy_43)
        iAVSwitch.setPolicy169(config.av.policy_169)

        self.delay = False
        self.detecttimer.stop()
示例#11
0
def InitUsageConfig():
    config.usage = ConfigSubsection()
    config.usage.showdish = ConfigYesNo(default=True)
    config.usage.multibouquet = ConfigYesNo(default=True)

    config.usage.alternative_number_mode = ConfigYesNo(default=False)

    def alternativeNumberModeChange(configElement):
        eDVBDB.getInstance().setNumberingMode(configElement.value)
        refreshServiceList()

    config.usage.alternative_number_mode.addNotifier(
        alternativeNumberModeChange)

    config.usage.hide_number_markers = ConfigYesNo(default=True)
    config.usage.hide_number_markers.addNotifier(refreshServiceList)

    config.usage.servicetype_icon_mode = ConfigSelection(
        default="0",
        choices=[("0", _("None")), ("1", _("Left from servicename")),
                 ("2", _("Right from servicename"))])
    config.usage.servicetype_icon_mode.addNotifier(refreshServiceList)
    config.usage.crypto_icon_mode = ConfigSelection(
        default="0",
        choices=[("0", _("None")), ("1", _("Left from servicename")),
                 ("2", _("Right from servicename"))])
    config.usage.crypto_icon_mode.addNotifier(refreshServiceList)
    config.usage.record_indicator_mode = ConfigSelection(
        default="0",
        choices=[("0", _("None")), ("1", _("Left from servicename")),
                 ("2", _("Right from servicename")), ("3", _("Red colored"))])
    config.usage.record_indicator_mode.addNotifier(refreshServiceList)

    choicelist = [("-1", _("Devide")), ("0", _("Disable"))]
    for i in range(100, 1300, 100):
        choicelist.append(
            ("%d" % i, ngettext("%d pixel wide", "%d pixels wide", i) % i))
    config.usage.servicelist_column = ConfigSelection(default="0",
                                                      choices=choicelist)
    config.usage.servicelist_column.addNotifier(refreshServiceList)

    config.usage.service_icon_enable = ConfigYesNo(default=False)
    config.usage.service_icon_enable.addNotifier(refreshServiceList)
    config.usage.servicelist_cursor_behavior = ConfigSelection(
        default="standard",
        choices=[("standard", _("Standard")), ("keep", _("Keep service")),
                 ("reverseB", _("Reverse bouquet buttons")),
                 ("keep reverseB",
                  _("Keep service") + " + " + _("Reverse bouquet buttons"))])

    config.usage.multiepg_ask_bouquet = ConfigYesNo(default=False)

    config.usage.quickzap_bouquet_change = ConfigYesNo(default=False)
    config.usage.e1like_radio_mode = ConfigYesNo(default=True)
    choicelist = [("0", _("No timeout"))]
    for i in range(1, 12):
        choicelist.append(
            ("%d" % i, ngettext("%d second", "%d seconds", i) % i))
    config.usage.infobar_timeout = ConfigSelection(default="5",
                                                   choices=choicelist)
    config.usage.show_infobar_on_zap = ConfigYesNo(default=True)
    config.usage.show_infobar_on_skip = ConfigYesNo(default=True)
    config.usage.show_infobar_on_event_change = ConfigYesNo(default=False)
    # [ IQON : require by technomate : by wslee
    #config.usage.show_second_infobar = ConfigSelection(default = None, choices = [(None, _("None"))] + choicelist + [("EPG",_("EPG"))])
    config.usage.show_second_infobar = ConfigSelection(
        default="5",
        choices=[(None, _("None"))] + choicelist + [("EPG", _("EPG"))])
    # IQON : by wslee ]
    config.usage.infobar_frontend_source = ConfigSelection(
        default="tuner",
        choices=[("settings", _("Settings")), ("tuner", _("Tuner"))])
    config.usage.oldstyle_zap_controls = ConfigYesNo(default=False)
    config.usage.oldstyle_channel_select_controls = ConfigYesNo(default=False)
    # [ IQON : default use ch button : by knuth
    config.usage.zap_with_ch_buttons = ConfigYesNo(default=True)
    config.usage.show_dvdplayer = ConfigYesNo(default=True)
    # IQON : by knuth ]
    config.usage.ok_is_channelselection = ConfigYesNo(default=False)
    config.usage.show_spinner = ConfigYesNo(default=True)
    config.usage.enable_tt_caching = ConfigYesNo(default=True)
    choicelist = []
    for i in (10, 30):
        choicelist.append(
            ("%d" % i, ngettext("%d second", "%d seconds", i) % i))
    for i in (60, 120, 300, 600, 1200, 1800):
        m = i / 60
        choicelist.append(
            ("%d" % i, ngettext("%d minute", "%d minutes", m) % m))
    for i in (3600, 7200, 14400):
        h = i / 3600
        choicelist.append(("%d" % i, ngettext("%d hour", "%d hours", h) % h))
    config.usage.hdd_standby = ConfigSelection(
        default="300", choices=[("0", _("No standby"))] + choicelist)
    config.usage.output_12V = ConfigSelection(default="do not change",
                                              choices=[("do not change",
                                                        _("Do not change")),
                                                       ("off", _("Off")),
                                                       ("on", _("On"))])

    config.usage.pip_zero_button = ConfigSelection(
        default="standard",
        choices=[("standard", _("Standard")),
                 ("swap", _("Swap PiP and main picture")),
                 ("swapstop", _("Move PiP to main picture")),
                 ("stop", _("Stop PiP"))])
    config.usage.pip_hideOnExit = ConfigSelection(default="without popup",
                                                  choices=[("no", _("No")),
                                                           ("popup",
                                                            _("With popup")),
                                                           ("without popup",
                                                            _("Without popup"))
                                                           ])
    choicelist = [("-1", _("Disabled")), ("0", _("No timeout"))]
    for i in [60, 300, 600, 900, 1800, 2700, 3600]:
        m = i / 60
        choicelist.append(
            ("%d" % i, ngettext("%d minute", "%d minutes", m) % m))
    config.usage.pip_last_service_timeout = ConfigSelection(default="0",
                                                            choices=choicelist)

    config.usage.default_path = ConfigText(default=resolveFilename(SCOPE_HDD))
    config.usage.timer_path = ConfigText(default="<default>")
    config.usage.instantrec_path = ConfigText(default="<default>")

    from Tools.HardwareInfo import HardwareInfo
    try:
        if HardwareInfo().get_device_name() in ("tmnanose", "force2solid",
                                                "optimussosplus", "force2",
                                                "force2plus", "tmnanosecombo",
                                                "fusionhd"):
            config.usage.timeshift_path = ConfigText(default="/media/usb/")
            config.usage.allowed_timeshift_paths = ConfigLocations(
                default=["/media/usb/"])
        else:
            config.usage.timeshift_path = ConfigText(default="/media/hdd/")
            config.usage.allowed_timeshift_paths = ConfigLocations(
                default=["/media/hdd/"])
    except:
        pass

    config.usage.movielist_trashcan = ConfigYesNo(default=True)
    config.usage.movielist_trashcan_days = ConfigNumber(default=8)
    config.usage.movielist_trashcan_reserve = ConfigNumber(default=40)
    config.usage.on_movie_start = ConfigSelection(
        default="resume",
        choices=[("ask", _("Ask user")),
                 ("resume", _("Resume from last position")),
                 ("beginning", _("Start from the beginning"))])
    config.usage.on_movie_stop = ConfigSelection(
        default="movielist",
        choices=[("ask", _("Ask user")),
                 ("movielist", _("Return to movie list")),
                 ("quit", _("Return to previous service"))])
    config.usage.on_movie_eof = ConfigSelection(
        default="movielist",
        choices=[("ask", _("Ask user")),
                 ("movielist", _("Return to movie list")),
                 ("quit", _("Return to previous service")),
                 ("pause", _("Pause movie at end")),
                 ("playlist", _("Play next (return to movie list)")),
                 ("playlistquit", _("Play next (return to previous service)")),
                 ("loop", _("Continues play (loop)")),
                 ("repeatcurrent", _("Repeat"))])
    config.usage.next_movie_msg = ConfigYesNo(default=True)
    config.usage.last_movie_played = ConfigText()
    config.usage.leave_movieplayer_onExit = ConfigSelection(
        default="popup",
        choices=[("no", _("No")), ("popup", _("With popup")),
                 ("without popup", _("Without popup"))])

    config.usage.setup_level = ConfigSelection(default="expert",
                                               choices=[
                                                   ("simple", _("Simple")),
                                                   ("intermediate",
                                                    _("Intermediate")),
                                                   ("expert", _("Expert"))
                                               ])

    config.usage.startup_to_standby = ConfigYesNo(default=False)

    config.usage.on_long_powerpress = ConfigSelection(
        default="show_menu",
        choices=[("show_menu", _("Show shutdown menu")),
                 ("shutdown", _("Immediate shutdown")),
                 ("standby", _("Standby"))])

    config.usage.on_short_powerpress = ConfigSelection(
        default="standby",
        choices=[("show_menu", _("Show shutdown menu")),
                 ("shutdown", _("Immediate shutdown")),
                 ("standby", _("Standby"))])

    choicelist = [("0", _("Do nothing"))]
    for i in range(3600, 21601, 3600):
        h = abs(i / 3600)
        h = ngettext("%d hour", "%d hours", h) % h
        choicelist.append(("%d" % i, _("Standby in ") + h))
    config.usage.inactivity_timer = ConfigSelection(default="0",
                                                    choices=choicelist)
    config.usage.inactivity_timer_blocktime = ConfigYesNo(default=True)
    config.usage.inactivity_timer_blocktime_begin = ConfigClock(
        default=time.mktime((0, 0, 0, 6, 0, 0, 0, 0, 0)))
    config.usage.inactivity_timer_blocktime_end = ConfigClock(
        default=time.mktime((0, 0, 0, 23, 0, 0, 0, 0, 0)))

    choicelist = [("0", _("Disabled")),
                  ("event_standby", _("Standby after current event"))]
    for i in range(900, 7201, 900):
        m = abs(i / 60)
        m = ngettext("%d minute", "%d minutes", m) % m
        choicelist.append(("%d" % i, _("Standby in ") + m))
    config.usage.sleep_timer = ConfigSelection(default="0", choices=choicelist)

    choicelist = [("0", _("Disabled"))]
    for i in [60, 300, 600] + range(900, 7201, 900):
        m = abs(i / 60)
        m = ngettext("%d minute", "%d minutes", m) % m
        choicelist.append(("%d" % i, _("after ") + m))
    config.usage.standby_to_shutdown_timer = ConfigSelection(
        default="0", choices=choicelist)
    config.usage.standby_to_shutdown_timer_blocktime = ConfigYesNo(
        default=True)
    config.usage.standby_to_shutdown_timer_blocktime_begin = ConfigClock(
        default=time.mktime((0, 0, 0, 6, 0, 0, 0, 0, 0)))
    config.usage.standby_to_shutdown_timer_blocktime_end = ConfigClock(
        default=time.mktime((0, 0, 0, 23, 0, 0, 0, 0, 0)))

    choicelist = [("0", _("Disabled"))]
    for i in (5, 30, 60, 300, 600, 900, 1200, 1800, 2700, 3600):
        if i < 60:
            m = ngettext("%d second", "%d seconds", i) % i
        else:
            m = abs(i / 60)
            m = ngettext("%d minute", "%d minutes", m) % m
        choicelist.append(("%d" % i, m))
    config.usage.screen_saver = ConfigSelection(default="60",
                                                choices=choicelist)

    config.usage.check_timeshift = ConfigYesNo(default=True)

    choicelist = [("0", _("Disabled"))]
    for i in (2, 3, 4, 5, 10, 20, 30):
        choicelist.append(
            ("%d" % i, ngettext("%d second", "%d seconds", i) % i))
    for i in (60, 120, 300):
        m = i / 60
        choicelist.append(
            ("%d" % i, ngettext("%d minute", "%d minutes", m) % m))
    config.usage.timeshift_start_delay = ConfigSelection(default="0",
                                                         choices=choicelist)

    config.usage.alternatives_priority = ConfigSelection(
        default="0",
        choices=[("0", "DVB-S/-C/-T"), ("1", "DVB-S/-T/-C"),
                 ("2", "DVB-C/-S/-T"), ("3", "DVB-C/-T/-S"),
                 ("4", "DVB-T/-C/-S"), ("5", "DVB-T/-S/-C")])

    nims = [("-1", _("auto"))]
    for x in nimmanager.nim_slots:
        nims.append((str(x.slot), x.getSlotName()))
    config.usage.frontend_priority = ConfigSelection(default="-1",
                                                     choices=list(nims))
    nims.insert(0, ("-2", _("Disabled")))
    config.usage.recording_frontend_priority = ConfigSelection(default="-2",
                                                               choices=nims)
    config.misc.disable_background_scan = ConfigYesNo(default=False)

    config.usage.show_event_progress_in_servicelist = ConfigSelection(
        default='barright',
        choices=[('barleft', _("Progress bar left")),
                 ('barright', _("Progress bar right")),
                 ('percleft', _("Percentage left")),
                 ('percright', _("Percentage right")), ('no', _("No"))])
    config.usage.show_channel_numbers_in_servicelist = ConfigYesNo(
        default=True)
    config.usage.show_event_progress_in_servicelist.addNotifier(
        refreshServiceList)
    config.usage.show_channel_numbers_in_servicelist.addNotifier(
        refreshServiceList)

    config.usage.blinking_display_clock_during_recording = ConfigYesNo(
        default=False)

    config.usage.show_message_when_recording_starts = ConfigYesNo(default=True)

    config.usage.load_length_of_movies_in_moviellist = ConfigYesNo(
        default=True)
    config.usage.show_icons_in_movielist = ConfigSelection(
        default='i',
        choices=[
            ('o', _("Off")),
            ('p', _("Progress")),
            ('s', _("Small progress")),
            ('i', _("Icons")),
        ])
    config.usage.movielist_unseen = ConfigYesNo(default=False)

    # [ IQON : snr_on_osd default setting true : by knuth
    #config.usage.swap_snr_on_osd = ConfigYesNo(default = False)
    config.usage.swap_snr_on_osd = ConfigYesNo(default=True)

    # IQON : by knuth ]

    def SpinnerOnOffChanged(configElement):
        setSpinnerOnOff(int(configElement.value))

    config.usage.show_spinner.addNotifier(SpinnerOnOffChanged)

    def EnableTtCachingChanged(configElement):
        setEnableTtCachingOnOff(int(configElement.value))

    config.usage.enable_tt_caching.addNotifier(EnableTtCachingChanged)

    def TunerTypePriorityOrderChanged(configElement):
        setTunerTypePriorityOrder(int(configElement.value))

    config.usage.alternatives_priority.addNotifier(
        TunerTypePriorityOrderChanged, immediate_feedback=False)

    def PreferredTunerChanged(configElement):
        setPreferredTuner(int(configElement.value))

    config.usage.frontend_priority.addNotifier(PreferredTunerChanged)

    config.usage.hide_zap_errors = ConfigYesNo(default=False)
    config.usage.hide_ci_messages = ConfigYesNo(default=False)
    # [ IQON : crypto info default not show : by knuth
    #	config.usage.show_cryptoinfo = ConfigYesNo(default = True)
    config.usage.show_cryptoinfo = ConfigSelection(
        default="emu", choices=["full", "emu", "off"])
    # IQON : by knuth ]
    config.usage.show_eit_nownext = ConfigYesNo(default=True)
    config.usage.show_vcr_scart = ConfigYesNo(default=False)

    if SystemInfo["Fan"]:
        choicelist = [('off', _("Off")), ('on', _("On")), ('auto', _("Auto"))]
        if os.path.exists("/proc/stb/fp/fan_choices"):
            choicelist = [
                x for x in choicelist if x[0] in open(
                    "/proc/stb/fp/fan_choices", "r").read().strip().split(" ")
            ]
        config.usage.fan = ConfigSelection(choicelist)

        def fanChanged(configElement):
            open(SystemInfo["Fan"], "w").write(configElement.value)

        config.usage.fan.addNotifier(fanChanged)

    if SystemInfo["FanPWM"]:

        def fanSpeedChanged(configElement):
            open(SystemInfo["FanPWM"], "w").write(hex(configElement.value)[2:])

        config.usage.fanspeed = ConfigSlider(default=127,
                                             increment=8,
                                             limits=(0, 255))
        config.usage.fanspeed.addNotifier(fanSpeedChanged)

    if SystemInfo["StandbyLED"]:

        def standbyLEDChanged(configElement):
            open(SystemInfo["StandbyLED"],
                 "w").write(configElement.value and "on" or "off")

        config.usage.standbyLED = ConfigYesNo(default=True)
        config.usage.standbyLED.addNotifier(standbyLEDChanged)

    if SystemInfo["WakeOnLAN"]:

        def wakeOnLANChanged(configElement):
            open(SystemInfo["WakeOnLAN"],
                 "w").write(configElement.value and "on" or "off")

        config.usage.wakeOnLAN = ConfigYesNo(default=False)
        config.usage.wakeOnLAN.addNotifier(wakeOnLANChanged)

    config.epg = ConfigSubsection()
    config.epg.eit = ConfigYesNo(default=True)
    config.epg.mhw = ConfigYesNo(default=False)
    config.epg.freesat = ConfigYesNo(default=True)
    config.epg.viasat = ConfigYesNo(default=True)
    config.epg.netmed = ConfigYesNo(default=True)
    config.epg.virgin = ConfigYesNo(default=False)
    config.misc.showradiopic = ConfigYesNo(default=True)

    def EpgSettingsChanged(configElement):
        from enigma import eEPGCache
        mask = 0xffffffff
        if not config.epg.eit.value:
            mask &= ~(eEPGCache.NOWNEXT | eEPGCache.SCHEDULE
                      | eEPGCache.SCHEDULE_OTHER)
        if not config.epg.mhw.value:
            mask &= ~eEPGCache.MHW
        if not config.epg.freesat.value:
            mask &= ~(eEPGCache.FREESAT_NOWNEXT | eEPGCache.FREESAT_SCHEDULE
                      | eEPGCache.FREESAT_SCHEDULE_OTHER)
        if not config.epg.viasat.value:
            mask &= ~eEPGCache.VIASAT
        if not config.epg.netmed.value:
            mask &= ~(eEPGCache.NETMED_SCHEDULE
                      | eEPGCache.NETMED_SCHEDULE_OTHER)
        if not config.epg.virgin.value:
            mask &= ~(eEPGCache.VIRGIN_NOWNEXT | eEPGCache.VIRGIN_SCHEDULE)
        eEPGCache.getInstance().setEpgSources(mask)

    config.epg.eit.addNotifier(EpgSettingsChanged)
    config.epg.mhw.addNotifier(EpgSettingsChanged)
    config.epg.freesat.addNotifier(EpgSettingsChanged)
    config.epg.viasat.addNotifier(EpgSettingsChanged)
    config.epg.netmed.addNotifier(EpgSettingsChanged)
    config.epg.virgin.addNotifier(EpgSettingsChanged)

    config.epg.histminutes = ConfigSelectionNumber(min=0,
                                                   max=120,
                                                   stepwidth=15,
                                                   default=0,
                                                   wraparound=True)

    def EpgHistorySecondsChanged(configElement):
        from enigma import eEPGCache
        eEPGCache.getInstance().setEpgHistorySeconds(
            config.epg.histminutes.getValue() * 60)

    config.epg.histminutes.addNotifier(EpgHistorySecondsChanged)

    def setHDDStandby(configElement):
        for hdd in harddiskmanager.HDDList():
            hdd[1].setIdleTime(int(configElement.value))

    config.usage.hdd_standby.addNotifier(setHDDStandby,
                                         immediate_feedback=False)

    if SystemInfo["12V_Output"]:

        def set12VOutput(configElement):
            Misc_Options.getInstance().set_12V_output(
                configElement.value == "on" and 1 or 0)

        config.usage.output_12V.addNotifier(set12VOutput,
                                            immediate_feedback=False)

    config.usage.keymap = ConfigText(
        default=eEnv.resolve("${datadir}/enigma2/keymap.xml"))

    config.seek = ConfigSubsection()
    config.seek.selfdefined_13 = ConfigNumber(default=15)
    config.seek.selfdefined_46 = ConfigNumber(default=60)
    config.seek.selfdefined_79 = ConfigNumber(default=300)

    config.seek.speeds_forward = ConfigSet(
        default=[2, 4, 8, 16, 32, 64, 128],
        choices=[2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128])
    config.seek.speeds_backward = ConfigSet(
        default=[2, 4, 8, 16, 32, 64, 128],
        choices=[1, 2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128])
    config.seek.speeds_slowmotion = ConfigSet(default=[2, 4, 8],
                                              choices=[2, 4, 6, 8, 12, 16, 25])

    config.seek.enter_forward = ConfigSelection(default="2",
                                                choices=[
                                                    "2", "4", "6", "8", "12",
                                                    "16", "24", "32", "48",
                                                    "64", "96", "128"
                                                ])
    config.seek.enter_backward = ConfigSelection(default="1",
                                                 choices=[
                                                     "1", "2", "4", "6", "8",
                                                     "12", "16", "24", "32",
                                                     "48", "64", "96", "128"
                                                 ])

    config.seek.on_pause = ConfigSelection(default="play",
                                           choices=[("play", _("Play")),
                                                    ("step",
                                                     _("Single step (GOP)")),
                                                    ("last", _("Last speed"))])

    config.crash = ConfigSubsection()
    config.crash.details = ConfigYesNo(default=False)
    config.usage.timerlist_finished_timer_position = ConfigSelection(
        default="end",
        choices=[("beginning", _("At beginning")), ("end", _("At end"))])

    def updateEnterForward(configElement):
        if not configElement.value:
            configElement.value = [2]
        updateChoices(config.seek.enter_forward, configElement.value)

    config.seek.speeds_forward.addNotifier(updateEnterForward,
                                           immediate_feedback=False)

    def updateEnterBackward(configElement):
        if not configElement.value:
            configElement.value = [2]
        updateChoices(config.seek.enter_backward, configElement.value)

    config.seek.speeds_backward.addNotifier(updateEnterBackward,
                                            immediate_feedback=False)

    def updateEraseSpeed(el):
        eBackgroundFileEraser.getInstance().setEraseSpeed(int(el.value))

    def updateEraseFlags(el):
        eBackgroundFileEraser.getInstance().setEraseFlags(int(el.value))

    config.misc.erase_speed = ConfigSelection(default="20",
                                              choices=[("10", "10 MB/s"),
                                                       ("20", "20 MB/s"),
                                                       ("50", "50 MB/s"),
                                                       ("100", "100 MB/s")])
    config.misc.erase_speed.addNotifier(updateEraseSpeed,
                                        immediate_feedback=False)
    config.misc.erase_flags = ConfigSelection(default="1",
                                              choices=[
                                                  ("0", _("Disable")),
                                                  ("1",
                                                   _("Internal hdd only")),
                                                  ("3", _("Everywhere"))
                                              ])
    config.misc.erase_flags.addNotifier(updateEraseFlags,
                                        immediate_feedback=False)

    if SystemInfo["ZapMode"]:

        def setZapmode(el):
            open(SystemInfo["ZapMode"], "w").write(el.value)

        config.misc.zapmode = ConfigSelection(
            default="mute",
            choices=[("mute", _("Black screen")), ("hold", _("Hold screen")),
                     ("mutetilllock", _("Black screen till locked")),
                     ("holdtilllock", _("Hold till locked"))])
        config.misc.zapmode.addNotifier(setZapmode, immediate_feedback=False)

    config.subtitles = ConfigSubsection()
    config.subtitles.ttx_subtitle_colors = ConfigSelection(
        default="1",
        choices=[("0", _("original")), ("1", _("white")), ("2", _("yellow"))])
    config.subtitles.ttx_subtitle_original_position = ConfigYesNo(
        default=False)
    config.subtitles.subtitle_position = ConfigSelection(choices=[
        "0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100",
        "150", "200", "250", "300", "350", "400", "450"
    ],
                                                         default="50")
    config.subtitles.subtitle_alignment = ConfigSelection(choices=[
        ("left", _("left")), ("center", _("center")), ("right", _("right"))
    ],
                                                          default="center")
    config.subtitles.subtitle_rewrap = ConfigYesNo(default=False)
    config.subtitles.subtitle_borderwidth = ConfigSelection(
        choices=["1", "2", "3", "4", "5"], default="3")
    config.subtitles.subtitle_fontsize = ConfigSelection(choices=[
        "16", "18", "20", "22", "24", "26", "28", "30", "32", "34", "36", "38",
        "40", "42", "44", "46", "48", "50", "52", "54"
    ],
                                                         default="34")

    subtitle_delay_choicelist = []
    for i in range(-900000, 1845000, 45000):
        if i == 0:
            subtitle_delay_choicelist.append(("0", _("No delay")))
        else:
            subtitle_delay_choicelist.append(
                ("%d" % i, "%2.1f sec" % (i / 90000.)))
    config.subtitles.subtitle_noPTSrecordingdelay = ConfigSelection(
        default="315000", choices=subtitle_delay_choicelist)

    config.subtitles.dvb_subtitles_yellow = ConfigYesNo(default=False)
    config.subtitles.dvb_subtitles_original_position = ConfigSelection(
        default="0",
        choices=[("0", _("Original")), ("1", _("Fixed")),
                 ("2", _("Relative"))])
    config.subtitles.dvb_subtitles_centered = ConfigYesNo(default=True)
    config.subtitles.subtitle_bad_timing_delay = ConfigSelection(
        default="0", choices=subtitle_delay_choicelist)
    config.subtitles.dvb_subtitles_backtrans = ConfigSelection(
        default="0",
        choices=[("0", _("No transparency")), ("25", "10%"), ("50", "20%"),
                 ("75", "30%"), ("100", "40%"), ("125", "50%"), ("150", "60%"),
                 ("175", "70%"), ("200", "80%"), ("225", "90%"),
                 ("255", _("Full transparency"))])
    config.subtitles.pango_subtitle_colors = ConfigSelection(
        default="0",
        choices=[("0", _("alternative")), ("1", _("white")),
                 ("2", _("yellow"))])
    config.subtitles.pango_subtitles_delay = ConfigSelection(
        default="0", choices=subtitle_delay_choicelist)
    config.subtitles.pango_subtitles_fps = ConfigSelection(
        default="1",
        choices=[("1", _("Original")), ("23976", _("23.976")),
                 ("24000", _("24")), ("25000", _("25")), ("29970", _("29.97")),
                 ("30000", _("30"))])
    config.subtitles.pango_autoturnon = ConfigYesNo(default=True)

    config.autolanguage = ConfigSubsection()
    audio_language_choices = [
        ("---", _("None")),
        ("orj dos ory org esl qaa und mis mul ORY ORJ Audio_ORJ",
         _("Original")), ("ara", _("Arabic")), ("eus baq", _("Basque")),
        ("bul", _("Bulgarian")),
        ("hrv", _("Croatian")), ("ces cze", _("Czech")), ("dan", _("Danish")),
        ("dut ndl", _("Dutch")), ("eng qaa", _("English")),
        ("est", _("Estonian")), ("fin", _("Finnish")),
        ("fra fre", _("French")), ("deu ger", _("German")),
        ("ell gre", _("Greek")), ("heb", _("Hebrew")), ("hun", _("Hungarian")),
        ("ita", _("Italian")), ("lav", _("Latvian")), ("lit", _("Lithuanian")),
        ("ltz", _("Luxembourgish")), ("nor", _("Norwegian")),
        ("pol", _("Polish")), ("por", _("Portuguese")),
        ("fas per", _("Persian")), ("ron rum", _("Romanian")),
        ("rus", _("Russian")), ("srp", _("Serbian")), ("slk slo", _("Slovak")),
        ("slv", _("Slovenian")), ("spa", _("Spanish")), ("swe", _("Swedish")),
        ("tha", _("Thai")), ("tur Audio_TUR", _("Turkish"))
    ]

    def setEpgLanguage(configElement):
        eServiceEvent.setEPGLanguage(configElement.value)


#	config.autolanguage.audio_epglanguage = ConfigSelection(audio_language_choices[:1] + audio_language_choices [2:], default="---")

    config.autolanguage.audio_epglanguage = ConfigSelection(
        audio_language_choices[:1] + audio_language_choices[2:],
        default="eng qaa")  # [iq]
    config.autolanguage.audio_epglanguage.addNotifier(setEpgLanguage)

    def setEpgLanguageAlternative(configElement):
        eServiceEvent.setEPGLanguageAlternative(configElement.value)

    config.autolanguage.audio_epglanguage_alternative = ConfigSelection(
        audio_language_choices[:1] + audio_language_choices[2:], default="---")
    config.autolanguage.audio_epglanguage_alternative.addNotifier(
        setEpgLanguageAlternative)
    # [ IQON : default language eng : by knuth
    #	config.autolanguage.audio_autoselect1 = ConfigSelection(choices=audio_language_choices, default="---")
    config.autolanguage.audio_autoselect1 = ConfigSelection(
        choices=audio_language_choices, default="eng qaa")  # [iq]
    config.autolanguage.audio_autoselect2 = ConfigSelection(
        choices=audio_language_choices, default="---")
    config.autolanguage.audio_autoselect3 = ConfigSelection(
        choices=audio_language_choices, default="---")
    config.autolanguage.audio_autoselect4 = ConfigSelection(
        choices=audio_language_choices, default="---")
    config.autolanguage.audio_defaultac3 = ConfigYesNo(default=True)  # [iq]
    #	config.autolanguage.audio_defaultac3 = ConfigYesNo(default = False)		# [iq]
    config.autolanguage.audio_defaultddp = ConfigYesNo(default=False)
    config.autolanguage.audio_usecache = ConfigYesNo(default=True)

    subtitle_language_choices = audio_language_choices[:
                                                       1] + audio_language_choices[
                                                           2:]
    #	config.autolanguage.subtitle_autoselect1 = ConfigSelection(choices=subtitle_language_choices, default="---")
    config.autolanguage.subtitle_autoselect1 = ConfigSelection(
        choices=subtitle_language_choices, default="eng qaa")  # [iq]
    config.autolanguage.subtitle_autoselect2 = ConfigSelection(
        choices=subtitle_language_choices, default="---")
    config.autolanguage.subtitle_autoselect3 = ConfigSelection(
        choices=subtitle_language_choices, default="---")
    config.autolanguage.subtitle_autoselect4 = ConfigSelection(
        choices=subtitle_language_choices, default="---")
    config.autolanguage.subtitle_hearingimpaired = ConfigYesNo(default=False)
    config.autolanguage.subtitle_defaultimpaired = ConfigYesNo(default=False)
    config.autolanguage.subtitle_defaultdvb = ConfigYesNo(default=False)
    config.autolanguage.subtitle_usecache = ConfigYesNo(default=True)
    #	config.autolanguage.equal_languages = ConfigSelection(default = "15", choices = [
    config.autolanguage.equal_languages = ConfigSelection(
        default="0",
        choices=[  # [iq]
            ("0", _("None")), ("1", "1"), ("2", "2"), ("3", "1,2"), ("4", "3"),
            ("5", "1,3"), ("6", "2,3"), ("7", "1,2,3"), ("8", "4"),
            ("9", "1,4"), ("10", "2,4"), ("11", "1,2,4"), ("12", "3,4"),
            ("13", "1,3,4"), ("14", "2,3,4"), ("15", _("All"))
        ])
    # IQON : by knuth ]

    # [ IQON : fan controller default setup : by knuth
    config.fan_config = ConfigSubsection()
    config.fan_config.offset = ConfigNumber(default=0)
    config.fan_config.default = ConfigNumber(default=5)
    config.fan_config.increment = ConfigNumber(default=5)
    config.fan_config.configured = ConfigYesNo(default=False)
    # IQON : by knuth ]
    # [ IQON : default vfd scroll and try_cooltvguide : by knuth
    config.vfd_scroll = ConfigYesNo(default=True)

    config.usage.try_cooltvguide = ConfigYesNo(default=True)  # [iq]
    # IQON : by knuth ]
    config.streaming = ConfigSubsection()
    config.streaming.stream_ecm = ConfigYesNo(default=False)
    config.streaming.descramble = ConfigYesNo(default=True)
    config.streaming.stream_eit = ConfigYesNo(default=True)
    config.streaming.stream_ait = ConfigYesNo(default=True)
    config.streaming.authentication = ConfigYesNo(default=False)
示例#12
0
    return len(CamControl('softcam').getList()) > 1


SystemInfo["HasSoftcamInstalled"] = hassoftcaminstalled()
SystemInfo["NumVideoDecoders"] = getNumVideoDecoders()
SystemInfo["PIPAvailable"] = SystemInfo["NumVideoDecoders"] > 1
SystemInfo["CanMeasureFrontendInputPower"] = eDVBResourceManager.getInstance(
).canMeasureFrontendInputPower()
SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output()
SystemInfo["ZapMode"] = fileCheck("/proc/stb/video/zapmode") or fileCheck(
    "/proc/stb/video/zapping_mode")
SystemInfo["NumFrontpanelLEDs"] = countFrontpanelLEDs()
SystemInfo["FrontpanelDisplay"] = fileExists("/dev/dbox/oled0") or fileExists(
    "/dev/dbox/lcd0")
SystemInfo["LCDsymbol_circle_recording"] = fileCheck(
    "/proc/stb/lcd/symbol_circle") or HardwareInfo().get_device_model() in (
        "hd51", "vs1500") and fileCheck("/proc/stb/lcd/symbol_recording")
SystemInfo["LCDsymbol_timeshift"] = fileCheck("/proc/stb/lcd/symbol_timeshift")
SystemInfo["LCDshow_symbols"] = (
    HardwareInfo().get_device_model().startswith("et9")
    or HardwareInfo().get_device_model()
    in ("hd51", "vs1500")) and fileCheck("/proc/stb/lcd/show_symbols")
SystemInfo["LCDsymbol_hdd"] = HardwareInfo().get_device_model() in (
    "hd51", "vs1500") and fileCheck("/proc/stb/lcd/symbol_hdd")
SystemInfo["FrontpanelDisplayGrayscale"] = fileExists("/dev/dbox/oled0")
SystemInfo["DeepstandbySupport"] = HardwareInfo().get_device_name() != "dm800"
SystemInfo["Fan"] = fileCheck("/proc/stb/fp/fan")
SystemInfo["FanPWM"] = SystemInfo["Fan"] and fileCheck("/proc/stb/fp/fan_pwm")
SystemInfo["StandbyLED"] = fileCheck("/proc/stb/power/standbyled")
SystemInfo["PowerOffDisplay"] = HardwareInfo().get_device_model(
) not in "formuler1" and fileCheck("/proc/stb/power/vfd") or fileCheck(
示例#13
0
class AVSwitch:
    hw_type = HardwareInfo().get_device_name()
    rates = {}  # high-level, use selectable modes.
    modes = {}  # a list of (high-level) modes for a certain port.

    rates["PAL"] = {
        "50Hz": {
            50: "pal"
        },
        "60Hz": {
            60: "pal60"
        },
        "multi": {
            50: "pal",
            60: "pal60"
        }
    }

    rates["NTSC"] = {"60Hz": {60: "ntsc"}}

    rates["Multi"] = {"multi": {50: "pal", 60: "ntsc"}}

    rates["480i"] = {"60Hz": {60: "480i"}}

    rates["576i"] = {"50Hz": {50: "576i"}}

    rates["480p"] = {"60Hz": {60: "480p"}}

    rates["576p"] = {"50Hz": {50: "576p"}}

    rates["720p"] = {
        "50Hz": {
            50: "720p50"
        },
        "60Hz": {
            60: "720p"
        },
        "multi": {
            50: "720p50",
            60: "720p"
        }
    }

    rates["1080i"] = {
        "50Hz": {
            50: "1080i50"
        },
        "60Hz": {
            60: "1080i"
        },
        "multi": {
            50: "1080i50",
            60: "1080i"
        }
    }

    rates["1080p"] = {
        "50Hz": {
            50: "1080p50"
        },
        "60Hz": {
            60: "1080p"
        },
        "multi": {
            50: "1080p50",
            60: "1080p"
        }
    }

    rates["PC"] = {
        "1024x768": {
            60: "1024x768"
        },  # not possible on DM7025
        "800x600": {
            60: "800x600"
        },  # also not possible
        "720x480": {
            60: "720x480"
        },
        "720x576": {
            60: "720x576"
        },
        "1280x720": {
            60: "1280x720"
        },
        "1280x720 multi": {
            50: "1280x720_50",
            60: "1280x720"
        },
        "1920x1080": {
            60: "1920x1080"
        },
        "1920x1080 multi": {
            50: "1920x1080",
            60: "1920x1080_50"
        },
        "1280x1024": {
            60: "1280x1024"
        },
        "1366x768": {
            60: "1366x768"
        },
        "1366x768 multi": {
            50: "1366x768",
            60: "1366x768_50"
        },
        "1280x768": {
            60: "1280x768"
        },
        "640x480": {
            60: "640x480"
        }
    }

    modes["Scart"] = ["PAL", "NTSC", "Multi"]
    # modes["DVI-PC"] = ["PC"]

    if hw_type in ('elite', 'premium', 'premium+', 'ultra', "me", "minime"):
        config.av.edid_override = True

    if (about.getChipSetString()
            in ('7241', '7358', '7362', '7346', '7356', '7424', '7425', '7435',
                'pnx8493', '7162',
                '7111')) or (hw_type in ('elite', 'premium', 'premium+',
                                         'ultra', "me", "minime")):
        modes["HDMI"] = [
            "720p", "1080p", "1080i", "576p", "576i", "480p", "480i"
        ]
        widescreen_modes = {"720p", "1080p", "1080i"}
    else:
        modes["HDMI"] = ["720p", "1080i", "576p", "576i", "480p", "480i"]
        widescreen_modes = {"720p", "1080i"}

    modes["YPbPr"] = modes["HDMI"]
    if getBrandOEM() == 'vuplus':
        modes["Scart-YPbPr"] = modes["HDMI"]

    # if modes.has_key("DVI-PC") and not getModeList("DVI-PC"):
    # 	print "remove DVI-PC because of not existing modes"
    # 	del modes["DVI-PC"]
    if modes.has_key("YPbPr") and getBoxType() in (
            'force2solid', 'zgemmash1', 'zgemmas2s', 'mago', 'enibox',
            'mutant1100', 'et4x00', 'et7500', 'et7000', 'et8500', 'xp1000mk',
            'xp1000max', 'xp1000plus', 'sf8', 'tm2t', 'tmsingle', 'vusolo2',
            'tmnano', 'iqonios300hd', 'iqonios300hdv2', 'classm', 'axodin',
            'axodinc', 'genius', 'evo', 'galaxym6', 'geniuse3hd', 'evoe3hd',
            'axase3', 'axase3c', 'dm500hdv2', 'dm500hd', 'dm800', 'mixosf7',
            'mixoslumi', 'mixosf5mini', 'gi9196lite', 'ixusszero',
            'optimussos1', 'enfinity', 'marvel1', 'bre2ze', 'sezam1000hd',
            'mbmini', 'atemio5x00', 'xpeedlx1', 'xpeedlx2', 'vusolose',
            'gbipbox', 'formuler3', 'optimussos3plus', 'force1plus',
            'vuzero') or (about.getModelString() == 'ini-3000'):
        del modes["YPbPr"]
    if modes.has_key("Scart") and getBoxType() in ('force2solid', 'optimussos',
                                                   'vuzero'):
        del modes["Scart"]

    if getBoxType() == 'vuzero':
        del modes["Scart-YPbPr"]

    def __init__(self):
        self.last_modes_preferred = []
        self.on_hotplug = CList()
        self.current_mode = None
        self.current_port = None

        self.readAvailableModes()

        self.createConfig()
        self.readPreferredModes()

    def readAvailableModes(self):
        try:
            f = open("/proc/stb/video/videomode_choices")
            modes = f.read()[:-1]
            f.close()
        except IOError:
            print "couldn't read available videomodes."
            self.modes_available = []
            return
        self.modes_available = modes.split(' ')

    def readPreferredModes(self):
        try:
            f = open("/proc/stb/video/videomode_preferred")
            modes = f.read()[:-1]
            f.close()
            self.modes_preferred = modes.split(' ')
        except IOError:
            print "reading preferred modes failed, using all modes"
            self.modes_preferred = self.modes_available

        if self.modes_preferred != self.last_modes_preferred:
            self.last_modes_preferred = self.modes_preferred
            self.on_hotplug("HDMI")  # must be HDMI

    # check if a high-level mode with a given rate is available.
    def isModeAvailable(self, port, mode, rate):
        rate = self.rates[mode][rate]
        for mode in rate.values():
            if port == "DVI":
                if hw_type in ('elite', 'premium', 'premium+', 'ultra', "me",
                               "minime"):
                    if mode not in self.modes_preferred and not config.av.edid_override.value:
                        print "no, not preferred"
                        return False
            if mode not in self.modes_available:
                return False
        return True

    def isWidescreenMode(self, port, mode):
        return mode in self.widescreen_modes

    def setMode(self, port, mode, rate, force=None):
        print "[VideoMode] setMode - port: %s, mode: %s, rate: %s" % (
            port, mode, rate)

        # config.av.videoport.setValue(port)
        # we can ignore "port"
        self.current_mode = mode
        self.current_port = port
        modes = self.rates[mode][rate]

        mode_50 = modes.get(50)
        mode_60 = modes.get(60)
        if mode_50 is None or force == 60:
            mode_50 = mode_60
        if mode_60 is None or force == 50:
            mode_60 = mode_50

        mode_etc = None
        if os.path.exists('/proc/stb/video/videomode_50hz') and getBoxType(
        ) not in ('gb800solo', 'gb800se', 'gb800ue'):
            f = open("/proc/stb/video/videomode_50hz", "w")
            f.write(mode_50)
            f.close()
        if os.path.exists('/proc/stb/video/videomode_60hz') and getBoxType(
        ) not in ('gb800solo', 'gb800se', 'gb800ue'):
            try:
                f = open("/proc/stb/video/videomode_60hz", "w")
                f.write(mode_60)
                f.close()
            except IOError:
                print "setting videomode failed."
        try:
            mode_etc = modes.get(int(rate[:2]))
            f = open("/proc/stb/video/videomode", "w")
            f.write(mode_etc)
            f.close()
        except:  # not support 50Hz, 60Hz for 1080p
            try:
                # fallback if no possibility to setup 50/60 hz mode
                f = open("/proc/stb/video/videomode", "w")
                f.write(mode_50)
                f.close()
            except IOError:
                print "setting videomode failed."

        map = {"cvbs": 0, "rgb": 1, "svideo": 2, "yuv": 3}
        self.setColorFormat(map[config.av.colorformat.value])

    def saveMode(self, port, mode, rate):
        config.av.videoport.setValue(port)
        config.av.videoport.save()
        if port in config.av.videomode:
            config.av.videomode[port].setValue(mode)
            config.av.videomode[port].save()
        if mode in config.av.videorate:
            config.av.videorate[mode].setValue(rate)
            config.av.videorate[mode].save()

    def isPortAvailable(self, port):
        # fixme
        return True

    def isPortUsed(self, port):
        if port == "HDMI":
            self.readPreferredModes()
            return len(self.modes_preferred) != 0
        else:
            return True

    def getPortList(self):
        return [port for port in self.modes if self.isPortAvailable(port)]

    # get a list with all modes, with all rates, for a given port.
    def getModeList(self, port):
        res = []
        for mode in self.modes[port]:
            # list all rates which are completely valid
            rates = [
                rate for rate in self.rates[mode]
                if self.isModeAvailable(port, mode, rate)
            ]

            # if at least one rate is ok, add this mode
            if len(rates):
                res.append((mode, rates))
        return res

    def createConfig(self, *args):
        hw_type = HardwareInfo().get_device_name()
        has_hdmi = HardwareInfo().has_hdmi()
        lst = []

        config.av.videomode = ConfigSubDict()
        config.av.videorate = ConfigSubDict()

        # create list of output ports
        portlist = self.getPortList()
        for port in portlist:
            descr = port
            if 'HDMI' in port:
                lst.insert(0, (port, descr))
            else:
                lst.append((port, descr))

            modes = self.getModeList(port)
            if len(modes):
                config.av.videomode[port] = ConfigSelection(
                    choices=[mode for (mode, rates) in modes])
            for (mode, rates) in modes:
                config.av.videorate[mode] = ConfigSelection(choices=rates)
        config.av.videoport = ConfigSelection(choices=lst)

    def setInput(self, input):
        INPUT = {"ENCODER": 0, "SCART": 1, "AUX": 2}
        eAVSwitch.getInstance().setInput(INPUT[input])

    def setColorFormat(self, value):
        if not self.current_port:
            self.current_port = config.av.videoport.value
        if self.current_port in ("YPbPr", "Scart-YPbPr"):
            eAVSwitch.getInstance().setColorFormat(3)
        else:
            eAVSwitch.getInstance().setColorFormat(value)

    def setConfiguredMode(self):
        port = config.av.videoport.value
        if port not in config.av.videomode:
            print "current port not available, not setting videomode"
            return

        mode = config.av.videomode[port].value

        if mode not in config.av.videorate:
            print "current mode not available, not setting videomode"
            return

        rate = config.av.videorate[mode].value
        self.setMode(port, mode, rate)

    def setAspect(self, cfgelement):
        print "[VideoMode] setting aspect: %s" % cfgelement.value
        f = open("/proc/stb/video/aspect", "w")
        f.write(cfgelement.value)
        f.close()

    def setWss(self, cfgelement):
        if not cfgelement.value:
            wss = "auto(4:3_off)"
        else:
            wss = "auto"
        if os.path.exists("/proc/stb/denc/0/wss"):
            print "[VideoMode] setting wss: %s" % wss
            f = open("/proc/stb/denc/0/wss", "w")
            f.write(wss)
            f.close()

    def setPolicy43(self, cfgelement):
        print "[VideoMode] setting policy: %s" % cfgelement.value
        f = open("/proc/stb/video/policy", "w")
        f.write(cfgelement.value)
        f.close()

    def setPolicy169(self, cfgelement):
        if os.path.exists("/proc/stb/video/policy2"):
            print "[VideoMode] setting policy2: %s" % cfgelement.value
            f = open("/proc/stb/video/policy2", "w")
            f.write(cfgelement.value)
            f.close()

    def getOutputAspect(self):
        ret = (16, 9)
        port = config.av.videoport.value
        if port not in config.av.videomode:
            print "current port not available in getOutputAspect!!! force 16:9"
        else:
            mode = config.av.videomode[port].value
            force_widescreen = self.isWidescreenMode(port, mode)
            is_widescreen = force_widescreen or config.av.aspect.value in (
                "16:9", "16:10")
            is_auto = config.av.aspect.value == "auto"
            if is_widescreen:
                if force_widescreen:
                    pass
                else:
                    aspect = {
                        "16:9": "16:9",
                        "16:10": "16:10"
                    }[config.av.aspect.value]
                    if aspect == "16:10":
                        ret = (16, 10)
            elif is_auto:
                try:
                    aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read()
                    if aspect_str == "1":  # 4:3
                        ret = (4, 3)
                except IOError:
                    pass
            else:  # 4:3
                ret = (4, 3)
        return ret

    def getFramebufferScale(self):
        aspect = self.getOutputAspect()
        fb_size = getDesktop(0).size()
        return aspect[0] * fb_size.height(), aspect[1] * fb_size.width()

    def setAspectRatio(self, value):
        pass

    def getAspectRatioSetting(self):
        valstr = config.av.aspectratio.value
        if valstr == "4_3_letterbox":
            val = 0
        elif valstr == "4_3_panscan":
            val = 1
        elif valstr == "16_9":
            val = 2
        elif valstr == "16_9_always":
            val = 3
        elif valstr == "16_10_letterbox":
            val = 4
        elif valstr == "16_10_panscan":
            val = 5
        elif valstr == "16_9_letterbox":
            val = 6
        return val
示例#14
0
class AVSwitch:
	hw_type = HardwareInfo().get_device_name()
	rates = { } # high-level, use selectable modes.
	modes = { }  # a list of (high-level) modes for a certain port.

	rates["PAL"] =		{	"50Hz":		{ 50: "pal" },
							"60Hz":		{ 60: "pal60" },
							"multi":	{ 50: "pal", 60: "pal60" } }

	rates["NTSC"] =		{	"60Hz":		{ 60: "ntsc" } }

	rates["Multi"] =	{	"multi":	{ 50: "pal", 60: "ntsc" } }

	rates["480i"] =		{	"60Hz":		{ 60: "480i" } }

	rates["576i"] =		{	"50Hz":		{ 50: "576i" } }

	rates["480p"] =		{	"60Hz":		{ 60: "480p" } }

	rates["576p"] =		{	"50Hz":		{ 50: "576p" } }

	rates["720p"] =		{	"50Hz":		{ 50: "720p50" },
							"60Hz":		{ 60: "720p" },
							"multi":	{ 50: "720p50", 60: "720p" },
							"auto":		{ 50: "720p50", 60: "720p", 24: "720p24" } }

	rates["1080i"] =	{	"50Hz":		{ 50: "1080i50" },
							"60Hz":		{ 60: "1080i" },
							"multi":	{ 50: "1080i50", 60: "1080i" },
							"auto":		{ 50: "1080i50", 60: "1080i", 24: "1080p24" } }

	rates["1080p"] =	{ 	"50Hz":		{ 50: "1080p50" },
							"60Hz":		{ 60: "1080p" },
							"multi":	{ 50: "1080p50", 60: "1080p" },
							"auto":		{ 50: "1080p50", 60: "1080p", 24: "1080p24" } }

	if getBoxType().startswith('dm9'):
		rates["2160p"] =	{ 	"50Hz":		{ 50: "2160p50" },
								"60Hz":		{ 60: "2160p60" },
								"multi":	{ 50: "2160p50", 60: "2160p60" },
								"auto":		{ 50: "2160p50", 60: "2160p60", 24: "2160p24" } }
	else:
		rates["2160p"] =	{ 	"50Hz":		{ 50: "2160p50" },
								"60Hz":		{ 60: "2160p" },
								"multi":	{ 50: "2160p50", 60: "2160p" },
								"auto":		{ 50: "2160p50", 60: "2160p", 24: "2160p24" } }

	rates["2160p30"] =	{ 	"25Hz":		{ 50: "2160p25" },
							"30Hz":		{ 60: "2160p30"} ,
							"multi":	{ 50: "2160p25", 60: "2160p30" },
							"auto":		{ 50: "2160p25", 60: "2160p30", 24: "2160p24" } }

	rates["PC"] = {
		"1024x768":						{ 60: "1024x768" }, # not possible on DM7025
		"800x600" :						{ 60: "800x600" },  # also not possible
		"720x480" :						{ 60: "720x480" },
		"720x576" :						{ 60: "720x576" },
		"1280x720":						{ 60: "1280x720" },
		"1280x720 multi":				{ 50: "1280x720_50", 60: "1280x720" },
		"1920x1080":					{ 60: "1920x1080"},
		"1920x1080 multi":				{ 50: "1920x1080", 60: "1920x1080_50" },
		"1280x1024":					{ 60: "1280x1024"},
		"1366x768" :					{ 60: "1366x768"},
		"1366x768 multi":				{ 50: "1366x768", 60: "1366x768_50" },
		"1280x768":						{ 60: "1280x768" },
		"640x480" :						{ 60: "640x480" }
	}

	modes["Scart"] = ["PAL", "NTSC", "Multi"]
	# modes["DVI-PC"] = ["PC"]

	if (about.getChipSetString() in ('7366', '7376', '5272s', '7444', '7445', '7445s')):
		modes["HDMI"] = ["720p", "1080p", "2160p", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080p", "1080i", "2160p"}
	elif (about.getChipSetString() in ('7252', '7251', '7251S', '7252S', '7251s', '7252s', '72604', '7278', '7444s', '3798mv200', '3798cv200', 'hi3798mv200', 'hi3798cv200')):
		modes["HDMI"] = ["720p", "1080p", "2160p", "2160p30", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080p", "1080i", "2160p", "2160p30"}
	elif (about.getChipSetString() in ('7241', '7358', '7362', '73625', '7346', '7356', '73565', '7424', '7425', '7435', '7552', '7581', '7584', '75845', '7585', 'pnx8493', '7162', '7111', '3716mv410', 'hi3716mv410', 'hi3716mv430')) or (getBrandOEM() in ('azbox')):
		modes["HDMI"] = ["720p", "1080p", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080p", "1080i"}
	elif about.getChipSetString() in ('meson-6',):
		modes["HDMI"] = ["720p", "1080p", "1080i"]
		widescreen_modes = {"720p", "1080p", "1080i"}
	elif about.getChipSetString() in ('meson-64','S905D'):
		modes["HDMI"] = ["720p", "1080p", "2160p", "2160p30", "1080i"]
		widescreen_modes = {"720p", "1080p", "1080i", "2160p", "2160p30"}
	else:
		modes["HDMI"] = ["720p", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080i"}

	modes["YPbPr"] = modes["HDMI"]
	if has_scartyuv:
		modes["Scart-YPbPr"] = modes["HDMI"]

	# if modes.has_key("DVI-PC") and not getModeList("DVI-PC"):
	# 	print "[AVSwitch] remove DVI-PC because of not existing modes"
	# 	del modes["DVI-PC"]
	if modes.has_key("YPbPr") and not has_yuv:
		del modes["YPbPr"]
	if modes.has_key("Scart") and not has_scart and not has_rca and not has_avjack:
			del modes["Scart"]
		
	if getBoxType() in ('mutant2400',):
		f = open("/proc/stb/info/board_revision", "r").read()
		if f >= "2":
			del modes["YPbPr"]

	def __init__(self):
		self.last_modes_preferred =  [ ]
		self.on_hotplug = CList()
		self.current_mode = None
		self.current_port = None

		self.readAvailableModes()
		self.is24hzAvailable()

		self.readPreferredModes()
		self.createConfig()


	def readAvailableModes(self):
		try:
			f = open("/proc/stb/video/videomode_choices")
			modes = f.read()[:-1]
			f.close()
		except IOError:
			print "[AVSwitch] couldn't read available videomodes."
			modes = [ ]
			return modes
		return modes.split(' ')

	def readPreferredModes(self):
		if config.av.edid_override.value == False:
			try:
				f = open("/proc/stb/video/videomode_edid")
				modes = f.read()[:-1]
				f.close()
				self.modes_preferred = modes.split(' ')
				print "[AVSwitch] reading edid modes: ", self.modes_preferred
			except IOError:
				print "[AVSwitch] reading edid modes failed, using all modes"
				try:
					f = open("/proc/stb/video/videomode_preferred")
					modes = f.read()[:-1]
					f.close()
					self.modes_preferred = modes.split(' ')
					print "[AVSwitch] reading _preferred modes: ", self.modes_preferred
				except IOError:
					print "[AVSwitch] reading preferred modes failed, using all modes"
					self.modes_preferred = self.readAvailableModes()
		else:
			self.modes_preferred = self.readAvailableModes()
			print "[AVSwitch] used default modes: ", self.modes_preferred
			
		if len(self.modes_preferred) <= 2:
			print "[AVSwitch] preferend modes not ok, possible driver failer, len=", len(self.modes_preferred)
			self.modes_preferred = self.readAvailableModes()

		if self.modes_preferred != self.last_modes_preferred:
			self.last_modes_preferred = self.modes_preferred
			self.on_hotplug("HDMI") # must be HDMI

	def is24hzAvailable(self):
		try:
			self.has24pAvailable = os.access("/proc/stb/video/videomode_24hz", os.W_OK) and True or False
		except IOError:
			print "[AVSwitch] failed to read video choices 24hz ."
			self.has24pAvailable = False
		SystemInfo["have24hz"] = self.has24pAvailable

	# check if a high-level mode with a given rate is available.
	def isModeAvailable(self, port, mode, rate):
		rate = self.rates[mode][rate]
		for mode in rate.values():
			if port == "DVI":
				if getBrandOEM() in ('azbox',):
					if mode not in self.modes_preferred and not config.av.edid_override.value:
						print "[AVSwitch] no, not preferred"
						return False
			if port != "HDMI":
				if mode not in self.readAvailableModes():
					return False
			elif mode not in self.modes_preferred:
				return False
		return True

	def isWidescreenMode(self, port, mode):
		return mode in self.widescreen_modes

	def setMode(self, port, mode, rate, force = None):
		print "[AVSwitch] setMode - port: %s, mode: %s, rate: %s" % (port, mode, rate)

		# config.av.videoport.setValue(port)
		# we can ignore "port"
		self.current_mode = mode
		self.current_port = port
		modes = self.rates[mode][rate]


		mode_50 = modes.get(50)
		mode_60 = modes.get(60)
		mode_24 = modes.get(24)

		if mode_50 is None or force == 60:
			mode_50 = mode_60
		if mode_60 is None or force == 50:
			mode_60 = mode_50
		if mode_24 is None or force:
			mode_24 = mode_60
			if force == 50:
				mode_24 = mode_50

		try:
			f = open("/proc/stb/video/videomode_50hz", "w")
			f.write(mode_50)
			f.close()
			f = open("/proc/stb/video/videomode_60hz", "w")
			f.write(mode_60)
			f.close()
		except IOError:
			try:
				# fallback if no possibility to setup 50/60 hz mode
				f = open("/proc/stb/video/videomode", "w")
				f.write(mode_50)
				f.close()
			except IOError:
				print "[AVSwitch] setting videomode failed."

		if SystemInfo["have24hz"]:
			try:
				open("/proc/stb/video/videomode_24hz", "w").write(mode_24)
			except IOError:
				print "[VideoHardware] cannot open /proc/stb/video/videomode_24hz"

		if getBrandOEM() in ('gigablue',):
			try:
				# use 50Hz mode (if available) for booting
				f = open("/etc/videomode", "w")
				f.write(mode_50)
				f.close()
			except IOError:
				print "[AVSwitch] writing initial videomode to /etc/videomode failed."

		map = {"cvbs": 0, "rgb": 1, "svideo": 2, "yuv": 3}
		self.setColorFormat(map[config.av.colorformat.value])

		if about.getCPUString().startswith('STx'):
			#call setResolution() with -1,-1 to read the new scrren dimensions without changing the framebuffer resolution
			from enigma import gMainDC
			gMainDC.getInstance().setResolution(-1, -1)

	def saveMode(self, port, mode, rate):
		config.av.videoport.setValue(port)
		config.av.videoport.save()
		if port in config.av.videomode:
			config.av.videomode[port].setValue(mode)
			config.av.videomode[port].save()
		if mode in config.av.videorate:
			config.av.videorate[mode].setValue(rate)
			config.av.videorate[mode].save()

	def isPortAvailable(self, port):
		# fixme
		return True

	def isPortUsed(self, port):
		if port == "HDMI":
			self.readPreferredModes()
			return len(self.modes_preferred) != 0
		else:
			return True

	def getPortList(self):
		return [port for port in self.modes if self.isPortAvailable(port)]

	# get a list with all modes, with all rates, for a given port.
	def getModeList(self, port):
		res = [ ]
		for mode in self.modes[port]:
			# list all rates which are completely valid
			rates = [rate for rate in self.rates[mode] if self.isModeAvailable(port, mode, rate)]

			# if at least one rate is ok, add this mode
			if len(rates):
				res.append( (mode, rates) )
		return res

	def createConfig(self, *args):
		hw_type = HardwareInfo().get_device_name()
		has_hdmi = HardwareInfo().has_hdmi()
		lst = []

		config.av.videomode = ConfigSubDict()
		config.av.autores_mode_sd = ConfigSubDict()
		config.av.autores_mode_hd = ConfigSubDict()
		config.av.autores_mode_fhd = ConfigSubDict()
		config.av.autores_mode_uhd = ConfigSubDict()
		config.av.videorate = ConfigSubDict()
		config.av.autores_rate_sd = ConfigSubDict()
		config.av.autores_rate_hd = ConfigSubDict()
		config.av.autores_rate_fhd = ConfigSubDict()
		config.av.autores_rate_uhd = ConfigSubDict()

		# create list of output ports
		portlist = self.getPortList()
		for port in portlist:
			descr = port
			if 'HDMI' in port:
				lst.insert(0, (port, descr))
			else:
				lst.append((port, descr))

			modes = self.getModeList(port)
			if len(modes):
				config.av.videomode[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_sd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_hd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_fhd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_uhd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
			for (mode, rates) in modes:
				ratelist = []
				for rate in rates:
					if rate in ("auto") and not SystemInfo["have24hz"]:
						continue
					ratelist.append((rate, rate))
				config.av.videorate[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_sd[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_hd[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_fhd[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_uhd[mode] = ConfigSelection(choices = ratelist)
		config.av.videoport = ConfigSelection(choices = lst)

	def setInput(self, input):
		INPUT = { "ENCODER": 0, "SCART": 1, "AUX": 2 }
		eAVSwitch.getInstance().setInput(INPUT[input])

	def setColorFormat(self, value):
		if not self.current_port:
			self.current_port = config.av.videoport.value
		if self.current_port in ("YPbPr", "Scart-YPbPr"):
			eAVSwitch.getInstance().setColorFormat(3)
		elif self.current_port in ("RCA"):
			eAVSwitch.getInstance().setColorFormat(0)
		else:
			eAVSwitch.getInstance().setColorFormat(value)

	def setConfiguredMode(self):
		port = config.av.videoport.value
		if port not in config.av.videomode:
			print "[AVSwitch] current port not available, not setting videomode"
			return

		mode = config.av.videomode[port].value

		if mode not in config.av.videorate:
			print "[AVSwitch] current mode not available, not setting videomode"
			return

		rate = config.av.videorate[mode].value
		self.setMode(port, mode, rate)

	def setAspect(self, cfgelement):
		print "[AVSwitch] setting aspect: %s" % cfgelement.value
		try:
			f = open("/proc/stb/video/aspect", "w")
			f.write(cfgelement.value)
			f.close()
		except IOError:
			print "[AVSwitch] setting aspect failed."

	def setWss(self, cfgelement):
		if not cfgelement.value:
			wss = "auto(4:3_off)"
		else:
			wss = "auto"
		if os.path.exists("/proc/stb/denc/0/wss"):
			print "[AVSwitch] setting wss: %s" % wss
			f = open("/proc/stb/denc/0/wss", "w")
			f.write(wss)
			f.close()

	def setPolicy43(self, cfgelement):
		print "[AVSwitch] setting policy: %s" % cfgelement.value
		arw = "0"
		try:
			if about.getChipSetString() in ('meson-6', 'meson-64'):
				if cfgelement.value == "panscan" : arw = "11"
				if cfgelement.value == "letterbox" : arw = "12"
				if cfgelement.value == "bestfit" : arw = "10"
				open("/sys/class/video/screen_mode", "w").write(arw)
			else:
				f = open("/proc/stb/video/policy", "w")
				f.write(cfgelement.value)
				f.close()
		except IOError:
			print "[AVSwitch] setting policy43 failed."

	def setPolicy169(self, cfgelement):
		if os.path.exists("/proc/stb/video/policy2"):
			print "[AVSwitch] setting policy2: %s" % cfgelement.value
			f = open("/proc/stb/video/policy2", "w")
			f.write(cfgelement.value)
			f.close()

	def getOutputAspect(self):
		ret = (16,9)
		port = config.av.videoport.value
		if port not in config.av.videomode:
			print "current port not available in getOutputAspect!!! force 16:9"
		else:
			mode = config.av.videomode[port].value
			force_widescreen = self.isWidescreenMode(port, mode)
			is_widescreen = force_widescreen or config.av.aspect.value in ("16:9", "16:10")
			is_auto = config.av.aspect.value == "auto"
			if is_widescreen:
				if force_widescreen:
					pass
				else:
					aspect = {"16:9": "16:9", "16:10": "16:10"}[config.av.aspect.value]
					if aspect == "16:10":
						ret = (16,10)
			elif is_auto:
				try:
					aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read()
					if aspect_str == "1": # 4:3
						ret = (4,3)
				except IOError:
					pass
			else:  # 4:3
				ret = (4,3)
		return ret

	def getFramebufferScale(self):
		aspect = self.getOutputAspect()
		fb_size = getDesktop(0).size()
		return aspect[0] * fb_size.height(), aspect[1] * fb_size.width()

	def setAspectRatio(self, value):
		eAVSwitch.getInstance().setAspectRatio(value)

	def getAspectRatioSetting(self):
		valstr = config.av.aspectratio.value
		if valstr == "4_3_letterbox":
			val = 0
		elif valstr == "4_3_panscan":
			val = 1
		elif valstr == "16_9":
			val = 2
		elif valstr == "16_9_always":
			val = 3
		elif valstr == "16_10_letterbox":
			val = 4
		elif valstr == "16_10_panscan":
			val = 5
		elif valstr == "16_9_letterbox":
			val = 6
		return val
示例#15
0
from Components.config import config, ConfigOnOff, ConfigText, ConfigSubsection
from Tools.HardwareInfo import HardwareInfo

config.plugins.mediarenderer = ConfigSubsection()
config.plugins.mediarenderer.enabled = ConfigOnOff(default=True)
config.plugins.mediarenderer.name = ConfigText(
    default="%s" % (HardwareInfo().get_device_name()), fixed_size=False)
config.plugins.mediarenderer.uuid = ConfigText(default="", fixed_size=False)
示例#16
0
		dev = devname[:3]
		part = devname[3:]
		for p in part:
			if not p.isdigit():
				return devname, 0
		return dev, part and int(part) or 0

	def getUserfriendlyDeviceName(self, dev, phys):
		dev, part = self.splitDeviceName(dev)
		description = _("External Storage %s") % dev
		try:
			description = readFile("/sys" + phys + "/model")
		except IOError, s:
			print "couldn't read model: ", s
		from Tools.HardwareInfo import HardwareInfo
		for physdevprefix, pdescription in DEVICEDB.get(HardwareInfo().device_name,{}).items():
			if phys.startswith(physdevprefix):
				description = pdescription
		# not wholedisk and not partition 1
		if part and part != 1:
			description += _(" (Partition %d)") % part
		return description

	def addMountedPartition(self, device, desc):
		for x in self.partitions:
			if x.mountpoint == device:
				#already_mounted
				return
		self.partitions.append(Partition(mountpoint=device, description=desc))

	def removeMountedPartition(self, mountpoint):
示例#17
0
def getHardwareTypeString():
	return HardwareInfo().get_device_string()
示例#18
0
 def LayoutFinish(self):
     if not HardwareInfo().is_nextgen():
         self.createTimer.start(800)
     else:
         self.createTimer.start(1600)
示例#19
0
#

from Plugins.Plugin import PluginDescriptor
from Tools.HardwareInfo import HardwareInfo
from Components.config import config, ConfigSubsection, ConfigSelection, ConfigDirectory, ConfigYesNo, Config, ConfigText
from InternetRadioScreen import InternetRadioScreen

config.plugins.internetradio = ConfigSubsection()
config.plugins.internetradio.showinextensions = ConfigYesNo(default=True)
config.plugins.internetradio.dirname = ConfigDirectory(
    default="/media/hdd/streamripper/")
config.plugins.internetradio.riptosinglefile = ConfigYesNo(default=False)
config.plugins.internetradio.createdirforeachstream = ConfigYesNo(default=True)
config.plugins.internetradio.addsequenceoutputfile = ConfigYesNo(default=False)
config.plugins.internetradio.filter = ConfigText(default=_("Countries"))
if HardwareInfo().get_device_name() == "dm500hd":
    config.plugins.internetradio.visualization = ConfigSelection(choices=[
        ("2", _("On")), ("3", _("Off"))
    ],
                                                                 default="2")
else:
    config.plugins.internetradio.visualization = ConfigSelection(choices=[
        ("0", _("Screen and OLED")), ("1", _("OLED only")),
        ("2", _("Screen only")), ("3", _("Off"))
    ],
                                                                 default="2")
config.plugins.internetradio.googlecover = ConfigYesNo(default=False)
config.plugins.internetradio.startupname = ConfigText(default="")
config.plugins.internetradio.startuptext = ConfigText(default="")
config.plugins.internetradio.fullscreenautoactivation = ConfigSelection(
    choices=[("30", _("30 seconds")), ("60", _("1 minutes")),
示例#20
0
SystemInfo["NumVideoDecoders"] = getNumVideoDecoders()
SystemInfo["CanMeasureFrontendInputPower"] = eDVBResourceManager.getInstance(
).canMeasureFrontendInputPower()


def countFrontpanelLEDs():
    leds = 0
    if fileExists("/proc/stb/fp/led_set_pattern"):
        leds += 1

    while fileExists("/proc/stb/fp/led%d_pattern" % leds):
        leds += 1

    return leds


SystemInfo["NumFrontpanelLEDs"] = countFrontpanelLEDs()
SystemInfo["FrontpanelDisplay"] = fileExists("/dev/dbox/oled0") or fileExists(
    "/dev/dbox/lcd0")
SystemInfo["OledDisplay"] = fileExists("/dev/dbox/oled0")
SystemInfo["LcdDisplay"] = fileExists("/dev/dbox/lcd0")
SystemInfo["DeepstandbySupport"] = HardwareInfo().get_device_name() != "dm800"
SystemInfo["HDMICEC"] = (
    path.exists("/dev/hdmi_cec")
    or path.exists("/dev/misc/hdmi_cec0")) and fileExists(
        "/usr/lib/enigma2/python/Plugins/SystemPlugins/HdmiCEC/plugin.pyo")
SystemInfo["SABSetup"] = fileExists(
    "/usr/lib/enigma2/python/Plugins/SystemPlugins/SABnzbd/plugin.pyo")
SystemInfo["SeekStatePlay"] = False
SystemInfo["GraphicLCD"] = getBoxType() == "vuultimo"
示例#21
0
    def __init__(self, session, destdir="/tmp/"):
        self.skin = NFIDownload.skin
        Screen.__init__(self, session)

        self["job_progressbar"] = Progress()
        self["job_progresslabel"] = StaticText()

        self["infolabel"] = StaticText()
        self["statusbar"] = StaticText()
        self["label_top"] = StaticText()
        self["label_bottom"] = StaticText()
        self["path_bottom"] = StaticText()

        self["key_green"] = StaticText()
        self["key_yellow"] = StaticText()
        self["key_blue"] = StaticText()

        self["key_red"] = StaticText()

        self["feedlist"] = Feedlist([
            0,
            (eListboxPythonMultiContent.TYPE_TEXT, 0, 0, 250, 30, 0,
             RT_HALIGN_LEFT | RT_VALIGN_CENTER, "feed not available")
        ])
        self["destlist"] = FileList(destdir,
                                    showDirectories=True,
                                    showFiles=False)
        self["destlist"].hide()

        self.download_container = eConsoleAppContainer()
        self.nfo = ""
        self.nfofile = ""
        self.feedhtml = ""
        self.focus = None
        self.download = None
        self.box = HardwareInfo().get_device_name()
        self.feed_base = "http://www.dreamboxupdate.com/opendreambox/1.5/%s/images/" % self.box
        self.nfi_filter = ""  # "release" # only show NFIs containing this string, or all if ""
        self.wizard_mode = False

        self["actions"] = ActionMap(
            [
                "OkCancelActions", "ColorActions", "DirectionActions",
                "EPGSelectActions"
            ], {
                "cancel": self.closeCB,
                "red": self.closeCB,
                "green": self.nfi_download,
                "yellow": self.switchList,
                "blue": self.askCreateUSBstick,
                "prevBouquet": self.switchList,
                "nextBouquet": self.switchList,
                "ok": self.ok,
                "left": self.left,
                "right": self.right,
                "up": self.up,
                "upRepeated": self.up,
                "downRepeated": self.down,
                "down": self.down
            }, -1)

        self.feed_download()
示例#22
0
class VideoHardware:
    hw_type = HardwareInfo().get_device_name()
    rates = {}  # high-level, use selectable modes.

    modes = {}  # a list of (high-level) modes for a certain port.

    rates["PAL"] = {
        "50Hz": {
            50: "pal"
        },
        "60Hz": {
            60: "pal60"
        },
        "multi": {
            50: "pal",
            60: "pal60"
        }
    }

    rates["NTSC"] = {"60Hz": {60: "ntsc"}}

    rates["Multi"] = {"multi": {50: "pal", 60: "ntsc"}}

    rates["480i"] = {"60Hz": {60: "480i"}}

    rates["576i"] = {"50Hz": {50: "576i"}}

    rates["480p"] = {"60Hz": {60: "480p"}}

    rates["576p"] = {"50Hz": {50: "576p"}}

    if about.getChipSetString().find('7335') != -1 or about.getChipSetString(
    ).find('7358') != -1 or about.getChipSetString().find(
            '7356') != -1 or about.getChipSetString().find(
                '7405') != -1 or about.getChipSetString().find('7424') != -1:
        rates["720p"] = {
            "24Hz": {
                24: "720p24"
            },
            "25Hz": {
                25: "720p25"
            },
            "30Hz": {
                30: "720p30"
            },
            "50Hz": {
                50: "720p50"
            },
            "60Hz": {
                60: "720p"
            },
            "multi": {
                50: "720p50",
                60: "720p"
            }
        }
    else:
        rates["720p"] = {
            "50Hz": {
                50: "720p50"
            },
            "60Hz": {
                60: "720p"
            },
            "multi": {
                50: "720p50",
                60: "720p"
            }
        }

    rates["1080i"] = {
        "50Hz": {
            50: "1080i50"
        },
        "60Hz": {
            60: "1080i"
        },
        "multi": {
            50: "1080i50",
            60: "1080i"
        }
    }

    if about.getChipSetString().find(
            '7405') != -1 or about.getChipSetString().find('7335') != -1:
        rates["1080p"] = {
            "24Hz": {
                24: "1080p24"
            },
            "25Hz": {
                25: "1080p25"
            },
            "30Hz": {
                30: "1080p30"
            }
        }

    elif about.getChipSetString().find('7358') != -1 or about.getChipSetString(
    ).find('7356') != -1 or about.getChipSetString().find('7424') != -1:
        rates["1080p"] = {
            "24Hz": {
                24: "1080p24"
            },
            "25Hz": {
                25: "1080p25"
            },
            "30Hz": {
                30: "1080p30"
            },
            "50Hz": {
                50: "1080p50"
            },
            "60Hz": {
                60: "1080p"
            },
            "multi": {
                50: "1080p50",
                60: "1080p"
            }
        }
    elif hw_type == 'elite' or hw_type == 'premium' or hw_type == 'premium+' or hw_type == 'ultra' or hw_type == "me" or hw_type == "minime":
        rates["1080p"] = {
            "50Hz": {
                50: "1080p50"
            },
            "60Hz": {
                60: "1080p"
            },
            "23Hz": {
                23: "1080p"
            },
            "24Hz": {
                24: "1080p"
            },
            "25Hz": {
                25: "1080p"
            },
            "30Hz": {
                30: "1080p"
            },
            "multi": {
                50: "1080p50",
                60: "1080p"
            }
        }

    rates["PC"] = {
        "1024x768": {
            60: "1024x768"
        },  # not possible on DM7025
        "800x600": {
            60: "800x600"
        },  # also not possible
        "720x480": {
            60: "720x480"
        },
        "720x576": {
            60: "720x576"
        },
        "1280x720": {
            60: "1280x720"
        },
        "1280x720 multi": {
            50: "1280x720_50",
            60: "1280x720"
        },
        "1920x1080": {
            60: "1920x1080"
        },
        "1920x1080 multi": {
            50: "1920x1080",
            60: "1920x1080_50"
        },
        "1280x1024": {
            60: "1280x1024"
        },
        "1366x768": {
            60: "1366x768"
        },
        "1366x768 multi": {
            50: "1366x768",
            60: "1366x768_50"
        },
        "1280x768": {
            60: "1280x768"
        },
        "640x480": {
            60: "640x480"
        }
    }

    modes["Scart"] = ["PAL", "NTSC", "Multi"]
    modes["DVI-PC"] = ["PC"]
    if hw_type == 'elite' or hw_type == 'premium' or hw_type == 'premium+' or hw_type == 'ultra' or hw_type == "me" or hw_type == "minime":
        config.av.edid_override = True

    if about.getChipSetString().find('7335') != -1 or about.getChipSetString(
    ).find('7358') != -1 or about.getChipSetString(
    ).find('7356') != -1 or about.getChipSetString(
    ).find('7405') != -1 or about.getChipSetString().find(
            '7424'
    ) != -1 or hw_type == 'elite' or hw_type == 'premium' or hw_type == 'premium+' or hw_type == 'ultra' or hw_type == "me" or hw_type == "minime":
        modes["YPbPr"] = [
            "720p", "1080i", "1080p", "576p", "480p", "576i", "480i"
        ]
        modes["DVI"] = [
            "720p", "1080i", "1080p", "576p", "480p", "576i", "480i"
        ]
        widescreen_modes = set(["720p", "1080i", "1080p"])
    else:
        modes["YPbPr"] = ["720p", "1080i", "576p", "480p", "576i", "480i"]
        modes["DVI"] = ["720p", "1080i", "576p", "480p", "576i", "480i"]
        widescreen_modes = set(["720p", "1080i"])

    if boxtype.startswith('vu') or boxtype == 'dm500hd' or boxtype == 'dm800':
        if about.getChipSetString(
        ).find('7358') != -1 or about.getChipSetString().find(
                '7356') != -1 or about.getChipSetString().find('7424') != -1:
            modes["Scart-YPbPr"] = [
                "720p", "1080i", "1080p", "576p", "480p", "576i", "480i"
            ]
        else:
            modes["Scart-YPbPr"] = [
                "720p", "1080i", "576p", "480p", "576i", "480i"
            ]

    def getOutputAspect(self):
        ret = (16, 9)
        port = config.av.videoport.getValue()
        if port not in config.av.videomode:
            print "current port not available in getOutputAspect!!! force 16:9"
        else:
            mode = config.av.videomode[port].getValue()
            force_widescreen = self.isWidescreenMode(port, mode)
            is_widescreen = force_widescreen or config.av.aspect.getValue(
            ) in ("16_9", "16_10")
            is_auto = config.av.aspect.getValue() == "auto"
            if is_widescreen:
                if force_widescreen:
                    pass
                else:
                    aspect = {
                        "16_9": "16:9",
                        "16_10": "16:10"
                    }[config.av.aspect.getValue()]
                    if aspect == "16:10":
                        ret = (16, 10)
            elif is_auto:
                try:
                    aspect_str = open("/proc/stb/vmpeg/0/aspect", "r").read()
                    if aspect_str == "1":  # 4:3
                        ret = (4, 3)
                except IOError:
                    pass
            else:  # 4:3
                ret = (4, 3)
        return ret

    def __init__(self):
        self.last_modes_preferred = []
        self.on_hotplug = CList()
        self.current_mode = None
        self.current_port = None

        self.readAvailableModes()

        if self.modes.has_key("DVI-PC") and not self.getModeList("DVI-PC"):
            print "remove DVI-PC because of not existing modes"
            del self.modes["DVI-PC"]
        if boxtype in ('et4x00', 'xp1000', 'tm2t', 'tmsingle', 'vusolo2',
                       'tmnano', 'iqonios300hd', 'odinm7', 'e3hd', 'dm500hdv2',
                       'dm500hd', 'dm800', 'ebox7358', 'eboxlumi', 'ebox5100',
                       'ixusszero', 'optimussos1') or (about.getModelString()
                                                       == 'ini-3000'):
            del self.modes["YPbPr"]
        if hw_type in ('elite', 'premium', 'premium+', 'ultra', "me",
                       "minime"):
            self.readPreferredModes()

        self.createConfig()
        self.readPreferredModes()

        # take over old AVSwitch component :)
        from Components.AVSwitch import AVSwitch
        config.av.aspectratio.notifiers = []
        config.av.tvsystem.notifiers = []
        config.av.wss.notifiers = []
        AVSwitch.getOutputAspect = self.getOutputAspect

        config.av.aspect.addNotifier(self.updateAspect)
        config.av.wss.addNotifier(self.updateAspect)
        config.av.policy_169.addNotifier(self.updateAspect)
        config.av.policy_43.addNotifier(self.updateAspect)

    def readAvailableModes(self):
        try:
            f = open("/proc/stb/video/videomode_choices")
            modes = f.read()[:-1]
            f.close()
        except IOError:
            print "couldn't read available videomodes."
            self.modes_available = []
            return
        self.modes_available = modes.split(' ')

    def readPreferredModes(self):
        try:
            f = open("/proc/stb/video/videomode_preferred")
            modes = f.read()[:-1]
            f.close()
            self.modes_preferred = modes.split(' ')
        except IOError:
            print "reading preferred modes failed, using all modes"
            self.modes_preferred = self.modes_available

        if self.modes_preferred != self.last_modes_preferred:
            self.last_modes_preferred = self.modes_preferred
            print "hotplug on dvi"
            self.on_hotplug("DVI")  # must be DVI

    # check if a high-level mode with a given rate is available.
    def isModeAvailable(self, port, mode, rate):
        rate = self.rates[mode][rate]
        for mode in rate.values():
            ##### Only for test #####
            if port == "DVI":
                if hw_type in ('elite', 'premium', 'premium+', 'ultra', "me",
                               "minime"):
                    if mode not in self.modes_preferred and not config.av.edid_override.value:
                        print "no, not preferred"
                        return False
            ##### Only for test #####
            if mode not in self.modes_available:
                return False
        return True

    def isWidescreenMode(self, port, mode):
        return mode in self.widescreen_modes

    def setMode(self, port, mode, rate, force=None):
        print "setMode - port:", port, "mode:", mode, "rate:", rate

        config.av.videoport.setValue(port)  # [iq]

        # we can ignore "port"
        self.current_mode = mode
        self.current_port = port
        modes = self.rates[mode][rate]

        mode_50 = modes.get(50)
        mode_60 = modes.get(60)
        if mode_50 is None or force == 60:
            mode_50 = mode_60
        if mode_60 is None or force == 50:
            mode_60 = mode_50

        try:
            mode_etc = None
            if rate == "24Hz" or rate == "25Hz" or rate == "30Hz":
                mode_etc = modes.get(int(rate[:2]))
                f = open("/proc/stb/video/videomode", "w")
                f.write(mode_etc)
                f.close()
            # not support 50Hz, 60Hz for 1080p
            else:
                f = open("/proc/stb/video/videomode_50hz", "w")
                f.write(mode_50)
                f.close()
                f = open("/proc/stb/video/videomode_60hz", "w")
                f.write(mode_60)
                f.close()
        except IOError:
            try:
                # fallback if no possibility to setup 50/60 hz mode
                f = open("/proc/stb/video/videomode", "w")
                f.write(mode_50)
                f.close()
            except IOError:
                print "setting videomode failed."

        try:
            if rate == "24Hz" or rate == "25Hz" or rate == "30Hz":
                mode_etc = modes.get(int(rate[:2]))
                f = open("/proc/stb/video/videomode", "w")
                f.write(mode_etc)
                f.close()
            else:
                # fallback if no possibility to setup 50/60 hz mode
                f = open("/proc/stb/video/videomode", "w")
                f.write(mode_50)
                f.close()
        except IOError:
            print "writing initial videomode to /etc/videomode failed."

        self.updateAspect(None)

    def saveMode(self, port, mode, rate):
        print "saveMode", port, mode, rate
        config.av.videoport.setValue(port)
        config.av.videoport.save()
        if port in config.av.videomode:
            config.av.videomode[port].setValue(mode)
            config.av.videomode[port].save()
        if mode in config.av.videorate:
            config.av.videorate[mode].setValue(rate)
            config.av.videorate[mode].save()

    def isPortAvailable(self, port):
        # fixme
        return True

    def isPortUsed(self, port):
        if port == "DVI":
            self.readPreferredModes()
            return len(self.modes_preferred) != 0
        else:
            return True

    def getPortList(self):
        return [port for port in self.modes if self.isPortAvailable(port)]

    # get a list with all modes, with all rates, for a given port.
    def getModeList(self, port):
        print "getModeList for port", port
        res = []
        for mode in self.modes[port]:
            # list all rates which are completely valid
            rates = [
                rate for rate in self.rates[mode]
                if self.isModeAvailable(port, mode, rate)
            ]

            # if at least one rate is ok, add this mode
            if len(rates):
                res.append((mode, rates))
        return res

    def createConfig(self, *args):
        hw_type = HardwareInfo().get_device_name()
        has_hdmi = HardwareInfo().has_hdmi()
        lst = []

        config.av.videomode = ConfigSubDict()
        config.av.videorate = ConfigSubDict()

        # create list of output ports
        portlist = self.getPortList()
        for port in portlist:
            descr = port
            if descr == 'DVI' and has_hdmi:
                descr = 'HDMI'
            elif descr == 'DVI-PC' and has_hdmi:
                descr = 'HDMI-PC'
            lst.append((port, descr))

            # create list of available modes
            modes = self.getModeList(port)
            if len(modes):
                config.av.videomode[port] = ConfigSelection(
                    choices=[mode for (mode, rates) in modes])
            for (mode, rates) in modes:
                config.av.videorate[mode] = ConfigSelection(choices=rates)
        config.av.videoport = ConfigSelection(choices=lst)

        def setColorFormatAsPort(configElement):
            if configElement.getValue() == "YPbPr" or configElement.getValue(
            ) == "Scart-YPbPr":
                config.av.colorformat.setValue("yuv")

        config.av.videoport.addNotifier(setColorFormatAsPort)

    def setConfiguredMode(self):
        port = config.av.videoport.getValue()
        if port not in config.av.videomode:
            print "current port not available, not setting videomode"
            return

        mode = config.av.videomode[port].getValue()

        if mode not in config.av.videorate:
            print "current mode not available, not setting videomode"
            return

        rate = config.av.videorate[mode].getValue()
        self.setMode(port, mode, rate)

    def updateAspect(self, cfgelement):
        # determine aspect = {any,4:3,16:9,16:10}
        # determine policy = {bestfit,letterbox,panscan,nonlinear}

        # based on;
        #   config.av.videoport.getValue(): current video output device
        #     Scart:
        #   config.av.aspect:
        #     4_3:            use policy_169
        #     16_9,16_10:     use policy_43
        #     auto            always "bestfit"
        #   config.av.policy_169
        #     letterbox       use letterbox
        #     panscan         use panscan
        #     scale           use bestfit
        #   config.av.policy_43
        #     pillarbox       use panscan
        #     panscan         use letterbox  ("panscan" is just a bad term, it's inverse-panscan)
        #     nonlinear       use nonlinear
        #     scale           use bestfit

        port = config.av.videoport.getValue()
        if port not in config.av.videomode:
            print "current port not available, not setting videomode"
            return
        mode = config.av.videomode[port].getValue()

        force_widescreen = self.isWidescreenMode(port, mode)

        is_widescreen = force_widescreen or config.av.aspect.getValue() in (
            "16_9", "16_10")
        is_auto = config.av.aspect.getValue() == "auto"
        policy2 = "policy"  # use main policy

        if is_widescreen:
            if force_widescreen:
                aspect = "16:9"
            else:
                aspect = {
                    "16_9": "16:9",
                    "16_10": "16:10"
                }[config.av.aspect.getValue()]
            policy_choices = {
                "pillarbox": "panscan",
                "panscan": "letterbox",
                "nonlinear": "nonlinear",
                "scale": "bestfit"
            }
            if path.exists("/proc/stb/video/policy_choices"):
                f = open("/proc/stb/video/policy_choices")
                if "auto" in f.readline():
                    policy_choices.update({"auto": "auto"})
                else:
                    policy_choices.update({"auto": "bestfit"})
                f.close()
            policy = policy_choices[config.av.policy_43.getValue()]
            policy2_choices = {
                "letterbox": "letterbox",
                "panscan": "panscan",
                "scale": "bestfit"
            }
            if path.exists("/proc/stb/video/policy2_choices"):
                f = open("/proc/stb/video/policy2_choices")
                if "auto" in f.readline():
                    policy2_choices.update({"auto": "auto"})
                else:
                    policy2_choices.update({"auto": "bestfit"})
                f.close()
            policy2 = policy2_choices[config.av.policy_169.getValue()]
        elif is_auto:
            aspect = "any"
            policy = "bestfit"
        else:
            aspect = "4:3"
            policy = {
                "letterbox": "letterbox",
                "panscan": "panscan",
                "scale": "bestfit",
                "auto": "bestfit"
            }[config.av.policy_169.getValue()]

        if not config.av.wss.getValue():
            wss = "auto(4:3_off)"
        else:
            wss = "auto"

        print "-> setting aspect: %s, policy: %s, policy2: %s, wss: %s" % (
            aspect, policy, policy2, wss)
        f = open("/proc/stb/video/aspect", "w")
        f.write(aspect)
        f.close()
        f = open("/proc/stb/video/policy", "w")
        f.write(policy)
        f.close()
        f = open("/proc/stb/denc/0/wss", "w")
        f.write(wss)
        f.close()
        try:
            f = open("/proc/stb/video/policy2", "w")
            f.write(policy2)
            f.close()
        except IOError:
            pass
示例#23
0
try:
    file = open("/proc/stb/info/chipset", "r")
    chipset = file.readline().strip()
    file.close()
except:
    chipset = "unknown"

try:
    file = open("/proc/stb/info/boxtype", "r")
    model = file.readline().strip()
    file.close()
except:
    model = "unknown"

has_rca = False
hw_type = HardwareInfo().get_device_name()
if getBoxType() == 'gbquad' or getBoxType(
) == 'et5x00' or model == 'et6000' or getBoxType() == 'e3hd' or getBoxType(
) == 'odinm6' or getMachineName() == 'AX-Odin' or getBoxType(
) == 'ebox7358' or getBoxType(
) == 'tmnano' or hw_type == 'ultra' or hw_type == "me" or hw_type == "minime" or getBoxType(
) == 'optimussos1' or getBoxType() == 'optimussos2' or getBoxType(
) == 'gb800seplus' or getBoxType(
) == 'gb800ueplus' or model == 'ini-1000ru' or model == 'ini-1000sv':
    has_rca = True


class VideoWizardSummary(WizardSummary):
    skin = (
        """<screen name="VideoWizardSummary" position="0,0" size="132,64" id="1">
		<widget name="text" position="6,4" size="120,40" font="Regular;12" transparent="1" />
示例#24
0
DONATE = "http://bit.ly/seriespluginpaypal"
TERMS = "http://www.serienserver.de"
ABOUT = "\n  " + NAME + " " + VERSION + "\n\n" \
				+ _("  (C) 2012 by betonme @ IHAD \n\n") \
				+ _("  Terms: ") + TERMS + "\n\n" \
				+ _("  {lookups:d} successful lookups.\n") \
				+ _("  How much time have You saved?\n\n") \
				+ _("  Support: ") + SUPPORT + "\n" \
				+ _("  Feel free to donate. \n") \
				+ _("  PayPal: ") + DONATE

USER_AGENT = "Enigma2-" + NAME

try:
	from Tools.HardwareInfo import HardwareInfo
	DEVICE = HardwareInfo().get_device_name().strip()
except:
	DEVICE = ''

REQUEST_PARAMETER = "?device=" + DEVICE + "&version=SP" + VERSION

WHERE_EPGMENU = 'WHERE_EPGMENU'
WHERE_CHANNELMENU = 'WHERE_CHANNELMENU'


def buildURL(url):
	if config.plugins.seriesplugin.proxy_url.value:
		return config.plugins.seriesplugin.proxy_url.value + REQUEST_PARAMETER + "&url=" + url
	else:
		return url
	def getLatestImageTimestamp(self):
		currentTimeoutDefault = socket.getdefaulttimeout()
		socket.setdefaulttimeout(3)
		try:
			# TODO: Use Twisted's URL fetcher, urlopen is evil. And it can
			# run in parallel to the package update.
			from time import strftime
			from datetime import datetime
			imageVersion = about.getImageTypeString().split(" ")[1]
			imageVersion = (int(imageVersion) < 5 and "%.1f" or "%s") % int(imageVersion)
			latestImageTimestamp = datetime.fromtimestamp(int(urlopen("http://openpli.org/download/timestamp/%s~%s" % (HardwareInfo().get_device_model(), imageVersion)).read())).strftime(_("%Y-%m-%d %H:%M"))
		except:
			latestImageTimestamp = ""
		socket.setdefaulttimeout(currentTimeoutDefault)
		return latestImageTimestamp
示例#26
0
class AC3delay:
    def __init__(self):
        self.iService = None
        self.iServiceReference = None
        self.iAudioDelay = None
        self.channelAudio = AC3
        self.whichAudio = AC3
        self.bIsRecording = False

        # Current audio- delay
        self.systemDelay = {}

        self.getAudioInformation()

        self.activateTimer = eTimer()
        self.activateTimer.callback.append(self.activateDelay)
        self.activateWait = config.plugins.AC3LipSync.activationDelay.getValue(
        )

        # Current value for movie start behaviour
        self.movieStart = config.usage.on_movie_start.getValue()

        # find out box type
        self.oHWInfo = HardwareInfo()
        self.bHasToRestartService = self.oHWInfo.get_device_name() == "dm7025"

    def initAudio(self):
        self.iService = NavigationInstance.instance.getCurrentService()
        self.iServiceReference = NavigationInstance.instance.getCurrentlyPlayingServiceReference(
        )
        self.iAudioDelay = self.iService and self.iService.audioDelay()
        self.iSeek = self.iService and self.iService.seek()

    def deleteAudio(self):
        self.iService = None
        self.iAudioDelay = None
        self.iSeek = None

    def setChannelAudio(self, sAudio):
        self.channelAudio = sAudio

    def delayedActivateDelay(self):
        if self.activateTimer.isActive:
            self.activateTimer.stop()
        self.activateTimer.start(self.activateWait, False)

    def activateDelay(self):
        # This activation code is only neccessary for DM7025.
        # DM800, DM8000 and DM500HD directly activate the delay after using "setAC3Delay" and "setPCMDelay", they don't need the service restart
        if self.activateTimer.isActive:
            self.activateTimer.stop()
        if self.bHasToRestartService == True:
            bInitialized = False
            if self.iService == None:
                self.initAudio()
                bInitialized = True
            if self.iServiceReference is not None:
                lCurPosition = self.cueGetCurrentPosition()
                self.deleteAudio()
                if self.whichAudio == self.channelAudio:
                    config.usage.on_movie_start.setValue("beginning")
                    NavigationInstance.instance.stopService()
                    NavigationInstance.instance.playService(
                        self.iServiceReference)
                    config.usage.on_movie_start.setValue(self.movieStart)
                    if lCurPosition is not None:
                        self.lCurPosition = lCurPosition
                        self.timer = eTimer()
                        self.timer.callback.append(self.seekAfterWait)
                        self.timer.start(200, False)
            else:
                self.deleteAudio()

    def seekAfterWait(self):
        self.timer.stop()
        self.initAudio()
        if self.iSeek is not None:
            self.iSeek.seekTo(self.lCurPosition)
        self.deleteAudio()

    def cueGetCurrentPosition(self):
        if self.iSeek is None:
            return None
        r = self.iSeek.getPlayPosition()
        if r[0]:
            return None
        return long(r[1])

    def getSystemDelay(self, sAudio):
        bInitialized = False
        if self.iService == None:
            self.initAudio()
            bInitialized = True
        iDelay = 0
        if self.iAudioDelay is not None:
            if sAudio == AC3:
                iDelay = self.iAudioDelay.getAC3Delay()
            elif sAudio == PCM:
                iDelay = self.iAudioDelay.getPCMDelay()
            elif sAudio == AC3GLOB:
                iDelay = config.av.generalAC3delay.getValue()
            else:
                iDelay = config.av.generalPCMdelay.getValue()
        if bInitialized == True:
            self.deleteAudio()
        if iDelay == -1:
            iDelay = 0
        return iDelay

    def setSystemDelay(self, sAudio, iDelay, bDelayStart):
        bInitialized = False
        if self.iService == None:
            self.initAudio()
            bInitialized = True
        if self.iAudioDelay is not None:
            iDelayLameDb = iDelay
            if iDelayLameDb == 0:
                iDelayLameDb = -1
            if sAudio == AC3:
                self.iAudioDelay.setAC3Delay(iDelayLameDb)
            elif sAudio == PCM:
                self.iAudioDelay.setPCMDelay(iDelayLameDb)
            elif sAudio == AC3GLOB:
                config.av.generalAC3delay.setValue(iDelay)
                config.av.generalAC3delay.save()
                #Setting the global delay does not activate it, so now we call setAC3Delay to activate the new delay..
                self.iAudioDelay.setAC3Delay(self.systemDelay[AC3])
            else:
                config.av.generalPCMdelay.setValue(iDelay)
                config.av.generalPCMdelay.save()
                #Setting the global delay does not activate it, so now we call setPCMDelay to activate the new delay..
                self.iAudioDelay.setPCMDelay(self.systemDelay[PCM])
        if bInitialized == True:
            self.deleteAudio()
        if bDelayStart == True:
            self.delayedActivateDelay()
        else:
            self.activateDelay()

    def getAudioInformation(self):
        bInitialized = False
        if self.iService == None:
            self.initAudio()
            bInitialized = True

        # check if we are in a recording
        lCurPosition = self.cueGetCurrentPosition()
        if lCurPosition is not None:
            self.bIsRecording = True

        # check if downmix is enabled
        try:
            bDownmixEnabled = config.av.downmix_ac3.value
        except:
            bDownmixEnabled = False

        oAudioTracks = self.iService and self.iService.audioTracks()
        n = oAudioTracks and oAudioTracks.getNumberOfTracks() or 0
        tlist = []
        self.selectedAudioInfo = ("", 0)
        self.selectedAudioIndex = None
        if n > 0:
            self.selectedAudioIndex = oAudioTracks.getCurrentTrack()
            for x in range(n):
                i = oAudioTracks.getTrackInfo(x)
                language = i.getLanguage()
                description = i.getDescription()
                if language in LanguageCodes:
                    language = LanguageCodes[language][0]
                if len(description):
                    description += " (" + language + ")"
                else:
                    description = language

                tlist.append((description, x))
                if x == self.selectedAudioIndex:
                    if ((description.find("AC3") != -1
                         or description.find("AC-3") != -1)
                            and not bDownmixEnabled
                        ) or description.find("DTS") != -1:
                        self.whichAudio = AC3
                        self.channelAudio = AC3
                    else:
                        self.whichAudio = PCM
                        self.channelAudio = PCM
                    self.selectedAudioInfo = (description, x)
            tlist.sort(key=lambda x: x[0])

        self.audioTrackList = tlist
        for sAudio in AC3PCM:
            self.systemDelay[sAudio] = self.getSystemDelay(sAudio)
        del oAudioTracks
        if bInitialized == True:
            self.deleteAudio()
示例#27
0
class AVSwitch():
    hw_type = HardwareInfo().get_device_name()
    rates = {}
    modes = {}
    rates['PAL'] = {
        '50Hz': {
            50: 'pal'
        },
        '60Hz': {
            60: 'pal60'
        },
        'multi': {
            50: 'pal',
            60: 'pal60'
        }
    }
    rates['NTSC'] = {'60Hz': {60: 'ntsc'}}
    rates['Multi'] = {'multi': {50: 'pal', 60: 'ntsc'}}
    rates['480i'] = {'60Hz': {60: '480i'}}
    rates['576i'] = {'50Hz': {50: '576i'}}
    rates['480p'] = {'60Hz': {60: '480p'}}
    rates['576p'] = {'50Hz': {50: '576p'}}
    rates['720p'] = {
        '50Hz': {
            50: '720p50'
        },
        '60Hz': {
            60: '720p'
        },
        'multi': {
            50: '720p50',
            60: '720p'
        }
    }
    rates['1080i'] = {
        '50Hz': {
            50: '1080i50'
        },
        '60Hz': {
            60: '1080i'
        },
        'multi': {
            50: '1080i50',
            60: '1080i'
        }
    }
    rates['1080p'] = {
        '50Hz': {
            50: '1080p50'
        },
        '60Hz': {
            60: '1080p'
        },
        'multi': {
            50: '1080p50',
            60: '1080p'
        }
    }
    rates['PC'] = {
        '1024x768': {
            60: '1024x768'
        },
        '800x600': {
            60: '800x600'
        },
        '720x480': {
            60: '720x480'
        },
        '720x576': {
            60: '720x576'
        },
        '1280x720': {
            60: '1280x720'
        },
        '1280x720 multi': {
            50: '1280x720_50',
            60: '1280x720'
        },
        '1920x1080': {
            60: '1920x1080'
        },
        '1920x1080 multi': {
            50: '1920x1080',
            60: '1920x1080_50'
        },
        '1280x1024': {
            60: '1280x1024'
        },
        '1366x768': {
            60: '1366x768'
        },
        '1366x768 multi': {
            50: '1366x768',
            60: '1366x768_50'
        },
        '1280x768': {
            60: '1280x768'
        },
        '640x480': {
            60: '640x480'
        }
    }
    modes['Scart'] = ['PAL', 'NTSC', 'Multi']
    if hw_type in ('elite', 'premium', 'premium+', 'ultra', 'me', 'minime'):
        config.av.edid_override = True
    if about.getChipSetString() in ('7241', '7358', '7362', '7346', '7356',
                                    '7424', '7425', '7435', 'pnx8493', '7162',
                                    '7111') or hw_type in ('elite', 'premium',
                                                           'premium+', 'ultra',
                                                           'me', 'minime'):
        modes['HDMI'] = [
            '720p', '1080p', '1080i', '576p', '576i', '480p', '480i'
        ]
        widescreen_modes = {'720p', '1080p', '1080i'}
    else:
        modes['HDMI'] = ['720p', '1080i', '576p', '576i', '480p', '480i']
        widescreen_modes = {'720p', '1080i'}
    modes['YPbPr'] = modes['HDMI']
    if getBoxType().startswith('vu') or getBoxType() in ('dm500hd', 'dm800'):
        modes['Scart-YPbPr'] = modes['HDMI']
    if modes.has_key('YPbPr') and getBoxType(
    ) in ('cloudibox3se', 'xpeedlxcs2', 'xpeedlxcc', 'osmini', 'gbx1', 'gbx3',
          'sf3038', 'spycat', 'bwidowx', 'bwidowx2', 'fegasusx3', 'fegasusx5s',
          'fegasusx5t', 'force2', 'force2plus', 'optimussos', 'tmnanose',
          'tmnanocombo', 'zgemmash1', 'zgemmash2', 'zgemmas2s', 'zgemmass',
          'mago', 'enibox', 'sf108', 'x1plus', 'xcombo', 'mutant1100',
          'mutant1200', 'mutant500c', 'et4x00', 'et7500', 'et7000', 'et8500',
          'et8500s', 'xp1000mk', 'xp1000max', 'xp1000plus', 'sf8', 'tm2t',
          'tmsingle', 'vusolo2', 'tmnano', 'iqonios300hd', 'iqonios300hdv2',
          'classm', 'axodin', 'axodinc', 'genius', 'evo', 'galaxym6',
          'geniuse3hd', 'evoe3hd', 'axase3', 'axase3c', 'dm500hdv2', 'dm500hd',
          'dm800', 'mixosf7', 'mixoslumi', 'mixosf5mini', 'gi9196lite',
          'ixusszero', 'optimussos1', 'enfinity', 'marvel1', 'bre2ze',
          'sezam1000hd', 'mbmini', 'atemio5x00', 'xpeedlx1', 'xpeedlx2',
          'vusolose', 'gbipbox', 'formuler3', 'optimussos3plus', 'force1plus',
          'vuzero', 'vizyonvita') or about.getModelString() == 'ini-3000':
        del modes['YPbPr']
    if modes.has_key('Scart') and getBoxType() in ('fusionhd', 'force2',
                                                   'force2plus', 'optimussos',
                                                   'tmnanose', 'tmnanosecombo',
                                                   'gbx1', 'gbx3'):
        del modes['Scart']
    if getBoxType() in 'mutant2400':
        f = open('/proc/stb/info/board_revision', 'r').read()
        if f >= '2':
            del modes['YPbPr']

    def __init__(self):
        self.last_modes_preferred = []
        self.on_hotplug = CList()
        self.current_mode = None
        self.current_port = None
        self.readAvailableModes()
        self.createConfig()
        self.readPreferredModes()
        return

    def readAvailableModes(self):
        try:
            f = open('/proc/stb/video/videomode_choices')
            modes = f.read()[:-1]
            f.close()
        except IOError:
            print "couldn't read available videomodes."
            self.modes_available = []
            return

        self.modes_available = modes.split(' ')

    def readPreferredModes(self):
        try:
            f = open('/proc/stb/video/videomode_preferred')
            modes = f.read()[:-1]
            f.close()
            self.modes_preferred = modes.split(' ')
        except IOError:
            print 'reading preferred modes failed, using all modes'
            self.modes_preferred = self.modes_available

        if self.modes_preferred != self.last_modes_preferred:
            self.last_modes_preferred = self.modes_preferred
            self.on_hotplug('HDMI')

    def isModeAvailable(self, port, mode, rate):
        rate = self.rates[mode][rate]
        for mode in rate.values():
            if port == 'DVI':
                if hw_type in ('elite', 'premium', 'premium+', 'ultra', 'me',
                               'minime'):
                    if mode not in self.modes_preferred and not config.av.edid_override.value:
                        print 'no, not preferred'
                        return False
            if mode not in self.modes_available:
                return False

        return True

    def isWidescreenMode(self, port, mode):
        return mode in self.widescreen_modes

    def setMode(self, port, mode, rate, force=None):
        print '[VideoMode] setMode - port: %s, mode: %s, rate: %s' % (
            port, mode, rate)
        self.current_mode = mode
        self.current_port = port
        modes = self.rates[mode][rate]
        mode_50 = modes.get(50)
        mode_60 = modes.get(60)
        if mode_50 is None or force == 60:
            mode_50 = mode_60
        if mode_60 is None or force == 50:
            mode_60 = mode_50
        mode_etc = None
        if os.path.exists('/proc/stb/video/videomode_50hz') and getBoxType(
        ) not in ('gb800solo', 'gb800se', 'gb800ue'):
            f = open('/proc/stb/video/videomode_50hz', 'w')
            f.write(mode_50)
            f.close()
        if os.path.exists('/proc/stb/video/videomode_60hz') and getBoxType(
        ) not in ('gb800solo', 'gb800se', 'gb800ue'):
            try:
                f = open('/proc/stb/video/videomode_60hz', 'w')
                f.write(mode_60)
                f.close()
            except IOError:
                print 'setting videomode failed.'

        try:
            mode_etc = modes.get(int(rate[:2]))
            f = open('/proc/stb/video/videomode', 'w')
            f.write(mode_etc)
            f.close()
        except:
            try:
                f = open('/proc/stb/video/videomode', 'w')
                f.write(mode_50)
                f.close()
            except IOError:
                print 'setting videomode failed.'

        map = {'cvbs': 0, 'rgb': 1, 'svideo': 2, 'yuv': 3}
        self.setColorFormat(map[config.av.colorformat.value])
        if about.getCPUString().startswith('STx'):
            from enigma import gMainDC
            gMainDC.getInstance().setResolution(-1, -1)
        return

    def saveMode(self, port, mode, rate):
        config.av.videoport.setValue(port)
        config.av.videoport.save()
        if port in config.av.videomode:
            config.av.videomode[port].setValue(mode)
            config.av.videomode[port].save()
        if mode in config.av.videorate:
            config.av.videorate[mode].setValue(rate)
            config.av.videorate[mode].save()

    def isPortAvailable(self, port):
        return True

    def isPortUsed(self, port):
        if port == 'HDMI':
            self.readPreferredModes()
            return len(self.modes_preferred) != 0
        else:
            return True

    def getPortList(self):
        return [port for port in self.modes if self.isPortAvailable(port)]

    def getModeList(self, port):
        res = []
        for mode in self.modes[port]:
            rates = [
                rate for rate in self.rates[mode]
                if self.isModeAvailable(port, mode, rate)
            ]
            if len(rates):
                res.append((mode, rates))

        return res

    def createConfig(self, *args):
        hw_type = HardwareInfo().get_device_name()
        has_hdmi = HardwareInfo().has_hdmi()
        lst = []
        config.av.videomode = ConfigSubDict()
        config.av.videorate = ConfigSubDict()
        portlist = self.getPortList()
        for port in portlist:
            descr = port
            if 'HDMI' in port:
                lst.insert(0, (port, descr))
            else:
                lst.append((port, descr))
            modes = self.getModeList(port)
            if len(modes):
                config.av.videomode[port] = ConfigSelection(
                    choices=[mode for mode, rates in modes])
            for mode, rates in modes:
                config.av.videorate[mode] = ConfigSelection(choices=rates)

        config.av.videoport = ConfigSelection(choices=lst)

    def setInput(self, input):
        INPUT = {'ENCODER': 0, 'SCART': 1, 'AUX': 2}
        eAVSwitch.getInstance().setInput(INPUT[input])

    def setColorFormat(self, value):
        if not self.current_port:
            self.current_port = config.av.videoport.value
        if self.current_port in ('YPbPr', 'Scart-YPbPr'):
            eAVSwitch.getInstance().setColorFormat(3)
        elif self.current_port in 'RCA':
            eAVSwitch.getInstance().setColorFormat(0)
        else:
            eAVSwitch.getInstance().setColorFormat(value)

    def setConfiguredMode(self):
        port = config.av.videoport.value
        if port not in config.av.videomode:
            print 'current port not available, not setting videomode'
            return
        mode = config.av.videomode[port].value
        if mode not in config.av.videorate:
            print 'current mode not available, not setting videomode'
            return
        rate = config.av.videorate[mode].value
        self.setMode(port, mode, rate)

    def setAspect(self, cfgelement):
        print '[VideoMode] setting aspect: %s' % cfgelement.value
        f = open('/proc/stb/video/aspect', 'w')
        f.write(cfgelement.value)
        f.close()

    def setWss(self, cfgelement):
        if not cfgelement.value:
            wss = 'auto(4:3_off)'
        else:
            wss = 'auto'
        if os.path.exists('/proc/stb/denc/0/wss'):
            print '[VideoMode] setting wss: %s' % wss
            f = open('/proc/stb/denc/0/wss', 'w')
            f.write(wss)
            f.close()

    def setPolicy43(self, cfgelement):
        print '[VideoMode] setting policy: %s' % cfgelement.value
        f = open('/proc/stb/video/policy', 'w')
        f.write(cfgelement.value)
        f.close()

    def setPolicy169(self, cfgelement):
        if os.path.exists('/proc/stb/video/policy2'):
            print '[VideoMode] setting policy2: %s' % cfgelement.value
            f = open('/proc/stb/video/policy2', 'w')
            f.write(cfgelement.value)
            f.close()

    def getOutputAspect(self):
        ret = (16, 9)
        port = config.av.videoport.value
        if port not in config.av.videomode:
            print 'current port not available in getOutputAspect!!! force 16:9'
        else:
            mode = config.av.videomode[port].value
            force_widescreen = self.isWidescreenMode(port, mode)
            is_widescreen = force_widescreen or config.av.aspect.value in (
                '16:9', '16:10')
            is_auto = config.av.aspect.value == 'auto'
            if is_widescreen:
                if force_widescreen:
                    pass
                else:
                    aspect = {
                        '16:9': '16:9',
                        '16:10': '16:10'
                    }[config.av.aspect.value]
                    if aspect == '16:10':
                        ret = (16, 10)
            elif is_auto:
                try:
                    aspect_str = open('/proc/stb/vmpeg/0/aspect', 'r').read()
                    if aspect_str == '1':
                        ret = (4, 3)
                except IOError:
                    pass

            else:
                ret = (4, 3)
        return ret

    def getFramebufferScale(self):
        aspect = self.getOutputAspect()
        fb_size = getDesktop(0).size()
        return (aspect[0] * fb_size.height(), aspect[1] * fb_size.width())

    def setAspectRatio(self, value):
        pass

    def getAspectRatioSetting(self):
        valstr = config.av.aspectratio.value
        if valstr == '4_3_letterbox':
            val = 0
        elif valstr == '4_3_panscan':
            val = 1
        elif valstr == '16_9':
            val = 2
        elif valstr == '16_9_always':
            val = 3
        elif valstr == '16_10_letterbox':
            val = 4
        elif valstr == '16_10_panscan':
            val = 5
        elif valstr == '16_9_letterbox':
            val = 6
        return val
示例#28
0
    def getUserfriendlyDeviceName(self, dev, phys):
        dev, part = self.splitDeviceName(dev)
        description = "External Storage %s" % dev
        have_model_descr = False
        try:
            description = readFile("/sys" + phys + "/model")
            have_model_descr = True
        except IOError, s:
            print "couldn't read model: ", s
        from Tools.HardwareInfo import HardwareInfo
        if dev.find('sr') == 0 and dev[2].isdigit():
            devicedb = DEVICEDB_SR
        else:
            devicedb = DEVICEDB
        for physdevprefix, pdescription in devicedb.get(
                HardwareInfo().device_name, {}).items():
            if phys.startswith(physdevprefix):
                if have_model_descr:
                    description = pdescription + ' - ' + description
                else:
                    description = pdescription
        # not wholedisk and not partition 1
        if part and part != 1:
            description += " (Partition %d)" % part
        return description

    def addMountedPartition(self, device, desc):
        already_mounted = False
        for x in self.partitions[:]:
            if x.mountpoint == device:
                already_mounted = True
示例#29
0
 def confirm(self, confirmed):
     if not confirmed:
         print "not confirmed"
         self.close()
     else:
         var = self["list"].getSelectionIndex()
         self.rcuv = self.rcuval[var]
         #if self.rcuv != self.rcuold: copy keymap
         try:
             if self.rcuv == 'WeTek Play2 RCU':
                 os.system(
                     "cp -f /etc/amremote/wetek_play2.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'WeTek Play (Classic) RCU':
                 os.system(
                     "cp -f /etc/amremote/wetek1.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'WeTek Play OpenElec RCU':
                 os.system(
                     "cp -f /etc/amremote/wetek3.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'AB IPBox 9900/99/55 HD RCU':
                 os.system(
                     "cp -f /etc/amremote/wetek_ipbox9900remote.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'Alien2/1 RCU':
                 os.system(
                     "cp -f /etc/amremote/alien2.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'Alien1 old RCU':
                 os.system(
                     "cp -f /etc/amremote/alien.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'GI LX3 RCU':
                 os.system(
                     "cp -f /etc/amremote/gilx3.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'Gigablue 800 UE Plus RCU':
                 os.system(
                     "cp -f /etc/amremote/gb800ueplus.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'Mutant HD2400 RCU':
                 os.system(
                     "cp -f /etc/amremote/wetek_hd2400remote.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'Octagon SF8 RCU':
                 os.system(
                     "cp -f /etc/amremote/octagonsf8.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'Technomate Nano RCU':
                 os.system(
                     "cp -f /etc/amremote/wetek_tmnanoremote.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'xtrend ET10000 RCU':
                 os.system(
                     "cp -f /etc/amremote/wetek_et10000remote.conf /etc/amremote/wetek.conf &"
                 )
             elif self.rcuv == 'Zgemma Star RCU':
                 os.system(
                     "cp -f /etc/amremote/zgemmastar.conf /etc/amremote/wetek.conf &"
                 )
             else:
                 os.system(
                     "cp -f /etc/amremote/wetek2.conf /etc/amremote/wetek.conf &"
                 )
             f = open("/etc/amremote/.choice", "w")
             f.write(self.rcuv)
             f.close()
             os.system("killall -9 remotecfg &")
             boxime = HardwareInfo().get_device_name()
             if boxime == 'wetekplay2':
                 fin = file('/etc/amremote/wetek.conf')
                 fout = open('/etc/amremote/wetek_tmp.conf', 'w')
                 for line in fin:
                     if 'work_mode' in line: line = 'work_mode  	= 0\n'
                     fout.write(line)
                 fout.close()
                 os.system(
                     'mv -f /etc/amremote/wetek_tmp.conf /etc/amremote/wetek.conf &'
                 )
             os.system("/usr/bin/remotecfg /etc/amremote/wetek.conf &")
             if self.rcuold == "WeTek Play OpenElec RCU" or self.rcuv == "WeTek Play OpenElec RCU":
                 if self.rcuold != self.rcuv:
                     if self.rcuv == 'WeTek Play OpenElec RCU':
                         if getImageDistro() == "openspa":
                             os.system(
                                 "cp -f /usr/lib/enigma2/python/Plugins/Extensions/RCUSelect/conf/keymap_OpenELEC.xml /usr/share/enigma2/keymap.xml &"
                             )
                         else:
                             os.system(
                                 "cp -f /usr/lib/enigma2/python/Plugins/Extensions/RCUSelect/conf/keymap.OE.xml /usr/share/enigma2/keymap.xml &"
                             )
                     else:
                         os.system(
                             "cp -f /usr/lib/enigma2/python/Plugins/Extensions/RCUSelect/conf/keymap.orig.xml /usr/share/enigma2/keymap.xml &"
                         )
                     os.system("killall -9 enigma2 &")
             else:
                 os.system(
                     "cp -f /usr/lib/enigma2/python/Plugins/Extensions/RCUSelect/conf/keymap.orig.xml /usr/share/enigma2/keymap.xml &"
                 )
         except IOError:
             print "RCU select failed."
         self.close()
示例#30
0
class StreamServerControl(object):
    FEATURE_SCENE_DETECTION = HardwareInfo().get_device_name() in [
        "dm900", "dm920"
    ]
    FEATURE_SLICES = HardwareInfo().get_device_name() in ["dm900", "dm920"]

    FRAME_RATE_25 = "25"
    FRAME_RATE_30 = "30"
    FRAME_RATE_50 = "50"
    FRAME_RATE_60 = "60"
    FRAME_RATE_23_976 = "23.976"
    FRAME_RATE_24 = "24"
    FRAME_RATE_29_97 = "29.97"
    FRAME_RATE_59_94 = "59.94"

    FRAME_RATES = [
        FRAME_RATE_23_976, FRAME_RATE_24, FRAME_RATE_25, FRAME_RATE_29_97,
        FRAME_RATE_30, FRAME_RATE_50, FRAME_RATE_59_94, FRAME_RATE_60
    ]

    FRAME_RATE_LUT = {
        FRAME_RATE_23_976: "23",
        FRAME_RATE_24: "24",
        FRAME_RATE_25: "25",
        FRAME_RATE_29_97: "29",
        FRAME_RATE_30: "30",
        FRAME_RATE_50: "50",
        FRAME_RATE_59_94: "59",
        FRAME_RATE_60: "60"
    }

    FRAME_RATE_LUT_REVERSE = {v: k for k, v in FRAME_RATE_LUT.iteritems()}

    LEVELS = [
        (str(eStreamServer.LEVEL1_1), _("1.1")),
        (str(eStreamServer.LEVEL1_2), _("1.2")),
        (str(eStreamServer.LEVEL1_3), _("1.3")),
        (str(eStreamServer.LEVEL2_0), _("2.0")),
        (str(eStreamServer.LEVEL2_1), _("2.1")),
        (str(eStreamServer.LEVEL2_2), _("2.2")),
        (str(eStreamServer.LEVEL3_0), _("3.0")),
        (str(eStreamServer.LEVEL3_1), _("3.1")),  #default
        (str(eStreamServer.LEVEL3_2), _("3.2")),
        (str(eStreamServer.LEVEL4_0), _("4.0")),
        (str(eStreamServer.LEVEL4_1), _("4.1")),
        (str(eStreamServer.LEVEL4_2), _("4.2")),
    ]

    PROFILES = [
        (str(eStreamServer.PROFILE_MAIN), _("main")),
        (str(eStreamServer.PROFILE_HIGH), _("high")),
    ]

    RES_1080 = (1920, 1080)
    RES_720 = (1280, 720)
    RES_PAL = (720, 576)

    RES_KEY_1080P = "1080p"
    RES_KEY_720P = "720p"
    RES_KEY_PAL = "576p"

    RESOLUTIONS = {
        "1080p": RES_1080,
        "720p": RES_720,
        "576p": RES_PAL,
    }

    RESOLUTION_KEY = {
        RES_1080: "1080p",
        RES_720: "720p",
        RES_PAL: "576p",
    }

    AUDIO_BITRATE_LIMITS = [32, 448]
    VIDEO_BITRATE_LIMITS = [256, 20000]
    PORT_LIMITS = [1, 65535]

    INPUT_MODES = {
        str(eStreamServer.INPUT_MODE_LIVE): _("Follow Live"),
        str(eStreamServer.INPUT_MODE_HDMI_IN): _("HDMI Input"),
        str(eStreamServer.INPUT_MODE_BACKGROUND): _("TV Services")
    }

    ENCODER_TARGET = 2

    RTSP_STATE_DISABLED = 0
    RTSP_STATE_IDLE = 1
    RTSP_STATE_RUNNING = 2

    UPSTREAM_STATE_DISABLED = eStreamServer.UPSTREAM_STATE_DISABLED
    UPSTREAM_STATE_CONNECTING = eStreamServer.UPSTREAM_STATE_CONNECTING
    UPSTREAM_STATE_WAITING = eStreamServer.UPSTREAM_STATE_WAITING
    UPSTREAM_STATE_TRANSMITTING = eStreamServer.UPSTREAM_STATE_TRANSMITTING
    UPSTREAM_STATE_OVERLOAD = eStreamServer.UPSTREAM_STATE_OVERLOAD
    UPSTREAM_STATE_ADJUSTING = eStreamServer.UPSTREAM_STATE_ADJUSTING

    READABLE_UPSTREAM_STATE = {
        UPSTREAM_STATE_DISABLED: _("Disabled"),
        UPSTREAM_STATE_CONNECTING: _("Connecting"),
        UPSTREAM_STATE_WAITING: _("Waiting for clients"),
        UPSTREAM_STATE_TRANSMITTING: _("Transmitting"),
        UPSTREAM_STATE_OVERLOAD: _("Overload"),
        UPSTREAM_STATE_ADJUSTING: _("Adjusting Bitrate")
    }

    URI_PARAM_REF = "ref"
    URI_PARAM_VIDEO_BITRATE = "video_bitrate"
    URI_PARAM_AUDIO_BITRATE = "audio_bitrate"

    ENCODER_SERVICE_SET = 0
    ENCODER_SERVICE_ALREADY_ACTIVE = 1
    ENCODER_SERVICE_INVALID_MODE = -1
    ENCODER_SERVICE_INVALID = -2
    ENCODER_SERVICE_INSUFFICIENT_RESOURCES = -3

    def __init__(self):
        self._streamServer = eStreamServer.getInstance()
        self.setupConfig()
        self._encoderService = None
        self._currentService = None
        self._availabilityChanged_conn = self._streamServer.availabilityChanged.connect(
            self._onAvailabilityChanged)
        self._sourceStateChanged_conn = self._streamServer.sourceStateChanged.connect(
            self._onSourceStateChanged)
        self._upstreamStateChanged_conn = self._streamServer.upstreamStateChanged.connect(
            self._onUpstreamStateChanged)
        self._upstreamBitrateChanged_conn = self._streamServer.upstreamBitrateChanged.connect(
            self._onUpstreamBitrateChanged)
        self._rtspClientCountChanged_conn = self._streamServer.rtspClientCountChanged.connect(
            self._onRtspClientCountChanged)
        self._onUriParametersChanged_conn = self._streamServer.uriParametersChanged.connect(
            self._onUriParametersChanged)
        self._dbusError_conn = self._streamServer.dbusError.connect(
            self._onDBusError)
        self._mediatorStateBeforeStandby = self.config.streamserver.mediator.enabled.value
        self.onAvailabilityChanged = []
        self.onSourceStateChanged = []
        self.onUpstreamStateChanged = []
        self.onUpstreamBitrateChanged = []
        self.onRtspClientCountChanged = []
        self.onUriParametersChanged = []
        self._isRunning = False

    def setupConfig(self):
        #Streamserver base config
        self.config = Config()
        self.config.streamserver = ConfigSubsection()
        self.config.streamserver.source = ConfigSelection(
            StreamServerControl.INPUT_MODES,
            default=str(eStreamServer.INPUT_MODE_LIVE))
        self.config.streamserver.audioBitrate = ConfigInteger(
            96, StreamServerControl.AUDIO_BITRATE_LIMITS)
        self.config.streamserver.videoBitrate = ConfigInteger(
            1500, StreamServerControl.VIDEO_BITRATE_LIMITS)
        self.config.streamserver.autoBitrate = ConfigOnOff(default=False)
        self.config.streamserver.resolution = ConfigSelection(
            StreamServerControl.RESOLUTIONS.keys(),
            default=StreamServerControl.RES_KEY_PAL)
        self.config.streamserver.framerate = ConfigSelection(
            StreamServerControl.FRAME_RATES,
            default=StreamServerControl.FRAME_RATE_23_976)
        # extended encoder settings
        self.config.streamserver.gopLength = ConfigInteger(
            default=eStreamServer.GOP_LENGTH_AUTO,
            limits=[
                eStreamServer.GOP_LENGTH_MIN, eStreamServer.GOP_LENGTH_MAX
            ])
        self.config.streamserver.gopOnSceneChange = ConfigOnOff(default=False)
        self.config.streamserver.openGop = ConfigOnOff(default=False)
        self.config.streamserver.bFrames = ConfigInteger(
            default=eStreamServer.BFRAMES_DEFAULT,
            limits=[eStreamServer.BFRAMES_MIN, eStreamServer.BFRAMES_MAX])
        self.config.streamserver.pFrames = ConfigInteger(
            default=eStreamServer.PFRAMES_DEFAULT,
            limits=[eStreamServer.PFRAMES_MIN, eStreamServer.PFRAMES_MAX])
        self.config.streamserver.slices = ConfigInteger(
            default=eStreamServer.SLICES_DEFAULT,
            limits=[eStreamServer.SLICES_MIN, eStreamServer.SLICES_MAX])
        self.config.streamserver.level = ConfigSelection(
            StreamServerControl.LEVELS,
            default=str(eStreamServer.LEVEL_DEFAULT))
        self.config.streamserver.profile = ConfigSelection(
            StreamServerControl.PROFILES,
            default=str(eStreamServer.PROFILE_DEFAULT))
        #servers
        self.config.streamserver.rtsp = ConfigSubsection()
        self.config.streamserver.rtsp.enabled = ConfigOnOff(default=False)
        self.config.streamserver.rtsp.port = ConfigInteger(
            554, StreamServerControl.PORT_LIMITS)
        self.config.streamserver.rtsp.path = ConfigText(default="stream",
                                                        fixed_size=False)
        self.config.streamserver.rtsp.user = ConfigText(default="",
                                                        fixed_size=False)
        self.config.streamserver.rtsp.password = ConfigPassword(default="")
        self.config.streamserver.hls = ConfigSubsection()
        self.config.streamserver.hls.enabled = ConfigOnOff(default=False)
        self.config.streamserver.hls.path = ConfigText(default="stream",
                                                       fixed_size=False)
        self.config.streamserver.hls.user = ConfigText(default="",
                                                       fixed_size=False)
        self.config.streamserver.hls.password = ConfigPassword(default="")
        self.config.streamserver.hls.port = ConfigInteger(
            8080, StreamServerControl.PORT_LIMITS)
        self.config.streamserver.lastservice = ConfigText(
            default=config.tv.lastservice.value)
        self.config.streamserver.mediator = ConfigSubsection()
        self.config.streamserver.mediator.enabled = ConfigOnOff(default=False)
        self.config.streamserver.mediator.boxid = ConfigText()
        self.config.streamserver.mediator.boxkey = ConfigText()
        self.config.streamserver.mediator.streaminggroups = ConfigSubsection()
        self.config.streamserver.mediator.streaminggroups.member_alias = ConfigText(
            default="dreambox", fixed_size=False)
        self.config.streamserver.mediator.streaminggroups.stream_alias = ConfigText(
            default="", fixed_size=False)
        self.config.streamserver.mediator.streaminggroups.hide_empty = ConfigYesNo(
            default=False)
        self.config.streamserver.client = ConfigSubsection()
        self.config.streamserver.client.boxid = ConfigText(default="",
                                                           fixed_size=False)
        self.config.streamserver.client.boxkey = ConfigText(default="",
                                                            fixed_size=False)

        self.loadConfig()

    def loadConfig(self):
        #Streamserver base config
        self.config.streamserver.source.value = str(
            self._streamServer.inputMode())
        self.config.streamserver.audioBitrate.value = self._streamServer.audioBitrate(
        )
        self.config.streamserver.videoBitrate.value = self._streamServer.videoBitrate(
        )
        self.config.streamserver.autoBitrate.value = self._streamServer.autoBitrate(
        )
        self.config.streamserver.resolution.value = str(
            self._streamServer.height()) + "p"
        self.config.streamserver.framerate.value = str(
            self._streamServer.framerate())

        # extended encoder settings
        self.config.streamserver.gopLength.value = self._streamServer.gopLength(
        )
        self.config.streamserver.gopOnSceneChange.value = self._streamServer.gopOnSceneChange(
        )
        self.config.streamserver.openGop.value = self._streamServer.openGop()
        self.config.streamserver.bFrames.value = self._streamServer.bFrames()
        self.config.streamserver.pFrames.value = self._streamServer.pFrames()
        self.config.streamserver.slices.value = self._streamServer.slices()
        self.config.streamserver.level.value = self._streamServer.level()
        self.config.streamserver.profile.value = self._streamServer.profile()

        #servers
        self.config.streamserver.rtsp.enabled.value = self._streamServer.isRTSPEnabled(
        )
        self.config.streamserver.rtsp.path.value = self._streamServer.rtspPath(
        )
        self.config.streamserver.rtsp.user.value = self._streamServer.rtspUsername(
        )
        self.config.streamserver.rtsp.password.value = self._streamServer.rtspPassword(
        )
        self.config.streamserver.hls.enabled.value = self._streamServer.isHLSEnabled(
        )
        self.config.streamserver.hls.path.value = self._streamServer.hlsPath()
        self.config.streamserver.hls.user.value = self._streamServer.hlsUsername(
        )
        self.config.streamserver.hls.password.value = self._streamServer.hlsPassword(
        )

        #self.config.streamserver.lastservice = ConfigText(default=config.tv.lastservice.value)

        #TODO
        #self.config.streamserver.mediator = ConfigSubsection()
        #self.config.streamserver.mediator.enabled = ConfigOnOff(default=False)
        #self.config.streamserver.mediator.boxid = ConfigText()
        #self.config.streamserver.mediator.boxkey = ConfigText()
        #self.config.streamserver.mediator.streaminggroups = ConfigSubsection()
        #self.config.streamserver.mediator.streaminggroups.member_alias = ConfigText(default="dreambox", fixed_size=False)
        #self.config.streamserver.mediator.streaminggroups.stream_alias = ConfigText(default="", fixed_size=False)
        #self.config.streamserver.mediator.streaminggroups.hide_empty = ConfigYesNo(default=False)
        #self.config.streamserver.client = ConfigSubsection()
        #self.config.streamserver.client.boxid = ConfigText(default="", fixed_size=False)
        #self.config.streamserver.client.boxkey = ConfigText(default="", fixed_size=False)

    def start(self):
        if not self._isRunning:
            self.config.misc.standbyCounter.addNotifier(self._onStandby,
                                                        initial_call=False)
            self._isRunning = True
        else:
            Log.w(
                "start was called multiple times, self is not harmful but unneccessary!"
            )

    def _onStandby(self, element):
        Log.d()
        from Screens.Standby import inStandby
        inStandby.onClose.append(self._onLeaveStandby)
        if self.config.streamserver.source.value == str(
                eStreamServer.INPUT_MODE_LIVE
        ) and self.config.streamserver.mediator.enabled.value:
            Log.i(
                "Going into Standby, mode is Follow Live, stopping proxy stream"
            )
            self._mediatorStateBeforeStandby = self.config.streamserver.mediator.enabled.value
            self.config.streamserver.mediator.enabled.value = False

    def _onLeaveStandby(self):
        Log.d()
        if self.config.streamserver.source.value == str(
                eStreamServer.INPUT_MODE_LIVE
        ) and self._mediatorStateBeforeStandby:
            Log.i(
                "Leaving Standby, mode is Follow live, recovering upload state=%s"
                % (self._mediatorStateBeforeStandby, ))
            self.config.streamserver.mediator.enabled.value = self._mediatorStateBeforeStandby

    def _onAvailabilityChanged(self, available):
        for fnc in self.onAvailabilityChanged:
            fnc(available)

    def _onSourceStateChanged(self, state):
        Log.i("state=%s" % state)
        if state == True and streamServerControl.inputMode == eStreamServer.INPUT_MODE_BACKGROUND:
            self.setEncoderService(
                eServiceReference(self.config.streamserver.lastservice.value))
        else:
            self.stopEncoderService()
        for fnc in self.onSourceStateChanged:
            fnc(state)

    def _onUpstreamStateChanged(self, state):
        if state > self._streamServer.UPSTREAM_STATE_WAITING and self._currentService and not self._encoderService:
            Log.i("Upstream running.")
        if state <= self._streamServer.UPSTREAM_STATE_WAITING and self._encoderService:
            Log.i("Upstream idle.")
        for fnc in self.onUpstreamStateChanged:
            fnc(state)

    def _onUpstreamBitrateChanged(self, bitrate):
        for fnc in self.onUpstreamBitrateChanged:
            fnc(bitrate)

    def _onRtspClientCountChanged(self, count, client):
        Log.i("%s / %s" % (count, client))
        for fnc in self.onRtspClientCountChanged:
            fnc(count, client)

    def _onUriParametersChanged(self, parameters):
        Log.i("%s" % (parameters))
        params = parse_qs(parameters)
        self._applyUriParameters(params)
        for fnc in self.onUriParametersChanged:
            fnc(params)

    def _onDBusError(self, error):
        Log.w("DBUS ERROR! %s" % (error, ))
        Notifications.AddPopup("%s" % (error, ),
                               MessageBox.TYPE_ERROR,
                               -1,
                               domain=NOTIFICATION_DOMAIN_STREAMSERVER)

    def _applyUriParameters(self, params):
        ref = str(params.get(self.URI_PARAM_REF, [""])[0])
        ref = eServiceReference(ref)
        if ref.valid():
            Log.i("setting encoder service to %s" % ref.toString())
            self.setEncoderService(ref)
        vb = params.get(self.URI_PARAM_VIDEO_BITRATE, [-1])[0]
        if vb > 0:
            try:
                Log.i("setting video bitrate to %s" % vb)
                self.videoBitrate = int(vb)
            except:
                pass
        ab = params.get(self.URI_PARAM_AUDIO_BITRATE, [-1])[0]
        if ab > 0:
            try:
                Log.i("setting audio bitrate to %s" % ab)
                self.audioBitrate = int(ab)
            except:
                pass

    def setEncoderService(self, service):
        self._currentService = service
        ref = self._getRef(service)
        if ref:
            refstr = ref.toString()
            self.config.streamserver.lastservice.value = refstr
            self.config.streamserver.save()
            return self._startEncoderService(service)
        return self.ENCODER_SERVICE_INVALID

    def getEncoderService(self):
        if self._currentService:
            return self._getRef(self._currentService)
        return None

    encoderService = property(getEncoderService, setEncoderService)

    def isAnyEnabled(self):
        return self.config.streamserver.rtsp.enabled.value or self.config.streamserver.hls.enabled.value or self.config.streamserver.mediator.enabled.value

    def _startEncoderService(self, service):
        if not self.isAnyEnabled() \
         or int(self.config.streamserver.source.value) != eStreamServer.INPUT_MODE_BACKGROUND \
         or self.sourceState == False:
            self.stopEncoderService()
            Log.i(
                "Streamserver disabled, not in TV Service mode or source not ready, will not allocate service: (isAnyEnabled, source!=TV_MODE, sourceState) (%s, %s, %s)"
                % (str(self.isAnyEnabled()),
                   str(self.config.streamserver.source.value),
                   str(self.sourceState)))
            return self.ENCODER_SERVICE_INVALID_MODE
        ref = self._getRef(service)
        if ref:
            cur_ref = self._encoderService
            cur_ref = cur_ref and cur_ref.info()
            cur_ref = cur_ref and cur_ref.getInfoString(
                iServiceInformation.sServiceref)
            if cur_ref == ref.toString():
                Log.i(
                    "ignore request to play already running background streaming service (%s)"
                    % cur_ref)
                return self.ENCODER_SERVICE_ALREADY_ACTIVE
            else:
                self.stopEncoderService()
                self._encoderService = eServiceCenter.getInstance().play(ref)
                if self._encoderService and not self._encoderService.setTarget(
                        self.ENCODER_TARGET):
                    Log.i("Starting encoder service [%s]!" %
                          (service.toCompareString()))
                    self._encoderService.start()
                    return self.ENCODER_SERVICE_SET
                else:
                    return self.ENCODER_SERVICE_INSUFFICIENT_RESOURCES
        return self.ENCODER_SERVICE_INVALID

    def _getRef(self, service):
        if service and (service.flags & eServiceReference.isGroup):
            return getBestPlayableServiceReference(service,
                                                   eServiceReference())
        else:
            return service

    def stopEncoderService(self):
        if self._encoderService:
            Log.i("Stopping encoder service (%s)" %
                  (self._currentService.toCompareString()))
            self._encoderService.stop()
        self._encoderService = None

    def enableRTSP(self, enabled, path, port, user, password):
        return self._streamServer.enableRTSP(enabled, path, port, user,
                                             password)

    def enableHLS(self, enabled, path, port, user, password):
        #TODO streamserver has no user/password functionality for hls atm
        return self._streamServer.enableHLS(enabled, path, port, user,
                                            password)

    def isEnabled(self):
        return self.isAnyEnabled()

    enabled = property(isEnabled)

    def getInputMode(self):
        return self._streamServer.inputMode()

    def setInputMode(self, mode):
        self._streamServer.setInputMode(mode)

    inputMode = property(getInputMode, setInputMode)

    def getAudioBitrate(self):
        return self._streamServer.audioBitrate()

    def setAudioBitrate(self, bitrate):
        if bitrate >= self.AUDIO_BITRATE_LIMITS[
                0] and bitrate <= self.AUDIO_BITRATE_LIMITS[1]:
            self._streamServer.setAudioBitrate(bitrate)
            self.config.streamserver.audioBitrate.value = bitrate
        else:
            Log.w("Desired audio bitrate is out of range! %s %s" %
                  (bitrate, self.VIDEO_BITRATE_LIMITS))

    audioBitrate = property(getAudioBitrate, setAudioBitrate)

    def getVideoBitrate(self):
        return self._streamServer.videoBitrate()

    def setVideoBitrate(self, bitrate):
        if bitrate >= self.VIDEO_BITRATE_LIMITS[
                0] and bitrate <= self.VIDEO_BITRATE_LIMITS[1]:
            self._streamServer.setVideoBitrate(bitrate)
            self.config.streamserver.videoBitrate.value = bitrate
        else:
            Log.w("Desired video bitrate is out of range! %s %s" %
                  (bitrate, self.VIDEO_BITRATE_LIMITS))

    videoBitrate = property(getVideoBitrate, setVideoBitrate)

    def getAutoBitrate(self):
        return self._streamServer.autoBitrate()

    def setAutoBitrate(self, auto):
        self._streamServer.setAutoBitrate(auto)
        self.config.streamserver.autoBitrate.value = auto

    autoBitrate = property(getAutoBitrate, setAutoBitrate)

    def getGopLength(self):
        return self._streamServer.gopLength()

    def setGopLength(self, length):
        self._streamServer.setGopLength(length)

    gopLength = property(getGopLength, setGopLength)

    def getGopOnSceneChange(self):
        return self._streamServer.gopOnSceneChange()

    def setGopOnSceneChange(self, enabled):
        if self.FEATURE_SCENE_DETECTION:
            self._streamServer.setGopOnSceneChange(enabled)
        else:
            Log.w("This device's encoder has no support for scene detection!")

    gopOnSceneChange = property(getGopOnSceneChange, setGopOnSceneChange)

    def getOpenGop(self):
        return self._streamServer.openGop()

    def setOpenGop(self, enabled):
        self._streamServer.setOpenGop(enabled)

    openGop = property(getOpenGop, setOpenGop)

    def getBFrames(self):
        return self._streamServer.bFrames()

    def setBFrames(self, bFrames):
        self._streamServer.setBFrames(bFrames)

    bFrames = property(getBFrames, setBFrames)

    def getPFrames(self):
        return self._streamServer.pFrames()

    def setPFrames(self, pFrames):
        self._streamServer.setPFrames(pFrames)

    pFrames = property(getPFrames, setPFrames)

    def getSlices(self):
        return self._streamServer.slices()

    def setSlices(self, slices):
        if self.FEATURE_SLICES:
            self._streamServer.setSlices(slices)
        else:
            Log.w("This device's encoder has no support for setting slices")

    slices = property(getSlices, setSlices)

    def getLevel(self):
        return self._streamServer.level()

    def setLevel(self, level):
        self._streamServer.setLevel(level)

    level = property(getLevel, setLevel)

    def getProfile(self):
        return self._streamServer.profile()

    def setProfile(self, profile):
        self._streamServer.setProfile(profile)

    profile = property(getProfile, setProfile)

    def getFramerate(self):
        return self.FRAME_RATE_LUT_REVERSE.get(
            str(self._streamServer.framerate()))

    def setFramerate(self, rate):
        Log.w(rate)
        self._streamServer.setFramerate(int(self.FRAME_RATE_LUT.get(
            str(rate))))

    framerate = property(getFramerate, setFramerate)

    def getResolution(self):
        w = self._streamServer.width()
        h = self._streamServer.height()
        return w, h

    def setResolution(self, res):  #res = [w, h]
        self._streamServer.setResolution(res[0], res[1])

    resolution = property(getResolution, setResolution)

    def setUpstream(self, state, host, port, token):
        return self._streamServer.enableUpstream(state, host, port, token)

    def getUpstreamState(self):
        return self._streamServer.upstreamState()

    upstreamState = property(getUpstreamState)

    def getSourceState(self):
        return self._streamServer.sourceState()

    sourceState = property(getSourceState)

    def getRtspClientcount(self):
        return self._streamServer.rtspClientCount()

    rtspClientCount = property(getRtspClientcount)

    def zapNext(self):
        Log.i()
        from Screens.InfoBar import InfoBar
        if not InfoBar.instance:
            Log.i("no infobar")
            return False
        input_mode = int(self.config.streamserver.source.value)
        if input_mode == eStreamServer.INPUT_MODE_LIVE:
            Log.i("zapping to next live service")
            InfoBar.instance.zapDown()
            return True
        elif input_mode == eStreamServer.INPUT_MODE_BACKGROUND:
            Log.i("zapping to next background service")
            oldservice = self.encoderService
            if not oldservice:
                return False
            service = InfoBar.instance.getNextService(oldservice)
            streamServerControl.setEncoderService(service)
            return True
        Log.i("nothing done")
        return False

    def zapPrev(self):
        from Screens.InfoBar import InfoBar
        if not InfoBar.instance:
            Log.i("no infobar")
            return False
        Log.i(self.config.streamserver.source.value)
        input_mode = int(self.config.streamserver.source.value)
        if input_mode == eStreamServer.INPUT_MODE_LIVE:
            Log.i("zapping to previous live service")
            InfoBar.instance.zapUp()
            return True
        elif input_mode == eStreamServer.INPUT_MODE_BACKGROUND:
            Log.i("zapping to previous background service")
            oldservice = self.encoderService
            if not oldservice:
                return False
            service = InfoBar.instance.getPrevService(oldservice)
            streamServerControl.setEncoderService(service)
            return True
        Log.i("nothing done")
        return False
示例#31
0
    def VideoChangeDetect(self):
        config_port = config.av.videoport.value
        config_mode = str(config.av.videomode[config_port].value).replace(
            '\n', '')
        config_res = str(config.av.videomode[config_port].value[:-1]).replace(
            '\n', '')
        config_pol = str(config.av.videomode[config_port].value[-1:]).replace(
            '\n', '')
        config_rate = str(config.av.videorate[config_mode].value).replace(
            'Hz', '').replace('\n', '')

        f = open("/proc/stb/video/videomode")
        current_mode = f.read()[:-1].replace('\n', '')
        f.close()
        if current_mode.upper() in ('PAL', 'NTSC'):
            current_mode = current_mode.upper()

        current_pol = ''
        if 'i' in current_mode:
            current_pol = 'i'
        elif 'p' in current_mode:
            current_pol = 'p'
        current_res = current_pol and current_mode.split(
            current_pol)[0].replace('\n', '') or ""
        current_rate = current_pol and current_mode.split(
            current_pol)[0].replace(
                '\n', '') and current_mode.split(current_pol)[1].replace(
                    '\n', '') or ""

        video_height = None
        video_width = None
        video_pol = None
        video_rate = None
        if path.exists("/proc/stb/vmpeg/0/yres"):
            try:
                f = open("/proc/stb/vmpeg/0/yres", "r")
                video_height = int(f.read(), 16)
                f.close()
            except:
                video_height = 0
        if path.exists("/proc/stb/vmpeg/0/xres"):
            try:
                f = open("/proc/stb/vmpeg/0/xres", "r")
                video_width = int(f.read(), 16)
                f.close()
            except:
                video_width = 0
        if path.exists("/proc/stb/vmpeg/0/progressive"):
            f = open("/proc/stb/vmpeg/0/progressive", "r")
            video_pol = "p" if int(f.read(), 16) else "i"
            f.close()
        if path.exists("/proc/stb/vmpeg/0/framerate"):
            f = open("/proc/stb/vmpeg/0/framerate", "r")
            try:
                video_rate = int(f.read())
            except:
                video_rate = 50
            f.close()

        if not video_height or not video_width or not video_pol or not video_rate:
            service = self.session.nav.getCurrentService()
            if service is not None:
                info = service.info()
            else:
                info = None

            if info:
                video_height = int(
                    info.getInfo(iServiceInformation.sVideoHeight))
                video_width = int(info.getInfo(
                    iServiceInformation.sVideoWidth))
                video_pol = ("i", "p")[info.getInfo(
                    iServiceInformation.sProgressive)]
                video_rate = int(info.getInfo(iServiceInformation.sFrameRate))

        if video_height and video_width and video_pol and video_rate:
            resolutionlabel["content"].setText(
                _("Video content: %ix%i%s %iHz") %
                (video_width, video_height, video_pol,
                 (video_rate + 500) / 1000))
            if video_height != -1:
                if video_height > 720 or video_width > 1280:
                    new_res = "1080"
                elif (576 < video_height <= 720) or video_width > 1024:
                    new_res = "720"
                elif (480 < video_height <=
                      576) or video_width > 720 or video_rate in (25000, 23976,
                                                                  24000):
                    new_res = "576"
                else:
                    new_res = "480"
            else:
                new_res = config_res

            if video_rate != -1:
                if video_rate == 25000 and video_pol == 'i':
                    new_rate = 50000
                elif video_rate == 59940 or (
                        video_rate == 29970 and video_pol
                        == 'i') or (video_rate == 29970 and video_pol == 'p'
                                    and config.av.autores.value == 'disabled'):
                    new_rate = 60000
                elif video_rate == 23976:
                    new_rate = 24000
                elif video_rate == 29970:
                    new_rate = 30000
                else:
                    new_rate = video_rate
                new_rate = str((new_rate + 500) / 1000)
            else:
                new_rate = config_rate

            if video_pol != -1:
                new_pol = str(video_pol)
            else:
                new_pol = config_pol

            write_mode = None
            new_mode = None
            if config_mode in ('PAL', 'NTSC'):
                write_mode = config_mode
            elif config.av.autores.value == 'all' or (
                    config.av.autores.value == 'hd' and int(new_res) >= 720):
                if (config.av.autores_deinterlace.value
                        and HardwareInfo().is_nextgen()) or (
                            config.av.autores_deinterlace.value
                            and not HardwareInfo().is_nextgen()
                            and int(new_res) <= 720):
                    new_pol = new_pol.replace('i', 'p')
                if new_res + new_pol + new_rate in iAVSwitch.modes_available:
                    new_mode = new_res + new_pol + new_rate
                    if new_mode == '720p24':
                        new_mode = config.av.autores_720p24.value
                    if new_mode == '1080p24':
                        new_mode = config.av.autores_1080p24.value
                    if new_mode == '1080p25':
                        new_mode = config.av.autores_1080p25.value
                    if new_mode == '1080p30':
                        new_mode = config.av.autores_1080p30.value
                elif new_res + new_pol in iAVSwitch.modes_available:
                    new_mode = new_res + new_pol
                else:
                    write_mode = config_mode + new_rate

                write_mode = new_mode
            elif config.av.autores.value == 'hd' and int(new_res) <= 576:
                if (config.av.autores_deinterlace.value
                        and HardwareInfo().is_nextgen()) or (
                            config.av.autores_deinterlace.value
                            and not HardwareInfo().is_nextgen()
                            and not config.av.autores_sd.value == '1080i'):
                    new_mode = config.av.autores_sd.value.replace(
                        'i', 'p') + new_rate
                else:
                    if new_pol in 'p':
                        new_mode = config.av.autores_sd.value.replace(
                            'i', 'p') + new_rate
                    else:
                        new_mode = config.av.autores_sd.value + new_rate

                if new_mode == '720p24':
                    new_mode = config.av.autores_720p24.value
                if new_mode == '1080p24':
                    new_mode = config.av.autores_1080p24.value
                if new_mode == '1080p25':
                    new_mode = config.av.autores_1080p25.value
                if new_mode == '1080p30':
                    new_mode = config.av.autores_1080p30.value

                write_mode = new_mode
            else:
                if path.exists('/proc/stb/video/videomode_%shz' %
                               new_rate) and config_rate == 'multi':
                    f = open("/proc/stb/video/videomode_%shz" % new_rate, "r")
                    multi_videomode = f.read().replace('\n', '')
                    f.close()
                    if multi_videomode and (current_mode != multi_videomode):
                        write_mode = multi_videomode
                    else:
                        write_mode = config_mode + new_rate

            # workaround for bug, see http://www.opena.tv/forum/showthread.php?1642-Autoresolution-Plugin&p=38836&viewfull=1#post38836
            # always use a fixed resolution and frame rate   (e.g. 1080p50 if supported) for TV or .ts files
            # always use a fixed resolution and correct rate (e.g. 1080p24/p50/p60 for all other videos
            if config.av.smart1080p.value != 'false':
                print "DEBUG VIDEOMODE/ smart1080p enabled"
                ref = self.session.nav.getCurrentlyPlayingServiceReference()
                if ref is not None:
                    try:
                        mypath = ref.getPath()
                    except:
                        mypath = ''
                else:
                    mypath = ''
                if new_rate == 'multi':
                    # no frame rate information available, check if filename (or directory name) contains a hint
                    # (allow user to force a frame rate this way):
                    if (mypath.find('p24.') >= 0) or (mypath.find('24p.') >=
                                                      0):
                        new_rate = '24'
                    elif (mypath.find('p25.') >= 0) or (mypath.find('25p.') >=
                                                        0):
                        new_rate = '25'
                    elif (mypath.find('p30.') >= 0) or (mypath.find('30p.') >=
                                                        0):
                        new_rate = '30'
                    elif (mypath.find('p50.') >= 0) or (mypath.find('50p.') >=
                                                        0):
                        new_rate = '50'
                    elif (mypath.find('p60.') >= 0) or (mypath.find('60p.') >=
                                                        0):
                        new_rate = '60'
                    else:
                        new_rate = ''  # omit frame rate specifier, e.g. '1080p' instead of '1080p50' if there is no clue
                if mypath != '':
                    if mypath.endswith('.ts'):
                        print "DEBUG VIDEOMODE/ playing .ts file"
                        new_rate = '50'  # for .ts files
                    else:
                        print "DEBUG VIDEOMODE/ playing other (non .ts) file"
                        # new_rate from above for all other videos
                else:
                    print "DEBUG VIDEOMODE/ no path or no service reference, presumably live TV"
                    new_rate = '50'  # for TV / or no service reference, then stay at 1080p50

                new_rate = new_rate.replace('25', '50')
                new_rate = new_rate.replace('30', '60')

                if (config.av.smart1080p.value == '1080p50') or (
                        config.av.smart1080p.value == 'true'
                ):  # for compatibility with old ConfigEnableDisable
                    write_mode = '1080p' + new_rate
                elif config.av.smart1080p.value == '1080i50':
                    write_mode = '1080i' + new_rate
                elif config.av.smart1080p.value == '720p50':
                    write_mode = '720p' + new_rate

            if write_mode and current_mode != write_mode and self.bufferfull:
                resolutionlabel["restxt"].setText(
                    _("Video mode: %s") % write_mode)
                if config.av.autores.value != "disabled" and config.av.autores_label_timeout.value != '0':
                    resolutionlabel.show()
                print "[VideoMode] setMode - port: %s, mode: %s" % (
                    config_port, write_mode)
                f = open("/proc/stb/video/videomode", "w")
                f.write(write_mode)
                f.close()

        iAVSwitch.setAspect(config.av.aspect)
        iAVSwitch.setWss(config.av.wss)
        iAVSwitch.setPolicy43(config.av.policy_43)
        iAVSwitch.setPolicy169(config.av.policy_169)

        self.delay = False
        self.detecttimer.stop()
示例#32
0
###################################################

MAIN_PAGE = "http://www.zdf.de"

PNG_PATH = resolveFilename(SCOPE_PLUGINS)+"/Extensions/ZDFMediathek/"

TYPE_NOTHING = 0
TYPE_MOVIE = 1
TYPE_PODCAST = 2
TYPE_MOVIELIST_CATEGORY = 3

LIST_LEFT = 0
LIST_RIGHT = 1
LIST_NONE = 2

deviceName = HardwareInfo().get_device_name()

PLAY_MP4 = False

if not deviceName.startswith("dm7025"):
	try:
		#FIXMEE add better check ! ? !
		for line in popen("opkg info gst-plugin-rtsp").readlines():
			if line.find("Version: ") != -1:
				if line[9:] >= "0.10.23-r7.1":
					PLAY_MP4 = True
	except:
		pass

try:
	from LT.LTStreamPlayer import streamplayer
示例#33
0
	def updateStatus(self):
		print "[TVCharts] Status Update ..."
		self.DBStatusTimer.stop()

		if not config.plugins.tvcharts.enabled.value or Screens.Standby.inStandby:
			return

		# Get Channelname
		sref = self.session.nav.getCurrentlyPlayingServiceReference()
		if sref is not None:
			ref = eServiceReference(sref.toString())
			ref.setName("")
			serviceHandler = eServiceCenter.getInstance()
			info = serviceHandler.info(ref)
			channel_name = info and info.getName(ref).replace('\xc2\x86', '').replace('\xc2\x87', '').decode("utf-8", "ignore").encode("utf-8") or ""
			self.serviceref = ref.toString()
		else:
			channel_name = ""
			self.serviceref = ""

		# Get Event Info
		service = self.session.nav.getCurrentService()
		info = service and service.info()
		event = info and info.getEvent(0)
		event_name = event and event.getEventName() or ""
		event_description = ""
		event_begin = 0

		if event is not None:
			curEvent = parseEvent(event)
			event_begin = int(curEvent[0]) + (config.recording.margin_before.value * 60)
			event_description = event.getExtendedDescription()

		# Get Box Info
		self.BoxID = iNetwork.getAdapterAttribute("eth0", "mac")
		self.DeviceName = HardwareInfo().get_device_name()
		self.EnigmaVersion = about.getEnigmaVersionString()
		self.ImageVersion = about.getVersionString()

		# Get TimerList
		self.timerlist = ""
		if config.plugins.tvcharts.submittimers.value and self.LastTimerlistUpdate <= (time() - 1800):
			self.LastTimerlistUpdate = time()
			try:
				for timer in self.recordtimer.timer_list:
					if timer.disabled == 0 and timer.justplay == 0:
						self.timerlist += "%s|%s|%s|%s|%s|%s|%s\n" % (timer.eit, str(int(timer.begin) + (config.recording.margin_before.value * 60)), str(int(timer.end) - (config.recording.margin_after.value * 60)), str(timer.service_ref), timer.name, timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', '').decode("utf-8", "ignore").encode("utf-8"), timer.repeated)
			except Exception:
				print "[TVCharts] Error loading timers!"

		# Get Pluginlist
		if config.plugins.tvcharts.submitplugins.value and self.pluginlist == "":
			try:
				os_system("opkg list_installed | grep enigma2-plugin- > /tmp/plugins.txt")
				for plugin in open('/tmp/plugins.txt', 'r'):
					self.pluginlist += plugin[0:plugin.find(' - ')] + "\n"
				os_system("rm -f /tmp/plugins.txt")
			except Exception:
				print "[TVCharts] Error loading plugins!"

		# Status Update
		getPage(url='http://www.dreambox-plugins.de/feeds/TVCharts/status.php', agent="Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)", timeout=60, method='POST', headers={'Content-Type': 'application/x-www-form-urlencoded'}, postdata=urlencode({'boxid': self.BoxID, 'devicename': self.DeviceName, 'imageversion': self.ImageVersion, 'enigmaversion': self.EnigmaVersion, 'lastchannel': channel_name, 'lastevent': event_name, 'eventdescr': event_description, 'lastbegin': event_begin, 'lastserviceref': self.serviceref, 'timerlist': self.timerlist, 'pluginlist': self.pluginlist})).addErrback(self.updateError)

		# Restart Timer
		self.DBStatusTimer.start(900000, True)
示例#34
0
import os
import re
from Tools.HardwareInfo import HardwareInfo
try:
	device_name = HardwareInfo().get_device_name()
except:
	device_name = None

#sfdisk_version_bug = '2.28.1' in os.popen('/usr/sbin/sfdisk -v').read()

BOX_NAME = "none"
MODEL_NAME = "none"
if os.path.exists("/proc/stb/info/boxtype"):
	BOX_NAME = "all"
	try:
		f = open("/proc/stb/info/boxtype")
		MODEL_NAME = f.read().strip()
		f.close()
	except:
		pass
elif os.path.exists("/proc/stb/info/hwmodel"):
	BOX_NAME = "all"
	try:
		f = open("/proc/stb/info/hwmodel")
		MODEL_NAME = f.read().strip()
		f.close()
	except:
		pass
elif os.path.exists("/proc/stb/info/vumodel"):
	BOX_NAME = "vu"
示例#35
0
SystemInfo["NumVideoDecoders"] = getNumVideoDecoders()
SystemInfo["Udev"] = not fileExists("/dev/.devfsd")
SystemInfo["PIPAvailable"] = getMachineBuild() not in ("i55plus") and SystemInfo["NumVideoDecoders"] > 1
SystemInfo["CanMeasureFrontendInputPower"] = eDVBResourceManager.getInstance().canMeasureFrontendInputPower()
SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output()
SystemInfo["ZapMode"] = fileCheck("/proc/stb/video/zapmode") or fileCheck("/proc/stb/video/zapping_mode")
SystemInfo["NumFrontpanelLEDs"] = countFrontpanelLEDs()
SystemInfo["FrontpanelDisplay"] = fileExists("/dev/dbox/oled0") or fileExists("/dev/dbox/lcd0")
SystemInfo["7segment"] = getDisplayType() in ("7segment")
SystemInfo["ConfigDisplay"] = SystemInfo["FrontpanelDisplay"] and getDisplayType() not in ("7segment")
SystemInfo["LCDSKINSetup"] = pathExists("/usr/share/enigma2/display") and not SystemInfo["7segment"]
SystemInfo["OledDisplay"] = fileExists("/dev/dbox/oled0")
SystemInfo["LcdDisplay"] = fileExists("/dev/dbox/lcd0")
SystemInfo["DisplayLED"] = getBoxType() in ("gb800se", "gb800solo", "gbx1", "gbx2", "gbx3", "gbx3h")
SystemInfo["LEDButtons"] = False # getBoxType() == "vuultimo", For some reason this causes a cpp crash on vuultimo (which we no longer build). The cause needs investigating or the dead code in surrounding modules that this change causes should be removed.
SystemInfo["DeepstandbySupport"] = HardwareInfo().has_deepstandby()
SystemInfo["Fan"] = fileCheck("/proc/stb/fp/fan")
SystemInfo["FanPWM"] = SystemInfo["Fan"] and fileCheck("/proc/stb/fp/fan_pwm")
SystemInfo["PowerLED"] = fileExists("/proc/stb/power/powerled")
SystemInfo["PowerLED2"] = fileExists("/proc/stb/power/powerled2")
SystemInfo["StandbyLED"] = fileExists("/proc/stb/power/standbyled")
SystemInfo["SuspendLED"] = fileExists("/proc/stb/power/suspendled")
SystemInfo["LedPowerColor"] = fileExists("/proc/stb/fp/ledpowercolor")
SystemInfo["LedStandbyColor"] = fileExists("/proc/stb/fp/ledstandbycolor")
SystemInfo["LedSuspendColor"] = fileExists("/proc/stb/fp/ledsuspendledcolor")
SystemInfo["Power24x7On"] = fileExists("/proc/stb/fp/power4x7on")
SystemInfo["Power24x7Standby"] = fileExists("/proc/stb/fp/power4x7standby")
SystemInfo["Power24x7Suspend"] = fileExists("/proc/stb/fp/power4x7suspend")
SystemInfo["WakeOnLAN"] = getBoxType() not in ("et8000", "et10000") and fileCheck("/proc/stb/power/wol") or fileCheck("/proc/stb/fp/wol")
SystemInfo["HDMICEC"] = (fileExists("/dev/hdmi_cec") or fileExists("/dev/misc/hdmi_cec0")) and isPluginInstalled("HdmiCEC")
SystemInfo["HasHDMI-CEC"] = isPluginInstalled("HdmiCEC")
示例#36
0
	def startCableTransponderSearch(self, nim_idx):
		if not self.tryGetRawFrontend(nim_idx):
			self.session.nav.stopService()
			if not self.tryGetRawFrontend(nim_idx):
				if self.session.pipshown: # try to disable pip
					self.session.pipshown = False
					del self.session.pip
				if not self.tryGetRawFrontend(nim_idx):
					self.cableTransponderSearchFinished()
					return
		self.__tlist = [ ]
		self.remainingdata = ""
		self.cable_search_container = eConsoleAppContainer()
		self.cable_search_container.appClosed.append(self.cableTransponderSearchClosed)
		self.cable_search_container.dataAvail.append(self.getCableTransponderData)
		cableConfig = config.Nims[nim_idx].cable
		tunername = nimmanager.getNimName(nim_idx)
		try:
			bus = nimmanager.getI2CDevice(nim_idx)
			if bus is None:
				print "ERROR: could not get I2C device for nim", nim_idx, "for cable transponder search"
				bus = 2
		except:
			# older API
			if nim_idx < 2:
				if HardwareInfo().get_device_name() == "dm500hd":
					bus = 2
				else:
					bus = nim_idx
			else:
				if nim_idx == 2:
					bus = 2 # DM8000 first nim is /dev/i2c/2
				else:
					bus = 4 # DM8000 second num is /dev/i2c/4

		if tunername == "CXD1981":
			cmd = "cxd1978 --init --scan --verbose --wakeup --inv 2 --bus %d" % bus
		elif tunername.startswith("Sundtek"):
			cmd = "mediaclient --blindscan %d" % nim_idx
		else:
			cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus %d" % bus

		if cableConfig.scan_type.getValue() == "bands":
			cmd += " --scan-bands "
			bands = 0
			if cableConfig.scan_band_EU_VHF_I.getValue():
				bands |= cable_bands["DVBC_BAND_EU_VHF_I"]
			if cableConfig.scan_band_EU_MID.getValue():
				bands |= cable_bands["DVBC_BAND_EU_MID"]
			if cableConfig.scan_band_EU_VHF_III.getValue():
				bands |= cable_bands["DVBC_BAND_EU_VHF_III"]
			if cableConfig.scan_band_EU_UHF_IV.getValue():
				bands |= cable_bands["DVBC_BAND_EU_UHF_IV"]
			if cableConfig.scan_band_EU_UHF_V.getValue():
				bands |= cable_bands["DVBC_BAND_EU_UHF_V"]
			if cableConfig.scan_band_EU_SUPER.getValue():
				bands |= cable_bands["DVBC_BAND_EU_SUPER"]
			if cableConfig.scan_band_EU_HYPER.getValue():
				bands |= cable_bands["DVBC_BAND_EU_HYPER"]
			if cableConfig.scan_band_US_LOW.getValue():
				bands |= cable_bands["DVBC_BAND_US_LO"]
			if cableConfig.scan_band_US_MID.getValue():
				bands |= cable_bands["DVBC_BAND_US_MID"]
			if cableConfig.scan_band_US_HIGH.getValue():
				bands |= cable_bands["DVBC_BAND_US_HI"]
			if cableConfig.scan_band_US_SUPER.getValue():
				bands |= cable_bands["DVBC_BAND_US_SUPER"]
			if cableConfig.scan_band_US_HYPER.getValue():
				bands |= cable_bands["DVBC_BAND_US_HYPER"]
			cmd += str(bands)
		else:
			cmd += " --scan-stepsize "
			cmd += str(cableConfig.scan_frequency_steps.getValue())
		if cableConfig.scan_mod_qam16.getValue():
			cmd += " --mod 16"
		if cableConfig.scan_mod_qam32.getValue():
			cmd += " --mod 32"
		if cableConfig.scan_mod_qam64.getValue():
			cmd += " --mod 64"
		if cableConfig.scan_mod_qam128.getValue():
			cmd += " --mod 128"
		if cableConfig.scan_mod_qam256.getValue():
			cmd += " --mod 256"
		if cableConfig.scan_sr_6900.getValue():
			cmd += " --sr 6900000"
		if cableConfig.scan_sr_6875.getValue():
			cmd += " --sr 6875000"
		if cableConfig.scan_sr_ext1.getValue() > 450:
			cmd += " --sr "
			cmd += str(cableConfig.scan_sr_ext1.getValue())
			cmd += "000"
		if cableConfig.scan_sr_ext2.getValue() > 450:
			cmd += " --sr "
			cmd += str(cableConfig.scan_sr_ext2.getValue())
			cmd += "000"
		print "TDA1002x CMD is", cmd

		self.cable_search_container.execute(cmd)
		tmpstr = _("Try to find used transponders in cable network.. please wait...")
		tmpstr += "\n\n..."
		self.cable_search_session = self.session.openWithCallback(self.cableTransponderSearchSessionClosed, MessageBox, tmpstr, MessageBox.TYPE_INFO)
示例#37
0
    SystemInfo["CI%dRelevantPidsRoutingSupport" % cislot] = fileCheck(
        "/proc/stb/tsmux/ci%d_relevant_pids_routing" % cislot)

SystemInfo["HasSoftcamInstalled"] = hassoftcaminstalled()
SystemInfo["NumVideoDecoders"] = getNumVideoDecoders()
SystemInfo["PIPAvailable"] = SystemInfo["NumVideoDecoders"] > 1
SystemInfo["CanMeasureFrontendInputPower"] = eDVBResourceManager.getInstance(
).canMeasureFrontendInputPower()
SystemInfo["12V_Output"] = Misc_Options.getInstance().detected_12V_output()
SystemInfo["ZapMode"] = fileCheck("/proc/stb/video/zapmode") or fileCheck(
    "/proc/stb/video/zapping_mode")
SystemInfo["NumFrontpanelLEDs"] = countFrontpanelLEDs()
SystemInfo["FrontpanelDisplay"] = fileExists("/dev/dbox/oled0") or fileExists(
    "/dev/dbox/lcd0")
SystemInfo["LCDsymbol_circle_recording"] = fileCheck(
    "/proc/stb/lcd/symbol_circle") or HardwareInfo().get_device_model() in (
        "hd51", "vs1500") and fileCheck("/proc/stb/lcd/symbol_recording")
SystemInfo["LCDsymbol_timeshift"] = fileCheck("/proc/stb/lcd/symbol_timeshift")
SystemInfo["LCDshow_symbols"] = (
    HardwareInfo().get_device_model().startswith("et9")
    or HardwareInfo().get_device_model()
    in ("hd51", "vs1500")) and fileCheck("/proc/stb/lcd/show_symbols")
SystemInfo["LCDsymbol_hdd"] = HardwareInfo().get_device_model() in (
    "hd51", "vs1500") and fileCheck("/proc/stb/lcd/symbol_hdd")
SystemInfo["FrontpanelDisplayGrayscale"] = fileExists("/dev/dbox/oled0")
SystemInfo["DeepstandbySupport"] = HardwareInfo().get_device_name() != "dm800"
SystemInfo["Fan"] = fileCheck("/proc/stb/fp/fan")
SystemInfo["FanPWM"] = SystemInfo["Fan"] and fileCheck("/proc/stb/fp/fan_pwm")
SystemInfo["StandbyLED"] = fileCheck("/proc/stb/power/standbyled")
SystemInfo["SuspendLED"] = fileCheck("/proc/stb/power/suspendled")
SystemInfo["LedPowerColor"] = fileExists("/proc/stb/fp/ledpowercolor")
示例#38
0
###################################################

MAIN_PAGE = "http://www.zdf.de"

PNG_PATH = resolveFilename(SCOPE_PLUGINS)+"/Extensions/ZDFMediathek/"

TYPE_NOTHING = 0
TYPE_MOVIE = 1
TYPE_PODCAST = 2
TYPE_MOVIELIST_CATEGORY = 3

LIST_LEFT = 0
LIST_RIGHT = 1
LIST_NONE = 2

deviceName = HardwareInfo().get_device_name()

PLAY_MP4 = False
PLAY_WMV = False

if not deviceName.startswith("dm7025"):
	PLAY_MP4 = True
if deviceName.startswith("dm7020hd"):
	PLAY_WMV = True
try:
	from LT.LTStreamPlayer import streamplayer
except ImportError:
	try:
		from Plugins.Extensions.LTMediaCenter.LTStreamPlayer import streamplayer
	except ImportError:
		streamplayer = None
示例#39
0
class AVSwitch:
	hw_type = HardwareInfo().get_device_name()
	rates = { } # high-level, use selectable modes.
	modes = { }  # a list of (high-level) modes for a certain port.

	rates["PAL"] =		{	"50Hz":		{ 50: "pal" },
							"60Hz":		{ 60: "pal60" },
							"multi":	{ 50: "pal", 60: "pal60" } }

	rates["NTSC"] =		{	"60Hz":		{ 60: "ntsc" } }

	rates["Multi"] =	{	"multi":	{ 50: "pal", 60: "ntsc" } }

	rates["480i"] =		{	"60Hz":		{ 60: "480i" } }

	rates["576i"] =		{	"50Hz":		{ 50: "576i" } }

	rates["480p"] =		{	"60Hz":		{ 60: "480p" } }

	rates["576p"] =		{	"50Hz":		{ 50: "576p" } }

	rates["720p"] =		{	"50Hz":		{ 50: "720p50" },
							"60Hz":		{ 60: "720p" },
							"multi":	{ 50: "720p50", 60: "720p" },
							"auto":		{ 50: "720p50", 60: "720p", 24: "720p24" } }

	rates["1080i"] =	{	"50Hz":		{ 50: "1080i50" },
							"60Hz":		{ 60: "1080i" },
							"multi":	{ 50: "1080i50", 60: "1080i" },
							"auto":		{ 50: "1080i50", 60: "1080i", 24: "1080p24" } }

	rates["1080p"] =	{	"50Hz":		{ 50: "1080p50" },
							"60Hz":		{ 60: "1080p" },
							"multi":	{ 50: "1080p50", 60: "1080p" },
							"auto":		{ 50: "1080p50", 60: "1080p", 24: "1080p24" } }

	if getBoxType().startswith('dm9'):
		rates["2160p"] =	{	"50Hz":		{ 50: "2160p50" },
								"60Hz":		{ 60: "2160p60" },
								"multi":	{ 50: "2160p50", 60: "2160p60" },
								"auto":		{ 50: "2160p50", 60: "2160p60", 24: "2160p24" } }
	else:
		rates["2160i"] =	{	"50Hz":		{ 50: "2160i50" },
								"60Hz":		{ 60: "2160i" },
								"multi":	{ 50: "2160i50", 60: "2160i" },
								"auto":		{ 50: "2160i50", 60: "2160i", 24: "2160i24" } }

		rates["2160p"] =	{	"50Hz":		{ 50: "2160p50" },
								"60Hz":		{ 60: "2160p" },
								"multi":	{ 50: "2160p50", 60: "2160p" },
								"auto":		{ 50: "2160p50", 60: "2160p", 24: "2160p24" } }

	rates["2160p30"] =	{	"25Hz":		{ 50: "2160p25" },
							"30Hz":		{ 60: "2160p30"} ,
							"multi":	{ 50: "2160p25", 60: "2160p30" },
							"auto":		{ 50: "2160p25", 60: "2160p30", 24: "2160p24" } }

	rates["PC"] = {
		"1024x768":						{ 60: "1024x768" }, # not possible on DM7025
		"800x600" :						{ 60: "800x600" },  # also not possible
		"720x480" :						{ 60: "720x480" },
		"720x576" :						{ 60: "720x576" },
		"1280x720":						{ 60: "1280x720" },
		"1280x720 multi":				{ 50: "1280x720_50", 60: "1280x720" },
		"1920x960" :					{ 60: "1920x960" },
		"1920x960 multi":				{ 50: "1920x960_50", 60: "1920x960" },
		"1920x1080":					{ 60: "1920x1080"},
		"1920x1080 multi":				{ 50: "1920x1080", 60: "1920x1080_50" },
		"2560x1440":					{ 60: "2560x1440"},
		"2560x1440 multi":				{ 50: "2560x1440", 60: "2560x1440_50" },
		"3840x2160":					{ 60: "3840x2160"},
		"3840x2160 multi":				{ 50: "3840x2160", 60: "3840x2160_50" },
		"4096x2160":					{ 60: "4096x2160"},
		"4096x2160 multi":				{ 50: "4096x2160", 60: "4096x2160_50" },
		"4096x3072":					{ 60: "4096x3072"},
		"5120x2160":					{ 60: "5120x2160"},
		"5120x2160 multi":				{ 50: "5120x2160", 60: "5120x2160_50" },
		"5120x2880":					{ 60: "5120x2880"},
		"7680x4320":					{ 60: "7680x4320"},
		"7680x4320 multi":				{ 50: "7680x4320", 60: "7680x4320_50" },
		"1280x1024":					{ 60: "1280x1024"},
		"1280x1024 multi":				{ 50: "1280x1024", 60: "1280x1024_50" },
		"1366x768" :					{ 60: "1366x768"},
		"1366x768 multi":				{ 50: "1366x768", 60: "1366x768_50" },
		"1440x900" :					{ 60: "1440x900"},
		"1440x900 multi":				{ 50: "1440x900", 60: "1440x900_50" },
		"1600x900" :					{ 60: "1600x900"},
		"1600x900 multi":				{ 50: "1600x900", 60: "1600x900_50" },
		"1680x1050" :					{ 60: "1680x1050"},
		"1280x768":						{ 60: "1280x768" },
		"1280x800":						{ 60: "1280x800" },
		"640x480" :						{ 60: "640x480" }
	}

	modes["Scart"] = ["PAL", "NTSC", "Multi"]
	# modes["DVI-PC"] = ["PC"]

	if (about.getChipSetString() in ('5272s', '7366', '7376', '7444', '7445', '7445s')):
		modes["HDMI"] = ["720p", "1080p", "2160i", "2160p", "2160p30", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080p", "1080i", "2160i", "2160p"}
	elif (about.getChipSetString() in ('7252', '7251', '7251S', '7252S', '7251s', '7252s', '7444s', '3798mv200', '3798cv200', 'hi3798mv200', 'hi3798cv200')):
		modes["HDMI"] = ["720p", "1080p", "2160i", "2160p", "2160p30", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080p", "1080i", "2160i", "2160p", "2160p30"}
	elif (about.getChipSetString() in ('7111', '7162', '7241', '7346', '7356', '7358', '7362', '73565', '73625', '7424', '7425', '7435', '7552', '7581', '7584', '75845', '7585', 'pnx8493')) or (getBrandOEM() in ('azbox')):
		modes["HDMI"] = ["720p", "1080p", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080p", "1080i"}
	elif about.getChipSetString() in ('meson-6'):
		modes["HDMI"] = ["720p", "1080p", "1080i"]
		widescreen_modes = {"720p", "1080p", "1080i"}
	elif about.getChipSetString() in ('meson-64','S905D'):
		modes["HDMI"] = ["720p", "1080p", "2160p", "2160p30", "2160i", "1080i"]
		widescreen_modes = {"720p", "1080p", "2160p", "2160p30", "2160i", "1080i"}
	else:
		modes["HDMI"] = ["720p", "1080i", "576p", "576i", "480p", "480i"]
		widescreen_modes = {"720p", "1080i"}

	modes["YPbPr"] = modes["HDMI"]
	if getBoxType() in ('dm500hd', 'dm800', 'vuuno', 'vusolo', 'vusolo2', 'vuultimo', 'vuduo', 'vuduo2'):
		modes["Scart-YPbPr"] = modes["HDMI"]

	# if "DVI-PC" in modes and not getModeList("DVI-PC"):
	# 	print "[AVSwitch] remove DVI-PC because of not existing modes"
	# 	del modes["DVI-PC"]
	if "YPbPr" in modes and getBoxType() in ('alien5', 'osninopro','protek4k','viperslim','axashis4kcombo','axashis4kcomboplus','dinobot4kplus','dinobot4kmini','zgemmah9t','zgemmah9s','zgemmah9splus','vuzero4k','vuuno4kse','anadol4k','mediabox4k','dinobot4kl','dinobot4k','dinobot4kse','lunix','purehdse','lunix34k','sf5008','et13000','zgemmah6','vipert2c','vipercombo','vipercombohdd','e4hdultra','evoslimse','evoslimt2c','beyonwizu4','zgemmah4','osnino','osninoplus','axultra','gbue4k','spycat4kcombo','spycat4k','valalinux','formuler4ip','formuler3ip','tm4ksuper','galaxy4k','zgemmah52splus','zgemmah2splus','zgemmah7','zgemmah32tc','zgemmah52tc','alphatriple','gi11000','spycat4kmini','tmtwin4k','tmnanom3','tiviarmin','vimastec1000','vimastec1500', 'gbquad4k','revo4k','force3uhdplus','force3uhd','force2nano','evoslim','zgemmah5ac', 'zgemmah3ac', 'bre2zet2c', 'dm900', 'dm920', 'wetekplay', 'wetekplay2', 'wetekhub', 'bre2ze4k', 'vuuno4k', 'vuultimo4k', 'sf4008', 'e4hdcombo', 'ultrabox', 'osmega', 'tmnano3t', 'novaip', 'novacombo', 'novatwin', 'dm520', 'dm525', 'megaforce2', 'purehd', 'sf128', 'sf138', 'mutant11', 'xpeedlxpro', 'mbtwinplus', 'mutant51', 'ax51', 'twinboxlcdci5' , 'twinboxlcdci', 'singleboxlcd', 'formuler4', 'formuler4turbo', 'zgemmah5', 'zgemmah52s', 'zgemmai55', 'sf98', 'odinplus', 'zgemmaslc', '9900lx', '9910lx', '9911lx', 'vusolo4k', 'et7x00mini', 'evomini', 'evominiplus', 'zgemmahs', 'zgemmah2s', 'zgemmah2h', 't2cable', 'xpeedlxcs2', 'xpeedlxcc', 'osmini', 'osminiplus', 'gbx1', 'gbx2', 'gbx3', 'gbx3h', 'sf3038', 'spycat', 'bwidowx', 'bwidowx2', 'fegasusx3', 'fegasusx5s', 'fegasusx5t', 'force2', 'force2plus', 'force2plushv', 'optimussos', 'tmnanose', 'tmnanosem2', 'tmnanosem2plus', 'tmnanocombo', 'zgemmash1', 'zgemmash2', 'zgemmas2s', 'zgemmass', 'mago', 'enibox', 'sf108', 'x1plus', 'xcombo', 'mutant1100', 'mutant1200', 'mutant1265', 'mutant1500', 'mutant500c', 'mutant530c', 'et4x00', 'et7500', 'et7000', 'et7100', 'et8500', 'et8500s', 'xp1000mk', 'xp1000max', 'xp1000plus', 'sf8', 'tm2t', 'tmsingle', 'vusolo2', 'tmnano', 'iqonios300hd', 'iqonios300hdv2', 'classm', 'axodin', 'axodinc', 'genius', 'evo', 'galaxym6', 'geniuse3hd', 'evoe3hd', 'axase3', 'axase3c', 'dm500hdv2', 'dm500hd', 'dm800', 'mixosf7', 'mixoslumi', 'mixosf5mini', 'gi9196lite', 'ixusszero', 'optimussos1', 'enfinity', 'marvel1', 'bre2ze', 'sezam1000hd', 'mbmini', 'atemio5x00', 'xpeedlx1', 'xpeedlx2', 'vusolose', 'gbipbox', 'formuler3', 'optimussos3plus', 'force1plus', 'vuzero', 'vizyonvita') or (about.getModelString() == 'ini-3000'):
		del modes["YPbPr"]
	if "Scart" in modes and getBoxType() in ('alien5','osninopro','protek4k','vuzero4k','vuuno4kse','lunix','purehdse','sf5008','et13000','e4hdultra','beyonwizu4','osnino','osninoplus','axultra','gbue4k','gi11000','spycat4kmini','tmtwin4k','tmnanom3','gbquad4k','revo4k','force3uhd','force2nano','dm900', 'dm920', 'wetekplay', 'wetekplay2', 'wetekhub', 'bre2ze4k', 'vuuno4k', 'vuultimo4k', 'sf4008', 'novaip', 'dm520', 'dm525', 'purehd', 'vusolo4k', 'fusionhdse', 'fusionhd', 'force2', 'force2plus', 'force2plushv', 'optimussos', 'tmnanose', 'tmnanosecombo', 'gbx1', 'gbx2', 'gbx3', 'gbx3h', 'gbultraue', 'gbultraueh', 'zgemmai55', 'mutant1500'):
		del modes["Scart"]

	if getBoxType() in ('mutant2400'):
		f = open("/proc/stb/info/board_revision", "r").read()
		if f >= "2":
			del modes["YPbPr"]

	def __init__(self):
		self.last_modes_preferred =  [ ]
		self.on_hotplug = CList()
		self.current_mode = None
		self.current_port = None

		self.readAvailableModes()
		self.is24hzAvailable()

		self.readPreferredModes()
		self.createConfig()

	def readAvailableModes(self):
		try:
			f = open("/proc/stb/video/videomode_choices")
			modes = f.read()[:-1]
			f.close()
		except IOError:
			print "[AVSwitch] couldn't read available videomodes."
			self.modes_available = [ ]
			return
		self.modes_available = modes.split(' ')

	def readPreferredModes(self):
		if config.av.edid_override.value == False:
			try:
				f = open("/proc/stb/video/videomode_edid")
				modes = f.read()[:-1]
				f.close()
				self.modes_preferred = modes.split(' ')
				print "[AVSwitch] reading edid modes: ", self.modes_preferred
			except IOError:
				print "[AVSwitch] reading edid modes failed, using all modes"
				try:
					f = open("/proc/stb/video/videomode_preferred")
					modes = f.read()[:-1]
					f.close()
					self.modes_preferred = modes.split(' ')
					print "[AVSwitch] reading _preferred modes: ", self.modes_preferred
				except IOError:
					print "[AVSwitch] reading preferred modes failed, using all modes"
					self.modes_preferred = self.modes_available
		else:
			self.modes_preferred = self.modes_available
			print "[AVSwitch] used default modes: ", self.modes_preferred
			
		if len(self.modes_preferred) <= 2:
			print "[AVSwitch] preferend modes not ok, possible driver failer, len=", len(self.modes_preferred)
			self.modes_preferred = self.modes_available

		if self.modes_preferred != self.last_modes_preferred:
			self.last_modes_preferred = self.modes_preferred
			self.on_hotplug("HDMI") # must be HDMI

	def is24hzAvailable(self):
		try:
			self.has24pAvailable = os.access("/proc/stb/video/videomode_24hz", os.W_OK) and True or False
		except IOError:
			print "[AVSwitch] failed to read video choices 24hz ."
			self.has24pAvailable = False
		SystemInfo["have24hz"] = self.has24pAvailable

	# check if a high-level mode with a given rate is available.
	def isModeAvailable(self, port, mode, rate):
		rate = self.rates[mode][rate]
		for mode in rate.values():
			if port == "DVI":
				if getBrandOEM() in ('azbox'):
					if mode not in self.modes_preferred and not config.av.edid_override.value:
						print "[AVSwitch] no, not preferred"
						return False
			if port != "HDMI":
				if mode not in self.modes_available:
					return False
			elif mode not in self.modes_preferred:
				return False
		return True

	def isWidescreenMode(self, port, mode):
		return mode in self.widescreen_modes

	def setMode(self, port, mode, rate, force = None):
		print "[AVSwitch] setMode - port: %s, mode: %s, rate: %s" % (port, mode, rate)

		# config.av.videoport.setValue(port)
		# we can ignore "port"
		self.current_mode = mode
		self.current_port = port
		modes = self.rates[mode][rate]


		mode_50 = modes.get(50)
		mode_60 = modes.get(60)
		mode_24 = modes.get(24)

		if mode_50 is None or force == 60:
			mode_50 = mode_60
		if mode_60 is None or force == 50:
			mode_60 = mode_50
		if mode_24 is None or force:
			mode_24 = mode_60
			if force == 50:
				mode_24 = mode_50

		try:
			f = open("/proc/stb/video/videomode_50hz", "w")
			f.write(mode_50)
			f.close()
			f = open("/proc/stb/video/videomode_60hz", "w")
			f.write(mode_60)
			f.close()
		except IOError:
			try:
				# fallback if no possibility to setup 50/60 hz mode
				f = open("/proc/stb/video/videomode", "w")
				f.write(mode_50)
				f.close()
			except IOError:
				print "[AVSwitch] setting videomode failed."

		if SystemInfo["have24hz"]:
			try:
				open("/proc/stb/video/videomode_24hz", "w").write(mode_24)
			except IOError:
				print "[VideoHardware] cannot open /proc/stb/video/videomode_24hz"

		if getBrandOEM() in ('gigablue'):
			try:
				# use 50Hz mode (if available) for booting
				f = open("/etc/videomode", "w")
				f.write(mode_50)
				f.close()
			except IOError:
				print "[AVSwitch] writing initial videomode to /etc/videomode failed."

		map = {"cvbs": 0, "rgb": 1, "svideo": 2, "yuv": 3}
		self.setColorFormat(map[config.av.colorformat.value])

		if about.getCPUString().startswith('STx'):
			#call setResolution() with -1,-1 to read the new scrren dimensions without changing the framebuffer resolution
			from enigma import gMainDC
			gMainDC.getInstance().setResolution(-1, -1)

	def saveMode(self, port, mode, rate):
		config.av.videoport.setValue(port)
		config.av.videoport.save()
		if port in config.av.videomode:
			config.av.videomode[port].setValue(mode)
			config.av.videomode[port].save()
		if mode in config.av.videorate:
			config.av.videorate[mode].setValue(rate)
			config.av.videorate[mode].save()

	def isPortAvailable(self, port):
		# fixme
		return True

	def isPortUsed(self, port):
		if port == "HDMI":
			self.readPreferredModes()
			return len(self.modes_preferred) != 0
		else:
			return True

	def getPortList(self):
		return [port for port in self.modes if self.isPortAvailable(port)]

	# get a list with all modes, with all rates, for a given port.
	def getModeList(self, port):
		res = [ ]
		for mode in self.modes[port]:
			# list all rates which are completely valid
			rates = [rate for rate in self.rates[mode] if self.isModeAvailable(port, mode, rate)]

			# if at least one rate is ok, add this mode
			if len(rates):
				res.append( (mode, rates) )
		return res

	def createConfig(self, *args):
		hw_type = HardwareInfo().get_device_name()
		has_hdmi = HardwareInfo().has_hdmi()
		lst = []

		config.av.videomode = ConfigSubDict()
		config.av.autores_mode_sd = ConfigSubDict()
		config.av.autores_mode_hd = ConfigSubDict()
		config.av.autores_mode_fhd = ConfigSubDict()
		config.av.autores_mode_uhd = ConfigSubDict()
		config.av.videorate = ConfigSubDict()
		config.av.autores_rate_sd = ConfigSubDict()
		config.av.autores_rate_hd = ConfigSubDict()
		config.av.autores_rate_fhd = ConfigSubDict()
		config.av.autores_rate_uhd = ConfigSubDict()

		# create list of output ports
		portlist = self.getPortList()
		for port in portlist:
			descr = port
			if 'HDMI' in port:
				lst.insert(0, (port, descr))
			else:
				lst.append((port, descr))

			modes = self.getModeList(port)
			if len(modes):
				config.av.videomode[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_sd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_hd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_fhd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
				config.av.autores_mode_uhd[port] = ConfigSelection(choices = [mode for (mode, rates) in modes])
			for (mode, rates) in modes:
				ratelist = []
				for rate in rates:
					if rate in ("auto") and not SystemInfo["have24hz"]:
						continue
					ratelist.append((rate, rate))
				config.av.videorate[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_sd[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_hd[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_fhd[mode] = ConfigSelection(choices = ratelist)
				config.av.autores_rate_uhd[mode] = ConfigSelection(choices = ratelist)
		config.av.videoport = ConfigSelection(choices = lst)

	def setInput(self, input):
		INPUT = { "ENCODER": 0, "SCART": 1, "AUX": 2 }
		eAVSwitch.getInstance().setInput(INPUT[input])

	def setColorFormat(self, value):
		if not self.current_port:
			self.current_port = config.av.videoport.value
		if self.current_port in ("YPbPr", "Scart-YPbPr"):
			eAVSwitch.getInstance().setColorFormat(3)
		elif self.current_port in ("RCA"):
			eAVSwitch.getInstance().setColorFormat(0)
		else:
			eAVSwitch.getInstance().setColorFormat(value)

	def setConfiguredMode(self):
		port = config.av.videoport.value
		if port not in config.av.videomode:
			print "[AVSwitch] current port not available, not setting videomode"
			return

		mode = config.av.videomode[port].value

		if mode not in config.av.videorate:
			print "[AVSwitch] current mode not available, not setting videomode"
			return

		rate = config.av.videorate[mode].value
		self.setMode(port, mode, rate)

	def setAspect(self, cfgelement):
		print "[AVSwitch] setting aspect: %s" % cfgelement.value
		try:
			f = open("/proc/stb/video/aspect", "w")
			f.write(cfgelement.value)
			f.close()
		except IOError:
			print "[AVSwitch] setting aspect failed."

	def setWss(self, cfgelement):
		if not cfgelement.value:
			wss = "auto(4:3_off)"
		else:
			wss = "auto"
		if os.path.exists("/proc/stb/denc/0/wss"):
			print "[AVSwitch] setting wss: %s" % wss
			f = open("/proc/stb/denc/0/wss", "w")
			f.write(wss)
			f.close()

	def setPolicy43(self, cfgelement):
		print "[AVSwitch] setting policy: %s" % cfgelement.value
		arw = "0"
		try:
			if about.getChipSetString() in ('meson-6', 'meson-64'):
				if cfgelement.value == "panscan" : arw = "11"
				if cfgelement.value == "letterbox" : arw = "12"
				if cfgelement.value == "bestfit" : arw = "10"
				open("/sys/class/video/screen_mode", "w").write(arw)
			else:
				f = open("/proc/stb/video/policy", "w")
				f.write(cfgelement.value)
				f.close()
		except IOError:
			print "[AVSwitch] setting policy43 failed."

	def setPolicy169(self, cfgelement):
		if os.path.exists("/proc/stb/video/policy2"):
			print "[AVSwitch] setting policy2: %s" % cfgelement.value
			f = open("/proc/stb/video/policy2", "w")
			f.write(cfgelement.value)
			f.close()

	def getOutputAspect(self):
		ret = (16,9)
		port = config.av.videoport.value
		if port not in config.av.videomode:
			print "current port not available in getOutputAspect!!! force 16:9"
		else:
			mode = config.av.videomode[port].value
			force_widescreen = self.isWidescreenMode(port, mode)
			is_widescreen = force_widescreen or config.av.aspect.value in ("16:9", "16:10")
			is_auto = config.av.aspect.value == "auto"
			if is_widescreen:
				if force_widescreen:
					pass
				else:
					aspect = {"16:9": "16:9", "16:10": "16:10"}[config.av.aspect.value]
					if aspect == "16:10":
						ret = (16,10)
			elif is_auto:
				try:
					if "1" in open("/proc/stb/vmpeg/0/aspect", "r").read(): # 4:3
						ret = (4,3)
				except IOError:
					pass
			else:  # 4:3
				ret = (4,3)
		return ret

	def getFramebufferScale(self):
		aspect = self.getOutputAspect()
		fb_size = getDesktop(0).size()
		return aspect[0] * fb_size.height(), aspect[1] * fb_size.width()

	def setAspectRatio(self, value):
		eAVSwitch.getInstance().setAspectRatio(value)

	def getAspectRatioSetting(self):
		valstr = config.av.aspectratio.value
		if valstr == "4_3_letterbox":
			val = 0
		elif valstr == "4_3_panscan":
			val = 1
		elif valstr == "16_9":
			val = 2
		elif valstr == "16_9_always":
			val = 3
		elif valstr == "16_10_letterbox":
			val = 4
		elif valstr == "16_10_panscan":
			val = 5
		elif valstr == "16_9_letterbox":
			val = 6
		return val
示例#40
0
def parse_ecm(filename):
    addr = caid = pid = provid = port = reader = protocol = cw0 = cw1 = ''
    source = ecmtime = hops = 0
    try:
        file = open(filename)
        for line in file.readlines():
            line = line.strip()
            if line.find('CaID') >= 0:
                x = line.split(' ')
                caid = x[x.index('CaID') + 1].split(',')[0].strip()
            elif line.find('caid') >= 0:
                x = line.split(':', 1)
                caid = x[1].strip()
            if line.find('pid:') >= 0:
                x = line.split(':', 1)
                pid = x[1].strip()
            elif line.find('pid') >= 0:
                x = line.split(' ')
                pid = x[x.index('pid') + 1].strip()
            if line.find('prov:') >= 0:
                x = line.split(':', 1)
                provid = x[1].strip().split(',')[0]
            elif line.find('provid:') >= 0:
                x = line.split(':', 1)
                provid = x[1].strip()
            if line.find('msec') >= 0:
                x = line.split(' ', 1)
                ecmtime = int(x[0].strip())
            elif line.find('ecm time:') >= 0:
                x = line.split(':', 1)
                if x[1].strip() == 'nan':
                    ecmtime = 0
                else:
                    try:
                        ecmtime = int(float(x[1].strip()) * 1000)
                    except:
                        y = x[1].strip().split(' ', 1)
                        ecmtime = int(float(y[0].strip()))

            if line.find('hops:') >= 0:
                x = line.split(':', 1)
                hops = int(x[1].strip())
            if line.find('reader:') >= 0:
                x = line.split(':', 1)
                reader = x[1].strip()
            if line.find('protocol:') >= 0:
                x = line.split(':', 1)
                protocol = x[1].strip()
            if line.find('using:') >= 0:
                x = line.split(':', 1)
                if x[1].strip() == 'emu':
                    source = 1
                elif x[1].strip() == 'net' or x[1].strip() == 'newcamd' or x[
                        1].strip() == 'CCcam-s2s' or x[1].strip() == 'gbox':
                    source = 2
            elif line.find('source:') >= 0:
                x = line.split(':')
                if x[1].strip() == 'emu':
                    source = 1
                elif x[1].find('net') >= 0:
                    source = 2
                    port = x[2].strip().split(')')[0]
                    addr = x[1].split(' ')[4]
                elif x[1].strip() == 'newcamd':
                    source = 2
            elif line.find('address:') >= 0:
                x = line.split(':')
                if x[1].strip() != '':
                    if x[1].find('/dev/sci0') >= 0:
                        source = 4
                    elif x[1].find('/dev/sci1') >= 0:
                        source = 5
                    elif x[1].find('local') >= 0:
                        source = 1
                    elif x[1].find('/dev/ttyUSB0') >= 0:
                        source = 6
                    elif x[1].find('/dev/ttyUSB1') >= 0:
                        source = 7
                    else:
                        try:
                            addr = x[1].strip()
                            port = x[2].strip()
                        except:
                            addr = x[1].strip()

            elif line.find('from:') >= 0:
                if line.find('local') >= 0:
                    source = 3
                else:
                    source = 2
                    x = line.split(':')
                    addr = x[1].strip()
            elif line.find('slot-1') >= 0:
                source = 4
                if HardwareInfo().get_device_name() == 'dm800se':
                    source = 5
            elif line.find('slot-2') >= 0:
                source = 5
                if HardwareInfo().get_device_name() == 'dm800se':
                    source = 4
            elif line.find('decode:') >= 0:
                if line.find('Internal') >= 0:
                    source = 1
                elif line.find('Network') >= 0:
                    source = 2
                elif line.find('/dev/sci0') >= 0:
                    source = 4
                    if HardwareInfo().get_device_name() == 'dm800se':
                        source = 5
                elif line.find('/dev/sci1') >= 0:
                    source = 5
                    if HardwareInfo().get_device_name() == 'dm800se':
                        source = 4
                else:
                    source = 2
                    x = line.split(':')
                    if x[1].strip() != '':
                        try:
                            addr = x[1].strip()
                            port = x[2].strip()
                        except:
                            addr = x[1].strip()

            if line.find('cw0:') >= 0:
                x = line.split(':', 1)
                cw0 = x[1].strip()
            if line.find('cw1:') >= 0:
                x = line.split(':', 1)
                cw1 = x[1].strip()

        file.close()
        return (caid, pid, provid, ecmtime, source, addr, port, hops, reader,
                protocol, cw0, cw1)
    except:
        return 0
示例#41
0
class AC3delay:
    def __init__(self):
        self.iService = None
        self.iServiceReference = None
        self.isStreamService = False
        self.iAudioDelay = None
        self.channelAudio = AC3
        self.whichAudio = AC3
        self.bIsRecording = False

        # Current audio- delay
        self.systemDelay = {}

        self.getAudioInformation()

        self.activateTimer = eTimer()
        self.activateTimer.callback.append(self.activateDelay)
        self.activateWait = config.plugins.AC3LipSync.activationDelay.getValue()
        
        # Current value for movie start behaviour
        self.movieStart = config.usage.on_movie_start.getValue()

        # find out box type
        self.oHWInfo = HardwareInfo()
        self.bHasToRestartService = self.oHWInfo.get_device_name() == "dm7025"
        
    def initAudio(self):
        self.iService = NavigationInstance.instance.getCurrentService()
        self.iServiceReference = NavigationInstance.instance.getCurrentlyPlayingServiceReference()
        self.isStreamService = self.iServiceReference and '%3a//' in self.iServiceReference.toString()
        self.iAudioDelay = self.iService and self.iService.audioDelay()
        self.iSeek = self.iService and self.iService.seek()

    def deleteAudio(self):
        self.iService = None
        self.iAudioDelay = None
        self.iSeek = None

    def setChannelAudio(self, sAudio):
        self.channelAudio = sAudio

    def delayedActivateDelay(self):
        if self.activateTimer.isActive:
            self.activateTimer.stop()
        self.activateTimer.start(self.activateWait, True)

    def activateDelay(self):
        # This activation code is only neccessary for DM7025. 
        # DM800, DM8000 and DM500HD directly activate the delay after using "setAC3Delay" and "setPCMDelay", they don't need the service restart
        if self.activateTimer.isActive:
            self.activateTimer.stop()
        if self.bHasToRestartService == True:
            bInitialized = False
            if self.iService is None:
                self.initAudio()
                bInitialized = True
            if self.iServiceReference is not None:
                lCurPosition = self.cueGetCurrentPosition()
                self.deleteAudio()
                if self.whichAudio == self.channelAudio:
                    config.usage.on_movie_start.setValue("beginning")
                    NavigationInstance.instance.stopService()
                    NavigationInstance.instance.playService(self.iServiceReference)
                    config.usage.on_movie_start.setValue(self.movieStart)
                    if lCurPosition is not None:
                        self.lCurPosition = lCurPosition
                        self.timer = eTimer()
                        self.timer.callback.append(self.seekAfterWait)
                        self.timer.start(200, True)
            else:
                self.deleteAudio()
        
    def seekAfterWait(self):
        self.timer.stop()
        self.initAudio()
        if self.iSeek is not None:
            self.iSeek.seekTo(self.lCurPosition)
        self.deleteAudio()

    def cueGetCurrentPosition(self):
        if self.iSeek is None:
            return None
        r = self.iSeek.getPlayPosition()
        if r[0]:
            return None
        return long(r[1])

    def getSystemDelay(self, sAudio):
        bInitialized = False
        if self.iService is None:
            self.initAudio()
            bInitialized = True
        iDelay = 0
        if self.iAudioDelay is not None:
            if sAudio == AC3:
                iDelay = self.iAudioDelay.getAC3Delay()
            elif sAudio == PCM:
                iDelay = self.iAudioDelay.getPCMDelay()
            elif sAudio == AC3GLOB:
                iDelay = config.av.generalAC3delay.getValue()
            else:
                iDelay = config.av.generalPCMdelay.getValue()
        if bInitialized == True:
            self.deleteAudio()
        if iDelay == -1:
            iDelay = 0
        return iDelay

    def setSystemDelay(self, sAudio, iDelay, bDelayStart):
        bInitialized = False
        if self.iService is None:
            self.initAudio()
            bInitialized = True
        if self.iAudioDelay is not None:
            iDelayLameDb = iDelay
            if iDelayLameDb == 0:
                iDelayLameDb = -1
            if sAudio == AC3:
                self.iAudioDelay.setAC3Delay(iDelayLameDb)
            elif sAudio == PCM:
                self.iAudioDelay.setPCMDelay(iDelayLameDb)
            elif sAudio == AC3GLOB:
                config.av.generalAC3delay.setValue(iDelay)
                config.av.generalAC3delay.save()
                #Setting the global delay does not activate it, so now we call setAC3Delay to activate the new delay..
                self.iAudioDelay.setAC3Delay(self.systemDelay[AC3])
            else:
                config.av.generalPCMdelay.setValue(iDelay)
                config.av.generalPCMdelay.save()
                #Setting the global delay does not activate it, so now we call setPCMDelay to activate the new delay..
                self.iAudioDelay.setPCMDelay(self.systemDelay[PCM])
        if bInitialized == True:
            self.deleteAudio()
        if bDelayStart == True:
            self.delayedActivateDelay()
        else:
            self.activateDelay()

    def getAudioInformation(self):
        bInitialized = False
        if self.iService is None:
            self.initAudio()
            bInitialized = True

        # check if we are in a recording
        lCurPosition = self.cueGetCurrentPosition()
        if lCurPosition is not None:
            self.bIsRecording = True
            
        # check if downmix is enabled
        try:
            bDownmixEnabled = config.av.downmix_ac3.value
        except:
            bDownmixEnabled = False

        oAudioTracks = self.iService and self.iService.audioTracks()
        n = oAudioTracks and oAudioTracks.getNumberOfTracks() or 0
        tlist = []
        self.selectedAudioIndex = self.selectedAudioInfo = None
        if n:
            self.selectedAudioIndex = oAudioTracks.getCurrentTrack()
            for x in range(n):
                i = oAudioTracks.getTrackInfo(x)
                language = i.getLanguage()
                description = i.getDescription()
                if LanguageCodes.has_key(language):
                    language = LanguageCodes[language][0]
                if len(description):
                    description += " (" + language + ")"
                else:
                    description = language

                tlist.append((description, x))
                if x == self.selectedAudioIndex:
                    if ((description.find("AC3") != -1 or description.find("AC-3") != -1 or description.find("AC3+") != -1) and not bDownmixEnabled) or description.find("DTS") != -1 or description.find("DTS-HD") != -1:
                        self.whichAudio = AC3
                        self.channelAudio = AC3
                    else:
                        self.whichAudio = PCM
                        self.channelAudio = PCM
                    self.selectedAudioInfo = (description, x)
            tlist.sort(key=lambda x: x[0])

        self.audioTrackList = tlist
        for sAudio in AC3PCM:
            self.systemDelay[sAudio]=self.getSystemDelay(sAudio)
        del oAudioTracks
        if bInitialized == True:
            self.deleteAudio()
示例#42
0
    def runSetup(self):
        ###### chwilowe dane do wyboru mapy lircd
        MyKeymap = []
        self.list = []
        for file in listdir("/etc/"):
            #print os_path.join("/etc/", file)
            if file.startswith("lircd") and file.endswith(".conf"):
                #print os_path.join("/etc/", file)
                MyKeymap.append((os_path.join("/etc/", file), file))
        config.GOSsettings.lircdCONF = NoSave(
            ConfigSelection(default="lircd.conf", choices=MyKeymap))
        GOSsettings_list.append(
            (config.GOSsettings.lircdCONF, "lircdCONF", "CONFIG"))
        ##### KONIEC DEFINICJI #####
        self.list.append(
            getConfigListEntry(_("--- Standard settings ---"),
                               config.GOSsettings.separator))

        try:
            self.list.append(
                getConfigListEntry(_("Selected terminal:"),
                                   config.GOSsettings.sshd))
        except:
            pass
        if HardwareInfo().get_device_name() == 'nbox':
            self.list.append(
                getConfigListEntry("Czytnik kart:", config.GOSsettings.sci))
            self.list.append(
                getConfigListEntry("Wyświetlacz LED:", config.GOSsettings.led))
            self.list.append(
                getConfigListEntry("Wyświetlacz VFD:", config.GOSsettings.vfd))
        self.list.append(
            getConfigListEntry(_("Checking file system during boot?"),
                               config.GOSsettings.fscheck))
        #wybor e2
        if fileExists("/usr/bin/enigma2-multiframework"):
            self.list.append(
                getConfigListEntry(_("openPLI uses:"),
                                   config.GOSsettings.activeOpenPLI))
        #drzewo okpg
        if fileExists("/etc/opkg/opkg.conf"):
            self.list.append(
                getConfigListEntry(_("OPKG branch:"), config.GOSsettings.opkg))
        ###################### ustawienia TYLKO dla SPARK7162 #############################
        if GOSHardwareInfo().get_rcstype() == 'SPARK7162':
            self.list.append(
                getConfigListEntry(" ", config.GOSsettings.separator))
            self.list.append(
                getConfigListEntry("--- Spark7162/Triplex/AA2 settings ---",
                                   config.GOSsettings.separator))
            self.list.append(
                getConfigListEntry(_("Air head mode:"),
                                   config.GOSsettings.SPARK7162tunerType)
            )  # zapisywane w /etc/sysctl.gos
            self.list.append(
                getConfigListEntry(_("Time also on main VFD:"),
                                   config.GOSsettings.SPARK7162vfdtime)
            )  # zapisywane w /etc/sysctl.gos

        ###### ADDITIONAL SETTINGS #####
        self.list.append(getConfigListEntry(" ", config.GOSsettings.separator))
        self.list.append(
            getConfigListEntry(_("--- Additional settings ---"),
                               config.GOSsettings.separator))
        self.list.append(
            getConfigListEntry(_("Enable skins-HD support"),
                               config.GOSsettings.EnableSkinHD))
        self.list.append(
            getConfigListEntry(_("Emergency tuner restart"),
                               config.GOSsettings.POWERx5)
        )  # własna procedura nie wykonywana, bo to tak tylko informacyjnie
        self.list.append(
            getConfigListEntry(_("Time synchronization:"),
                               config.GOSsettings.useTransponderTime)
        )  # zapisywane w /etc/sysctl.gos
        self.list.append(
            getConfigListEntry(_("Shutdown type:"), config.GOSsettings.
                               ModerateShutDown))  # moderate gdzie nie ma deep
        if config.GOSsettings.ModerateShutDown.value == "on":
            self.list.append(
                getConfigListEntry(_("Show clock:"),
                                   config.GOSsettings.clockINmoderate))
            self.list.append(
                getConfigListEntry(_("Set icon:"),
                                   config.GOSsettings.iconINmoderate))
        #zmienne globalne z openPLI, generalnie powinny byc zdefiniowane w UsageConfig.py
        try:
            self.list.append(
                getConfigListEntry(_("Volume controlled in TV:"),
                                   config.hdmicec.volume_forwarding))
        except:
            pass

        ###### KONIFGURACJA PILOTA #####
        self.list.append(getConfigListEntry(" ", config.GOSsettings.separator))
        self.list.append(
            getConfigListEntry(_("--- Remote control settings ---"),
                               config.GOSsettings.separator))
        self.list.append(
            getConfigListEntry(
                _("Lircd settings:"),
                config.GOSsettings.lircdCONF))  # zapisywane w /etc/sysctl.gos
        #self.list.append(getConfigListEntry(_("evremote2 mode:"), config.GOSsettings.useLircdName)) # zapisywane w /etc/sysctl.gos
        #if config.GOSsettings.useLircdName.value == "on":
        self.list.append(
            getConfigListEntry(_("Blinking icon:"),
                               config.GOSsettings.blinkingIcon))
        self.list.append(
            getConfigListEntry(
                _("Max. key press time (90-250, standard 130ms):"),
                config.GOSsettings.usePeriod))  # zapisywane w /etc/sysctl.gos
        self.list.append(
            getConfigListEntry(
                _("Delay (10-100, standard 20ms):"),
                config.GOSsettings.useDelay))  # zapisywane w /etc/sysctl.gos
        #Advanced settings
        self.list.append(getConfigListEntry(" ", config.GOSsettings.separator))
        self.list.append(
            getConfigListEntry(_("--- Advanced settings ---"),
                               config.GOSsettings.separator))
        if fileExists("/lib/modules/cpu_frequ.ko") or fileExists(
                "/lib/modules/cpu_freq.ko"):
            mySPEED = "(---)"
            if fileExists("/proc/cpu_frequ/pll0_ndiv_mdiv"):
                with open("/proc/cpu_frequ/pll0_ndiv_mdiv",
                          "r") as mySPEEDfile:
                    for line in mySPEEDfile:
                        if line.startswith(
                                'SH4') and not line.startswith('SH4_'):
                            mySPEED = _("(now %sMHz)") % line.split()[2]
                            break
                    mySPEEDfile.close()

            self.list.append(
                getConfigListEntry(
                    _("CPU speed %s:") % mySPEED, config.GOSsettings.cpuFREQ))
        self.list.append(
            getConfigListEntry(_("Write debug logs?"),
                               config.GOSsettings.oPLIdbg))
        self.list.append(
            getConfigListEntry(_("timestamp each item?"),
                               config.GOSsettings.oPLIdbgtimestamp))
        self.list.append(
            getConfigListEntry(_("Debug logs in:"),
                               config.GOSsettings.oPLIdbgFolder))
        self.list.append(
            getConfigListEntry(_("Keep old logs?"),
                               config.GOSsettings.oPLIdbgArchive))

        self.list.append(
            getConfigListEntry(_("Automatically share GS during boot?"),
                               config.GOSsettings.ReportGS))

        #outdated?
        #self.list.append(getConfigListEntry("Serwer z listą kanałów:", config.GOSsettings.SERWER))
        #self.list.append(getConfigListEntry("Archiwum listy kanałów:", config.GOSsettings.NAZWA_PLIKU))

        self["config"].list = self.list
        self["config"].setList(self.list)
示例#43
0
    def getImagesList(self):
        def getImages(path, files, folder=None):
            for file in [
                    x for x in files
                    if os.path.splitext(x)[1] == ".zip" and model in x
            ]:
                try:
                    folder = "Image backups" if folder == "imagebackups" else "Downloaded Images"
                    if checkimagefiles([
                            x.split(os.sep)[-1]
                            for x in zipfile.ZipFile(file).namelist()
                    ]):
                        if folder not in self.imagesList:
                            self.imagesList[folder] = {}
                        self.imagesList[folder][file] = {
                            'link': file,
                            'name': file.split(os.sep)[-1]
                        }
                except:
                    pass

        model = HardwareInfo().get_machine_name()

        if not self.imagesList:
            if not self.jsonlist:
                try:
                    self.jsonlist = dict(
                        json.load(
                            urllib2.urlopen(
                                'http://downloads.openpli.org/json/%s' %
                                model)))
                    if config.usage.alternative_imagefeed.value:
                        self.jsonlist.update(
                            dict(
                                json.load(
                                    urllib2.urlopen(
                                        '%s%s' %
                                        (config.usage.alternative_imagefeed.
                                         value, model)))))
                except:
                    pass
            self.imagesList = dict(self.jsonlist)

            for media in ['/media/%s' % x for x in os.listdir('/media')] + ([
                    '/media/net/%s' % x for x in os.listdir('/media/net')
            ] if os.path.isdir('/media/net') else []):
                try:
                    getImages(media, [
                        os.path.join(media, x) for x in os.listdir(media)
                        if os.path.splitext(x)[1] == ".zip" and model in x
                    ])
                    for folder in [
                            "images", "downloaded_images", "imagebackups"
                    ]:
                        if folder in os.listdir(media):
                            media = os.path.join(media, folder)
                            if os.path.isdir(media) and not os.path.islink(
                                    media) and not os.path.ismount(media):
                                getImages(media, [
                                    os.path.join(media, x)
                                    for x in os.listdir(media)
                                    if os.path.splitext(x)[1] == ".zip"
                                    and model in x
                                ], folder)
                                for dir in [
                                        dir for dir in [
                                            os.path.join(media, dir)
                                            for dir in os.listdir(media)
                                        ] if os.path.isdir(dir) and
                                        os.path.splitext(dir)[1] == ".unzipped"
                                ]:
                                    shutil.rmtree(dir)
                except:
                    pass

        list = []
        for catagorie in reversed(sorted(self.imagesList.keys())):
            if catagorie in self.expanded:
                list.append(
                    ChoiceEntryComponent('expanded',
                                         ((str(catagorie)), "Expander")))
                for image in reversed(sorted(
                        self.imagesList[catagorie].keys())):
                    list.append(
                        ChoiceEntryComponent(
                            'verticalline',
                            ((str(self.imagesList[catagorie][image]['name'])),
                             str(self.imagesList[catagorie][image]['link']))))
            else:
                for image in self.imagesList[catagorie].keys():
                    list.append(
                        ChoiceEntryComponent('expandable',
                                             ((str(catagorie)), "Expander")))
                    break
        if list:
            self["list"].setList(list)
            if self.setIndex:
                self["list"].moveToIndex(
                    self.setIndex if self.setIndex < len(list) else len(list) -
                    1)
                if self["list"].l.getCurrentSelection()[0][1] == "Expander":
                    self.setIndex -= 1
                    if self.setIndex:
                        self["list"].moveToIndex(self.setIndex if self.setIndex
                                                 < len(list) else len(list) -
                                                 1)
                self.setIndex = 0
            self.selectionChanged()
        else:
            self.session.openWithCallback(
                self.close,
                MessageBox,
                _("Cannot find images - please try later"),
                type=MessageBox.TYPE_ERROR,
                timeout=3)
示例#44
0
文件: flasher.py 项目: TitanNit/tdt
class NFIFlash(Screen):
	skin = """
		<screen name="NFIFlash" position="90,95" size="560,420" title="Image flash utility">
			<ePixmap pixmap="skin_default/buttons/green.png" position="140,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
			<ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
			<ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" zPosition="0" size="140,40" transparent="1" alphatest="on" />
			<widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
			<widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
			<widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
			<widget source="listlabel" render="Label" position="16,44" size="200,21" valign="center" font="Regular;18" />
			<widget name="filelist" position="0,68" size="260,260" scrollbarMode="showOnDemand" />
			<widget source="infolabel" render="Label" position="270,44" size="280,284" font="Regular;16" />
			<widget source="job_progressbar" render="Progress" position="10,374" size="540,26" borderWidth="1" backgroundColor="#254f7497" />
			<widget source="job_progresslabel" render="Label" position="180,378" zPosition="2" font="Regular;18" halign="center" transparent="1" size="200,22" foregroundColor="#000000" />
			<widget source="statusbar" render="Label" position="10,404" size="540,16" font="Regular;16" foregroundColor="#cccccc" />
		</screen>"""

	def __init__(self, session, cancelable = True, close_on_finish = False):
		self.skin = NFIFlash.skin
		Screen.__init__(self, session)
		
		self["job_progressbar"] = Progress()
		self["job_progresslabel"] = StaticText("")
		
		self["finished"] = Boolean()

		self["infolabel"] = StaticText("")
		self["statusbar"] = StaticText(_("Please select .NFI flash image file from medium"))
		self["listlabel"] = StaticText(_("select .NFI flash file")+":")
		
		self["key_green"] = StaticText()
		self["key_yellow"] = StaticText()
		self["key_blue"] = StaticText()

		self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions"],
		{
			"green": self.ok,
			"yellow": self.reboot,
			"ok": self.ok,
			"left": self.left,
			"right": self.right,
			"up": self.up,
			"down": self.down
		}, -1)

		currDir = "/media/usb/"
		self.filelist = FileList(currDir, matchingPattern = "^.*\.(nfi|NFI)")
		self["filelist"] = self.filelist
		self.nfifile = ""
		self.md5sum = ""
		self.job = None
		self.box = HardwareInfo().get_device_name()

	def closeCB(self):
		if ( self.job is None or self.job.status is not self.job.IN_PROGRESS ) and not self.no_autostart:
			self.close()
		#else:
			#if self.cancelable:
				#self.cancel()

	def up(self):
		self["filelist"].up()
		self.check_for_NFO()

	def down(self):
		self["filelist"].down()
		self.check_for_NFO()
	
	def right(self):
		self["filelist"].pageDown()
		self.check_for_NFO()

	def left(self):
		self["filelist"].pageUp()
		self.check_for_NFO()

	def check_for_NFO(self):
		self.session.summary.setText(self["filelist"].getFilename())
		if self["filelist"].getFilename() is None:
			return
		if self["filelist"].getCurrentDirectory() is not None:
			self.nfifile = self["filelist"].getCurrentDirectory()+self["filelist"].getFilename()

		if self.nfifile.upper().endswith(".NFI"):
			self["key_green"].text = _("Flash")
			nfofilename = self.nfifile[0:-3]+"nfo"
			if fileExists(nfofilename):
				nfocontent = open(nfofilename, "r").read()
				self["infolabel"].text = nfocontent
				pos = nfocontent.find("MD5:")
				if pos > 0:
					self.md5sum = nfocontent[pos+5:pos+5+32] + "  " + self.nfifile
				else:
					self.md5sum = ""
			else:
				self["infolabel"].text = _("No details for this image file") + ":\n" + self["filelist"].getFilename()
				self.md5sum = ""
		else:
			self["infolabel"].text = ""
			self["key_green"].text = ""

	def ok(self):
		if self.job is None or self.job.status is not self.job.IN_PROGRESS:
			if self["filelist"].canDescent(): # isDir
				self["filelist"].descent()
				self.session.summary.setText(self["filelist"].getFilename())
				self.check_for_NFO()
			else:
				self.queryFlash()
	
	def queryFlash(self):
		fd = open(self.nfifile, 'r')
		print fd
		sign = fd.read(11)
		print sign
		if sign.find("NFI1" + self.box + "\0") == 0:
			if self.md5sum != "":
				self["statusbar"].text = ("Please wait for md5 signature verification...")
				self.session.summary.setText(("Please wait for md5 signature verification..."))
				self.container = eConsoleAppContainer()
				self.container.setCWD(self["filelist"].getCurrentDirectory())
				self.container.appClosed.append(self.md5finished)
				self.container.dataSent.append(self.md5ready)
				self.container.execute("md5sum -cw -")
				self.container.write(self.md5sum)
			else:
				self.session.openWithCallback(self.queryCB, MessageBox, _("This .NFI file does not have a md5sum signature and is not guaranteed to work. Do you really want to burn this image to flash memory?"), MessageBox.TYPE_YESNO)
		else:
			self.session.open(MessageBox, (_("This .NFI file does not contain a valid %s image!") % (self.box.upper())), MessageBox.TYPE_ERROR)

	def md5ready(self, retval):
		self.container.sendEOF()

	def md5finished(self, retval):
		if retval==0:
			self.session.openWithCallback(self.queryCB, MessageBox, _("This .NFI file has a valid md5 signature. Continue programming this image to flash memory?"), MessageBox.TYPE_YESNO)
		else:
			self.session.openWithCallback(self.queryCB, MessageBox, _("The md5sum validation failed, the file may be corrupted! Are you sure that you want to burn this image to flash memory? You are doing this at your own risk!"), MessageBox.TYPE_YESNO)

	def queryCB(self, answer):
		if answer == True:
			self.createJob()
		else:
			self["statusbar"].text = _("Please select .NFI flash image file from medium")

	def createJob(self):
		self.job = Job("Image flashing job")
		param = [self.nfifile]
		writeNAND(self.job,param,self.box)
		#writeNAND2(self.job,param)
		#writeNAND3(self.job,param)
		self.job.state_changed.append(self.update_job)
		self.job.end = 540
		self.cwd = self["filelist"].getCurrentDirectory()
		self["job_progressbar"].range = self.job.end
		self.startJob()

	def startJob(self):
		self["key_blue"].text = ""
		self["key_yellow"].text = ""
		self["key_green"].text = ""
		#self["progress0"].show()
		#self["progress1"].show()

		self.job.start(self.jobcb)

	def update_job(self):
		j = self.job
		#print "[job state_changed]"
		if j.status == j.IN_PROGRESS:
			self.session.summary["job_progressbar"].value = j.progress
			self.session.summary["job_progressbar"].range = j.end
			self.session.summary["job_progresslabel"].text = "%.2f%%" % (100*j.progress/float(j.end))
			self["job_progressbar"].range = j.end
			self["job_progressbar"].value = j.progress
			#print "[update_job] j.progress=%f, j.getProgress()=%f, j.end=%d, text=%f" % (j.progress, j.getProgress(), j.end,  (100*j.progress/float(j.end)))
			self["job_progresslabel"].text = "%.2f%%" % (100*j.progress/float(j.end))
			self.session.summary.setText(j.tasks[j.current_task].name)
			self["statusbar"].text = (j.tasks[j.current_task].name)

		elif j.status == j.FINISHED:
			self["statusbar"].text = _("Writing NFI image file to flash completed")
			self.session.summary.setText(_("NFI image flashing completed. Press Yellow to Reboot!"))
			self["key_yellow"].text = _("Reboot")

		elif j.status == j.FAILED:
			self["statusbar"].text = j.tasks[j.current_task].name + " " + _("failed")
			self.session.open(MessageBox, (_("Flashing failed") + ":\n" + j.tasks[j.current_task].name + ":\n" + j.tasks[j.current_task].output_line), MessageBox.TYPE_ERROR)

	def jobcb(self, jobref, fasel, blubber):
		print "[jobcb] %s %s %s" % (jobref, fasel, blubber)
		self["key_green"].text = _("Flash")

	def reboot(self):
		if self.job.status == self.job.FINISHED:
			self["statusbar"].text = ("rebooting...")
			TryQuitMainloop(self.session,2)
			
	def createSummary(self):
		return NFISummary