added backlight and fixed outbound
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# bt-brightness - LCD backlight control for ButtonTask.
|
||||
#
|
||||
# Usage:
|
||||
# bt-brightness status
|
||||
# bt-brightness set <0-100>
|
||||
#
|
||||
# Invoked through sudo by the web configurator / Qt UI.
|
||||
# Prefers /sys/class/backlight/backlight; otherwise the first device with
|
||||
# max_brightness > 0.
|
||||
set -euo pipefail
|
||||
|
||||
err() { echo "bt-brightness: $*" >&2; exit 1; }
|
||||
|
||||
BACKLIGHT_ROOT="/sys/class/backlight"
|
||||
|
||||
find_device() {
|
||||
local d preferred="$BACKLIGHT_ROOT/backlight" max
|
||||
if [ -d "$preferred" ] && [ -f "$preferred/max_brightness" ]; then
|
||||
max="$(cat "$preferred/max_brightness" 2>/dev/null || echo 0)"
|
||||
if [ "$max" -gt 0 ] 2>/dev/null; then
|
||||
echo "$preferred"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
for d in "$BACKLIGHT_ROOT"/*; do
|
||||
[ -d "$d" ] || continue
|
||||
[ -f "$d/max_brightness" ] || continue
|
||||
max="$(cat "$d/max_brightness" 2>/dev/null || echo 0)"
|
||||
if [ "$max" -gt 0 ] 2>/dev/null; then
|
||||
echo "$d"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
emit_status() {
|
||||
local dev="$1" max cur percent
|
||||
max="$(cat "$dev/max_brightness")"
|
||||
if [ -f "$dev/actual_brightness" ]; then
|
||||
cur="$(cat "$dev/actual_brightness")"
|
||||
else
|
||||
cur="$(cat "$dev/brightness")"
|
||||
fi
|
||||
if [ "$max" -gt 0 ]; then
|
||||
percent=$(( (cur * 100 + max / 2) / max ))
|
||||
else
|
||||
percent=0
|
||||
fi
|
||||
[ "$percent" -gt 100 ] && percent=100
|
||||
[ "$percent" -lt 0 ] && percent=0
|
||||
printf '{"device":"%s","brightness":%s,"max":%s,"percent":%s}\n' \
|
||||
"$(basename "$dev")" "$cur" "$max" "$percent"
|
||||
}
|
||||
|
||||
set_percent() {
|
||||
local percent="$1" dev max value
|
||||
[[ "$percent" =~ ^[0-9]+$ ]] || err "percent must be an integer 0-100"
|
||||
[ "$percent" -ge 0 ] && [ "$percent" -le 100 ] || err "percent must be 0-100"
|
||||
dev="$(find_device)" || err "no backlight device found"
|
||||
max="$(cat "$dev/max_brightness")"
|
||||
[ "$max" -gt 0 ] || err "max_brightness is 0"
|
||||
value=$(( (percent * max + 50) / 100 ))
|
||||
[ "$value" -lt 0 ] && value=0
|
||||
[ "$value" -gt "$max" ] && value="$max"
|
||||
# Avoid completely blank panel unless explicitly requested as 0.
|
||||
printf '%s\n' "$value" > "$dev/brightness"
|
||||
emit_status "$dev"
|
||||
}
|
||||
|
||||
cmd_status() {
|
||||
local dev
|
||||
dev="$(find_device)" || err "no backlight device found"
|
||||
emit_status "$dev"
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
status) cmd_status ;;
|
||||
set) [ "$#" -eq 2 ] || err "usage: bt-brightness set <0-100>"; set_percent "$2" ;;
|
||||
*) err "usage: bt-brightness {status|set <0-100>}" ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user