#!nsh
#
# Script to configure control interface
#
#
# NOTE: environment variable references:
#  If the dollar sign ('$') is followed by a left bracket ('{') then the
#  variable name is terminated with the right bracket character ('}').
#  Otherwise, the variable name goes to the end of the argument.
#

set SDCARD_MIXERS_PATH /fs/microsd/etc/mixers

if [ $MIXER != none -a $MIXER != skip ]
then
	#
	# Load main mixer
	#

	if [ $MIXER_AUX == none -a $USE_IO == yes ]
	then
		set MIXER_AUX ${MIXER}.aux
	fi

	# Use the mixer file from the SD-card if it exists
	if [ -f ${SDCARD_MIXERS_PATH}/${MIXER}.main.mix ]
	then
		set MIXER_FILE ${SDCARD_MIXERS_PATH}/${MIXER}.main.mix
	# Try out the old convention, for backward compatibility
	else

		if [ -f ${SDCARD_MIXERS_PATH}/${MIXER}.mix ]
		then
			set MIXER_FILE ${SDCARD_MIXERS_PATH}/${MIXER}.mix
		else
			set MIXER_FILE /etc/mixers/${MIXER}.main.mix
		fi
	fi

	if [ $OUTPUT_MODE == mkblctrl ]
	then
		set OUTPUT_DEV /dev/mkblctrl0
	else
		set OUTPUT_DEV /dev/pwm_output0
	fi

	if [ $OUTPUT_MODE == uavcan_esc ]
	then
		set OUTPUT_DEV /dev/uavcan/esc
	fi

	if [ $OUTPUT_MODE == tap_esc ]
	then
		set OUTPUT_DEV /dev/tap_esc
	fi

	if mixer load ${OUTPUT_DEV} ${MIXER_FILE}
	then
		echo "INFO  [init] Mixer: ${MIXER_FILE} on ${OUTPUT_DEV}"
	else
		echo "ERROR  [init] Failed loading mixer: ${MIXER_FILE}"
		echo "ERROR  [init] Failed loading mixer: ${MIXER_FILE}" >> $LOG_FILE
		tone_alarm ${TUNE_ERR}
	fi

	unset MIXER_FILE
else
	if [ $MIXER != skip ]
	then
		echo "ERROR  [init] Mixer undefined"
		echo "ERROR  [init] Mixer undefined" >> $LOG_FILE
		tone_alarm ${TUNE_ERR}
	fi
fi

if [ $OUTPUT_MODE == fmu -o $OUTPUT_MODE == io ]
then
	if [ $PWM_OUT != none ]
	then
		#
		# Set PWM output frequency
		#
		if [ $PWM_RATE != none ]
		then
			pwm rate -c ${PWM_OUT} -r ${PWM_RATE}
		fi

		#
		# Set disarmed, min and max PWM values
		#
		if [ $PWM_DISARMED != none ]
		then
			pwm disarmed -c ${PWM_OUT} -p ${PWM_DISARMED}
		fi
		if [ $PWM_MIN != none ]
		then
			pwm min -c ${PWM_OUT} -p ${PWM_MIN}
		fi
		if [ $PWM_MAX != none ]
		then
			pwm max -c ${PWM_OUT} -p ${PWM_MAX}
		fi
	fi

	if [ $FAILSAFE != none ]
	then
		pwm failsafe -d ${OUTPUT_DEV} ${FAILSAFE}
	fi
fi

# This is a FMUv2+ thing
if ver hwcmp PX4FMU_V1
then
	set MIXER_AUX none
fi

#MindPX has not aux mixer
if ver hwcmp MINDPX_V2
then
        set MIXER_AUX none
fi

if ver hwcmp CRAZYFLIE
then
	set MIXER_AUX none
fi

if ver hwcmp AEROFC_V1
then
	set MIXER_AUX none
fi

if ver hwcmp PX4FMU_V5
then
	set MIXER_AUX none
fi

if [ $MIXER_AUX != none -a $AUX_MODE != none ]
then
	#
	# Load aux mixer
	#

	set MIXER_AUX_FILE none
	set OUTPUT_AUX_DEV /dev/pwm_output1

	if [ -f ${SDCARD_MIXERS_PATH}/${MIXER_AUX}.aux.mix ]
	then
		set MIXER_AUX_FILE ${SDCARD_MIXERS_PATH}/${MIXER_AUX}.aux.mix
	else

		if [ -f /etc/mixers/${MIXER_AUX}.aux.mix ]
		then
			set MIXER_AUX_FILE /etc/mixers/${MIXER_AUX}.aux.mix
		fi
	fi

	if [ $MIXER_AUX_FILE != none ]
	then
		if fmu mode_${AUX_MODE}
		then
			# Append aux mixer to main device
			if [ $OUTPUT_MODE == hil ]
			then
				if mixer append ${OUTPUT_DEV} ${MIXER_AUX_FILE}
				then
					echo "INFO  [init] Mixer: ${MIXER_AUX_FILE} appended to ${OUTPUT_DEV}"
				else
					echo "ERROR  [init] Failed appending mixer: ${MIXER_AUX_FILE}"
					echo "ERROR  [init] Failed appending mixer: ${MIXER_AUX_FILE}" >> $LOG_FILE
				fi
			fi
			if [ -e $OUTPUT_AUX_DEV -a $OUTPUT_MODE != hil ]
			then
				if mixer load ${OUTPUT_AUX_DEV} ${MIXER_AUX_FILE}
				then
					echo "INFO  [init] Mixer: ${MIXER_AUX_FILE} on ${OUTPUT_AUX_DEV}"
				else
					echo "ERROR  [init] Failed loading mixer: ${MIXER_AUX_FILE}"
					echo "ERROR  [init] Failed loading mixer: ${MIXER_AUX_FILE}" >> $LOG_FILE
				fi
			else
				set PWM_AUX_OUT none
				set FAILSAFE_AUX none
			fi
		else
			echo "ERROR: Could not start: fmu mode_pwm" >> $LOG_FILE
			tone_alarm ${TUNE_ERR}
			set PWM_AUX_OUT none
			set FAILSAFE_AUX none
		fi

		# Set min / max for aux out and rates
		if [ $PWM_AUX_OUT != none ]
		then
			#
			# Set PWM_AUX output frequency
			#
			if [ $PWM_AUX_RATE != none ]
			then
				pwm rate -e -c ${PWM_AUX_OUT} -r ${PWM_AUX_RATE} -d ${OUTPUT_AUX_DEV}
			fi

			if [ $PWM_AUX_MIN != none ]
			then
				pwm min -e -c ${PWM_AUX_OUT} -p ${PWM_AUX_MIN} -d ${OUTPUT_AUX_DEV}
			fi
			if [ $PWM_AUX_MAX != none ]
			then
				pwm max -e -c ${PWM_AUX_OUT} -p ${PWM_AUX_MAX} -d ${OUTPUT_AUX_DEV}
			fi
		fi

		# Set disarmed values for aux out

		# Transitional support until all configs
		# are updated
		if [ $PWM_ACHDIS == none ]
		then
			set PWM_ACHDIS ${PWM_AUX_OUT}
		fi

		#
		# Set disarmed, min and max PWM_AUX values
		#
		if [ $PWM_AUX_DISARMED != none -a $PWM_ACHDIS != none ]
		then
			pwm disarmed -e -c ${PWM_ACHDIS} -p ${PWM_AUX_DISARMED} -d ${OUTPUT_AUX_DEV}
		fi

		if [ $FAILSAFE_AUX != none ]
		then
			pwm failsafe -e -d ${OUTPUT_AUX_DEV} ${FAILSAFE}
		fi

	fi
fi

unset PWM_OUT
unset PWM_RATE
unset PWM_ACHDIS
unset PWM_MIN
unset PWM_MAX
unset PWM_AUX_OUT
unset PWM_AUX_RATE
unset PWM_AUX_DISARMED
unset PWM_AUX_MIN
unset PWM_AUX_MAX
unset FAILSAFE_AUX
unset FAILSAFE
unset OUTPUT_DEV
unset OUTPUT_AUX_DEV
