diff --git a/packages/configs-mf68e/files/uci_defaults b/packages/configs-mf68e/files/uci_defaults index 024ab44..043f34e 100644 --- a/packages/configs-mf68e/files/uci_defaults +++ b/packages/configs-mf68e/files/uci_defaults @@ -32,15 +32,14 @@ cat > /etc/rc.button/power << 'EOF' SECONDS=3 -[ "${ACTION}" = "pressed" ] && exit ${SECONDS} - -[ "${ACTION}" = "timeout" ] && { - logger "Power held for ${SECONDS}: Shutting down system" +[ "${ACTION}" = "released" ] && [ "${SEEN}" -ge "${SECONDS}" ] && { + logger "Power held for ${SEEN}s: Shutting down system" poweroff & exit 0 } exit 0 + EOF chmod +x /etc/rc.button/power diff --git a/packages/router-display/files/hotplugs/20_power_dimm b/packages/router-display/files/hotplugs/20_power_dimm index 30effbd..cae173c 100644 --- a/packages/router-display/files/hotplugs/20_power_dimm +++ b/packages/router-display/files/hotplugs/20_power_dimm @@ -13,37 +13,79 @@ if pgrep poweroff >/dev/null 2>&1 || \ fi # Configuration variables -TIMEOUT_OFF=8 +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" +maybe_set_lockscreen(){ + # Show lockscreen if brightness is OFF + [ -n "$1" ] && [ "$1" = "$BRIGHTNESS_DIM" ] && [ -f /etc/boot_logo.fb ] && \ + cat /etc/boot_logo.fb > /dev/fb0 2>/dev/null +} + +# Set brightness level +set_brightness() { + echo "$1" > "$BACKLIGHT_PATH/brightness" + + # Check if we should show lockscreen + maybe_set_lockscreen "$1" +} + +# 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 + 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 timer if exists - [ -f "$TIMER_PID_FILE" ] && kill $(cat "$TIMER_PID_FILE") 2>/dev/null + # Cancel previous timers if any + cancel_timers # Set full brightness immediately logger -t display "Backlight: FULL" - echo $BRIGHTNESS_FULL > "$BACKLIGHT_PATH/brightness" + set_brightness $BRIGHTNESS_FULL - # Start single timer: OFF + lockscreen after TIMEOUT_OFF seconds - ( - sleep "$TIMEOUT_OFF" - logger -t display "Backlight: OFF + lockscreen" - echo $BRIGHTNESS_OFF > "$BACKLIGHT_PATH/brightness" - [ -f /etc/boot_logo.fb ] && cat /etc/boot_logo.fb > /dev/fb0 2>/dev/null - ) >/dev/null 2>&1 > "$TIMER_PID_FILE" - echo $! > "$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