Update modem status state on errors

If modemmonitor crash for some reason, status bar is not updated. The
reason is that statusbar check if modemmonitor is running, which it is
when trying to shutdown itself.

We change the way modemmonitor is detected using a single modem state
file. If the file is not present, then the monitor is considered not
running.

This single file permit to add more state in the future, without adding
any more files.

We also add a sleep 1, look like it is required to have instand status
bar update.

Signed-off-by: Stacy Harper <contact@stacyharper.net>
Signed-off-by: Maarten van Gompel <proycon@anaproy.nl>
master
Stacy Harper 4 years ago committed by Maarten van Gompel
parent d2d06ef65a
commit f9b96d2d28
  1. 2
      scripts/core/sxmo_common.sh
  2. 12
      scripts/core/sxmo_statusbar.sh
  3. 24
      scripts/modem/sxmo_modemmonitor.sh

@ -17,6 +17,8 @@ export CACHEDIR="$XDG_CACHE_HOME"/sxmo
export LOGDIR="$XDG_DATA_HOME"/sxmo/modem export LOGDIR="$XDG_DATA_HOME"/sxmo/modem
# shellcheck disable=SC2034 # shellcheck disable=SC2034
export CONTACTFILE="$XDG_CONFIG_HOME/sxmo/contacts.tsv" export CONTACTFILE="$XDG_CONFIG_HOME/sxmo/contacts.tsv"
# shellcheck disable=SC2034
export MODEMSTATEFILE="$XDG_RUNTIME_DIR/sxmo.modem.state"
command -v "$KEYBOARD" > /dev/null || export KEYBOARD=svkbd-mobile-intl command -v "$KEYBOARD" > /dev/null || export KEYBOARD=svkbd-mobile-intl

@ -30,14 +30,16 @@ update() {
# M symbol if modem monitoring is on & modem present # M symbol if modem monitoring is on & modem present
MODEMMON="" MODEMMON=""
pgrep -f sxmo_modemmonitor.sh && MODEMMON="" if [ -f "$MODEMSTATEFILE" ]; then
if [ -n "$MODEMMON" ]; then MODEMSTATE="$(cat "$MODEMSTATEFILE")"
if [ -f /tmp/modem.locked.state ]; then if [ locked = "$MODEMSTATE" ]; then
MODEMMON="" MODEMMON=""
elif [ -f /tmp/modem.registered.state ]; then elif [ registered = "$MODEMSTATE" ]; then
MODEMMON="" MODEMMON=""
elif [ -f /tmp/modem.connected.state ]; then elif [ connected = "$MODEMSTATE" ]; then
MODEMMON="" MODEMMON=""
else
MODEMMON=""
fi fi
fi fi

@ -12,6 +12,9 @@ err() {
} }
gracefulexit() { gracefulexit() {
rm "$MODEMSTATEFILE"
sxmo_statusbarupdate.sh
sleep 1
echo "sxmo_modemmonitor: gracefully exiting (on signal or after error)">&2 echo "sxmo_modemmonitor: gracefully exiting (on signal or after error)">&2
kill -9 0 kill -9 0
} }
@ -183,15 +186,17 @@ checkfornewtexts() {
} }
initialmodemstatus() { initialmodemstatus() {
rm /tmp/modem.*.state 2>/dev/null touch "$MODEMSTATEFILE"
state=$(mmcli -m "$(modem_n)") state=$(mmcli -m "$(modem_n)")
if echo "$state" | grep -q -E "^.*state:.*connected.*$"; then if echo "$state" | grep -q -E "^.*state:.*connected.*$"; then
touch /tmp/modem.connected.state echo connected > "$MODEMSTATEFILE"
elif echo "$state" | grep -q -E "^.*state:.*registered.*$"; then elif echo "$state" | grep -q -E "^.*state:.*registered.*$"; then
touch /tmp/modem.registered.state echo registered > "$MODEMSTATEFILE"
elif echo "$state" | grep -q -E "^.*state:.*locked.*$"; then elif echo "$state" | grep -q -E "^.*state:.*locked.*$"; then
touch /tmp/modem.locked.state echo locked > "$MODEMSTATEFILE"
pidof sxmo_unlocksim.sh || sxmo_unlocksim.sh & pidof sxmo_unlocksim.sh || sxmo_unlocksim.sh &
else
echo unknown > "$MODEMSTATEFILE"
fi fi
} }
@ -228,21 +233,22 @@ mainloop() {
dbus-monitor --system "interface='org.freedesktop.ModemManager1.Modem',type='signal',member='StateChanged'" | \ dbus-monitor --system "interface='org.freedesktop.ModemManager1.Modem',type='signal',member='StateChanged'" | \
while read -r line; do while read -r line; do
if echo "$line" | grep -E "^signal.*StateChanged"; then if echo "$line" | grep -E "^signal.*StateChanged"; then
rm /tmp/modem.*.state 2>/dev/null
# shellcheck disable=SC2034 # shellcheck disable=SC2034
read -r oldstate #unused but we need to read past it read -r oldstate #unused but we need to read past it
read -r newstate read -r newstate
if echo "$newstate" | grep "int32 2"; then if echo "$newstate" | grep "int32 2"; then
touch /tmp/modem.locked.state echo locked > "$MODEMSTATEFILE"
pidof sxmo_unlocksim.sh || sxmo_unlocksim.sh & pidof sxmo_unlocksim.sh || sxmo_unlocksim.sh &
elif echo "$newstate" | grep "int32 8"; then elif echo "$newstate" | grep "int32 8"; then
touch /tmp/modem.registered.state echo registered > "$MODEMSTATEFILE"
checkforfinishedcalls checkforfinishedcalls
checkforincomingcalls checkforincomingcalls
checkfornewtexts checkfornewtexts
elif echo "$newstate" | grep "int32 11"; then elif echo "$newstate" | grep "int32 11"; then
touch /tmp/modem.connected.state echo connected > "$MODEMSTATEFILE"
#3G/2G/4G available #3G/2G/4G available
else
echo unknown > "$MODEMSTATEFILE"
fi fi
sxmo_statusbarupdate.sh sxmo_statusbarupdate.sh
fi fi
@ -253,7 +259,7 @@ mainloop() {
wait wait
wait wait
rm /tmp/modem.*.state 2>/dev/null rm "$MODEMSTATEFILE" 2>/dev/null
sxmo_statusbarupdate.sh sxmo_statusbarupdate.sh
} }

Loading…
Cancel
Save