#!/bin/sh
# SPDX-License-Identifier: MIT

RUN_OPENRC="/run/openrc"
EC25="/sys/devices/platform/ec25-reset"
SIM7672="/sys/devices/platform/sim7672-reset"
TTYSYMLINK="ttyCommModem"

put_log()
{
	echo "$1"
	logger -t "wwan-clean-reset" "$1"
}

error()
{
	put_log "$1"
	flock -u 5
	exit 1
}

ec25_clean_reset()
{
	put_log "ec25 reset"
	if nmcli con show "$NMCLI_CONN_NAME" >/dev/null 2>&1; then
		nmcli con del "$NMCLI_CONN_NAME"
		persist_file -d "$NMCLI_CONN_FILE"
	fi

	if [ -e "$RUN_OPENRC" ]; then
		rc-service connection-recover stop
		rc-service modemmanager stop
	fi

	send-at /dev/ttyCommModem AT+CFUN=0
	send-at /dev/ttymxc3 'AT+QICSGP=1,1,"","","",0'
	send-at /dev/ttyCommModem AT+CFUN=1

	if [ -e "$RUN_OPENRC" ]; then
		rc-service modemmanager start
		rc-service connection-recover start
	fi
}

sim7672_clean_reset()
{
	put_log "sim7672 clean reset"
	if nmcli con show "$NMCLI_CONN_NAME" >/dev/null 2>&1; then
		nmcli con del "$NMCLI_CONN_NAME"
		persist_file -d "$NMCLI_CONN_FILE"
	fi

	if [ -e "$RUN_OPENRC" ]; then
		rc-service connection-recover stop
		rc-service modemmanager stop
		rc-service sim7672-boot stop
	fi

	send-at /dev/ttyCommModem AT+CFUN=0
	send-at /dev/ttyCommModem 'AT+CGDCONT=1,"IP","","",'
	send-at /dev/ttyCommModem AT+CGAUTH=1
	send-at /dev/ttyCommModem AT+CFUN=1

	if [ -e "$RUN_OPENRC" ]; then
		rc-service sim7672-boot start
		rc-service connection-recover start
	fi
}

if [ $# -ge 1 ]; then
	NMCLI_CONN_NAME="$1"
else
	NMCLI_CONN_NAME=gsm-"${TTYSYMLINK}"
fi
NMCLI_CONN_FILE="/etc/NetworkManager/system-connections/$NMCLI_CONN_NAME.nmconnection"

exec 5<"$0"
if ! flock -n 5; then
	echo "error: $0 is already running"
	exit 1
fi

if [ -e "$EC25" ]; then
	run=ec25_clean_reset
elif [ -e "$SIM7672" ]; then
	run=sim7672_clean_reset
else
	put_log "error: not supported"
	exit 1
fi

# close lock file for subcommands so lock is not inherited
"$run" 5<&-
