#!/bin/sh /etc/rc.common
# (C) 2012 Daniel Golle, Allnet GmbH <dgolle@allnet.de>

START=96
STOP=89
RSSILEDS_BIN="/usr/sbin/rssileds"

SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1

start_rssid() {
	local name
	local dev
	local threshold
	local refresh
	local leds
	config_get name $1 name
	config_get dev $1 dev
	config_get threshold $1 threshold
	config_get refresh $1 refresh
	leds="$( cur_iface=$1 ; config_foreach get_led led )"
	SERVICE_PID_FILE=/var/run/rssileds-$dev.pid
	service_start $RSSILEDS_BIN $dev $refresh $threshold $leds
}

stop_rssid() {
	local dev
	config_get dev $1 dev
	SERVICE_PID_FILE=/var/run/rssileds-$dev.pid
	service_stop $RSSILEDS_BIN
}

get_led() {
	local name
	local sysfs
	local trigger
	local iface
	config_get sysfs $1 sysfs
	config_get name $1 name "$sysfs"
	config_get trigger $1 trigger "none"
	config_get iface $1 iface
	config_get minq $1 minq
	config_get maxq $1 maxq
	config_get offset $1 offset
	config_get factor $1 factor
	[ "$trigger" = "rssi" ] || return
	[ "$iface" = "$cur_iface" ] || return
	[ ! "$minq" ] || [ ! "$maxq" ] || [ ! "$offset" ] || [ ! "$factor" ] && return
	echo "none" > /sys/class/leds/$sysfs/trigger
	echo "$sysfs $minq $maxq $offset $factor"
}

off_led() {
	local name
	local sysfs
	local trigger
	config_get sysfs $1 sysfs
	config_get name $1 name "$sysfs"
	config_get trigger $1 trigger "none"
	[ "$trigger" = "rssi" ] || return
	echo "0" > /sys/class/leds/$sysfs/brightness
}

start() {
	[ -e /sys/class/leds/ ] && [ -x "$RSSILEDS_BIN" ] && {
		config_load system
		config_foreach start_rssid rssid
	}
}

stop() {
	config_load system
	config_foreach stop_rssid rssid
	config_foreach off_led led
}
