Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
from __future__ import print_function
from __future__ import division
#
autodimm_version = "2.4-r3"
#
from enigma import getDesktop, eTimer, eActionMap, iRecordableService
from Screens.Screen import Screen
from Screens.MessageBox import MessageBox
from Screens.InputBox import InputBox
from Screens.ChoiceBox import ChoiceBox
from Components.ActionMap import ActionMap, NumberActionMap
from Components.ScrollLabel import ScrollLabel
from Components.GUIComponent import *
from Components.MenuList import MenuList
from Components.Pixmap import Pixmap
from Components.ConfigList import ConfigListScreen
from Plugins.Plugin import PluginDescriptor
from Components.Label import Label
from Components.config import config, configfile, ConfigText, ConfigYesNo, ConfigInteger, ConfigSelection, ConfigEnableDisable, ConfigSlider, NoSave, ConfigSubsection, getConfigListEntry, ConfigNothing
from Components.ConfigList import ConfigListScreen
from Components.Lcd import LCD
from os import path as os_path
if os_path.exists("/usr/lib/enigma2/python/Components/FrontPanelLed.py"):
	from Components.FrontPanelLed import FrontPanelLed as FrontPanelLed
	from Components.FrontPanelLed import colors as colors
	# black color is nice to turn off 
	colors.append(("0x000000",_("black")))

import Screens.Standby
import gm
from keyids import KEYIDS

rcLockisInstalled = False
if os_path.exists("/usr/lib/enigma2/python/Plugins/Extensions/rcLock"):
	from Plugins.Extensions.rcLock.plugin import get_rcLockingState
	rcLockisInstalled = True

autodimm_name=_("AutoDimm")
autodimm_title=_("%s Plugin Version %s by gutemine") % (autodimm_name, autodimm_version)
autodimm_plugindir="/usr/lib/enigma2/python/Plugins/Extensions/AutoDimm" 

global in_autodimm_plugin
in_autodimm_plugin=False
global autodimm_led0
autodimm_led0="00000000"
global autodimm_led1
autodimm_led1="00000000"

YELLOWC =  '\033[33m'
ENDC = '\033[m'
def cprint(text):
	print(YELLOWC+"[AUTODIMM] "+text+ENDC)   

yes_no_descriptions = {False: _("no"), True: _("yes")}
config.plugins.autodimm = ConfigSubsection()  
time_option = []
time_option.append(( "0",_("off") ))
for x in range(1,61):
	time_option.append(( str(x),str(x)+" "+_("seconds") ))
config.plugins.autodimm.timeout = ConfigSelection(default = "10", choices=time_option)  
config.plugins.autodimm.brightness = ConfigSlider(default=0, limits=(0, 10))
config.plugins.autodimm.idle = ConfigYesNo(default = True)  
config.plugins.autodimm.recording = ConfigYesNo(default = True)  
config.plugins.autodimm.led0 = ConfigYesNo(default = False)  
config.plugins.autodimm.led1 = ConfigYesNo(default = False)  

realbox = gm.boxtype()

led0_pattern="/proc/stb/fp/led0_pattern"
led1_pattern="/proc/stb/fp/led1_pattern"

frontPanelLed = None
changed_led_brightness_from_autodimm = False

if os_path.exists("/usr/lib/enigma2/python/Components/FrontPanelLed.py"):
	FrontPanelLed_checkRecordings_ori=FrontPanelLed.checkRecordings

def AutoDimm_checkRecordings(self, service=None, event=iRecordableService.evEnd):
	cprint(">>>> check Recording")
	if os_path.exists("/usr/lib/enigma2/python/Components/FrontPanelLed.py"):
 		if config.plugins.autodimm.recording.value:
			FrontPanelLed_checkRecordings_ori(self,service,event)
		else:
			return
	else:
		return

if os_path.exists("/usr/lib/enigma2/python/Components/FrontPanelLed.py"):
	FrontPanelLed.checkRecordings=AutoDimm_checkRecordings

if realbox in ("dreamone", "dreamtwo") and os_path.exists("/usr/lib/enigma2/python/Components/FrontPanelLed.py"):
	from Components.FrontPanelLed import frontPanelLed
	
	def onChanged_default_arm64_LED_Brightness(self, *args):
		if not changed_led_brightness_from_autodimm:
			config.plugins.autodimm.led_arm64_brightness_default_orig.value = config.fp.led.default_brightness.value
			cprint("save orig default led brightness")
		else:
			#cprint("changed orig default led brightness from autodimm - ignored")
			pass

	def onChanged_Idle_arm64_LED_Brightness(self, *args):
		if not changed_led_brightness_from_autodimm:
			config.plugins.autodimm.led_arm64_brightness_idle_orig.value = config.fp.led.standby_brightness.value
			cprint("save orig idle led brightness")
		else:
			#cprint("changed orig idle led brightness from autodimm - ignored")
			pass
	
	config.plugins.autodimm.brightness = ConfigSlider(default=0x19, increment=25, limits=(0,0xff))
	config.plugins.autodimm.led_arm64 = ConfigYesNo(default = False)
	config.plugins.autodimm.led_arm64_brightness = ConfigSlider(default=0x19, increment=25, limits=(0,0xff))
	config.plugins.autodimm.led_arm64_brightness_default_orig = NoSave(ConfigSlider(default=0x19, increment=25, limits=(0,0xff)))
	config.plugins.autodimm.led_arm64_brightness_idle_orig = NoSave(ConfigSlider(default=0x19, increment=25, limits=(0,0xff)))
	#add change notifier to save orig brightness e2-settings 
	config.fp.led.default_brightness.addNotifier(onChanged_default_arm64_LED_Brightness, initial_call=True)
	config.fp.led.standby_brightness.addNotifier(onChanged_Idle_arm64_LED_Brightness, initial_call=True)


def startAutoDimm(session,**kwargs):
	session.open(AutoDimm)

def autostart(reason,**kwargs):
	if kwargs.has_key("session") and reason == 0:
		session = kwargs["session"]
		session.open(CheckAutoDimm)
       
def Plugins(**kwargs):
	return [PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART], fnc = autostart),
		PluginDescriptor(name=autodimm_name, description=_("automatic Display dimming"), where = PluginDescriptor.WHERE_PLUGINMENU, icon="autodimm.png", fnc=startAutoDimm),
		PluginDescriptor(name=autodimm_name, description=_("automatic Display dimming"), where=PluginDescriptor.WHERE_MENU, fnc=mainconf)]

def mainconf(menuid):
	if menuid != "osd_video_audio":
		return []
	return [(_("Display")+"-"+autodimm_name, startAutoDimm, "autodimm", None)]

sz_w = getDesktop(0).size().width()

class AutoDimm(Screen, ConfigListScreen):
	if sz_w == 2560:    
		skin = """
		<screen position="center,240" size="1640,540" title="AutoDimm" >
		<widget name="logo" position="20,20" size="200,80" transparent="1" alphatest="on" />
		<widget backgroundColor="#9f1313" font="Regular;36" halign="center" name="buttonred" position="240,20" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" size="330,80" valign="center" />
		<widget backgroundColor="#1f771f" font="Regular;36" halign="center" name="buttongreen" position="590,20" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" size="330,80" valign="center" />
		<widget backgroundColor="#a08500" font="Regular;36" halign="center" name="buttonyellow" position="940,20" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" size="330,80" valign="center" />
		<widget backgroundColor="#18188b" font="Regular;36" halign="center" name="buttonblue" position="1290,20" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" size="330,80" valign="center" />
		<eLabel backgroundColor="grey" position="20,120" size="1600,2" />
		<widget name="config" enableWrapAround="1" position="20,140" size="1600,380" scrollbarMode="showOnDemand" />
		</screen>"""
	elif sz_w == 1920:    
		skin = """
		<screen position="center,170" size="1200,340" title="AutoDimm" >
		<widget name="logo" position="20,10" size="150,60" transparent="1" alphatest="on" />
		<widget backgroundColor="#9f1313" font="Regular;30" halign="center" name="buttonred" position="190,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="230,60" valign="center" />
		<widget backgroundColor="#1f771f" font="Regular;30" halign="center" name="buttongreen" position="440,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="230,60" valign="center" />
		<widget backgroundColor="#a08500" font="Regular;30" halign="center" name="buttonyellow" position="690,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="230,60" valign="center" />
		<widget backgroundColor="#18188b" font="Regular;30" halign="center" name="buttonblue" position="940,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="230,60" valign="center" />
		<eLabel backgroundColor="grey" position="20,80" size="1160,1" />
		<widget name="config" enableWrapAround="1" position="20,90" scrollbarMode="showOnDemand" size="1160,240" />
		</screen>"""
	else:
		skin = """
		<screen position="center,120" size="820,240" title="AutoDimm" >
		<widget name="logo" position="10,10" size="100,40" transparent="1" alphatest="on" />
		<widget backgroundColor="#9f1313" font="Regular;18" halign="center" name="buttonred" position="120,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="165,40" valign="center" />
		<widget backgroundColor="#1f771f" font="Regular;18" halign="center" name="buttongreen" position="295,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="165,40" valign="center" />
		<widget backgroundColor="#a08500" font="Regular;18" halign="center" name="buttonyellow" position="470,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="165,40" valign="center" />
		<widget backgroundColor="#18188b" font="Regular;18" halign="center" name="buttonblue" position="645,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="165,40" valign="center" />
		<eLabel backgroundColor="grey" position="10,60" size="800,1" />
		<widget name="config" enableWrapAround="1" position="10,70" size="800,160" scrollbarMode="showOnDemand" />
		</screen>"""

	def __init__(self, session, args = 0):
		Screen.__init__(self, session)
		self.skin = AutoDimm.skin  
		self.session = session
		self.onShown.append(self.setWindowTitle)
		global in_autodimm_plugin
		in_autodimm_plugin=True
		# explicit check on every entry
		self.onChangedEntry = []
		self.list = []                                                  
		ConfigListScreen.__init__(self, self.list, session = self.session, on_change = self.changedEntry)
		self.createSetup()       
		self["logo"] = Pixmap() 
		self["buttonred"] = Label(_("Exit"))
		self["buttongreen"] = Label(_("Save"))
		self["buttonyellow"] = Label(_("Test mode"))
		self["buttonblue"] = Label(_("About"))
		self["actions"] = ActionMap(["SetupActions", "ColorActions"],{"ok": self.save,  "exit": self.cancel, "cancel": self.cancel, "red": self.cancel, "green": self.save, "yellow": self.test, "blue": self.about, })

	def setWindowTitle(self):                                   
		self["logo"].instance.setPixmapFromFile("%s/autodimm.png" % autodimm_plugindir)
		self.setTitle(autodimm_title)
	
	def save(self):
		for x in self["config"].list:
			x[1].save()
		self.test(True)
		global in_autodimm_plugin
		in_autodimm_plugin=False
		self.close(True)

	def cancel(self):
		for x in self["config"].list:
			x[1].cancel()
		self.test(True)
		global in_autodimm_plugin
		in_autodimm_plugin=False
		self.close(False)

	def about(self):
		self.session.open(MessageBox, autodimm_title,  MessageBox.TYPE_INFO)

	def test(self, force_undimm=False):
		cprint("TESTDIMMING ...")
		adtimeout=int(config.plugins.autodimm.timeout.value)*1000
		if adtimeout==0 and not force_undimm:
			self.session.open(MessageBox, _("Timer")+_(" ")+_("disabled"),  MessageBox.TYPE_ERROR)
			return
		dimmed=int(config.plugins.autodimm.brightness.value)
		orig = 255
		idle = 0
		if os_path.exists("/proc/stb/lcd/oled_brightness"):
			try:
				orig=int(config.lcd.bright.value)
				idle=int(config.lcd.standby.value)
			except:
				pass
		if dimmed==orig and not force_undimm:
			self.session.open(MessageBox, _("Brightness")+(" = ")+_("Default"),  MessageBox.TYPE_ERROR)
			return
		current=0
		if os_path.exists("/proc/stb/lcd/oled_brightness"):
			c=open("/proc/stb/lcd/oled_brightness","r")
			cb=c.readline()
			c.close()
			current=int(cb)/25
		cprint("current %d" % current)
		ilcd = LCD() 
		if (current !=dimmed) and not force_undimm:
			ilcd.setBright(dimmed)
		else:	# reset to original brightness
			ilcd.setBright(orig)
		#
		# LEDs come here ...
		
		#dreamone + dreamtwo
		if realbox in ("dreamone", "dreamtwo") and config.plugins.autodimm.led_arm64.value:
			if frontPanelLed:
				global changed_led_brightness_from_autodimm # to disable change notifier
				changed_led_brightness_from_autodimm = True
				if not force_undimm:
					config.fp.led.default_brightness.value = config.plugins.autodimm.led_arm64_brightness.value
					cprint("test dimm default led to: %s" % config.fp.led.default_brightness.value)
				else:
					config.fp.led.default_brightness.value = config.plugins.autodimm.led_arm64_brightness_default_orig.value
					cprint("undimm led to: %s" % config.fp.led.default_brightness.value)
				changed_led_brightness_from_autodimm = False # to enable change notifier

			elif not force_undimm :
				self.session.open(MessageBox,_("dimm") + " " + _("LED") + " on One/Two only avaible with enigma2 >= 4.5.0r5", MessageBox.TYPE_INFO)
		
		#other boxes
		else:
			global autodimm_led0
			if config.plugins.autodimm.led0.value and os_path.exists(led0_pattern):
				c=open(led0_pattern,"r")
				ledcurrent=c.readline().rstrip("\n")
				c.close()
				cprint("blue led current %s" % ledcurrent)
				if ledcurrent != "00000000":
					# remember led
					autodimm_led0=ledcurrent
				c=open(led0_pattern,"w")
				if (current !=dimmed) and not force_undimm:
					c.write("00000000\n")
				else:
					c.write("%s\n" % autodimm_led0)
				c.close()

			global autodimm_led1
			if config.plugins.autodimm.led1.value and os_path.exists(led1_pattern):
				c=open(led1_pattern,"r")
				ledcurrent=c.readline().rstrip("\n")
				c.close()
				cprint("red led current %s" % ledcurrent)
				if ledcurrent != "00000000":
					# remember led
					autodimm_led1=ledcurrent
				c=open(led1_pattern,"w")
				if (current !=dimmed) and not force_undimm:
					c.write("00000000\n")
				else:
					c.write("%s\n" % autodimm_led1)
				c.close()
	
	def createSetup(self):
		self.list = []
		self.list.append(getConfigListEntry(_("Timer"), config.plugins.autodimm.timeout))
		if int(config.plugins.autodimm.timeout.value) > 0:
			if realbox != "dreamone" and realbox != "dm520":
				self.list.append(getConfigListEntry(_("Brightness"), config.plugins.autodimm.brightness))
			self.list.append(getConfigListEntry(_("Idle Mode"), config.plugins.autodimm.idle))
			if realbox in ("dreamone", "dreamtwo"):
				if frontPanelLed:
					self.list.append(getConfigListEntry(_("LED") + " " + _("Dimming"), config.plugins.autodimm.led_arm64))
					if config.plugins.autodimm.led_arm64.value:
						self.list.append(getConfigListEntry(_("LED")+" "+_("Brightness"), config.plugins.autodimm.led_arm64_brightness))
					self.list.append(getConfigListEntry(_("LED")+" "+_("Recording"), config.plugins.autodimm.recording))
				else:
					self.list.append(getConfigListEntry(_("LED") + " " + _("Dimming") + " -> on One/Two only on enigma2 >= 4.5.0r5", ConfigNothing()))
			else:
				self.list.append(getConfigListEntry(_("LED")+" "+_("blue"), config.plugins.autodimm.led0))
			if realbox != "dreamone" and realbox != "dreamtwo":
				self.list.append(getConfigListEntry(_("LED")+" "+_("red"), config.plugins.autodimm.led1))
		self["config"].list = self.list
		self["config"].l.setList(self.list)

	def changedEntry(self):
		choice = self["config"].getCurrent()
		if choice != None:
			self.createSetup()

class CheckAutoDimm(Screen):

	def __init__(self,session):
		Screen.__init__(self,session)

		self.session = session
		self.TimerAutoDimmedCheck = eTimer()
		if os_path.exists("/var/lib/dpkg/status"): 
			self.TimerAutoDimmedCheck_conn = self.TimerAutoDimmedCheck.timeout.connect(self.doAutoDimm)
		else:
			self.TimerAutoDimmedCheck.callback.append(self.doAutoDimm)
		self.highPrioActionSlot = eActionMap.getInstance().bindAction('', -0x7FFFFFFF, self.keypressed)
		self.keypressed(None,1) # start Timer on startup

	def keypressed(self, key, flag):
		global in_autodimm_plugin
		if flag == 1 and not in_autodimm_plugin:
			if key is not None:
				KeyText = [keyname for keyname, val in KEYIDS.items() if val == key] or "KEY_UNKNOWN"
				cprint("key released: <%s> (%d)" % (KeyText,key))
			
			if (Screens.Standby.inStandby and not config.plugins.autodimm.idle.value):
				cprint("ignoring standby ...")
				return 0
			
			if rcLockisInstalled and get_rcLockingState():
				cprint("ignoring undimm in rcLock-Mode...")
				return 0
			
			dimmed=int(config.plugins.autodimm.brightness.value)
			orig = 255
			current = 0
			if os_path.exists("/proc/stb/lcd/oled_brightness"):
				if Screens.Standby.inStandby:
					try:	
						orig=int(config.lcd.standby.value)
					except:
						pass
				else:
					try:	
						orig=int(config.lcd.bright.value)
					except:	
						pass
				c = open("/proc/stb/lcd/oled_brightness","r")
				cb = c.readline()
				c.close()
				current = int(cb) // 25
			#
			# undimming on every keypress if dimmed
			if current != orig and realbox not in ("dreamone", "dm520"):
				cprint("UNDIMMING LCD TO %d" % orig)
				ilcd = LCD() 
				ilcd.setBright(orig)
			#
			# LEDs come here ...
			
			# for dreamone/dreamtwo
			if realbox in ("dreamone","dreamtwo") and config.plugins.autodimm.led_arm64.value and frontPanelLed:
				global changed_led_brightness_from_autodimm
				changed_led_brightness_from_autodimm = True # to disable change notifier
				if Screens.Standby.inStandby:
					current = config.fp.led.standby_brightness.value
					orig = config.plugins.autodimm.led_arm64_brightness_idle_orig.value
					if current != orig:
						config.fp.led.standby_brightness.value = orig
						cprint("undimm idle led to: %s" % config.fp.led.standby_brightness.value)
						frontPanelLed.standby(checkRec=True)
					else:
						pass
						cprint("undimm not needed because orig led brightness is already used")
				else:
					current = config.fp.led.default_brightness.value
					orig = config.plugins.autodimm.led_arm64_brightness_default_orig.value
					if current != orig:
						config.fp.led.default_brightness.value = orig
						cprint("undimm default led to: %s" % config.fp.led.default_brightness.value)
						#no frontPanelLed.default(checkRec=True) needed, because notifier on default_brightness-config
					else:
						pass
						cprint("undimm not needed because orig led brightness is already used")
				changed_led_brightness_from_autodimm = False # to enable change notifier
				
			# other boxes
			else:
				global autodimm_led0
				if config.plugins.autodimm.led0.value and os_path.exists(led0_pattern):
					#cprint("current: %s, dimmed: %s" % (current, dimmed))
					#cprint("led0 saved_value: %s" % autodimm_led0)
					if (current == dimmed):
						c=open(led0_pattern,"w")
						cprint("undimm blue led to: %s" % autodimm_led0)
						c.write("%s\n" % autodimm_led0)
						c.close()
				global autodimm_led1
				if config.plugins.autodimm.led1.value and os_path.exists(led1_pattern):
					#cprint("led1 saved_value: %s" % autodimm_led1)
					if (current == dimmed):
						c=open(led1_pattern,"w")
						cprint("undimm red led to: %s" % autodimm_led1)
						c.write("%s\n" % autodimm_led1)
						c.close()
			
			# if timer expires before next keypress do dimming
			adtimeout=int(config.plugins.autodimm.timeout.value)*1000
			if adtimeout > 0:
				# restart timer ...
				self.TimerAutoDimmedCheck.stop()
				cprint("start timer to undimm: %s sek" % config.plugins.autodimm.timeout.value)
				self.TimerAutoDimmedCheck.start(adtimeout,True) 
		return 0


	def doAutoDimm(self):
		cprint("doAutoDimm")
		global in_autodimm_plugin
		self.TimerAutoDimmedCheck.stop()
		if in_autodimm_plugin: 
			cprint("no dimming on open setup ...")
			return
		
		dimmed=int(config.plugins.autodimm.brightness.value)
		orig=255
		if os_path.exists("/proc/stb/lcd/oled_brightness"):
			try:
				orig=int(config.lcd.bright.value)
			except:
				pass
		
		led_dimmed = 0
		led_orig = 255
		#check led-status for dreamone/dreamtwo
		if realbox in ("dreamone", "dreamtwo"): 
			if os_path.exists("/proc/stb/fp/led_brightness"):
				led_dimmed = config.plugins.autodimm.led_arm64_brightness.value
				if Screens.Standby.inStandby:
					led_orig = config.plugins.autodimm.led_arm64_brightness_idle_orig.value
				else:
					led_orig = config.plugins.autodimm.led_arm64_brightness_default_orig.value
		
		if (not(Screens.Standby.inStandby) or config.plugins.autodimm.idle.value) and (dimmed != orig or led_dimmed != led_orig):
			
			current=0
			#get current display brightness
			if os_path.exists("/proc/stb/lcd/oled_brightness"):
				c=open("/proc/stb/lcd/oled_brightness","r")
				cb=c.readline()
				c.close()
				current=int(cb)/25
			
			#set display brightness
			if current != dimmed and realbox not in ("dreamone", "dm520"):
				cprint("DIMMING LCD TO %d" % dimmed)
				ilcd = LCD() 
				ilcd.setBright(dimmed)
			
			# LEDs come here ... 
			
  		        if realbox in ("dreamone", "dreamtwo") and config.plugins.autodimm.led_arm64.value and frontPanelLed:
				global changed_led_brightness_from_autodimm
				changed_led_brightness_from_autodimm = True # to disable change notifier 
				if Screens.Standby.inStandby:
					config.fp.led.standby_brightness.value = config.plugins.autodimm.led_arm64_brightness.value
					cprint("dimm default led to: %s" % config.fp.led.standby_brightness.value)
					frontPanelLed.standby(checkRec=True)
				else:
					config.fp.led.default_brightness.value = config.plugins.autodimm.led_arm64_brightness.value
					cprint("dimm idle led to: %s" % config.fp.led.default_brightness.value)
					#frontPanelLed.default(checkRec=True) not needed, because e2-notifier to this on change default_brightness-config
				changed_led_brightness_from_autodimm = False # to enable change notifier
				return
			
			global autodimm_led0
			if config.plugins.autodimm.led0.value and os_path.exists(led0_pattern):
				c=open(led0_pattern,"r")
				ledcurrent=c.readline().rstrip("\n")
				c.close()
				cprint("blue led current %s" % ledcurrent)
				if ledcurrent != "00000000":
					# remember led
					autodimm_led0=ledcurrent
				c=open(led0_pattern,"w")
				if (current !=dimmed):
					c.write("00000000\n")
				c.close()
			
			global autodimm_led1
			if config.plugins.autodimm.led1.value and os_path.exists(led1_pattern):
				c=open(led1_pattern,"r")
				ledcurrent=c.readline().rstrip("\n")
				c.close()
				cprint("red led current %s" % ledcurrent)
				if ledcurrent != "00000000":
					# remember led
					autodimm_led1=ledcurrent
				c=open(led1_pattern,"w")
				if (current !=dimmed):
					c.write("00000000\n")
				c.close()