summaryrefslogtreecommitdiff
path: root/recipes-bsp/multitech/mts-io/mts-io.mtcap.init
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-bsp/multitech/mts-io/mts-io.mtcap.init')
-rw-r--r--recipes-bsp/multitech/mts-io/mts-io.mtcap.init38
1 files changed, 38 insertions, 0 deletions
diff --git a/recipes-bsp/multitech/mts-io/mts-io.mtcap.init b/recipes-bsp/multitech/mts-io/mts-io.mtcap.init
index 19bfa4a..ff0e947 100644
--- a/recipes-bsp/multitech/mts-io/mts-io.mtcap.init
+++ b/recipes-bsp/multitech/mts-io/mts-io.mtcap.init
@@ -103,6 +103,42 @@ cell_init() {
start_lora_led_updater() {
lora-led-updater &
}
+gettime() {
+ [[ $(cat /proc/uptime) =~ ([^[:space:]]+) ]]
+ echo ${BASH_REMATCH[1]}
+}
+wait_for_supercap() {
+ supercap=$(mts-io-sysfs show capability/supercap 2>/dev/null)
+ if ((supercap != 1)) ; then
+ return
+ fi
+ if ((SUPERCAPFULL != 1)) ; then
+ break
+ fi
+ t0=$(gettime)
+ maxwait=$(awk "BEGIN {print ${t0}+${SUPERCAPFULL_MAXWAIT}}")
+ while : ; do
+ if (($(mts-io-sysfs show power-fail) == 1)) ; then
+ # If we are booting, then go down.
+ # This will not work with systemd.
+ if [[ $(ps -h -o cmd -p $PPID) =~ /bin/sh[[:space:]]/etc/init.d/rc[[:space:]]S$ ]] ; then
+ logger -s -t 'mts-io' -p daemon.err "No power during boot, so power off"
+ exec /sbin/poweroff
+ # NOT REACHED
+ fi
+ fi
+ if (($(mts-io-sysfs show supercap-full) == 1)) ; then
+ logger -s -t 'mts-io' -p daemon.err 'Supercap Charged'
+ return
+ fi
+ t1=$(gettime)
+ if awk "BEGIN { if($t1<$maxwait)exit 1 }" ; then
+ break
+ fi
+ sleep 1
+ done
+ logger -s -t 'mts-io' -p daemon.err 'Supercap not full but timer expired -- continuing boot'
+}
case $1 in
start)
@@ -129,6 +165,8 @@ case $1 in
(($WIFICAP)) && modprobe wilc1000-sdio
set_hw_name
set_gpslink
+ wait_for_supercap
+
;;
stop)