modify skin of plugins.
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / LEDBrightnessSetup / plugin.py
1 from Screens.Screen import Screen
2 from Components.ConfigList import ConfigListScreen
3 from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigSlider
4 from Components.ActionMap import ActionMap
5 from Components.Sources.StaticText import StaticText
6 from Components.Label import Label
7 from Plugins.Plugin import PluginDescriptor
8 from Screens.MessageBox import MessageBox
9 from Tools.Directories import fileExists
10 from enigma import eTimer
11 import fcntl
12
13 config.plugins.brightnesssetup = ConfigSubsection()
14 config.plugins.brightnesssetup.brightness = ConfigSlider(default = 1, increment = 1, limits = (0,15))
15 config.plugins.brightnesssetup.brightnessdeepstandby = ConfigSlider(default = 5, increment = 1, limits = (0,15))
16 config.plugins.brightnesssetup.blinkingtime = ConfigSlider(default = 5, increment = 1, limits = (0,15))
17
18 class LEDOption:
19         BRIGHTNESS = 0
20         DEEPSTANDBY = 1
21         BLINKINGTIME = 2
22
23 class LEDSetup:
24         LED_IOCTL_BRIGHTNESS_NORMAL = 0X10
25         LED_IOCTL_BRIGHTNESS_DEEPSTANDBY = 0X11
26         LED_IOCTL_BLINKING_TIME = 0X12
27         LED_IOCTL_SET_DEFAULT = 0X13
28
29         def __init__(self):
30                 self.led_fd = open("/dev/dbox/oled0",'rw')
31                 self.initLEDSetup()
32
33         def initLEDSetup(self):
34                 brightness = int(config.plugins.brightnesssetup.brightness.value)
35                 brightnessstandby = int(config.plugins.brightnesssetup.brightnessdeepstandby.value)
36                 blinkingtime = int(config.plugins.brightnesssetup.blinkingtime.value)
37                 self.setLEDDefault(brightness, brightnessstandby, blinkingtime)
38
39         def setLEDDefault(self, brightness = 1, brightnessstandby = 5, blinkingtime = 5):
40                 default_value = (blinkingtime<<16) + (brightnessstandby<<8) + brightness
41                 fcntl.ioctl(self.led_fd , self.LED_IOCTL_SET_DEFAULT, default_value)
42
43         def setLED(self, value, option):
44                 if option == LEDOption.BRIGHTNESS:
45                         cmd = self.LED_IOCTL_BRIGHTNESS_NORMAL
46                 elif option == LEDOption.DEEPSTANDBY:
47                         cmd = self.LED_IOCTL_BRIGHTNESS_DEEPSTANDBY
48                 elif option == LEDOption.BLINKINGTIME:
49                         cmd = self.LED_IOCTL_BLINKING_TIME
50                 else:
51                         return
52                 fcntl.ioctl(self.led_fd, cmd, value)
53
54         def __del__(self):
55                 self.led_fd.close()
56
57 ledsetup = LEDSetup()
58
59 class LEDBrightnessSetup(Screen,ConfigListScreen):
60         skin =  """
61                 <screen position="center,center" size="560,300" title="LED Brightness Setup">
62                         <ePixmap pixmap="skin_default/buttons/red.png" position="40,10" size="140,40" alphatest="on" />
63                         <ePixmap pixmap="skin_default/buttons/green.png" position="210,10" size="140,40" alphatest="on" />
64                         <ePixmap pixmap="skin_default/buttons/yellow.png" position="380,10" size="140,40" alphatest="on" />
65
66                         <widget source="key_red" render="Label" position="40,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
67                         <widget source="key_green" render="Label" position="210,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
68                         <widget source="key_yellow" render="Label" position="380,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
69
70                         <widget name="config" zPosition="2" position="5,70" size="550,200" scrollbarMode="showOnDemand" transparent="1"/>
71                         <widget name="current_entry" position="130,240" size="300,30" font="Regular;18" halign="center" valign="center"/>
72                 </screen>
73                 """
74
75         def __init__(self,session):
76                 Screen.__init__(self,session)
77                 self.session = session
78                 self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
79                 {
80                         "ok": self.keySave,
81                         "cancel": self.keyCancel,
82                         "red": self.keyCancel,
83                         "green": self.keySave,
84                         "yellow": self.keyDefault,
85                 }, -2)
86                 self.list = []
87                 ConfigListScreen.__init__(self, self.list,session = self.session)
88                 self["key_red"] = StaticText(_("Cancel"))
89                 self["key_green"] = StaticText(_("Ok"))
90                 self["key_yellow"] = StaticText(_("Defalut"))
91                 self["current_entry"]=Label("")
92                 self.createSetup()
93                 self.onLayoutFinish.append(self.checkModel)
94                 self.checkModelTimer = eTimer()
95                 self.checkModelTimer.callback.append(self.invalidmodel)
96                 if not self.displayText in self["config"].onSelectionChanged:
97                         self["config"].onSelectionChanged.append(self.displayText)
98
99         def displayText(self):
100                 if self["config"].getCurrent() == self.brightness:
101                         self["current_entry"].setText("Touch LED Brightness at Normal state")
102                 elif self["config"].getCurrent() == self.brightness_deepstandby:
103                         self["current_entry"].setText("Touch LED Brightness at Deep Standby")
104                 elif self["config"].getCurrent() == self.blinkingtime:
105                         self["current_entry"].setText("Touch LED Blinking time")
106                 self.setCurrentValue()
107
108         def getModel(self):
109                 if fileExists("/proc/stb/info/vumodel"):
110                         vumodel = open("/proc/stb/info/vumodel")
111                         info=vumodel.read().strip()
112                         vumodel.close()
113                         if info == "ultimo":
114                                 return True
115                         else:
116                                 return False
117                 else:
118                         return False
119
120         def checkModel(self):
121                 if not self.getModel():
122                         self.checkModelTimer.start(100,True)
123
124         def invalidmodel(self):
125                         self.session.openWithCallback(self.close, MessageBox, _("This Plugin only support for ULTIMO"), MessageBox.TYPE_ERROR, timeout = 30)
126
127         def createSetup(self):
128                 self.list = []
129                 self.brightness = getConfigListEntry(_("Normal state"), config.plugins.brightnesssetup.brightness)
130                 self.brightness_deepstandby = getConfigListEntry(_("Deep Standby"), config.plugins.brightnesssetup.brightnessdeepstandby)
131                 self.blinkingtime = getConfigListEntry(_("Blinking time"), config.plugins.brightnesssetup.blinkingtime)
132                 self.list.append( self.brightness )
133                 self.list.append( self.brightness_deepstandby )
134                 self.list.append( self.blinkingtime )
135                 self["config"].list = self.list
136                 self["config"].l.setList(self.list)
137
138         def setCurrentValue(self):
139                 if self["config"].getCurrent() == self.blinkingtime:
140                         ledsetup.setLED(1 ,LEDOption.BRIGHTNESS)
141                         ledsetup.setLED(self["config"].getCurrent()[1].value ,LEDOption.BLINKINGTIME)
142                 else:
143                         ledsetup.setLED(self["config"].getCurrent()[1].value ,LEDOption.BRIGHTNESS)
144
145         def keyLeft(self):
146                 ConfigListScreen.keyLeft(self)
147                 self.setCurrentValue()
148
149         def keyRight(self):
150                 ConfigListScreen.keyRight(self)
151                 self.setCurrentValue()
152
153         def saveLEDSetup(self):
154                 brightness = config.plugins.brightnesssetup.brightness.value
155                 brightnessstandby = config.plugins.brightnesssetup.brightnessdeepstandby.value
156                 blinkingtime = config.plugins.brightnesssetup.blinkingtime.value
157                 ledsetup.setLED(brightness ,LEDOption.BRIGHTNESS)
158                 ledsetup.setLED(brightnessstandby ,LEDOption.DEEPSTANDBY)
159                 ledsetup.setLED(blinkingtime ,LEDOption.BLINKINGTIME)
160
161         def keySave(self):
162                 if self["config"].isChanged():
163                         self.saveLEDSetup()
164                 ConfigListScreen.keySave(self)
165
166         def keyDefault(self):
167                 config.plugins.brightnesssetup.brightness.setValue(1)
168                 config.plugins.brightnesssetup.brightnessdeepstandby.setValue(5)
169                 config.plugins.brightnesssetup.blinkingtime.setValue(5)
170                 for entry in self["config"].getList():
171                         self["config"].l.invalidateEntry(self["config"].getList().index(entry))
172
173                 if self["config"].getCurrent() == self.blinkingtime:
174                         self.setCurrentValue()
175                 else:
176                         ledsetup.setLED(5 ,LEDOption.BLINKINGTIME)
177                         ledsetup.setLED(self["config"].getCurrent()[1].value ,LEDOption.BRIGHTNESS)
178
179         def cancelConfirm(self, result):
180                 if not result:
181                         return
182                 for x in self["config"].list:
183                         x[1].cancel()
184                 self.saveLEDSetup()
185                 self.close()
186
187 def main(session, **kwargs):
188         session.open(LEDBrightnessSetup)
189
190 def Plugins(**kwargs):
191         return [PluginDescriptor(name=_("LED Brightness Setup"), description="Setup LED brightness and blink interval", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=main)]
192