Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:rusjako:eeePC
eeeFancontrol
eee-fancontrol.pl
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File eee-fancontrol.pl of Package eeeFancontrol
#!/usr/bin/perl -l ################################################ # eeePC Fan Control Daemon 0.3.0 # Author : raimoradczewski at googlemail dot com # Author Blog : http://www.ireemo.de/ (english) # Project Home : http://code.google.com/p/eeepc-fancontrol/ # Changes : stefan dot jakobs at rus dot uni-stuttgart dot de # # Needs eee.ko Module # Version 0.3 use strict; ## Options # Check Temperature every X seconds my $interval = 1; # Temperatures for when to set $maxSpeed / $minSpeed my $highTemp = 60; my $normalTemp = 50; # the highest speed which should be used my $maxSpeed = 40; ## DO NOT CHANGE ANYTHING BELOW THIS ## my $stopSpeed = 0; my $mapFactor = $maxSpeed/($highTemp - $normalTemp); $SIG{KILL} = 'terminateFancontrol'; $SIG{TERM} = 'terminateFancontrol'; use Sys::Syslog; openlog("eeepc-fancontrol", "ndelay", "local0"); # Print some Information at syslog syslog("info", "FanControl started with:"); syslog("info", " MinSpeed: $stopSpeed MaxSpeed: $maxSpeed"); syslog("info", " NormalTemp: $normalTemp MaxTemp: $highTemp"); # Checking for Module 'eee' to be present checkModule(); # initialise cycle counter and sum of all speeds my $oldTemperature = $normalTemp; # Entering Main Loop while (1) { checkFanOverride(); # checkFanRPM(); my $temperature = getTemperature(); my $speed = getFanSpeed(); if (abs($temperature - $oldTemperature) >= 2) { if ($temperature <= $normalTemp) { $speed = $stopSpeed; } elsif ($temperature > $normalTemp && $temperature < $highTemp) { $speed = ($temperature - $normalTemp)*$mapFactor; } else { $speed = $maxSpeed; } $oldTemperature = $temperature; setFanSpeed($speed); } sleep($interval); } sub checkFanRPM() { if(getFanRPM() < 10 && getFanSpeed() ne 0) { syslog("info", "Fan stopped spinning. Speed raised to: ".$stopSpeed); setFanSpeed($stopSpeed); sleep(1); } } sub setFanSpeed { my $speed = int(shift); $speed = 14 if($speed > 0 and $speed < $stopSpeed); return if($speed eq getFanSpeed()); syslog("info", "Speed set to: ".$speed); open(TEMP, ">/proc/eee/fan_speed"); print TEMP $speed; close(TEMP); } sub terminateFancontrol { FanOverride(0); syslog("info", "Hardware Fan Control restored"); syslog("info", "Shutting down..."); closelog(); die; } sub getFanSpeed { open(TEMP, "</proc/eee/fan_speed"); my $currentSpeed = <TEMP>; chomp($currentSpeed); close(TEMP); return $currentSpeed; } sub getFanRPM { open(TEMP, "</proc/eee/fan_rpm"); my $currentRPM = <TEMP>; chomp($currentRPM); close(TEMP); return $currentRPM; } sub getTemperature { open(TEMP, "</proc/eee/temperature"); my $currentTemperature = <TEMP>; chomp($currentTemperature); close(TEMP); return $currentTemperature; } sub checkFanOverride { open(TEMP, "</proc/eee/fan_manual"); my $currentFanState = <TEMP>; chomp($currentFanState); FanOverride(1) if($currentFanState eq 0); } sub FanOverride { my $state = shift; open(TEMP, ">/proc/eee/fan_manual"); print TEMP $state; close(TEMP); syslog("info", "Fan Control Override triggered"); } sub checkModule { if (`lsmod` !~ /eee/) { system("modprobe eee"); syslog("info", "Inserted EEE Module"); } }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor