display-monitor from uci
This commit is contained in:
1 parent
912e0b817e
commit
f8b978df15
3 files changed
+77
-44
No files matched your search
@@ -23,10 +23,12 @@ endef
|
||||
|
||||
define Package/display-monitor/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
|
||||
$(INSTALL_BIN) ./files/display-monitor.sh $(1)/usr/bin/display-monitor
|
||||
$(INSTALL_BIN) ./files/display-monitor.init $(1)/etc/init.d/display-monitor
|
||||
$(INSTALL_DATA) ./files/display.config $(1)/etc/config/display
|
||||
endef
|
||||
|
||||
define Package/display-monitor/postinst
|
||||
|
||||
@@ -1,12 +1,38 @@
|
||||
#!/bin/sh
|
||||
|
||||
BACKLIGHT="/sys/class/backlight/backlight"
|
||||
MAX_BRIGHTNESS=$(cat $BACKLIGHT/max_brightness 2>/dev/null || echo 1785)
|
||||
. /lib/functions.sh
|
||||
|
||||
# Cargar configuración UCI
|
||||
config_load display
|
||||
|
||||
# Variables por defecto
|
||||
TIMEOUT_FULL=5
|
||||
TIMEOUT_DIM=3
|
||||
BRIGHTNESS_DIM_DIVISOR=8
|
||||
BACKLIGHT_PATH="/sys/class/backlight/backlight"
|
||||
INPUT_DEVICE="/dev/input/event0"
|
||||
BRIGHTNESS_OFF=1
|
||||
|
||||
# Función callback para leer la configuración
|
||||
load_display_config() {
|
||||
local cfg="$1"
|
||||
|
||||
config_get TIMEOUT_FULL "$cfg" timeout_full "$TIMEOUT_FULL"
|
||||
config_get TIMEOUT_DIM "$cfg" timeout_dim "$TIMEOUT_DIM"
|
||||
config_get BRIGHTNESS_DIM_DIVISOR "$cfg" brightness_dim_divisor "$BRIGHTNESS_DIM_DIVISOR"
|
||||
config_get BACKLIGHT_PATH "$cfg" backlight_path "$BACKLIGHT_PATH"
|
||||
config_get INPUT_DEVICE "$cfg" input_device "$INPUT_DEVICE"
|
||||
config_get BRIGHTNESS_OFF "$cfg" brightness_off "$BRIGHTNESS_OFF"
|
||||
}
|
||||
|
||||
# Procesar configuración
|
||||
config_foreach load_display_config display
|
||||
|
||||
# Variables calculadas
|
||||
BACKLIGHT="$BACKLIGHT_PATH"
|
||||
MAX_BRIGHTNESS=$(cat $BACKLIGHT/max_brightness 2>/dev/null || echo 1785)
|
||||
BRIGHTNESS_FULL=$MAX_BRIGHTNESS
|
||||
BRIGHTNESS_DIM=$((MAX_BRIGHTNESS / 8))
|
||||
BRIGHTNESS_DIM=$((MAX_BRIGHTNESS / BRIGHTNESS_DIM_DIVISOR))
|
||||
|
||||
DIM_TIMER_PID=""
|
||||
OFF_TIMER_PID=""
|
||||
@@ -14,59 +40,57 @@ OFF_TIMER_PID=""
|
||||
logger -t display "Display monitor started (max: $MAX_BRIGHTNESS, dimmed: $BRIGHTNESS_DIM)"
|
||||
|
||||
set_brightness() {
|
||||
local level=$1
|
||||
echo $level > $BACKLIGHT/brightness
|
||||
local level=$1
|
||||
echo $level > $BACKLIGHT/brightness
|
||||
}
|
||||
|
||||
cancel_timers() {
|
||||
if [ -n "$DIM_TIMER_PID" ]; then
|
||||
kill $DIM_TIMER_PID
|
||||
DIM_TIMER_PID=""
|
||||
fi
|
||||
if [ -n "$OFF_TIMER_PID" ]; then
|
||||
kill $OFF_TIMER_PID
|
||||
OFF_TIMER_PID=""
|
||||
fi
|
||||
if [ -n "$DIM_TIMER_PID" ]; then
|
||||
kill $DIM_TIMER_PID 2>/dev/null
|
||||
DIM_TIMER_PID=""
|
||||
fi
|
||||
if [ -n "$OFF_TIMER_PID" ]; then
|
||||
kill $OFF_TIMER_PID 2>/dev/null
|
||||
OFF_TIMER_PID=""
|
||||
fi
|
||||
}
|
||||
|
||||
start_backlight_sequence() {
|
||||
cancel_timers
|
||||
|
||||
logger -t display "Backlight: FULL"
|
||||
set_brightness $BRIGHTNESS_FULL
|
||||
cancel_timers
|
||||
|
||||
logger -t display "Backlight: FULL"
|
||||
set_brightness $BRIGHTNESS_FULL
|
||||
|
||||
TOTAL_TIMEOUT=$((TIMEOUT_FULL + TIMEOUT_DIM))
|
||||
|
||||
(
|
||||
sleep $TIMEOUT_FULL
|
||||
logger -t display "Backlight: DIM"
|
||||
set_brightness $BRIGHTNESS_DIM
|
||||
) &
|
||||
DIM_TIMER_PID=$!
|
||||
|
||||
(
|
||||
sleep $TOTAL_TIMEOUT
|
||||
logger -t display "Backlight: OFF"
|
||||
set_brightness 1
|
||||
) &
|
||||
OFF_TIMER_PID=$!
|
||||
TOTAL_TIMEOUT=$((TIMEOUT_FULL + TIMEOUT_DIM))
|
||||
|
||||
(
|
||||
sleep $TIMEOUT_FULL
|
||||
logger -t display "Backlight: DIM"
|
||||
set_brightness $BRIGHTNESS_DIM
|
||||
) &
|
||||
DIM_TIMER_PID=$!
|
||||
|
||||
(
|
||||
sleep $TOTAL_TIMEOUT
|
||||
logger -t display "Backlight: OFF"
|
||||
set_brightness $BRIGHTNESS_OFF
|
||||
) &
|
||||
OFF_TIMER_PID=$!
|
||||
}
|
||||
|
||||
button_monitor() {
|
||||
DEVICE="/dev/input/event0"
|
||||
logger -t display "Monitoring power button on /dev/input/event0"
|
||||
|
||||
evtest "$DEVICE" 2>/dev/null | while read -r line; do
|
||||
if echo "$line" | grep -q "code 116.*value 1"; then
|
||||
logger -t display "Button event detected"
|
||||
start_backlight_sequence
|
||||
|
||||
usleep 500000
|
||||
fi
|
||||
done
|
||||
logger -t display "Monitoring power button on $INPUT_DEVICE"
|
||||
|
||||
evtest "$INPUT_DEVICE" 2>/dev/null | while read -r line; do
|
||||
if echo "$line" | grep -q "code 116.*value 1"; then
|
||||
logger -t display "Button event detected"
|
||||
start_backlight_sequence
|
||||
|
||||
usleep 500000
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
trap 'cancel_timers; logger -t display "Display monitor stopped"; exit 0' INT TERM
|
||||
|
||||
start_backlight_sequence
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
config display 'backlight'
|
||||
option timeout_full '5'
|
||||
option timeout_dim '3'
|
||||
option brightness_dim_divisor '8'
|
||||
option backlight_path '/sys/class/backlight/backlight'
|
||||
option input_device '/dev/input/event0'
|
||||
option brightness_off '1'
|
||||
Reference in new issue
Block a user