mirror of
				https://github.com/Ysurac/openmptcprouter.git
				synced 2025-03-09 15:40:20 +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 |