rk3568_ubuntu_r60_v1.3.2/yocto/meta-quectel-app/recipes/input-event-daemon/files/power-key.sh

68 lines
1.2 KiB
Bash
Raw Normal View History

2023-11-03 14:12:44 +08:00
#!/bin/sh
EVENT=${1:-short-press}
LONG_PRESS_TIMEOUT=3 # s
DEBOUNCE=3 # s
PIDFILE="/tmp/$(basename $0).pid"
LOCKFILE=/tmp/.power_key
short_press()
{
logger -t $(basename $0) "[$$]: Power key short press..."
if which systemctl >/dev/null; then
SUSPEND_CMD="systemctl suspend"
elif which pm-suspend >/dev/null; then
SUSPEND_CMD="pm-suspend"
else
SUSPEND_CMD="echo -n mem > /sys/power/state"
fi
if [ ! -f $LOCKFILE ]; then
logger -t $(basename $0) "[$$]: Prepare to suspend..."
touch $LOCKFILE
sh -c "$SUSPEND_CMD"
{ sleep $DEBOUNCE && rm $LOCKFILE; }&
fi
}
long_press()
{
logger -t $(basename $0) "[$$]: Power key long press (${LONG_PRESS_TIMEOUT}s)..."
logger -t $(basename $0) "[$$]: Prepare to power off..."
poweroff
}
logger -t $(basename $0) "[$$]: Received power key event: $@..."
case "$EVENT" in
press)
# Lock it
exec 3<$0
flock -x 3
start-stop-daemon -K -q -p $PIDFILE || true
start-stop-daemon -S -q -b -m -p $PIDFILE -x /bin/sh -- \
-c "sleep $LONG_PRESS_TIMEOUT; $0 long-press"
# Unlock
flock -u 3
;;
release)
# Avoid race with press event
sleep .5
start-stop-daemon -K -q -p $PIDFILE && short_press
;;
short-press)
short_press
;;
long-press)
long_press
;;
esac