#!/bin/sh
UCI='uci -q'
V4L2CTL='v4l2-ctl'

yesno()
{
	if [ -n "$1" ]; then
		v=$(echo "$1" | tr [:upper:] [:lower:])
		case ${v} in
			yes|true|enable)	echo 1		;;
			[0-9])			echo ${v}	;;
			*)			echo 0		;;
		esac
	fi
}

configure()
{
	n=$1

        device=$($UCI get keenfalcon.sensor${n}.device)
        case "${device}" in
                /dev/video*)
                        if [ -e ${device} ]; then
                                $V4L2CTL --list-ctrls --device ${device} | while read name hex type colon params; do
                                        for param in $params; do
                                                case $param in
                                                default=*)
                                                        value=$(echo "$param" | cut -d = -f 2)
                                                        $V4L2CTL >/dev/null 2>&1 --set-ctrl ${name}=${value} --device ${device}
                                                        ;;
                                                esac
                                        done
                                done
        
                                width=$($UCI get keenfalcon.sensor${n}.width)
                                height=$($UCI get keenfalcon.sensor${n}.height)
                                if [ -z "${width}" -o -z "${height}" ]; then
                                	width=1980; height=720
                                fi
                
				$V4L2CTL >/dev/null 2>&1 --set-fmt-video=width=${width},height=${height},pixelformat=H264 --device ${device}
                        
                                fps=$($UCI get keenfalcon.sensor${n}.fps)
                                if [ -z "${fps}" ]; then
                                	fps=25
                                fi
                                
				$V4L2CTL >/dev/null 2>&1 --set-parm ${fps} --device ${device}
                        
                                v4l2-ctl --list-ctrls --device ${device} | awk '{print $1}' | while read p; do
                                        v=$($UCI get keenfalcon.picture${n}.${p})
                                        if [ -n "$v" ]; then
                                                case ${p} in
							white_balance_temperature_auto|white_balance_automatic|exposure_auto_priority|exposure_dynamic_framerate)
                                                                v=$(yesno ${v})
                                                                ;;
							exposure_auto|auto_exposure)
                                                        	if [ "$v" != "1" -a "$v" != "3" ]; then
									v=$(yesno ${v})
                                                                
									if [ $v = 0 ]; then
										v=1
									else
										v=3
									fi
								fi                                                                        
								;;
                                                esac
                                                $V4L2CTL >/dev/null 2>&1 --set-ctrl ${p}="$v" --device ${device}
                                        fi			  
                                done
                        
                                args=""
                        
                                p=$($UCI get keenfalcon.encoder${n}.bitrate)
                                if [ -n "${p}" ]; then
                                        args="${args} -r ${p}"
                                fi
                
                                p=$($UCI get keenfalcon.encoder${n}.vbr)
                                if [ -n "${p}" ]; then
                                        args="${args} -v $(yesno ${p})"
                                fi
                
                                p=$($UCI get keenfalcon.encoder${n}.qp)
                                if [ -n "${p}" ]; then
                                        args="${args} -q ${p}"
                                fi
                
                                p=$($UCI get keenfalcon.encoder${n}.gop)
                                if [ -n "${p}" ]; then
                                        args="${args} -g ${p}"
                                fi
                
                                if [ -n "${args}" ]; then
                                        snc29xx ${args} ${device} >/dev/null 2>&1 
                                fi
                        fi
                        ;;
        esac
}

[ -f /run/setup ] && exit 0
[ -f /run/ground ] && exit 0

for sensor in "" 0 1 2 3; do
	configure ${sensor}
done
