[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