2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-08-30 22:05:11 +00:00

More cleanups to fancontrol:

* No longer depend on grep. We already depend on egrep so let's use it
everywhere.
* Don't depend on awk to compute the target PWM value. Bash has an arithmetic
expression evaluation engine which does the job just fine.
* Use read instead of cat to read the sensor values. read is built-in, so
it's cheaper.
* When sysfs is used (2.6 kernel), do not postproces the sensor value reads
with cut, as it is not needed.
* Update the dependency list. 


git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4441 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Jean Delvare
2007-06-12 11:36:15 +00:00
parent e56e0039ef
commit 59a0831fa6
2 changed files with 20 additions and 16 deletions

View File

@@ -20,6 +20,8 @@ SVN HEAD
Fix Super-I/O exit sequence for Winbond/Fintek chips
Program mkpatch: Delete
Program fancontrol: Use let for arithmetic evaluation
No longer need awk and grep
Limit calls to external programs (Linux 2.6 only)
Program pwmconfig: Use smaller steps for low PWM values
Program rrd: Support only hwmon class devices
Look for rrd in /usr/bin by default

View File

@@ -2,12 +2,12 @@
#
# Simple script implementing a temperature dependent fan speed control
#
# Version 0.64
# Version 0.65
#
# Usage: fancontrol [CONFIGFILE]
#
# Dependencies:
# bash, awk, egrep, sed, lm_sensors :)
# bash, egrep, sed, cut, sleep, lm_sensors :)
#
# Please send any questions, comments or success stories to
# marius.reiner@hdev.de
@@ -104,7 +104,7 @@ DIR=/proc/sys/dev/sensors
if [ ! -d $DIR ]
then
# For Linux 2.6, detect if config file uses the hwmon class or not yet
if echo "$AFCPWM[0]" | grep '^hwmon[0-9]'
if echo "${AFCPWM[0]}" | egrep -q '^hwmon[0-9]'
then
SDIR=/sys/class/hwmon
else
@@ -196,11 +196,6 @@ function restorefans()
trap restorefans SIGHUP SIGINT SIGQUIT SIGTERM SIGKILL
# function doing all the math
function calc () {
awk "BEGIN { print $@ }"
}
# main function
function UpdateFanSpeeds {
let fcvcount=0
@@ -215,36 +210,43 @@ function UpdateFanSpeeds {
minsa=${AFCMINSTART[$fcvcount]}
minso=${AFCMINSTOP[$fcvcount]}
tval=`cat ${tsens}`
read tval < ${tsens}
if [ $? -ne 0 ]
then
echo "Error reading temperature from $DIR/$tsens"
restorefans
fi
tval=`echo ${tval} |cut -d' ' -f3 |cut -d'.' -f1`
if [ "$SYSFS" = "1" ]
then
let tval="$tval / 1000"
let tval="($tval+500)/1000"
else
tval=`echo ${tval} | cut -d' ' -f3 | cut -d'.' -f1`
fi
pwmpval=`cat ${pwmo}`
read pwmpval < ${pwmo}
if [ $? -ne 0 ]
then
echo "Error reading PWM value from $DIR/$pwmo"
restorefans
fi
pwmpval=`echo ${pwmpval} | cut -d' ' -f1`
if [ "$SYSFS" != "1" ]
then
pwmpval=`echo ${pwmpval} | cut -d' ' -f1`
fi
# If fanspeed-sensor output shall be used, do it
if [[ -n ${fan} ]]
then
fanval=`cat ${fan}`
read fanval < ${fan}
if [ $? -ne 0 ]
then
echo "Error reading Fan value from $DIR/$fan"
restorefans
fi
fanval=`echo ${fanval} | cut -d' ' -f2`
if [ "$SYSFS" != "1" ]
then
fanval=`echo ${fanval} | cut -d' ' -f2`
fi
else
fanval=1 # set it to a non zero value, so the rest of the script still works
fi
@@ -270,7 +272,7 @@ function UpdateFanSpeeds {
then pwmval=255 # at specified maxtemp switch to 100%
else
# calculate the new value from temperature and settings
pwmval=`calc "(((${tval}-${mint})/(${maxt}-${mint}))^2*(255-${minso})+${minso})" |cut -d'.' -f1`
let pwmval="((${tval}-${mint})**2)*(255-${minso})/((${maxt}-${mint})**2)+${minso}"
if [ $pwmpval -eq 0 -o $fanval -eq 0 ]
then # if fan was stopped start it using a safe value
echo $minsa > $pwmo