diff options
author | John Klug <john.klug@multitech.com> | 2021-02-15 16:02:33 -0600 |
---|---|---|
committer | John Klug <john.klug@multitech.com> | 2021-02-15 16:03:08 -0600 |
commit | be076b2153af894ce1c625a56101b976f95dea9b (patch) | |
tree | 5f7e79c2d3dcd937a6330fbc79f90dbf906b1af5 /recipes-bsp/multitech/mts-io | |
parent | 0b4a7982a56cdf145502231c6e6003338817e7cd (diff) | |
download | meta-multitech-be076b2153af894ce1c625a56101b976f95dea9b.tar.gz meta-multitech-be076b2153af894ce1c625a56101b976f95dea9b.tar.bz2 meta-multitech-be076b2153af894ce1c625a56101b976f95dea9b.zip |
Wait for supercap charge up to 3 minutes. Poweroff if no power
Diffstat (limited to 'recipes-bsp/multitech/mts-io')
-rw-r--r-- | recipes-bsp/multitech/mts-io/mts-io.conf | 10 | ||||
-rw-r--r-- | recipes-bsp/multitech/mts-io/mts-io.mtcap.init | 38 |
2 files changed, 48 insertions, 0 deletions
diff --git a/recipes-bsp/multitech/mts-io/mts-io.conf b/recipes-bsp/multitech/mts-io/mts-io.conf index b5b4275..4ed5e31 100644 --- a/recipes-bsp/multitech/mts-io/mts-io.conf +++ b/recipes-bsp/multitech/mts-io/mts-io.conf @@ -7,3 +7,13 @@ GPSGNSSRESET=1 # 0 is off # 1 is on DEBUG=0 + +# Supercap Feature +# Do not let boot proceed until supercap is full. +# Prevents loss of data when power is out. +SUPERCAPFULL=1 + +# Maximum wait time for SUPERCAPFULL +# +SUPERCAPFULL_MAXWAIT=180 + 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) |