|
|
|
#!/usr/bin/env sh
|
|
|
|
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
. "$(which sxmo_common.sh)"
|
|
|
|
|
|
|
|
REDLED_PATH="/sys/class/leds/red:indicator/brightness"
|
|
|
|
BLUELED_PATH="/sys/class/leds/blue:indicator/brightness"
|
|
|
|
|
|
|
|
SWAYSOCK="$(cat "$CACHEDIR"/sxmo.swaysock)"
|
|
|
|
export SWAYSOCK
|
|
|
|
if ! swaymsg 2> /dev/null; then
|
|
|
|
unset SWAYSOCK
|
|
|
|
fi
|
|
|
|
if [ -z "$DISPLAY" ]; then
|
|
|
|
export DISPLAY=":0"
|
|
|
|
fi
|
|
|
|
|
|
|
|
finish() {
|
|
|
|
kill "$BLINKPID"
|
|
|
|
|
|
|
|
sxmo_screenlock.sh updateLed
|
|
|
|
|
|
|
|
if grep -q crust "$LASTSTATE" \
|
|
|
|
&& grep -q rtc "$UNSUSPENDREASONFILE" \
|
|
|
|
&& [ "$(sxmo_screenlock.sh getCurState)" != "unlock" ]; then
|
|
|
|
WAKEPROCS=$(pgrep -f sxmo_rtcwake.sh | wc -l)
|
|
|
|
if [ "$WAKEPROCS" -gt 2 ]; then
|
|
|
|
#each process also spawns a blink subprocess, so we check if there are more than two rather than one:
|
|
|
|
echo "sxmo_rtcwake: returning without crust, other sxmo_rtcwake process is still running ($(date))" >&2
|
|
|
|
else
|
|
|
|
echo "sxmo_rtcwake: going back to crust ($(date))" >&2
|
|
|
|
sxmo_screenlock.sh crust
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo "sxmo_rtcwake: returning without crust ($(date))" >&2
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
blink() {
|
|
|
|
while [ "$(sxmo_screenlock.sh getCurState)" != "unlock" ]; do
|
|
|
|
echo 1 > "$REDLED_PATH"
|
|
|
|
echo 0 > "$BLUELED_PATH"
|
|
|
|
sleep 0.25
|
|
|
|
echo 1 > "$REDLED_PATH"
|
|
|
|
echo 1 > "$BLUELED_PATH"
|
|
|
|
sleep 0.25
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ "$1" = "--strict" ]; then
|
|
|
|
shift
|
|
|
|
#don't run if we're not in crust or not waked by rtc
|
|
|
|
if ! grep -q crust "$LASTSTATE" || ! grep -q rtc "$UNSUSPENDREASONFILE"; then
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
trap 'finish' TERM INT EXIT
|
|
|
|
|
|
|
|
blink &
|
|
|
|
BLINKPID=$!
|
|
|
|
|
|
|
|
echo "sxmo_rtcwake: Running sxmo_rtcwake for $* ($(date))" >&2
|
|
|
|
"$@"
|