op-packages/ssw/root/usr/share/ssw_schedule.sh
github-actions[bot] 15bc162efb 🎉 Sync 2026-06-28 20:31:01
2026-06-28 20:31:01 +08:00

64 lines
1.4 KiB
Bash
Executable File

#!/bin/sh
# SIM slot switcher - schedule handler
# Called by cron, generated by /etc/init.d/ssw
# by Konstantine Shevlakov at <shevlakov@132lan.ru> 2025
NODE="SW SIM SCHED"
get_vars() {
for d in modem sim; do
for s in gpio value; do
eval "${d}_${s}=$(uci -q get ssw.${d}.${s} 2>/dev/null)"
done
done
}
reload_iface() {
local iface
iface=$(uci show network | awk -F'[.]' '/devices/{gsub("'\''",""); print $2}' | tail -1)
[ -n "$iface" ] && ifup "$iface"
}
sw_sim() {
local cur_sim next_sim
cur_sim=$(cat /sys/class/gpio/"$sim_gpio"/value)
case "$cur_sim" in
0) next_sim=1 ;;
1) next_sim=0 ;;
*) logger -t "$NODE" "ERROR: unexpected sim gpio value: $cur_sim"; exit 1 ;;
esac
logger -t "$NODE" "Switching SIM: slot $cur_sim -> slot $next_sim"
echo "0" > /sys/class/gpio/"$modem_gpio"/value
echo "$next_sim" > /sys/class/gpio/"$sim_gpio"/value
if [ "$modem_value" = "1" ]; then
sleep 2
echo "1" > /sys/class/gpio/"$modem_gpio"/value
if [ -x /etc/init.d/smstools3 ]; then
/etc/init.d/smstools3 restart
fi
fi
sleep 5 && reload_iface &
}
sw_revert() {
local cur_sim
cur_sim=$(cat /sys/class/gpio/"$sim_gpio"/value)
if [ "$cur_sim" != "$sim_value" ]; then
logger -t "$NODE" "Reverting SIM to default slot $sim_value"
sw_sim
else
logger -t "$NODE" "SIM already on default slot $sim_value, nothing to do"
fi
}
# --- main ---
get_vars
case "$1" in
revert) sw_revert ;;
*) sw_sim ;;
esac