#!nsh # # PX4FMU startup script. # # Default to auto-start mode. An init script on the microSD card # can change this to prevent automatic startup of the flight script. # set MODE autostart set logfile /fs/microsd/bootlog.txt # # Try to mount the microSD card. # echo "[init] looking for microSD..." if mount -t vfat /dev/mmcsd0 /fs/microsd then echo "[init] card mounted at /fs/microsd" # Start playing the startup tune tone_alarm start else echo "[init] no microSD card found" # Play SOS tone_alarm error fi # # Look for an init script on the microSD card. # # To prevent automatic startup in the current flight mode, # the script should set MODE to some other value. # if [ -f /fs/microsd/etc/rc ] then echo "[init] reading /fs/microsd/etc/rc" sh /fs/microsd/etc/rc fi # Also consider rc.txt files if [ -f /fs/microsd/etc/rc.txt ] then echo "[init] reading /fs/microsd/etc/rc.txt" sh /fs/microsd/etc/rc.txt fi # if this is an APM build then there will be a rc.APM script # from an EXTERNAL_SCRIPTS build option if [ -f /etc/init.d/rc.APM ] then if sercon then echo "[init] USB interface connected" fi echo "Running rc.APM" # if APM startup is successful then nsh will exit sh /etc/init.d/rc.APM fi if [ $MODE == autostart ] then # # Start CDC/ACM serial driver # sercon # # Start the ORB (first app to start) # uorb start # # Load microSD params # #if ramtron start #then # param select /ramtron/params # if [ -f /ramtron/params ] # then # param load /ramtron/params # fi #else param select /fs/microsd/params if [ -f /fs/microsd/params ] then if param load /fs/microsd/params then echo "Parameters loaded" else echo "Parameter file corrupt - ignoring" fi fi #fi # # Start system state indicator # if rgbled start then echo "Using external RGB Led" else if blinkm start then blinkm systemstate fi fi set USE_IO no set FRAME_TYPE none set PWM_RATE none set PWM_DISARMED none set PWM_MIN none set PWM_MAX none if param compare SYS_AUTOCONFIG 1 then set DO_AUTOCONFIG yes else set DO_AUTOCONFIG no fi # # Start the Commander (needs to be this early for in-air-restarts) # commander start # # Set parameters and env variables for selected AUTOSTART (HIL setups) # sh /etc/init.d/rc.autostart_hil if [ $MODE == hil ] then # # Do common HIL setup depending on env variables # # Allow USB some time to come up sleep 1 # Start MAVLink on USB port mavlink start -b 230400 -d /dev/ttyACM0 usleep 5000 # Create a fake HIL /dev/pwm_output interface hil mode_pwm # Sensors echo "Start sensors" sh /etc/init.d/rc.sensors # # Fixed wing setup # if [ $FRAME_TYPE == fw ] then echo "Setup FIXED WING" fi # # Multicopters setup # if [ $FRAME_TYPE == mc ] then echo "Setup MULTICOPTER" # Load mixer and configure outputs sh /etc/init.d/rc.mc_interface # Start common multicopter apps sh /etc/init.d/rc.mc_apps fi else # Try to get an USB console if not in HIL mode nshterm /dev/ttyACM0 & fi # # Upgrade PX4IO firmware # if [ -f /etc/extras/px4io-v2_default.bin ] then set io_file /etc/extras/px4io-v2_default.bin else set io_file /etc/extras/px4io-v1_default.bin fi if px4io start then echo "PX4IO OK" echo "PX4IO OK" >> $logfile fi if px4io checkcrc $io_file then echo "PX4IO CRC OK" echo "PX4IO CRC OK" >> $logfile set USE_IO yes else echo "PX4IO CRC failure" echo "PX4IO CRC failure" >> $logfile tone_alarm MBABGP if px4io forceupdate 14662 $io_file then usleep 500000 if px4io start then echo "PX4IO restart OK" echo "PX4IO restart OK" >> $logfile tone_alarm MSPAA set USE_IO yes else echo "PX4IO restart failed" echo "PX4IO restart failed" >> $logfile if hw_ver compare PX4FMU_V2 then tone_alarm MNGGG sleep 10 reboot fi fi else echo "PX4IO update failed" echo "PX4IO update failed" >> $logfile tone_alarm MNGGG fi fi set EXIT_ON_END no # # Set parameters and env variables for selected AUTOSTART # sh /etc/init.d/rc.autostart # # If autoconfig parameter was set, reset it and save parameters # if [ $DO_AUTOCONFIG == yes ] then param set SYS_AUTOCONFIG 0 param save fi if [ $MODE == autostart ] then # # Do common setup depending on env variables # if [ $USE_IO == yes ] then echo "Use IO" # Start MAVLink on default port: ttyS1 mavlink start usleep 5000 sh /etc/init.d/rc.io else echo "Don't use IO" # Start MAVLink on ttyS0 mavlink start -d /dev/ttyS0 usleep 5000 # Configure FMU for PWM outputs fmu mode_pwm # Exit from nsh to free port for mavlink set EXIT_ON_END yes fi # Sensors echo "Start sensors" sh /etc/init.d/rc.sensors # Logging sh /etc/init.d/rc.logging # GPS interface gps start # # Fixed wing setup # if [ $FRAME_TYPE == fw ] then echo "Setup FIXED WING" fi # # Multicopters setup # if [ $FRAME_TYPE == mc ] then echo "Setup MULTICOPTER" # Load mixer and configure outputs sh /etc/init.d/rc.mc_interface # Start common multicopter apps sh /etc/init.d/rc.mc_apps fi fi # Start any custom extensions if [ -f /fs/microsd/etc/rc.local ] then sh /fs/microsd/etc/rc.local fi # If none of the autostart scripts triggered, get a minimal setup if [ $MODE == autostart ] then # Telemetry port is on both FMU boards ttyS1 # but the AR.Drone motors can be get 'flashed' # if starting MAVLink on them - so do not # start it as default (default link: USB) # Start commander commander start # Start px4io if present if px4io detect then px4io start else if fmu mode_serial then echo "FMU driver (no PWM) started" fi fi # Start sensors sh /etc/init.d/rc.sensors # Start one of the estimators attitude_estimator_ekf start # Start GPS gps start fi if [ $EXIT_ON_END == yes ] then exit fi # End of autostart fi