add possibility to separately set fan voltage and fan pwm for standby and normal run
[enigma2.git] / lib / python / Components / FanControl.py
index cc133ac0a7bb4015f15b1e5199ed3a46520d751b..a993c3969162dc6750de180cd8c0981d7cdf2372 100644 (file)
@@ -3,6 +3,9 @@ import os
 from Components.config import config, ConfigSubList, ConfigSubsection, ConfigSlider
 from Tools.BoundFunction import boundFunction
 
+import NavigationInstance
+from enigma import iRecordableService
+
 class FanControl:
        # ATM there's only support for one fan
        def __init__(self):
@@ -11,6 +14,44 @@ class FanControl:
                else:
                        self.fancount = 0
                self.createConfig()
+               config.misc.standbyCounter.addNotifier(self.standbyCounterChanged, initial_call = False)
+
+       def setVoltage_PWM(self):
+               for fanid in range(self.getFanCount()):
+                       cfg = self.getConfig(fanid)
+                       self.setVoltage(fanid, cfg.vlt.value)
+                       self.setPWM(fanid, cfg.pwm.value)
+                       print "[FanControl]: setting fan values: fanid = %d, voltage = %d, pwm = %d" % (fanid, cfg.vlt.value, cfg.pwm.value)
+
+       def setVoltage_PWM_Standby(self):
+               for fanid in range(self.getFanCount()):
+                       cfg = self.getConfig(fanid)
+                       self.setVoltage(fanid, cfg.vlt_standby.value)
+                       self.setPWM(fanid, cfg.pwm_standby.value)
+                       print "[FanControl]: setting fan values (standby mode): fanid = %d, voltage = %d, pwm = %d" % (fanid, cfg.vlt_standby.value, cfg.pwm_standby.value)
+
+       def getRecordEvent(self, recservice, event):
+               recordings = len(NavigationInstance.instance.getRecordings())
+               if event == iRecordableService.evEnd:
+                       if recordings == 0:
+                               self.setVoltage_PWM_Standby()
+               elif event == iRecordableService.evStart:
+                       if recordings == 1:
+                               self.setVoltage_PWM()
+
+       def leaveStandby(self):
+               NavigationInstance.instance.record_event.remove(self.getRecordEvent)
+               recordings = NavigationInstance.instance.getRecordings()
+               if not recordings:
+                       self.setVoltage_PWM()
+
+       def standbyCounterChanged(self, configElement):
+               from Screens.Standby import inStandby
+               inStandby.onClose.append(self.leaveStandby)
+               recordings = NavigationInstance.instance.getRecordings()
+               NavigationInstance.instance.record_event.append(self.getRecordEvent)
+               if not recordings:
+                       self.setVoltage_PWM_Standby()
 
        def createConfig(self):
                def setVlt(fancontrol, fanid, configElement):
@@ -21,12 +62,14 @@ class FanControl:
                config.fans = ConfigSubList()
                for fanid in range(self.getFanCount()):
                        fan = ConfigSubsection()
-                       fan.vlt = ConfigSlider(default = 16, increment = 5, limits = (0, 255))
+                       fan.vlt = ConfigSlider(default = 15, increment = 5, limits = (0, 255))
                        fan.pwm = ConfigSlider(default = 0, increment = 5, limits = (0, 255))
+                       fan.vlt_standby = ConfigSlider(default = 5, increment = 5, limits = (0, 255))
+                       fan.pwm_standby = ConfigSlider(default = 0, increment = 5, limits = (0, 255))
                        fan.vlt.addNotifier(boundFunction(setVlt, self, fanid))
                        fan.pwm.addNotifier(boundFunction(setPWM, self, fanid))
                        config.fans.append(fan)
-                       
+       
        def getConfig(self, fanid):
                return config.fans[fanid]
        
@@ -71,4 +114,4 @@ class FanControl:
                f.write("%x" % value)
                f.close()
        
-fancontrol = FanControl()
\ No newline at end of file
+fancontrol = FanControl()