#!/sbin/openrc-run

command="/usr/bin/power-utils"
command_background="yes"
ex_command="/usr/bin/pwu_notify"
description="Atmark Techno's power-utils daemon"
pidfile="/var/run/power-utils.pid"
config="/etc/atmark/power-utils.conf"

start_stop_daemon_args="--start --quiet"
error_logger="logger -t '${RC_SVCNAME}' -p daemon.error"

depend() {
	need net
}

generate_config() {
	case "$(cat /etc/hwrevision)" in
		iot-a6e*)
			TARGET="'a6e-gw-container'"
			WAKEUP="'SW1', 'USB', 'UART', 'GPIO', 'SMS', 'RTC:60', 'AIN'"
			;;
		iot-a9e*)
			TARGET="'a9e-gw-container'"
			WAKEUP="'SW1', 'UART', 'SMS', 'GPIO', 'RTC:60'"
			;;
		*)
			return
			;;
	esac

	cat <<EOF >"${config}"
TARGET=$TARGET
MODE='NONE'
WAKEUP=$WAKEUP
EOF
}

start_pre() {
	if ! [ -e "$config" ]; then
		generate_config
	fi
}

start() {
	if ! [ -e "$config" ]; then
		einfo "Skipping atmark-power-utils start on unsupported system"
		return 0
	fi

	default_start
}

check_rtc_wake() {
	local now="$(cat /sys/class/rtc/rtc0/since_epoch)"
	local waketime="$(cat /sys/class/rtc/rtc0/wakealarm)"

	if [ -z "$now" ]; then
		ewarn "failed to read the RTC datetime!"
		return
	fi
	if [ -z "$waketime" ]; then
		if [ ! -e /var/run/rtc_wake ]; then
			return
		fi
		waketime="$now"
	fi

	if [ "$waketime" -lt "$((now + 120))" ]; then
		echo 0 > /sys/class/rtc/rtc0/wakealarm
		echo +120 > /sys/class/rtc/rtc0/wakealarm
	fi
}

stop() {
	ebegin "Stopping atmark-power-utils"
	"${ex_command}" quit
	start-stop-daemon --stop --quiet \
		--pidfile "${pidfile}"
	eend $? "Failed to stop atmark-power-utils"

	check_rtc_wake
}
