#!/bin/bash do { #//////////////////////////////////// # DietPi LED control Script # #//////////////////////////////////// # Created by Daniel Knight / daniel.knight@dietpi.com / dietpi.com # #//////////////////////////////////// # # Info: # - Whiptail menu to select LED trigger types for all available /sys/class/leds entries # # Usage: # - /DietPi/dietpi/func/dietpi-led_control Main menu # - /DietPi/dietpi/func/dietpi-led_control 1 Apply from savefile #//////////////////////////////////// #Grab Input setvar INPUT = '0' if [[ $1 =~ ^-?[0-9]+$ ]] { setvar INPUT = "$1" } #Import DietPi-Globals --------------------------------------------------------------- source /DietPi/dietpi/func/dietpi-globals G_CHECK_ROOT_USER export G_PROGRAM_NAME='DietPi-LED_control' #Import DietPi-Globals --------------------------------------------------------------- setvar FP_SETTINGS = ''/DietPi/dietpi/.dietpi-led_control'' setvar aLED_NAME = '0' setvar aLED_SETTING_AVAILABLE = '0' setvar aLED_SETTING_CURRENT = '0' proc Init_LED_Info { setvar aLED_NAME = ''( $(ls /sys/class/leds) ) for ((i=0; i<${#aLED_NAME[@]}; i++)) do # Obtain available/cur settings aLED_SETTING_AVAILABLE[$i]=$(cat /sys/class/leds/${aLED_NAME[$i]}/trigger | tr -d '[]') aLED_SETTING_CURRENT[$i]=$(cat /sys/class/leds/${aLED_NAME[$i]}/trigger | grep -o '\[.*\]' | tr -d '[]') done if (( ${#aLED_NAME[@]} == 0 )) { G_DIETPI-NOTIFY 1 'Unable to find any supported LEDS on this device.' exit } } proc Settings_Write_Apply { rm $FP_SETTINGS &> /dev/null G_DIETPI-NOTIFY 3 DietPi-LED_Control "Applying LED triggers" for ((i=0; i<${#aLED_NAME[@]}; i++)) do echo -e "${aLED_SETTING_CURRENT[$i]}" > "/sys/class/leds/${aLED_NAME[$i]}/trigger" if (( $? == 0 )); then G_DIETPI-NOTIFY 0 "${aLED_NAME[$i]}: ${aLED_SETTING_CURRENT[$i]}" else G_DIETPI-NOTIFY 1 "${aLED_NAME[$i]}: ${aLED_SETTING_CURRENT[$i]}" fi cat << _EOF_ >> "$FP_SETTINGS" ${aLED_NAME[$i]} ${aLED_SETTING_CURRENT[$i]} _EOF_ done } proc Settings_Read { if test -f $FP_SETTINGS { local index=0 while read -r line { if (( $index < ${#aLED_NAME[@]} )) { #Only process available LED's at time of script if test ${aLED_NAME[$index]} = $(echo -e $line | awk '{print $1}' ) { setvar aLED_SETTING_CURRENT[$index]=$(echo -e "$line" | awk '{print $2}' ) ((index++)) } } else { break } } < "$FP_SETTINGS" } } #Menu's setvar WHIP_TITLE = ''DietPi - LED Control'' setvar TARGETMENUID = '0' setvar SELECTED_LED_NAME = '0' setvar DEFAULT_ITEM = '''' proc Menu_Main { Init_LED_Info setvar TARGETMENUID = '-1' local whiptail_menu_array=() for ((i=0; i<${#aLED_NAME[@]}; i++)) do whiptail_menu_array+=("${aLED_NAME[$i]}" ": ${aLED_SETTING_CURRENT[$i]}") done setvar OPTION = $(whiptail --title "$WHIP_TITLE" --menu "Please select an LED to configure its options:" --cancel-button "Back" 16 60 8 "${whiptail_menu_array[@]}" 3>&1 1>&2 2>&3) setvar CHOICE = ""$? unset whiptail_menu_array if (( $CHOICE == 0 )) { setvar SELECTED_LED_NAME = "$OPTION" setvar TARGETMENUID = '1' } } proc Menu_LED_Options { setvar TARGETMENUID = '0' local whiptail_menu_array=() local current_index=0 for ((i=0; i<${#aLED_NAME[@]}; i++)) do if [ "$SELECTED_LED_NAME" = "${aLED_NAME[$i]}" ]; then echo -e "${aLED_SETTING_AVAILABLE[$i]}" | tr ' ' '\n' > /tmp/aLED_SETTING_AVAILABLE while read -r line do whiptail_menu_array+=("$line" '') done < /tmp/aLED_SETTING_AVAILABLE DEFAULT_ITEM=${aLED_SETTING_CURRENT[$i]} current_index=$i break fi done setvar OPTION = $(whiptail --title "$WHIP_TITLE" --menu "Please select an option for $SELECTED_LED_NAME LED:" --default-item "$DEFAULT_ITEM" --cancel-button "Back" 18 60 10 "${whiptail_menu_array[@]}" 3>&1 1>&2 2>&3) setvar CHOICE = ""$? unset whiptail_menu_array if (( $CHOICE == 0 )) { setvar aLED_SETTING_CURRENT[$current_index]=$OPTION Settings_Write_Apply } } #///////////////////////////////////////////////////////////////////////////////////// # Main Loop #///////////////////////////////////////////////////////////////////////////////////// #----------------------------------------------------------------------------------- Init_LED_Info Settings_Read Settings_Write_Apply if (( $INPUT == 0 )) { while (( $TARGETMENUID > -1 )) { if (( $TARGETMENUID == 0 )) { Menu_Main } elif (( $TARGETMENUID == 1 )) { Menu_LED_Options } } } #----------------------------------------------------------------------------------- #Delete[] array unset aLED_NAME unset aLED_SETTING_AVAILABLE unset aLED_SETTING_CURRENT #----------------------------------------------------------------------------------- exit #----------------------------------------------------------------------------------- }