#!/bin/sh
#===============================================================================
#
#  standby-actions
#
#  Copyright (C) 2023 by Digi International Inc.
#  All rights reserved.
#
#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License version 2 as published by
#  the Free Software Foundation.
#
#
#  !Description: manage interfaces before suspending and after resuming from
#                suspend
#
#===============================================================================

RESUME_ACTIONS="/tmp/resume_actions"

actions_needed() {
	[ -d "/proc/device-tree/wireless" ] && [ ! -e "/sys/firmware/devicetree/base/soc@0/bus@42800000/mmc@428b0000/keep-power-in-suspend" ]
}

if [ "${1}" = "pre" ]; then
	# Stop NetworkManager before suspend
	systemctl stop NetworkManager

	if actions_needed; then
		rm -f "${RESUME_ACTIONS}"
		for iface in wlan0 uap0 wfd0; do
			if grep -qs ${iface} /var/run/ifstate; then
				ifdown ${iface} && echo "ifup ${iface}" >> "${RESUME_ACTIONS}"
			fi
		done

		rmmod moal
		rmmod mlan

		if systemctl is-active bluetooth-init; then
			# bluetooth service relies on bluetooth-init service, so stop/start it unconditionally
			echo "systemctl start bluetooth-init" >> "${RESUME_ACTIONS}"
			echo "systemctl start bluetooth" >> "${RESUME_ACTIONS}"
			systemctl stop bluetooth-init
			systemctl stop bluetooth
		fi
	fi
elif [ "${1}" = "post" ]; then
	if actions_needed; then
		sleep 0.5
		/etc/udev/scripts/load_iw612.sh

		sh "${RESUME_ACTIONS}"
		rm -f "${RESUME_ACTIONS}"
	fi

	# Resume NetworkManager after suspend
	systemctl start NetworkManager
fi
