use single powerdown script

Signed-off-by: Michel-FK <michel.stempin@funkey-project.com>
This commit is contained in:
Michel-FK
2021-06-03 23:55:21 +02:00
parent cefbb581ee
commit 7d80bc7eed
23 changed files with 255 additions and 171 deletions

View File

@@ -3,30 +3,28 @@
# General constants declaration
THRESHOLD_PERCENT_LOW_BAT=5
THRESHOLD_PERCENT_EXTREMELY_LOW_BAT=2
MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN=5
MAX_LOW_BAT_COUNT=5
SLEEP_SECS=2
RESCALE_MAX_PERCENTAGE=120
# Blink Low bat constants declaration
BLINK_ICON=0
LOW_BAT_SECS_DISPLAYED=5
LOW_BAT_SECS_NOT_DISPLAYED=5
LOW_BAT_DISPLAY_TIMEOUT=5
# Files and commands declaration
USB_PRESENT_FILE=/sys/class/power_supply/axp20x-usb/present
#USB_PRESENT_FILE=/sys/class/power_supply/axp20x-ac/present # Cheat for no USB present simulation when debugging
BAT_PRESENT_FILE=/sys/class/power_supply/axp20x-battery/present
BAT_PERCENT_FILE=/sys/class/power_supply/axp20x-battery/capacity
BAT_PERCENT_RESCALED_FILE=/tmp/current_battery_percentage
LOW_BAT_ICON=/sys/class/graphics/fb0/low_battery
SCHEDULE_SHUTDOWN_CMD=sched_shutdown
SIGNAL_URS1_TO_EMULATORS_CMD=signal_usr1_to_emulators
USB_PRESENT_FILE="/sys/class/power_supply/axp20x-usb/present"
# Cheat for no USB present simulation when debugging
BAT_PRESENT_FILE="/sys/class/power_supply/axp20x-battery/present"
BAT_PERCENT_FILE="/sys/class/power_supply/axp20x-battery/capacity"
BAT_PERCENT_RESCALED_FILE="/tmp/current_battery_percentage"
LOW_BAT_ICON="/sys/class/graphics/fb0/low_battery"
# Variables declaration
low_bat_status=0
low_bat_displayed=0
cur_secs_disp=0
cur_nb_extremely_low_bat_before_shutdown=0
low_bat_count=0
# Default: Hide Low Bat Icon
echo 0 > ${LOW_BAT_ICON}
@@ -55,64 +53,64 @@ while true; do
# Low bat status detection
if [ "$(cat ${USB_PRESENT_FILE})" -eq "0" ]; then
# Value of 0 means wrong i2c reading
if [ "${cur_bat_percent}" -ne "0" ]; then
# Value of 0 means wrong i2c reading
if [ "${cur_bat_percent}" -ne "0" ]; then
# Check if we must change state
if [ ${cur_bat_percent} -le ${THRESHOLD_PERCENT_LOW_BAT} -a ${low_bat_status} -eq 0 ]; then
# Check if we must change state
if [ ${cur_bat_percent} -le ${THRESHOLD_PERCENT_LOW_BAT} -a ${low_bat_status} -eq 0 ]; then
# Set Low Bat status
low_bat_status=1
low_bat_displayed=1
cur_secs_disp=0
echo 1 > ${LOW_BAT_ICON}
# Set Low Bat status
low_bat_status=1
low_bat_displayed=1
cur_secs_disp=0
echo 1 > ${LOW_BAT_ICON}
elif [ ${cur_bat_percent} -gt ${THRESHOLD_PERCENT_LOW_BAT} -a ${low_bat_status} -eq 1 ]; then
elif [ ${cur_bat_percent} -gt ${THRESHOLD_PERCENT_LOW_BAT} -a ${low_bat_status} -eq 1 ]; then
# Reset status
low_bat_status=0
cur_nb_extremely_low_bat_before_shutdown=0
echo 0 > ${LOW_BAT_ICON}
fi
fi
# Reset status
low_bat_status=0
low_bat_count=0
echo 0 > ${LOW_BAT_ICON}
fi
fi
else
if [ ${low_bat_status} -eq 1 ]; then
if [ ${low_bat_status} -eq 1 ]; then
# Reset status
low_bat_status=0
cur_nb_extremely_low_bat_before_shutdown=0
echo 0 > ${LOW_BAT_ICON}
fi
# Reset status
low_bat_status=0
low_bat_count=0
echo 0 > ${LOW_BAT_ICON}
fi
fi
# Low bat processing
if [ ${low_bat_status} -eq 1 ]; then
# Check extremely low bat for clean shutdown
if [ ${cur_bat_percent} -le ${THRESHOLD_PERCENT_EXTREMELY_LOW_BAT} ]; then
let cur_nb_extremely_low_bat_before_shutdown++
echo "cur_nb_extremely_low_bat_before_shutdown = ${cur_nb_extremely_low_bat_before_shutdown}"
# Check extremely low bat for clean shutdown
if [ ${cur_bat_percent} -le ${THRESHOLD_PERCENT_EXTREMELY_LOW_BAT} ]; then
let low_bat_count++
echo "low_bat_count = ${low_bat_count}"
# Clean shutdown
if [ ${cur_nb_extremely_low_bat_before_shutdown} -ge ${MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN} ]; then
echo "Battery extremely low, shutting down now..."
sched_shutdown 1 & signal_usr1_to_emulators
exit 0
fi
fi
# Clean shutdown
if [ ${low_bat_count} -ge ${MAX_LOW_BAT_COUNT} ]; then
echo "Battery extremely low, shutting down now..."
powerdown schedule 1
exit 0
fi
fi
# Blinking process
if [ ${BLINK_ICON} -eq 1 ]; then
if [ ${low_bat_displayed} -eq 1 -a ${cur_secs_disp} -ge ${LOW_BAT_SECS_DISPLAYED} ]; then
low_bat_displayed=0
cur_secs_disp=0
echo 0 > ${LOW_BAT_ICON}
elif [ ${low_bat_displayed} -eq 0 -a ${cur_secs_disp} -ge ${LOW_BAT_SECS_NOT_DISPLAYED} ]; then
low_bat_displayed=1
cur_secs_disp=0
echo 1 > ${LOW_BAT_ICON}
fi
fi
# Blinking process
if [ ${BLINK_ICON} -eq 1 ]; then
if [ ${low_bat_displayed} -eq 1 -a ${cur_secs_disp} -ge ${LOW_BAT_DISPLAY_TIMEOUT} ]; then
low_bat_displayed=0
cur_secs_disp=0
echo 0 > ${LOW_BAT_ICON}
elif [ ${low_bat_displayed} -eq 0 -a ${cur_secs_disp} -ge ${LOW_BAT_DISPLAY_TIMEOUT} ]; then
low_bat_displayed=1
cur_secs_disp=0
echo 1 > ${LOW_BAT_ICON}
fi
fi
fi
# Sleep before next check

View File

@@ -0,0 +1,84 @@
#!/bin/sh
# Uncomment the following line to get debug info
#set -x
SELF="$(basename ${0})"
PID_FILE="/var/run/funkey.pid"
REBOOTING_FILE="/run/rebooting"
usage() {
>&2 echo "Usage: ${SELF} schedule delay"
>&2 echo " ${SELF} handle"
>&2 echo " ${SELF} now"
exit 1
}
schedule_powerdown() {
# Send USR1 signal to the running FunKey process to warn about
# impending shutdown
pkill -USR1 -F "${PID_FILE}" > /dev/null 2>&1
# Delay for the given grace period seconds to catch signal USR2.
# If the signal is caught, then it means the running FunKey
# process canceled this shutdown and will handle it by itself.
sleep ${1}
# Delay expired, initiate final powerdown
powerdown_now
}
handle_powerdown() {
pkill -f "powerdown schedule"
}
powerdown_now() {
# Sync before all else
sync
# Notif fullscreen "Shutting down"
notif set 0 "^^^^^^^^ SHUTTING DOWN...^^^^^^^^"
# Notify system, reboot in progress
touch "${REBOOTING_FILE}"
# Shutdown amp
audio_amp off >/dev/null 2>&1
# Force Read Only
ro
# Poweroff
poweroff
}
action="${1:-now}"
case "${action}" in
schedule)
if [ ${#} != 2 -o "${2}" -eq 0 ]; then
usage
fi
schedule_powerdown
;;
handle)
if [ ${#} -ne 1 ]; then
usage
fi
handle_powerdown
;;
now)
if [ ${#} -gt 1 ]; then
usage
fi
powerdown_now
;;
*)
usage
;;
esac
exit 0

View File

@@ -1,5 +0,0 @@
#!/bin/sh
# No waiting period in Recovery
shutdown_funkey

View File

@@ -1,22 +0,0 @@
#!/bin/sh
# Notif fullscreen "Shutting down"
notif set 0 "^^^^^^^^ SHUTTING DOWN...^^^^^^^^"
# Kill Emulators
#kill_emulators >/dev/null 2>&1
# Kill Retrofe
#pkill retrofe
# Sync filesystems (useful in case poweroff could not finish)
sync
# Unmount Roms partition
#umount /mnt
# Shutdown amp
start_audio_amp 0 >/dev/null 2>&1
# Poweroff
poweroff

View File

@@ -4,7 +4,7 @@
#
################################################################################
FKGPIOD_VERSION = 20b1a37
FKGPIOD_VERSION = 4df43ea
FKGPIOD_SITE_METHOD = git
FKGPIOD_SITE = https://github.com/FunKey-Project/fkgpiod.git
FKGPIOD_SITE_LICENSE = GPL-2.1+