You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.8 KiB
Bash
78 lines
2.8 KiB
Bash
#!/bin/sh
|
|
# Copyright (c) 2015 Qualcomm Atheros, Inc.
|
|
#
|
|
# All Rights Reserved.
|
|
# Qualcomm Atheros Confidential and Proprietary.
|
|
|
|
. /lib/functions.sh
|
|
|
|
# Determine the SysFS path corresponding to the LED with the given name.
|
|
# input: $1 - name: the virtual name of the LED (used within the UCI system
|
|
# configuration)
|
|
# output: $2 - sysfs path: the parameter into which to store the sysfs path
|
|
# return: 0 on success; 1 if the LED could not be located by name
|
|
__repacd_led_get_path() {
|
|
local led_name=$1 sysfs_name
|
|
config_load system
|
|
config_get sysfs_name "$led_name" 'sysfs' ''
|
|
if [ -n "$sysfs_name" ]; then
|
|
eval "$2=/sys/class/leds/$sysfs_name"
|
|
return 0
|
|
else # not found
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
__repacd_led_set_state() {
|
|
local state_name=$1 index=$2
|
|
local name trigger brightness delay_on delay_off
|
|
local sysfs_path
|
|
|
|
config_load repacd
|
|
config_get name "$state_name" "Name_${index}" ''
|
|
if [ -n "$name" ]; then
|
|
config_get trigger "$state_name" "Trigger_${index}" ''
|
|
config_get brightness "$state_name" "Brightness_${index}" ''
|
|
if [ "$trigger" = 'timer' ]; then
|
|
config_get delay_on "$state_name" "DelayOn_${index}" ''
|
|
config_get delay_off "$state_name" "DelayOff_${index}" ''
|
|
fi
|
|
|
|
__repacd_led_get_path "$name" sysfs_path
|
|
|
|
# Now activate the changes if all of the values are valid.
|
|
if [ -n "$trigger" ] && [ -n "$brightness" ] && [ -n "$sysfs_path" ]; then
|
|
# Change the mode first so that any additional values can be set.
|
|
echo "$trigger" > "$sysfs_path/trigger"
|
|
echo "$brightness" > "$sysfs_path/brightness"
|
|
|
|
# The on/off values only get written for timer mode (as the sysfs
|
|
# files do not even exist in other modes).
|
|
#
|
|
# Note that a different value is first written to force the blink
|
|
# rate to be updated. Without this, it seems that the LEDs do not
|
|
# blink if the default values (of 500 ms on/off) are written.
|
|
if [ "$trigger" = 'timer' ] && [ -n "$delay_on" ]; then
|
|
echo 1 > "$sysfs_path/delay_on"
|
|
echo "$delay_on" > "$sysfs_path/delay_on"
|
|
fi
|
|
|
|
if [ "$trigger" = 'timer' ] && [ -n "$delay_off" ]; then
|
|
echo 1 > "$sysfs_path/delay_off"
|
|
echo "$delay_off" > "$sysfs_path/delay_off"
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Update the LEDs to the state indicated based on the configuration file.
|
|
# input: $1 - state name: the name to use as the section name when looking
|
|
# up the LED configuration
|
|
repacd_led_set_states() {
|
|
# For now, we only support up to 2 LEDs
|
|
for index in $(seq 1 2)
|
|
do
|
|
__repacd_led_set_state "$1" "$index"
|
|
done
|
|
}
|