#!/bin/bash
#
# chkconfig: 2345 70 30
# description:  This starts and stops M918X.ko device driver for \
#               Agilent M918X DMMs.  

module="M918X"

M918X_device_classes="M918X SMX403X"

RESTART="false"

#=========================================================================
create_nodes() # create nodes for all devices with name prefix passed in
#=========================================================================
# Arg 1 = device name prefix
{
    device=$1
    mode="666"

    # retrieve major number
    major=$(awk "/${device}_*/ {maj=\$1} END {print maj}" /proc/devices)

    #echo "create_node $device $major"

    #if major does not exist don't add devices
    if !(test $major)
	then
	return
    fi

    #if major is not a positive number don't add devices
    if !(test $major -gt 0)
	then
	return
    fi

    num_devices=$(awk "/${device}_*/ {count++} END {print count}" /proc/devices)

    minor_numbers=$(awk " 
/${device}_*/ {
   prefix_len = length(\"$device\") + 1; 
   minor_num_len = length(\$2) - prefix_len; 
   printf(\"%s \", substr(\$2, prefix_len+1, minor_num_len));
} " /proc/devices)

    #echo "Minor numbers:  $minor_numbers"

    # Remove stale nodes and replace them, then give gid and perms
    rm -f /dev/${device}_[0-3]

    iCard=0
    for minor in $minor_numbers
      do
      mknod /dev/${device}_$iCard c $major $minor
      chmod $mode /dev/${device}_$iCard
      let iCard=iCard+1
   done
}


#==============================================================================
start() # start M918X.ko module, create file dev nodes for present devices
#==============================================================================
{
    echo $"Starting $module"

    /sbin/modprobe $module || exit 1

    for dev in $M918X_device_classes
    do
        create_nodes $dev
    done
}

#==============================================================================
stop() # stop M918X.ko module, remove file dev nodes
#==============================================================================
{
    echo $"Stopping $module"

    #/sbin/rmmod $module || exit 1

    # When restarting, dont print any error messages that occur when stopping
    # the module.  
    if [ $RESTART = "true" ] 
    then
	/sbin/rmmod $module 2>/dev/null
    else
	/sbin/rmmod $module
    fi



    for dev in $M918X_device_classes
    do
      rm -f /dev/${dev}_[0-32] 
    done
}

case "$1" in
    start)
        start
        ;;
    stop)
	stop
	;;
    restart)
	RESTART="true"
	stop
	start
	;;
    *)
	echo $"Usage $0 {start|stop|restart}"
	exit 1
esac

exit 0
