#!/usr/bin/bash

# PX4 commands need the 'px4-' prefix in bash.
# (px4-alias.sh is expected to be in the PATH)
source px4-alias.sh

# TODO: In the future we want to share rc.autostart with NuttX
#source rc.autostart

# Use the variable set by sitl_run.sh to choose the model settings.
if [ "$PX4_SIM_MODEL" == "iris" ]; then
	set REQUESTED_AUTOSTART 10016

elif [ "$PX4_SIM_MODEL" == "typhoon_h480" ]; then
	set REQUESTED_AUTOSTART 6011
else
	echo "Unknown model"
	exit -1
fi

uorb start
if [ -f eeprom/parameters ]
then
	param load
fi

if param compare SYS_AUTOSTART $REQUESTED_AUTOSTART
then
	set AUTOCNF no
else
	set AUTOCNF yes
fi


if [ $AUTOCNF == yes ]
then
	param set SYS_AUTOSTART $REQUESTED_AUTOSTART

	param set BAT_N_CELLS 3
	param set CAL_ACC0_ID 1376264
	param set CAL_ACC0_XOFF 0.01
	param set CAL_ACC0_XSCALE 1.01
	param set CAL_ACC0_YOFF -0.01
	param set CAL_ACC0_YSCALE 1.01
	param set CAL_ACC0_ZOFF 0.01
	param set CAL_ACC0_ZSCALE 1.01
	param set CAL_ACC1_ID 1310728
	param set CAL_ACC1_XOFF 0.01
	param set CAL_GYRO0_ID 2293768
	param set CAL_GYRO0_XOFF 0.01
	param set CAL_MAG0_ID 196616
	param set CAL_MAG0_XOFF 0.01
	param set COM_DISARM_LAND 3
	param set COM_OBL_ACT 2
	param set COM_OBL_RC_ACT 0
	param set COM_OF_LOSS_T 5
	param set COM_RC_IN_MODE 1
	param set EKF2_AID_MASK 1
	param set EKF2_ANGERR_INIT 0.01
	param set EKF2_GBIAS_INIT 0.01
	param set EKF2_HGT_MODE 0
	param set EKF2_MAG_TYPE 1
	param set MC_PITCH_P 6
	param set MC_PITCHRATE_P 0.2
	param set MC_ROLL_P 6
	param set MC_ROLLRATE_P 0.2
	param set MIS_TAKEOFF_ALT 2.5
	param set MPC_HOLD_MAX_Z 2.0
	param set MPC_Z_VEL_I 0.15
	param set MPC_Z_VEL_P 0.6
	param set NAV_ACC_RAD 2.0
	param set NAV_DLL_ACT 2
	param set RTL_DESCEND_ALT 5.0
	param set RTL_LAND_DELAY 5
	param set RTL_RETURN_ALT 30.0
	param set SDLOG_DIRS_MAX 7
	param set SENS_BOARD_ROT 0
	param set SENS_BOARD_X_OFF 0.000001
	param set SYS_RESTART_TYPE 2
fi


# Use environment variable PX4_ESTIMATOR to choose estimator.
if [ "$PX4_ESTIMATOR" == "ekf2" ]; then
	param set SYS_MC_EST_GROUP 2
elif [ "$PX4_ESTIMATOR" == "lpe" ]; then
	param set SYS_MC_EST_GROUP 1
fi

dataman start
replay tryapplyparams
simulator start -s
tone_alarm start
gyrosim start
accelsim start
barosim start
gpssim start
sensors start
commander start
land_detector start multicopter
navigator start

if param compare SYS_MC_EST_GROUP 1
then
	attitude_estimator_q start
	local_position_estimator start
elif param compare SYS_MC_EST_GROUP 2
then
	ekf2 start
else
	echo "No estimator chosen"
	exit -1
fi

mc_pos_control start
mc_att_control start

# TODO: eventually we want to re-use the existing autostart
#       infrastructure already available on NuttX.
if param compare SYS_AUTOSTART 10016
then
	source etc/init.d-posix/10016_iris

elif param compare SYS_AUTOSTART 6011
then
	source etc/init.d-posix/6011_typhoon_h480
fi


mavlink start -x -u 14556 -r 4000000
mavlink start -x -u 14557 -r 4000000 -m onboard -o 14540
mavlink stream -r 50 -s POSITION_TARGET_LOCAL_NED -u 14556
mavlink stream -r 50 -s LOCAL_POSITION_NED -u 14556
mavlink stream -r 50 -s GLOBAL_POSITION_INT -u 14556
mavlink stream -r 50 -s ATTITUDE -u 14556
mavlink stream -r 50 -s ATTITUDE_QUATERNION -u 14556
mavlink stream -r 50 -s ATTITUDE_TARGET -u 14556
mavlink stream -r 50 -s SERVO_OUTPUT_RAW_0 -u 14556
mavlink stream -r 20 -s RC_CHANNELS -u 14556
mavlink stream -r 250 -s HIGHRES_IMU -u 14556
mavlink stream -r 10 -s OPTICAL_FLOW_RAD -u 14556

# Required for the typhoon
mavlink stream -r 10 -s MOUNT_ORIENTATION -u 14556
mavlink stream -r 50 -s ATTITUDE_QUATERNION -u 14557
mavlink stream -r 10 -s MOUNT_ORIENTATION -u 14557

logger start -e -t -b 1000

mavlink boot_complete
replay trystart
