fixed an issue with the sensor returning 0 randomly...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2024-04-07 14:26:06 +03:00
parent 86ddb5ac80
commit 5cadb52401
4 changed files with 82 additions and 8 deletions

View File

@ -1,16 +1,30 @@
NAME := thinkpad-keyboard-brightness
SBIN_DIR := /usr/sbin
CONFIG_DIR := /etc/
SERVICE_DIR := /etc/systemd/system/
SCRIPT := $(NAME)
CONFIG := $(NAME).conf
TIMER := $(NAME).timer
UNIT := $(NAME).service
SERVICE_FILES := \
$(TIMER) \
$(UNIT)
FILES := \
$(SERVICE_FILES) \
$(SCRIPT) \
$(CONFIG)
.PHONY:install
install: $(TIMER) $(UNIT)
cp -f $? $(SERVICE_DIR)
install: $(FILES)
cp -f $(SERVICE_FILES) $(SERVICE_DIR)
cp -f $(SCRIPT) $(SBIN_DIR)
cp -f $(CONFIG) $(CONFIG_DIR)
systemctl daemon-reload
systemctl enable ${UNIT}
systemctl enable ${TIMER}
@ -26,14 +40,21 @@ disable: $(TIMER) $(UNIT)
systemctl disable ${UNIT}
# NOTE: this will not remove user config files...
.PHONY:uninstall
uninstall: disable $(TIMER) $(UNIT)
rm -f \
$(SERVICE_DIR)/$(TIMER) \
$(SERVICE_DIR)/$(UNIT)
$(SERVICE_DIR)/$(UNIT) \
$(SBIN_DIR)/$(SCRIPT)
systemctl daemon-reload
.PHONY:full-uninstall
full-uninstall: uninstall
rm -f $(CONFIG_DIR)/$(CONFIG)
.PHONY:reinstall
reinstall: uninstall install

46
thinkpad-keyboard-brightness Executable file
View File

@ -0,0 +1,46 @@
#!/usr/bin/bash
if [ -e /etc/thinkpad-keyboard-brightness.conf ] ; then
source /etc/thinkpad-keyboard-brightness.conf
fi
if [ -z $SENSOR ] ; then
SENSOR=(/sys/bus/iio/devices/iio:device*/in_illuminance_raw)
fi
SENSOR=${SENSOR[0]}
if [ -z $TRIGGER ] ; then
TRIGGER=(/sys/class/leds/*::kbd_backlight/brightness)
fi
TRIGGER=${TRIGGER[0]}
THRESHOLD=${THRESHOLD:-2000}
HYSTERESIS=${HYSTERESIS:-200}
ATTEMPTS=${ATTEMPTS:-3}
VALUE=${VALUE:-1}
# read the illuminance value...
# NOTE: the sensor sometimes randomly returns 0, this will make this
# less probabble to retult in backlight turning on/off randomly...
ATTEMPT=0
ILLUMINANCE=0
while (( $ATTEMPT < $ATTEMPTS )) && (( $ILLUMINANCE == 0 )) ; do
ILLUMINANCE=$(cat ${SENSOR})
ATTEMPT=$((ATTEMPT + 1))
done
#echo "ILLUMINANCE: $ILLUMINANCE (attempt: $ATTEMPT)"
STATE=$(cat "$TRIGGER")
# NOTE: this needs root...
if (( $ILLUMINANCE < $THRESHOLD )) && (( $STATE == 0 )) ; then
echo "$VALUE" > "$TRIGGER"
elif (( $ILLUMINANCE > $THRESHOLD + $HYSTERESIS )) ; then
echo 0 > "$TRIGGER"
fi

View File

@ -0,0 +1,11 @@
#
# SENSOR=/sys/bus/iio/devices/iio:device*/in_illuminance_raw
#
# TRIGGER=/sys/class/leds/tpacpi::kbd_backlight/brightness
#
# THRESHOLD=2000
#
# HESTERISYS=200
#
# VALUE=1
#

View File

@ -3,12 +3,8 @@ Description="Turn keyboard backlight on/off based on light sensor"
[Service]
Type=exec
Environment=SENSOR=/sys/bus/iio/devices/iio:device*/in_illuminance_raw
Environment=TRIGGER=/sys/class/leds/tpacpi::kbd_backlight/brightness
Environment=THRESHOLD=2000
Environment=VALUE=1
User=root
ExecStart=bash -c "(( $(cat ${SENSOR}) < ${THRESHOLD} )) && echo ${VALUE} > ${TRIGGER} || echo 0 > ${TRIGGER}"
ExecStart=/usr/sbin/thinkpad-keyboard-brightness
[Install]
WantedBy=multi-user.target