You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

314 lines
6.7 KiB

#!nsh
#
# Script to configure control interfaces.
#
#
# 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 MIXER_AUX_FILE none
set OUTPUT_AUX_DEV /dev/pwm_output1
#
# If mount (gimbal) control is enabled and output mode is AUX, set the aux
# mixer to mount (override the airframe-specific MIXER_AUX setting).
#
if ! param compare MNT_MODE_IN -1
then
if param compare MNT_MODE_OUT 0
then
set MIXER_AUX mount
fi
fi
if ver hwcmp AEROFC_V1 AV_X_V1 CRAZYFLIE MINDPX_V2 NXPHLITE_V3 PX4FMU_V4 OMNIBUS_F4SD SITL
then
set MIXER_AUX none
fi
if [ $USE_IO == no ]
then
set MIXER_AUX none
fi
#
# Set the default output mode if none was set.
#
if [ $OUTPUT_MODE == none ]
then
if [ $USE_IO == yes ]
then
# Enable IO output only if IO is present.
if [ $IO_PRESENT == yes ]
then
set OUTPUT_MODE io
fi
else
set OUTPUT_MODE fmu
fi
fi
#
# If OUTPUT_MODE == none then something is wrong with setup and we shouldn't try to enable output.
#
if [ $OUTPUT_MODE != none ]
then
if [ $OUTPUT_MODE == mkblctrl ]
then
if [ $MKBLCTRL_MODE == x ]
then
set MKBLCTRL_ARG "-mkmode x"
fi
if [ $MKBLCTRL_MODE == + ]
then
set MKBLCTRL_ARG "-mkmode +"
fi
if ! mkblctrl $MKBLCTRL_ARG
then
# Error tune.
tune_control play -t 2
fi
fi
if [ $OUTPUT_MODE == hil -o $OUTPUT_MODE == sim ]
then
if ! pwm_out_sim start
then
# Error tune.
tune_control play -t 2
fi
fi
if [ $OUTPUT_MODE == fmu ]
then
if ! fmu mode_$FMU_MODE $FMU_ARGS
then
echo "FMU start failed" >> $LOG_FILE
# Error tune.
tune_control play -t 2
fi
fi
if [ $OUTPUT_MODE == uavcan_esc ]
then
if param compare UAVCAN_ENABLE 0
then
param set UAVCAN_ENABLE 3
fi
fi
if [ $OUTPUT_MODE == io -o $OUTPUT_MODE == uavcan_esc ]
then
sh /etc/init.d/rc.io
fi
#
# Start IO for RC input if needed.
#
if [ $IO_PRESENT == yes ]
then
if [ $OUTPUT_MODE != io ]
then
sh /etc/init.d/rc.io
fi
fi
fi
if [ $MIXER != none -a $MIXER != skip ]
then
#
# Load main mixer.
#
if [ $MIXER_AUX == none -a $USE_IO == yes ]
then
set MIXER_AUX ${MIXER}
fi
if [ -f ${SDCARD_MIXERS_PATH}/${MIXER}.main.mix ]
then
# Use the mixer file from the SD-card if it exists.
set MIXER_FILE ${SDCARD_MIXERS_PATH}/${MIXER}.main.mix
else
# Try out the old convention, for backward compatibility.
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 [ $MIXER_AUX != none -a $AUX_MODE != none ]
then
#
# Load aux mixer.
#
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} $FMU_ARGS
then
# Append aux mixer to main device.
if param compare SYS_HITL 1
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 -c ${PWM_AUX_OUT} -r ${PWM_AUX_RATE} -d ${OUTPUT_AUX_DEV}
fi
if [ $PWM_AUX_MIN != none ]
then
pwm min -c ${PWM_AUX_OUT} -p ${PWM_AUX_MIN} -d ${OUTPUT_AUX_DEV}
fi
if [ $PWM_AUX_MAX != none ]
then
pwm max -c ${PWM_AUX_OUT} -p ${PWM_AUX_MAX} -d ${OUTPUT_AUX_DEV}
fi
fi
#
# Per channel disarmed settings.
#
pwm disarmed -c 1 -p p:PWM_AUX_DIS1 -d ${OUTPUT_AUX_DEV}
pwm disarmed -c 2 -p p:PWM_AUX_DIS2 -d ${OUTPUT_AUX_DEV}
pwm disarmed -c 3 -p p:PWM_AUX_DIS3 -d ${OUTPUT_AUX_DEV}
pwm disarmed -c 4 -p p:PWM_AUX_DIS4 -d ${OUTPUT_AUX_DEV}
pwm disarmed -c 5 -p p:PWM_AUX_DIS5 -d ${OUTPUT_AUX_DEV}
pwm disarmed -c 6 -p p:PWM_AUX_DIS6 -d ${OUTPUT_AUX_DEV}
pwm disarmed -c 7 -p p:PWM_AUX_DIS7 -d ${OUTPUT_AUX_DEV}
pwm disarmed -c 8 -p p:PWM_AUX_DIS8 -d ${OUTPUT_AUX_DEV}
if [ $FAILSAFE_AUX != none ]
then
pwm failsafe -c ${PWM_AUX_OUT} -p ${FAILSAFE} -d ${OUTPUT_AUX_DEV}
fi
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
#
# Per channel disarmed settings.
#
pwm disarmed -c 1 -p p:PWM_MAIN_DIS1
pwm disarmed -c 2 -p p:PWM_MAIN_DIS2
pwm disarmed -c 3 -p p:PWM_MAIN_DIS3
pwm disarmed -c 4 -p p:PWM_MAIN_DIS4
pwm disarmed -c 5 -p p:PWM_MAIN_DIS5
pwm disarmed -c 6 -p p:PWM_MAIN_DIS6
pwm disarmed -c 7 -p p:PWM_MAIN_DIS7
pwm disarmed -c 8 -p p:PWM_MAIN_DIS8
if [ $FAILSAFE != none ]
then
pwm failsafe -c ${PWM_OUT} -p ${FAILSAFE} -d ${OUTPUT_DEV}
fi
fi
unset MIXER_AUX_FILE
unset OUTPUT_AUX_DEV