#!/usr/bin/env sh # The goal of this script is to handle post hibernation behavior # If we woke up cause of the button : # We want to trigger the hook and wait for it to finish while blinking. # Or at least, blink for some seconds. # If we woke up cause of the modem or rtc : # The modem monitor or rtcwake scripts will handle everything # We still trigger the hooks without doing anything else # include common definitions # shellcheck source=scripts/core/sxmo_common.sh . "$(which sxmo_common.sh)" UNSUSPENDREASON="$1" if [ "$UNSUSPENDREASON" = "modem" ] || [ "$UNSUSPENDREASON" = "rtc" ]; then # Modem wakeup will be handled by the modemmonitor loops # Rtc wakeup will eventually be handled by the rtcwake script # We should not manage those phone lock state here # we will still call the postwake hook though echo "sxmo_postwake: invoking postwake hook after wakeup (reason=$UNSUSPENDREASON, 2, $(date))" >&2 sxmo_hooks.sh postwake "$UNSUSPENDREASON" exit 0 fi REDLED_PATH="/sys/class/leds/red:indicator/brightness" BLUELED_PATH="/sys/class/leds/blue:indicator/brightness" finish() { kill "$SLEEPPID" kill "$CHECKPID" kill "$BLINKPID" echo 0 > "$REDLED_PATH" echo 0 > "$BLUELED_PATH" wait "$HOOKPID" # Going back to crust if [ "$(sxmo_screenlock.sh getCurState)" != "unlock" ]; then echo "[$(date)] Going back to crust" >&2 sxmo_screenlock.sh crust fi exit 0 } trap 'finish' TERM INT EXIT blink() { while : ; do echo 1 > "$REDLED_PATH" echo 0 > "$BLUELED_PATH" sleep 0.25 echo 1 > "$REDLED_PATH" echo 1 > "$BLUELED_PATH" sleep 0.25 done } checkstate() { while [ "$(sxmo_screenlock.sh getCurState)" != "unlock" ] ; do sleep 0.25 done finish } sxmo_wm.sh dpms off # call the user hook, but ensure we wait at least 5 seconds which is essential for # the unlock functionality to function well sleep 5 & SLEEPPID=$! blink & BLINKPID=$! echo "sxmo_postwake: invoking postwake hook after wakeup (reason=$UNSUSPENDREASON, 1, $(date))" >&2 sxmo_hooks.sh postwake "$UNSUSPENDREASON" & HOOKPID=$! checkstate & CHECKPID=$! wait "$SLEEPPID" wait "$HOOKPID"