Files
msm8916-openwrt/packages/router-display/files/hotplugs/20_power_dimm
T
2025-10-16 21:46:12 +02:00

78 lines
1.9 KiB
Bash

#!/bin/sh
# /etc/hotplug.d/button/20_power_dimm
# Only process power button events
[ "$BUTTON" = "power" ] || exit 0
# Configuration variables
TIMEOUT_DIM=5
TIMEOUT_OFF=3
BACKLIGHT_PATH="/sys/class/backlight/backlight"
BRIGHTNESS_DIM_DIVISOR=8
BRIGHTNESS_OFF=1
# Calculated variables
MAX_BRIGHTNESS=$(cat $BACKLIGHT_PATH/max_brightness 2>/dev/null || echo 1785)
BRIGHTNESS_FULL=$MAX_BRIGHTNESS
BRIGHTNESS_DIM=$((MAX_BRIGHTNESS / BRIGHTNESS_DIM_DIVISOR))
# PID file for timer management
TIMER_PID_FILE="/tmp/screen_timer.pid"
# Set brightness level
set_brightness() {
echo $1 > $BACKLIGHT_PATH/brightness
[ "$1" = "$BRIGHTNESS_OFF" ] && [ -f /etc/boot_logo.fb ] && \
cat /etc/boot_logo.fb > /dev/fb0 2>/dev/null
}
# Function to start a timer
# Parameters: $1=timeout (seconds), $2=brightness level, $3=log message
start_timer() {
local timeout=$1
local brightness=$2
local log_msg=$3
(
sleep "$timeout"
logger -t display "$log_msg"
set_brightness "$brightness"
) >/dev/null 2>&1 </dev/null &
echo $!
}
# Cancel all active timers
cancel_timers() {
if [ -f "$TIMER_PID_FILE" ]; then
while read pid; do
kill "$pid" 2>/dev/null
done < "$TIMER_PID_FILE"
rm -f "$TIMER_PID_FILE"
fi
}
# Only act on button release
[ "${ACTION}" = "released" ] && {
logger -t display "Button event detected"
# Cancel previous timers if any
cancel_timers
# Set full brightness immediately
logger -t display "Backlight: FULL"
set_brightness $BRIGHTNESS_FULL
# Start timer 1: DIM after TIMEOUT_DIM seconds
pid1=$(start_timer $TIMEOUT_DIM $BRIGHTNESS_DIM "Backlight: DIM")
echo "$pid1" >> "$TIMER_PID_FILE"
# Start timer 2: OFF after (TIMEOUT_DIM + TIMEOUT_OFF) seconds
TOTAL_TIMEOUT=$((TIMEOUT_DIM + TIMEOUT_OFF))
pid2=$(start_timer $TOTAL_TIMEOUT $BRIGHTNESS_OFF "Backlight: OFF")
echo "$pid2" >> "$TIMER_PID_FILE"
}
exit 0