mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-02-15 04:42:02 +00:00
120 lines
No EOL
2.1 KiB
Bash
Executable file
120 lines
No EOL
2.1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
. /usr/share/libubox/jshn.sh
|
|
|
|
PS_ON=1
|
|
PS_OFF=2
|
|
|
|
MPS=0
|
|
MLBL="modem"
|
|
|
|
modem_reset() {
|
|
local label="$1"
|
|
|
|
[ -e "/sys/class/gpio/${label}_reset/value" ] || return
|
|
|
|
echo 1 > "/sys/class/gpio/${label}_reset/value"
|
|
sleep 1
|
|
echo 0 > "/sys/class/gpio/${label}_reset/value"
|
|
}
|
|
|
|
modem_off() {
|
|
local label="$1"
|
|
|
|
[ -e "/sys/class/gpio/${label}_reset/value" ] || return
|
|
|
|
echo 1 > "/sys/class/gpio/${label}_reset/value"
|
|
}
|
|
|
|
modem_power() {
|
|
local label="$1"
|
|
|
|
[ -e "/sys/class/gpio/${label}_power/value" ] || return
|
|
|
|
# simulate power press
|
|
echo 1 > "/sys/class/gpio/${label}_power/value"
|
|
sleep 1
|
|
echo 0 > "/sys/class/gpio/${label}_power/value"
|
|
}
|
|
|
|
modem_list() {
|
|
local list="modem"
|
|
local label
|
|
|
|
[ "$(modem_fetch_primary)" -eq 0 ] && {
|
|
echo "${list}"
|
|
return
|
|
}
|
|
|
|
for m in /sys/class/gpio/modem*_power; do
|
|
label="$(basename $m | awk -F_ '{print $1}')"
|
|
[ "${label}" != "modem" ] && list="${list},${label}"
|
|
done
|
|
|
|
echo "${list}"
|
|
}
|
|
|
|
modem_fetch_primary() {
|
|
local modem modems primary
|
|
|
|
json_init
|
|
json_load_file "/etc/board.json"
|
|
|
|
json_get_keys modems modems
|
|
json_select modems
|
|
|
|
for modem in $modems; do
|
|
json_select "$modem"
|
|
json_get_vars primary
|
|
|
|
[ -n "$primary" ] && {
|
|
echo 1
|
|
return
|
|
}
|
|
|
|
json_select ..
|
|
done
|
|
echo 0
|
|
}
|
|
|
|
modem_is_available() {
|
|
local label="$1"
|
|
[ -e "/sys/class/gpio/${label}_power/value" ]
|
|
}
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Usage $0 <option>
|
|
Control modem power state.
|
|
|
|
Options:
|
|
-p, --power-on power on modem
|
|
-s, --shutdown shutdown modem
|
|
-r, --reboot reboot modem
|
|
-m, --modem <label> use specified modem instead of default one
|
|
|
|
Available modem labels:
|
|
$(modem_list)
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
while [ -n "$1" ]; do
|
|
case "$1" in
|
|
-p | --power-on) MPS="${PS_ON}";;
|
|
-s | --shutdown) MPS="${PS_OFF}";;
|
|
-r | --reboot) MPS="${PS_ON}";;
|
|
-m | --modem) MLBL="$2"; shift;;
|
|
-*) echo "Invalid option: $1"; usage;;
|
|
*) break;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
[ "${MPS}" -eq 0 ] && usage
|
|
modem_is_available "${MLBL}" || usage
|
|
|
|
case "${MPS}" in
|
|
"${PS_ON}") modem_reset "${MLBL}"; sleep 1; modem_power "${MLBL}";;
|
|
"${PS_OFF}") modem_off "${MLBL}";;
|
|
esac |