#!/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
#
#===============================================================================

SUSPEND_WLAN_IFACES="/tmp/suspend_wlan_ifaces"

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 "${SUSPEND_WLAN_IFACES}"
		for iface in mlan0 uap0 wfd0; do
			if grep -qs ${iface} /var/run/ifstate; then
				ifdown ${iface} && echo ${iface} >> "${SUSPEND_WLAN_IFACES}"
			fi
		done

		rmmod moal
		rmmod mlan

		systemctl stop bluetooth
		systemctl stop bluetooth-init
		stty -F /dev/ttyBt 115200
	fi
elif [ "${1}" = "post" ]; then
	if actions_needed; then
		/etc/udev/scripts/load_iw612.sh
		sleep 0.5

		while read -r iface; do
			ifup "${iface}"
		done < "${SUSPEND_WLAN_IFACES}"
		rm -f "${SUSPEND_WLAN_IFACES}"

		systemctl start bluetooth-init
		systemctl start bluetooth
	fi

	# Resume NetworkManager after suspend
	systemctl start NetworkManager
fi
