Repository URL to install this package:
|
Version:
2.4-r3 ▾
|
enigma2-plugin-extensions-autodimm
/
usr
/
lib
/
enigma2
/
python
/
Plugins
/
Extensions
/
AutoDimm
/
plugin.py
|
|---|
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()