aboutsummaryrefslogtreecommitdiff
path: root/ROMFS/px4fmu_common/init.d/rcS
blob: c4abd07d2ecd7c8ff87be41d8f9348e6f02a92fe (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
219
220
221
222
#!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

	# Try to get an USB console
	nshterm /dev/ttyACM0 &
	
	#
	# 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
	
	# Start any custom extensions that might be missing
	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
		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