aboutsummaryrefslogtreecommitdiff
path: root/ROMFS/px4fmu_common/init.d/rcS
blob: 6b624b27808fe3c08f36072cf3f7e5b764c0f37b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#!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

#
# 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 2
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 terminal
#
if sercon
then
	echo "USB connected"
else
	# second attempt
	sercon &
fi

#
# 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
		param load /fs/microsd/params
	fi
fi

#
# Start system state indicator
#
if rgbled start
then
	echo "Using external RGB Led"
else
	if blinkm start
	then
		blinkm systemstate
	fi
fi

#
# Check if PX4IO Firmware should be upgraded (from Andrew Tridgell)
#
if [ -f /fs/microsd/px4io.bin ]
then
	echo "PX4IO Firmware found. Checking Upgrade.."
	if cmp /fs/microsd/px4io.bin /fs/microsd/px4io.cur
	then
		echo "No newer version, skipping upgrade."
	else
		echo "Loading /fs/microsd/px4io.bin"
		if px4io update /fs/microsd/px4io.bin > /fs/microsd/px4io.log
		then
			cp /fs/microsd/px4io.bin /fs/microsd/px4io.cur
			echo "Flashed /fs/microsd/px4io.bin OK" >> /fs/microsd/px4io.log
		else
			echo "Failed flashing /fs/microsd/px4io.bin" >> /fs/microsd/px4io.log
			echo "Failed to upgrade px4io firmware - check if px4io is in bootloader mode"
		fi
	fi
fi

#
# Check if auto-setup from one of the standard scripts is wanted
# SYS_AUTOSTART = 0 means no autostart (default)
#
if param compare SYS_AUTOSTART 1
then
	sh /etc/init.d/01_fmu_quad_x
	set MODE custom
fi

if param compare SYS_AUTOSTART 2
then
	sh /etc/init.d/02_io_quad_x
	set MODE custom
fi

if param compare SYS_AUTOSTART 8
then
	sh /etc/init.d/08_ardrone
	set MODE custom
fi

if param compare SYS_AUTOSTART 9
then
	sh /etc/init.d/09_ardrone_flow
	set MODE custom
fi

if param compare SYS_AUTOSTART 10
then
	sh /etc/init.d/10_io_f330
	set MODE custom
fi

if param compare SYS_AUTOSTART 15
then
	sh /etc/init.d/15_io_tbs
	set MODE custom
fi

if param compare SYS_AUTOSTART 30
then
	sh /etc/init.d/30_io_camflyer
	set MODE custom
fi

if param compare SYS_AUTOSTART 31
then
	sh /etc/init.d/31_io_phantom
	set MODE custom
fi

# Try to get an USB console
nshterm /dev/ttyACM0 &

# If none of the autostart scripts triggered, get a minimal setup
if [ $MODE == autostart ]
then
	# Telemetry port is on both FMU boards ttyS1
	mavlink start -b 57600 -d /dev/ttyS1
	usleep 5000

	# Start commander
	commander start

	# Start px4io if present
	if px4io start
	then
		echo "PX4IO driver started"
	else
		if fmu mode_serial
		then
			echo "FMU driver 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

# End of autostart
fi