root/lm-sensors/branches/lm-sensors-3.0.0/prog/pwm/pwmconfig @ 5327

Revision 5327, 20.0 KB (checked in by khali, 6 years ago)

Determine MINSTOP automatically.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1#!/bin/bash
2#
3# pwmconfig
4# Tests the pwm outputs of sensors and configures fancontrol
5#
6#    Warning!!! This program will stop your fans, one at a time,
7#    for approximately 5 seconds each!!!
8#    This may cause your processor temperature to rise!!!
9#    Verify that all fans are running at normal speed after this
10#    program has exited!!!
11#
12#    Copyright (C) 2007-2008 Jean Delvare <khali@linux-fr.org>
13#
14#    This program is free software; you can redistribute it and/or modify
15#    it under the terms of the GNU General Public License as published by
16#    the Free Software Foundation; either version 2 of the License, or
17#    (at your option) any later version.
18#
19#    This program is distributed in the hope that it will be useful,
20#    but WITHOUT ANY WARRANTY; without even the implied warranty of
21#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22#    GNU General Public License for more details.
23#
24#    You should have received a copy of the GNU General Public License
25#    along with this program; if not, write to the Free Software
26#    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
27#    MA 02110-1301 USA.
28#
29#
30
31REVISION=$(echo '$Revision$' | cut -d' ' -f2)
32REVDATE=$(echo '$Date$' | cut -d' ' -f2)
33PIDFILE="/var/run/fancontrol.pid"
34
35if [ -f "$PIDFILE" ]
36then
37        echo "File $PIDFILE exists. This typically means that the"
38        echo "fancontrol deamon is running. You should stop it before running pwmconfig."
39        echo "If you are certain that fancontrol is not running, then you can delete"
40        echo "$PIDFILE manually."
41        exit 1
42fi
43
44echo "# pwmconfig revision $REVISION ($REVDATE)"
45echo 'This program will search your sensors for pulse width modulation (pwm)'
46echo 'controls, and test each one to see if it controls a fan on'
47echo 'your motherboard. Note that many motherboards do not have pwm'
48echo 'circuitry installed, even if your sensor chip supports pwm.'
49echo
50echo 'We will attempt to briefly stop each fan using the pwm controls.'
51echo 'The program will attempt to restore each fan to full speed'
52echo 'after testing. However, it is ** very important ** that you'
53echo 'physically verify that the fans have been to full speed'
54echo 'after the program has completed.'
55echo
56
57DELAY=5 # 3 seconds delay is too short for large fans, thus I increased it to 5
58MAX=255
59
60DIR=/proc/sys/dev/sensors
61if [ ! -d $DIR ]
62then
63        if [ -d "/sys/class/hwmon" ]
64        then
65                SYSFS=2
66                DIR="/sys/class/hwmon"
67        elif [ -d "/sys/bus/i2c/devices" ]
68        then
69                SYSFS=1
70                DIR="/sys/bus/i2c/devices"
71        else
72                echo $0: 'No sensors found! (modprobe sensor modules?)'
73                exit 1
74        fi     
75fi
76
77cd $DIR
78if [ "$SYSFS" = "2" ]
79then
80        PREFIX='hwmon*/device'
81else
82        PREFIX='*-*'
83fi
84DEVICES=`echo $PREFIX`
85if [ "$PREFIX" = "$DEVICES" ]
86then
87        echo $0: 'No sensors found! (modprobe sensor modules?)'
88        exit 1
89fi
90
91MATCH=$PREFIX/'pwm[1-9]'
92PWM=`echo $MATCH`
93if [ "$SYSFS" = "1" -a "$MATCH" = "$PWM" ]
94then
95        # Deprecated naming scheme (used in kernels 2.6.5 to 2.6.9)
96        MATCH=$PREFIX/'fan[1-9]_pwm'
97        PWM=`echo $MATCH`
98fi
99if [ "$MATCH" = "$PWM" ]
100then
101        echo $0: 'There are no pwm-capable sensor modules installed'
102        exit 1
103fi
104
105if [ -n "$SYSFS" ]
106then
107        MATCH=$PREFIX/'fan[1-9]_input'
108else
109        MATCH=$PREFIX/'fan[1-9]'
110fi
111FAN=`echo $MATCH`
112if [ "$MATCH" = "$FAN" ]
113then
114        echo $0: 'There are no fan-capable sensor modules installed'
115        exit 1
116fi
117
118# $1 = padding
119# Only works with Linux 2.6
120function print_devices()
121{
122        for device in $DEVICES
123        do
124                echo "$1$device is `cat $device/name`"
125        done
126}
127
128# $1 = pwm file name
129function is_pwm_auto()
130{
131        if [ -n "$SYSFS" ]
132        then
133                ENABLE=${1}_enable
134                if [ -f $ENABLE ]
135                then
136                        if [ "`cat $ENABLE`" -gt 1 ]
137                        then
138                                return 0
139                        fi
140                fi
141        fi
142
143        return 1
144}
145
146# $1 = pwm file name
147function pwmdisable()
148{
149        if [ -n "$SYSFS" ]
150        then
151                ENABLE=${1}_enable
152                # No enable file? Just set to max
153                if [ ! -f $ENABLE ]
154                then
155                        echo $MAX > $1
156                        return 0
157                fi
158
159                # Try pwmN_enable=0
160                echo 0 2>/dev/null > $ENABLE
161                if [ "`cat $ENABLE`" -eq 0 ]
162                then
163                        # Success
164                        return 0
165                fi
166
167                # It didn't work, try pwmN_enable=1 pwmN=255
168                echo 1 2>/dev/null > $ENABLE
169                if [ "`cat $ENABLE`" -ne 1 ]
170                then
171                        echo "$ENABLE stuck to `cat $ENABLE`" >&2
172                        return 1
173                fi
174
175                echo $MAX > $1
176                if [ "`cat $1`" -ge 190 ]
177                then
178                        # Success
179                        return 0
180                fi
181
182                # Nothing worked
183                echo "$1 stuck to `cat $1`" >&2
184                return 1
185        else
186                echo $MAX 0 > $1
187        fi
188}
189
190# $1 = pwm file name
191function pwmenable()
192{
193        if [ -n "$SYSFS" ]
194        then
195                ENABLE=${1}_enable
196                if [ -w $ENABLE ]
197                then
198                        echo 1 2>/dev/null > $ENABLE
199                        if [ $? -ne 0 ]
200                        then
201                                return 1
202                        fi
203                fi
204                echo $MAX > $1
205        else
206                echo $MAX 1 > $1
207        fi
208}
209
210# $1 = pwm file name; $2 = pwm value 0-255
211function pwmset()
212{
213        echo $2 > $1
214}
215
216if [ -n "$SYSFS" ]
217then
218        echo 'Found the following devices:'
219        print_devices "   "
220        echo
221fi
222
223echo 'Found the following PWM controls:'
224for i in $PWM
225do
226        echo "   $i"
227        if [ -w $i ]
228        then
229                # First check if PWM output is in automatic mode
230                if is_pwm_auto $i
231                then
232                        echo "$i is currently setup for automatic speed control."
233                        echo 'In general, automatic mode is preferred over manual mode, as'
234                        echo 'it is more efficient and it reacts faster. Are you sure that'
235                        echo -n 'you want to setup this output for manual control? (n) '
236                        read X
237                        if [ "$X" = "" -o "$X" != "y" -a "$X" != "Y" ]
238                        then
239                                continue
240                        fi
241                fi
242
243                pwmdisable $i
244                if [ $? -ne 0 ]
245                then
246                        echo "Manual control mode not supported, skipping $i."
247                elif [ "$GOODPWM" = "" ]
248                then
249                        GOODPWM=$i
250                else
251                        GOODPWM="$GOODPWM $i"
252                fi
253        else
254                NOTROOT=1
255        fi
256done
257
258if [ "$GOODPWM" = "" ]
259then
260        echo 'There are no usable PWM outputs.'
261        exit 1
262fi
263
264echo
265echo "Giving the fans some time to reach full speed..."
266sleep $DELAY
267echo 'Found the following fan sensors:'
268for i in $FAN
269do
270        # this will return the first field if there's only one (sysfs)
271        S=`cat $i | cut -d' ' -f2`
272        if [ "$S" = "0" -o "$S" = "-1" ]
273        then
274                echo "   $i     current speed: 0 ... skipping!"
275        else
276                echo "   $i     current speed: $S RPM"
277                if [ "$GOODFAN" = "" ]
278                then
279                        GOODFAN=$i
280                        SPEEDS=$S
281                else
282                        GOODFAN="$GOODFAN $i"
283                        SPEEDS="$SPEEDS $S"
284                fi
285        fi
286done
287echo
288
289if [ "$GOODFAN" = "" ]
290then
291        echo 'There are no working fan sensors, all readings are 0.'
292        echo 'Make sure you have a 3-wire fan connected.'
293        echo 'You may also need to increase the fan divisors.'
294        echo 'See doc/fan-divisors for more information.'
295        exit 1
296fi
297
298if [ "$NOTROOT" = "1" ]
299then
300        echo 'As you are not root, we cannot write the PWM settings.'
301        echo 'Please run as root to continue.'
302        exit 1
303fi
304
305echo 'Warning!!! This program will stop your fans, one at a time,'
306echo "for approximately $DELAY seconds each!!!"
307echo 'This may cause your processor temperature to rise!!!'
308echo 'If you do not want to do this hit control-C now!!!'
309echo -n 'Hit return to continue: '
310read X
311echo
312
313PLOTTER=gnuplot
314STEP=15
315PDELAY=2
316# Use a smaller step for low PWM values as this is typically where the
317# more important fan speed changes are happening.
318STEP2=2
319STEP2_BELOW=31
320
321function pwmdetail()
322{
323        P=$1
324        F=$2
325        PLOT=
326
327        type $PLOTTER > /dev/null 2>&1
328        if [ $? -eq 0 ]
329        then
330                echo -n "Would you like to generate a graphical plot using $PLOTTER (y)? "
331                read X
332                if [ "$X" = "y" -o "$X" = "Y" -o "$X" = "" ]
333                then
334                        PLOT=y         
335                fi
336        else
337                if [ -n "$DISPLAY" ]
338                then
339                        echo "Note: If you had $PLOTTER installed, I could generate a graphical plot."
340                fi
341        fi
342
343        if [ "$PLOT" = "y" ]
344        then
345                TMP1=`mktemp -t pwmtest1.XXXXXXXXXX` || { echo "$0: Cannot create temporary file" >&2; exit 1; }
346                TMP2=`mktemp -t pwmtest2.XXXXXXXXXX` || { rm -f $TMP1 ; echo "$0: Cannot create temporary file" >&2; exit 1; }
347                echo "set xlabel \"PWM: $P\"" > $TMP1
348                echo "set ylabel \"FAN: $F (RPM)\"" >> $TMP1
349                echo 'set nokey' >> $TMP1
350                echo 'set xrange [0:255]' >> $TMP1
351                echo "plot \"$TMP2\" with lines" >> $TMP1
352                echo 'pause -1 "    Hit return to continue..."' >> $TMP1
353                > $TMP2
354        fi
355
356        local threshold=100000
357        let pwm=$MAX
358        pwmenable $P
359        while [ $pwm -ge 0 ]
360        do
361                pwmset $P $pwm 
362                sleep $PDELAY
363                if [ $? -ne 0 ]
364                then
365                        pwmdisable $P   
366                        echo '^C received, aborting...'
367                        rm -f $TMP1 $TMP2
368                        exit 1
369                fi             
370                # this will return the first field if there's only one (sysfs)
371                S=`cat $F | cut -d' ' -f2`
372                # Fan speed should never increase significantly
373                if [ $S -gt $threshold ]
374                then
375                        echo "    PWM $pwm FAN $S (probably incorrect)"
376                else
377                        echo "    PWM $pwm FAN $S"
378                        let threshold=S*6/5
379                fi
380
381                if [ "$PLOT" = "y" ]
382                then
383                        echo "$pwm $S" >> $TMP2
384                fi
385                if [ "$S" = "0" -o "$S" = "-1" ]
386                then
387                        pwmdisable $P   
388                        echo "    Fan Stopped at PWM = $pwm"
389                        if [ $pwm -eq $MAX ]
390                        then
391                                echo "    This fan appears to stop when the PWM is enabled;"
392                                echo "    perhaps the fan input shares a pin with the PWM output"
393                                echo "    on the sensor chip."
394                                echo "    You cannot control this fan with this PWM output."
395                                rm -f $TMP1 $TMP2
396                                echo
397                                return 0
398                        fi
399                        break
400                fi
401                if [ $pwm -lt $STEP2_BELOW ]
402                then
403                        let pwm=$pwm-$STEP2
404                else
405                        let pwm=$pwm-$STEP
406                fi
407        done
408        pwmdisable $P   
409        if [ "$PLOT" = "y" ]
410        then
411                $PLOTTER  $TMP1
412                rm -f $TMP1 $TMP2
413        fi
414        echo
415}
416
417for i in $GOODPWM
418do
419        echo Testing pwm control $i ...
420        pwmenable $i
421        if [ $? -ne 0 ]
422        then
423                echo "Manual control mode not supported, skipping."
424                continue
425        fi
426        pwmset $i 0
427        sleep $DELAY
428        if [ $? -ne 0 ]
429        then
430                pwmdisable $i
431                echo '^C received, restoring PWM and aborting...'
432                exit 1
433        fi             
434        let pwmactivecount=0
435        let count=1
436        for j in $GOODFAN
437        do
438                OS=`echo $SPEEDS | cut -d' ' -f$count`
439                # this will return the first field if there's only one (sysfs)
440                S=`cat $j | cut -d' ' -f2`
441                echo "  $j ... speed was $OS now $S"
442                pwmdisable $i
443                let threshold=2*$OS/3
444                if [ $S -lt $threshold ]
445                then
446                        echo "    It appears that fan $j"
447                        echo "    is controlled by pwm $i"
448#
449# a PWM can control more than one fan....
450#
451                        if [ $pwmactivecount -eq 0 ]
452                        then
453                                let pwmactivecount=1
454                                pwmactive="$i ${pwmactive}"
455                                fanactive="$j ${fanactive}"
456                        else
457                                fanactive="$j+${fanactive}" #not supported yet by fancontrol
458                        fi
459                        sleep $DELAY
460                        if [ $? -ne 0 ]
461                        then
462                                echo '^C received, aborting...'
463                                exit 1
464                        fi             
465                        # this will return the first field if there's only one (sysfs)
466                        S=`cat $j | cut -d' ' -f2`
467                        if [ $S -lt $threshold ]
468                        then
469                                echo "    Fan $j has not returned to speed, please investigate!"
470                        else
471                                echo -n "Would you like to generate a detailed correlation (y)? "
472                                read X
473                                if [ "$X" = "y" -o "$X" = "Y" -o "$X" = "" ]
474                                then
475                                        pwmdetail $i $j
476                                fi
477                        fi
478                else
479                        echo "    no correlation"
480                fi
481                let count=count+1
482        done
483        echo
484        if [ "$pwmactivecount" = "0" ]
485        then
486                echo "No correlations were detected."
487                echo "There is either no fan connected to the output of $i,"
488                echo "or the connected fan has no rpm-signal connected to one of"
489                echo "the tested fan sensors. (Note: not all motherboards have"
490                echo "the pwm outputs connected to the fan connectors,"
491                echo "check out the hardware database on http://www.almico.com/forumindex.php)"
492                echo
493                echo -n "Did you see/hear a fan stopping during the above test (n)? "
494                read X
495                if [ "$X" = "y" -o "$X" = "Y" ]
496                then
497                        pwmactive="$i ${pwmactive}"
498                fi
499                echo
500        fi
501done
502
503
504echo 'Testing is complete.'
505echo 'Please verify that all fans have returned to their normal speed.'
506echo
507echo 'The fancontrol script can automatically respond to temperature changes'
508echo 'of your system by changing fanspeeds.'
509echo -n 'Do you want to set up its configuration file now (y)? '
510
511read X
512if [ "$X" = "n" -o "$X" = "N" ]
513then
514        exit
515fi
516
517if [ -n "$SYSFS" ]
518then
519        MATCH=$PREFIX/'temp[1-9]_input'
520else
521        MATCH=$PREFIX/'temp[1-9]'
522fi
523TEMPS=`echo $MATCH`
524if [ "$MATCH" = "$TEMPS" ]
525then
526        echo $0: 'There are no temperature-capable sensor modules installed'
527        exit 1
528fi
529
530function AskPath()
531{
532        echo -n 'What should be the path to your fancontrol config file (/etc/fancontrol)? '
533
534        read FCCONFIG
535        if [ "$FCCONFIG" = "" ]
536        then
537                FCCONFIG="/etc/fancontrol"
538        fi
539}
540
541AskPath
542
543function ClearConfig()
544{
545        FCTEMPS=""
546        FCFANS=""
547        MINTEMP=""
548        MAXTEMP=""
549        MINSTART=""
550        MINSTOP=""
551        MINPWM=""
552        MAXPWM=""
553}
554
555function LoadConfig()
556{
557        # Nothing to do
558        if [ ! -f "$1" ]
559        then
560                ClearConfig
561                return 0
562        fi
563
564        echo "Loading configuration from $1 ..."
565        INTERVAL=`egrep '^INTERVAL=.*$' $1 | sed -e 's/INTERVAL= *//g'`
566        FCTEMPS=`egrep '^FCTEMPS=.*$' $1 | sed -e 's/FCTEMPS= *//g'`
567        FCFANS=`egrep '^FCFANS=.*$' $1 | sed -e 's/FCFANS= *//g'`
568        MINTEMP=`egrep '^MINTEMP=.*$' $1 | sed -e 's/MINTEMP= *//g'`
569        MAXTEMP=`egrep '^MAXTEMP=.*$' $1 | sed -e 's/MAXTEMP= *//g'`
570        MINSTART=`egrep '^MINSTART=.*$' $1 | sed -e 's/MINSTART= *//g'`
571        MINSTOP=`egrep '^MINSTOP=.*$' $1 | sed -e 's/MINSTOP= *//g'`
572        MINPWM=`egrep '^MINPWM=.*$' $1 | sed -e 's/MINPWM= *//g'`
573        MAXPWM=`egrep '^MAXPWM=.*$' $1 | sed -e 's/MAXPWM= *//g'`
574
575        # Check for configuration change
576        local item
577        for item in $FCFANS
578        do
579                if [ ! -f "`echo $item | sed -e 's/=.*$//'`" ]
580                then
581                        echo "Configuration appears to be outdated, discarded"
582                        ClearConfig
583                        return 0
584                fi
585        done
586}
587
588LoadConfig $FCCONFIG
589
590# $1 = pwm value below which the fan is stopped
591function TestMinStart()
592{
593        echo
594        echo 'Now we increase the PWM value in 10-unit-steps.'
595        echo 'Let the fan stop completely, then press return until the'
596        echo "fan starts spinning. Then enter 'y'."
597        echo 'We will use this value +20 as the starting speed.'
598        let fanok=0
599        let fanval="$1"
600
601        pwmenable $pwms
602        until [ "$fanok" = "1" ]
603        do
604                if [ $fanval -gt 240 ] ; then let fanval=$MAX ; let fanok=1 ; fi
605                echo -n "Setting $pwms to $fanval..."
606                pwmset $pwms $fanval
607                read FANTEST
608                if [ "$FANTEST" != "" ] ; then let fanok=1 ; fi
609                let fanval=fanval+10
610        done
611        pwmdisable $pwms
612
613        let fanval=fanval+20
614        if [ $fanval -gt 240 ] ; then let fanval=$MAX ; fi
615        echo "OK, using $fanval"
616}
617
618# $1 = fan input to read the fan speed from
619function TestMinStop()
620{
621        local faninput=$1
622        local threshold=100000
623        local fanspeed
624
625        echo
626        echo 'Now we decrease the PWM value to figure out the lowest usable value.'
627        echo 'We will use a slightly greater value as the minimum speed.'
628        let fanval=$MAX
629
630        pwmenable $pwms
631        while [ $fanval -ge 0 ]
632        do
633                pwmset $pwms $fanval
634                sleep $PDELAY
635                fanspeed=`cat $faninput | cut -d' ' -f2`
636                if [ $fanspeed -gt $threshold ]
637                then
638                        echo "    PWM $fanval -> $fanspeed RPM (probably incorrect)"
639                        break
640                else
641                        echo "    PWM $fanval -> $fanspeed RPM"
642                        if [ $fanspeed = "0" -o $fanspeed = "-1" ]
643                        then
644                                break
645                        fi
646                        let threshold=fanspeed*6/5
647                fi
648                if [ $fanval -lt $STEP2_BELOW ]
649                then
650                        let fanval=$fanval-$STEP2
651                else
652                        let fanval=$fanval-$STEP
653                fi
654        done
655        pwmdisable $pwms
656
657        if [ $fanval -lt $STEP2_BELOW ]
658        then
659                let 'fanval=fanval+2*STEP2'
660        else
661                let 'fanval=fanval+STEP'
662        fi
663        echo "OK, using $fanval"
664}
665
666function SaveConfig()
667{
668        echo
669        echo "Saving configuration to $FCCONFIG..."
670        tmpfile=`mktemp -t pwmcfg.XXXXXXXXXX` || { echo "$0: Cannot create temporary file" >&2; exit 1;  }
671        trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
672        echo "# Configuration file generated by pwmconfig, changes will be lost" >$tmpfile
673        echo -e "INTERVAL=$INTERVAL\nFCTEMPS=$FCTEMPS\nFCFANS=$FCFANS\nMINTEMP=$MINTEMP\nMAXTEMP=$MAXTEMP\nMINSTART=$MINSTART\nMINSTOP=$MINSTOP" >>$tmpfile
674        [ -n "$MINPWM" ] && echo "MINPWM=$MINPWM" >>$tmpfile
675        [ -n "$MAXPWM" ] && echo "MAXPWM=$MAXPWM" >>$tmpfile
676        mv $tmpfile $FCCONFIG
677        chmod +r $FCCONFIG
678        #check if file was written correctly
679        echo 'Configuration saved'
680}
681
682INTERVAL=10
683PS3='select (1-n): '
684DEFMINTEMP=0
685DEFMAXTEMP=60
686DEFMINSTART=150
687DEFMINSTOP=100
688
689function filter_cfgvar()
690{
691        echo "$1" | sed -e 's/ /\n/g' \
692                  | egrep "$2" \
693                  | sed -e 's/.*=//g'
694}
695
696# "select" won't repeat the list of options, so we enclose it in a
697# never-ending loop so that it starts over again with each iteration.
698# I admit it's not exactly nice, but I do not have a better idea to
699# keep usability at an acceptable level.
700while [ 1 ] ; do
701echo
702echo 'Select fan output to configure, or other action:'
703select pwms in $pwmactive "Change INTERVAL" "Just quit" "Save and quit" "Show configuration"; do
704        case $pwms in
705        "Change INTERVAL")
706                echo
707                echo "Current interval is $INTERVAL seconds."
708                echo -n "Enter the interval at which fancontrol should update PWM values (in s): "
709                read INTERVAL #check user input here
710                break ;;
711        "Just quit")
712                exit ;;
713        "Save and quit")
714                SaveConfig
715                exit ;;
716        "Show configuration")
717                echo
718                echo "Common Settings:"
719                echo "INTERVAL=$INTERVAL"
720                for pwmo in $pwmactive
721                do
722                        echo
723                        echo "Settings of ${pwmo}:"
724                        echo "  Depends on `filter_cfgvar "$FCTEMPS" "$pwmo"`"
725                        echo "  Controls `filter_cfgvar "$FCFANS" "$pwmo"`"
726                        echo "  MINTEMP=`filter_cfgvar "$MINTEMP" $pwmo`"
727                        echo "  MAXTEMP=`filter_cfgvar "$MAXTEMP" "$pwmo"`"
728                        echo "  MINSTART=`filter_cfgvar "$MINSTART" "$pwmo"`"
729                        echo "  MINSTOP=`filter_cfgvar "$MINSTOP" "$pwmo"`"
730                        XMINP=`filter_cfgvar "$MINPWM" "$pwmo"`
731                        [ -n "$XMINP" ] && echo "  MINPWM=$XMINP"
732                        XMAXP=`filter_cfgvar "$MAXPWM" "$pwmo"`
733                        [ -n "$XMAXP" ] && echo "  MAXPWM=$XMAXP"
734                done
735                echo
736                break ;;
737
738        "`echo ${pwmactive} |sed -e 's/ /\n/g' | egrep "${pwms}"`" )
739                pwmsed=`echo ${pwms} | sed -e 's/\//\\\\\//g'` #escape / for sed
740                echo
741                if [ -n "$SYSFS" ]
742                then
743                        echo 'Devices:'
744                        print_devices ""
745                        echo
746                fi
747                echo 'Current temperature readings are as follows:'
748                for j in $TEMPS
749                do
750                        # this will return the first field if there's only one (sysfs)
751                        S=`cat $j | cut -d' ' -f3`
752                        if [ -n "$SYSFS" ]
753                        then
754                                let S="$S / 1000"
755                        fi
756                        echo "$j        $S"
757                done
758                FAN=`echo $fanactive|cut -d' ' -f$REPLY`
759                FCFANS="`echo $FCFANS | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=$FAN"
760                echo
761                echo "Select a temperature sensor as source for ${pwms}:"
762                select tempss in $TEMPS "None (Do not affect this PWM output)"; do
763                        if [ "$tempss" = "None (Do not affect this PWM output)" ]
764                        then
765                       
766                                break;
767                        else
768                                if [ "$FCTEMPS" = "" ]
769                                then
770                                        FCTEMPS="${pwms}=${tempss}"
771                                else
772                                        FCTEMPS="`echo $FCTEMPS | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=${tempss}"
773                                fi
774                        fi
775                        echo
776                        echo 'Enter the low temperature (degree C)'
777                        echo -n "below which the fan should spin at minimum speed ($DEFMINTEMP): "
778                        read XMT
779                        if [ "$XMT" = "" ]
780                        then
781                                XMT=$DEFMINTEMP
782                        fi
783                        if [ "$MINTEMP" = "" ]
784                        then
785                                MINTEMP="${pwms}=${XMT}"
786                        else
787                                MINTEMP="`echo $MINTEMP | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=${XMT}"
788                        fi
789                        echo
790                        echo 'Enter the high temperature (degree C)'
791                        echo -n "over which the fan should spin at maximum speed ($DEFMAXTEMP): "
792                        read XMT
793                        if [ "$XMT" = "" ]
794                        then
795                                XMT=$DEFMAXTEMP
796                        fi
797                        if [ "$MAXTEMP" = "" ]
798                        then
799                                MAXTEMP="${pwms}=${XMT}"
800                        else
801                                MAXTEMP="`echo $MAXTEMP | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=${XMT}"
802                        fi
803                        echo
804                        echo "Enter the minimum PWM value (0-$MAX)"
805                        echo -n "at which the fan STOPS spinning (press t to test) ($DEFMINSTOP): "
806                        read XMSTOP
807                        if [ "$XMSTOP" = "" ]
808                        then
809                                XMSTOP=$DEFMINSTOP
810                        fi
811                        if [ "$XMSTOP" = "t" -o "$XMSTOP" = "T" ]
812                        then
813                                TestMinStop $FAN
814                                XMSTOP=$fanval
815                        fi
816                        if [ "$MINSTOP" = "" ]
817                        then
818                                MINSTOP="${pwms}=${XMSTOP}"
819                        else
820                                MINSTOP="`echo $MINSTOP | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=${XMSTOP}"
821                        fi
822                        echo
823                        echo "Enter the minimum PWM value ($XMSTOP-$MAX)"
824                        echo -n "at which the fan STARTS spinning (press t to test) ($DEFMINSTART): "
825                        read XMSTART
826                        if [ "$XMSTART" = "" ]
827                        then
828                                XMSTART=$DEFMINSTART
829                        fi
830                        if [ "$XMSTART" = "t" -o "$XMSTART" = "T" ]
831                        then
832                                TestMinStart $XMSTOP
833                                XMSTART=$fanval
834                        fi
835                        if [ "$MINSTART" = "" ]
836                        then
837                                MINSTART="${pwms}=${XMSTART}"
838                        else
839                                MINSTART="`echo $MINSTART | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=${XMSTART}"
840                        fi
841                        echo
842                        echo "Enter the PWM value (0-$XMSTOP) to use when the temperature"
843                        echo -n "is below the low temperature limit (0): "
844                        read XMINP
845                        if [ -n "$XMINP" ]
846                        then
847                                if [ "$MINPWM" = "" ]
848                                then
849                                        MINPWM="${pwms}=${XMINP}"
850                                else
851                                        MINPWM="`echo $MINPWM | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=${XMINP}"
852                                fi
853                        fi
854                        echo
855                        echo "Enter the PWM value ($XMSTOP-$MAX) to use when the temperature"
856                        echo -n "is over the high temperature limit ($MAX): "
857                        read XMAXP
858                        if [ -n "$XMAXP" ]
859                        then
860                                if [ "$MAXPWM" = "" ]
861                                then
862                                        MAXPWM="${pwms}=${XMAXP}"
863                                else
864                                        MAXPWM="`echo $MAXPWM | sed -e "s/${pwmsed}[^ ]* *//g"` ${pwms}=${XMAXP}"
865                                fi
866                        fi
867                        echo
868                        break;
869                done
870                break ;;
871       
872        *)
873                echo "No such option. Enter a number."
874                break ;;
875        esac
876done
877done
Note: See TracBrowser for help on using the browser.