Files
sxmo-utils/scripts/core/sxmo_wakelock.sh
2023-02-24 19:17:54 +01:00

99 lines
1.8 KiB
Bash

#!/bin/sh
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2022 Sxmo Contributors
# shellcheck source=scripts/core/sxmo_common.sh
. sxmo_common.sh
usage() {
cat >&2 <<EOF
Usage: $(basename "$0") ACTION
lock <lock-name> <duration|nanosec|infinite>
unlock <lock-name>
duration: <value><unit>
value: integer
unit: ms|s|mn|h (milisec, sec, minute, hour)
EOF
}
_validint() {
if ! echo "$1" | grep -q '^[[:digit:]]\+$'; then
echo "$1 isn't an integer" >&2
exit 1
fi
}
lock() {
if [ "$#" -ne 2 ]; then
sxmo_log "warning: sxmo_wakelock.sh $*"
usage
exit 1
fi
if [ ! -f /sys/power/wake_lock ]; then
exit # we swallow when the system doesn't support it
fi
case "$2" in
infinite)
sxmo_debug "lock $1 infinite"
echo "sxmo_$1" | doas tee -a /sys/power/wake_lock > /dev/null
exit
;;
*ms)
_validint "${2%ms}"
set "$1" "${2%ms}000000"
;;
*s)
_validint "${2%s}"
set "$1" "${2%s}000000000"
;;
*mn)
_validint "${2%mn}"
set "$1" "$(printf "%s * 60000000000" "${2%mn}" | bc)"
;;
*h)
_validint "${2%h}"
set "$1" "$(printf "%s * 3600000000000" "${2%h}" | bc)"
;;
esac
sxmo_debug "lock $1 $2"
echo "sxmo_$1 $2" | doas tee -a /sys/power/wake_lock > /dev/null
}
unlock() {
if [ "$#" -ne 1 ]; then
usage
sxmo_log "warning: sxmo_wakelock.sh $*"
exit 1
fi
if [ ! -f /sys/power/wake_unlock ]; then
exit # we swallow when the system doesn't support it
fi
sxmo_debug "unlock $1"
echo "sxmo_$1" | doas tee -a /sys/power/wake_unlock > /dev/null 2>&1
}
debug() {
if [ "$1" = "watch" ]; then
watch -n1 cat /sys/power/wake_lock
else
tr " " "\n" < /sys/power/wake_lock | grep .
tail -f "$XDG_STATE_HOME"/sxmo.log | grep "${0##*/}"
fi
}
cmd="$1"
shift
case "$cmd" in
lock) lock "$@";;
unlock) unlock "$@";;
debug) debug "$@";;
*)
sxmo_log "warning: sxmo_wakelock.sh $*"
usage; exit 1;;
esac