[ARMedslack] play with leds on current
Davide
louigi600 at yahoo.it
Thu Mar 31 17:45:10 UTC 2011
I know most of you can do this better for yourselves ... but it might be handy for those who don't want to enter manually 3 echo's to some odd file in /sys just to make a led blink at a desired rate.
Here is the script I made for my lazy self: (BTW the MYOPTIONS array also self generates the help message and the options to be parsed ... just use it with no arguments or with -h and get help on how to use it )
#!/bin/bash
DEBUG=0
MYOPTIONS=(
"I,,\t\t:Turn ON,-"
"O,,\t\t:Turn OFF,-"
"b,:,\t:Blink with blinkrate <on:off> in miliseconds,-"
"t,:,\t:Set trigger <trigger>,-"
"h,,\t\t:Show this help message,0"
)
export MYOPTIONS
NAME=$(basename $0)
dump_options ()
{ echo "Dumping all options : "
I=0
while [ $I -lt ${#MYOPTIONS[*]} ]
do
echo "${MYOPTIONS[$I]}" |/usr/bin/awk -F, '{printf(" -%s=%s\n",$1,$4)}'
I=$(/usr/bin/expr $I + 1)
done
}
usage ()
{ cat <<EOF
usage: $NAME [OPTIONS] <green|orange>
Seagate Dockstar led manager
OPTIONS
EOF
I=0
while [ $I -lt ${#MYOPTIONS[*]} ]
do
OPTION=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 1)
PARM=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 2)
HTXT=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 3)
[ "$PARM" = ":" ] && echo -e "-$OPTION <value> $HTXT" || echo -e "-$OPTION $HTXT"
I=$(/usr/bin/expr $I + 1)
done
echo
if [ "$*" != "" ]
then
echo "Error: $*"
exit 1
else
exit 0
fi
}
get_myoptions_array_element ()
{ I=0
SEARCH_OPTION=$(echo "$1" |/usr/bin/tr -d "-")
while [ $I -lt ${#MYOPTIONS[*]} ]
do
OPTION=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 1)
[ "$OPTION" = "$SEARCH_OPTION" ] && break
I=$(/usr/bin/expr $I + 1)
done
echo $I
}
get_myoptions_value ()
{ I=0
SEARCH_OPTION=$(echo "$1" |/usr/bin/tr -d "-")
while [ $I -lt ${#MYOPTIONS[*]} ]
do
OPTION=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 1)
VALUE=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 4)
[ "$OPTION" = "$SEARCH_OPTION" ] && (echo $VALUE ; break)
I=$(/usr/bin/expr $I + 1)
done
}
get_myoptions_entry ()
{ I=0
SEARCH_OPTION=$(echo "$1" |/usr/bin/tr -d "-")
while [ $I -lt ${#MYOPTIONS[*]} ]
do
OPTION=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 1)
VALUE=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f -3)
[ "$OPTION" = "$SEARCH_OPTION" ] && (echo $VALUE ; break)
I=$(/usr/bin/expr $I + 1)
done
}
set_myoptions_value ()
{ AE=$(get_myoptions_array_element $1)
VAL=$(get_myoptions_entry $1)
NEWE="${VAL},$2"
MYOPTIONS[$AE]=$NEWE
export MYOPTIONS
}
set_trigger ()
{ echo "$2" > ${1}/trigger
}
set_blink ()
{ echo "$2" > ${1}/delay_on
echo "$3" > ${1}/delay_off
}
led_on ()
{ MAX_BRIGHT=$(cat ${1}/max_brightness)
echo "none" > ${1}/trigger
echo "$MAX_BRIGHT" > ${1}/brightness
}
led_off ()
{ echo "none" > ${1}/trigger
echo "0" > ${1}/brightness
}
########################
#MAIN
########################
[ $DEBUG -eq 1 ] && echo -n "Composing optistring for getopt ... "
GETOPT_STRING=$(I=0
while [ $I -lt ${#MYOPTIONS[*]} ]
do
OPTION=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 1)
PARM=$(echo "${MYOPTIONS[$I]}" |/usr/bin/cut -d "," -f 2)
echo -en "${OPTION}$PARM"
I=$(/usr/bin/expr $I + 1)
done
)
[ $DEBUG -eq 1 ] && echo $GETOPT_STRING
/usr/bin/getopt $GETOPT_STRING $* >/dev/null 2>/dev/null || \
usage unknown option or insufficient parameters: $*
GPO=$(/usr/bin/getopt $GETOPT_STRING $* 2>/dev/null |/usr/bin/tr -d "'")
set -- $GPO
[ $DEBUG -eq 1 ] && echo "Getopt Parsed Options: $*"
[ $DEBUG -eq 1 ] && echo "$# : $*"
[ $DEBUG -eq 1 ] && echo -n "Beginning to parse options internally ... "
[ "$1" = "--" ] && usage "Insufficient parameters"
while [ $# -ge 1 ]
do
case $1 in
-I) set_myoptions_value I 1; set_myoptions_value O 0; shift;;
-O) set_myoptions_value O 1; set_myoptions_value I 0; shift;;
-b) set_myoptions_value b $2; shift 2 ;;
-t) set_myoptions_value t $2; shift 2 ;;
-h) usage ;;
--) shift ; break ;;
*) usage $1 unknown option ;;
esac
done
[ $DEBUG -eq 1 ] && echo "Done"
[ $# -lt 1 ] && usage "Insufficient parameters"
case $1 in
green) LED_DIR="/sys/class/leds/dockstar:green:health" ;;
orange) LED_DIR="/sys/class/leds/dockstar:orange:misc" ;;
*) usage "Nos such led avalible"
esac
[ "$(get_myoptions_value t)" != "-" ] && \
set_trigger $LED_DIR $(get_myoptions_value t)
if [ "$(get_myoptions_value b)" != "-" ]
then
ON_TIME=$(echo "$(get_myoptions_value b)" |/usr/bin/cut -d: -f1)
OFF_TIME=$(echo "$(get_myoptions_value b)" |/usr/bin/cut -d: -f2)
set_trigger $LED_DIR timer
/usr/bin/sleep 0.1
set_blink $LED_DIR $ON_TIME $OFF_TIME
fi
[ "$(get_myoptions_value I)" = "1" ] && led_on $LED_DIR
[ "$(get_myoptions_value O)" = "1" ] && led_off $LED_DIR
More information about the ARMedslack
mailing list