#!/bin/sh
#
#	hwm [-n]
#
#	In order to detect hardware monitor devices on the system, you need
#	to add the following line in /etc/devlinks.tab and run devfsadm
#	command.
#
#	minor=hwstat	\M0\N0
#
#	Create /etc/hwm.conf to customize the output for your motherboard,
#	which file must consist of shell functions like below:
#
Rampage_III_GENE () {
	# Vendor  Winbond
	# Chip    W83627DHG
	# Device  wbhwm@0
	echo "CPU	$wbhwm0_Temp1"
	echo "SYS	$wbhwm0_Temp0"
	echo "AUX	$wbhwm0_Temp2"
	echo "CPUFan	$wbhwm0_Fan1"
}

X8DTL () {
	# Vendor  nuvoTon
	# Chip    W83795G
	# Device  wbhwm@0,2f
	echo "CPU0	$wbhwm0_2f_Temp6"
	echo "CPU1	$wbhwm0_2f_Temp7"
	echo "SYS	$wbhwm0_2f_Temp4"
}

X9DAi () {
	# Vendor  nuvoTon
	# Chip    NCT7904D
	# Device  nvthwm@0,2d
	echo "CPU0	$nvthwm0_2d_Temp5"
	echo "CPU1	$nvthwm0_2d_Temp6"
	echo "SYS	$nvthwm0_2d_Temp4"
	echo "CPU0Fan	$nvthwm0_2d_Fan5"
	echo "CPU1Fan	$nvthwm0_2d_Fan6"
}

#
#	The main script
#

CONF=/etc/hwm.conf

if [ -r $CONF ]; then
    . $CONF
fi

RAW=
if [ "X$1" = "X-n" ]; then
    RAW=1
fi

MB=`smbios -t SMB_TYPE_BASEBOARD |
    sed -n -e '/^[ 	]*Product:/{
	s/^[ 	]*Product:[ 	]*//
	s/[()	]/ /g
	s/  */ /g
	s/ *$//
	s/[^a-zA-Z0-9]/_/g
	p
    }'`

if [ -z "$MB" ]; then
    echo "Error: no MB info extracted from smbios" >&2
    exit 1
fi

if [ -n "$RAW" ]; then
    echo "MB	$MB"
    echo
    MB=false
fi

DEVS=`ls -d /dev/hwstat[0-9]*`

if [ -z "$DEVS" ]; then
    echo "Error: no hardware monitor device found" >&2
    exit 1
fi

if ( $MB ) >/dev/null 2>&1; then
    for dev in $DEVS; do
	eval `hwstat -a -d "$dev" | sed -n -e '
	    /'\''/d
	    /^Device/{
		s/^Device[ 	]*//
		s/[ 	]*$//
		s/@\([0-9]\)/\1/
		s/[^A-Za-z0-9]/_/g
		h
	    }
	    /^Temp[ 	]/b doit
	    /^Fan[ 	]/b doit
	    /^Volt[ 	]/b doit
	    b
	    :doit
	    s/[ 	][ 	]*//
	    s/[ 	][ 	]*/=/
	    s/[ 	].*$//
	    G
	    s/^\(.*\)\n\(.*\)$/\2_\1/
	    /^[A-Za-z][_A-Za-z0-9]*=[-0-9.]*$'/p'`
    done
    $MB
else
    hwstat -a
fi

exit 0
