#!/bin/sh /etc/rc.common
# shellcheck shell=sh
# shellcheck disable=SC1091,SC2034,SC3043
# Apply /etc/config/r01 'fan' mode to the hwmon2 PWM at boot, then start
# the safety watchdog (/usr/libexec/r01-fan-watchdog) under procd.
#
# UCI (defaults in files/etc/config/r01):
#   r01.fan.mode             auto | quiet | aggressive | manual
#   r01.fan.manual_pwm       0-255 (used when mode=manual)
#   r01.fan.safety_temp      millicelsius (0 = disable watchdog)
#   r01.fan.safety_interval  seconds between watchdog polls
#
# Suppressed lints:
#   SC1091: /lib/r01-fan-modes.sh lives on the router, not in the repo
#   SC2034: USE_PROCD/START/STOP are contract vars consumed by /etc/rc.common
#   SC3043: OpenWrt busybox ash supports `local`

USE_PROCD=1
START=99
STOP=01

. /lib/r01-fan-modes.sh

start_service() {
	local mode manual_pwm safety_temp safety_interval
	config_load r01
	config_get mode             fan mode             auto
	config_get manual_pwm       fan manual_pwm       128
	config_get safety_temp      fan safety_temp      85000
	config_get safety_interval  fan safety_interval  5

	r01_fan_apply_mode "$mode" "$manual_pwm"
	logger -t r01-fan "boot: applied mode=$mode pwm=$manual_pwm (safety=${safety_temp}mC, interval=${safety_interval}s)"

	procd_open_instance r01-fan-watchdog
	procd_set_param command /usr/libexec/r01-fan-watchdog
	procd_set_param respawn 5 5 0
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_close_instance
}

service_triggers() {
	procd_add_reload_trigger r01
}

reload_service() {
	stop
	start
}
