diff --git a/packages/display-monitor/Makefile b/packages/display-monitor/Makefile index c8fc3e8..184726c 100644 --- a/packages/display-monitor/Makefile +++ b/packages/display-monitor/Makefile @@ -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 diff --git a/packages/display-monitor/files/display-monitor.sh b/packages/display-monitor/files/display-monitor.sh index a5bb9b8..4c6a47f 100644 --- a/packages/display-monitor/files/display-monitor.sh +++ b/packages/display-monitor/files/display-monitor.sh @@ -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 diff --git a/packages/display-monitor/files/display.config b/packages/display-monitor/files/display.config new file mode 100644 index 0000000..032b47f --- /dev/null +++ b/packages/display-monitor/files/display.config @@ -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'