aboutsummaryrefslogtreecommitdiff
path: root/ROMFS/px4fmu_common/init.d/rcS
blob: ed034877f18537f9864a6d43172333b343981aa5 (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
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
#!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 terminal
	#
	if sercon
	then
		echo "USB connected"
	fi
	
	#
	# Start the ORB (first app to start)
	#
	uorb start
	
	#
	# Load microSD params
	#
	if mtd start
	then
		param select /fs/mtd_params
		if param load /fs/mtd_params
		then
		else
			echo "FAILED LOADING 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
	
	#
	# Start the Commander (needs to be this early for in-air-restarts)
	#
	commander start

	if param compare SYS_AUTOSTART 1000
	then
		sh /etc/init.d/1000_rc_fw_easystar.hil		
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 1001
	then
		sh /etc/init.d/1001_rc_quad.hil
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 1002
	then
		sh /etc/init.d/1002_rc_fw_state.hil
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 1003
	then
		sh /etc/init.d/1003_rc_quad_+.hil
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 1004
	then
		sh /etc/init.d/1004_rc_fw_Rascal110.hil
		set MODE custom
	fi
	
	if [ $MODE != custom ]
	then
		# Try to get an USB console
		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
	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
			else
				echo "PX4IO restart failed"
				echo "PX4IO restart failed" >> $logfile
				tone_alarm MNGGG
				sleep 10
				reboot
			fi
		else
			echo "PX4IO update failed"
			echo "PX4IO update failed" >> $logfile
			tone_alarm MNGGG
		fi
	fi

	set EXIT_ON_END no
	
	#
	# Check if auto-setup from one of the standard scripts is wanted
	# SYS_AUTOSTART = 0 means no autostart (default)
	#
	# AUTOSTART PARTITION:
	#  0   	..	 999		Reserved (historical)
	#  1000	..	 1999		Simulation setups
	#  2000	..	 2999		Standard planes
	#  3000	..	 3999		Flying wing
	#  4000	..	 4999		Quad X
	#  5000	..	 5999		Quad +
	#  6000	..	 6999		Hexa X
	#  7000	..	 7999		Hexa +
	#  8000	..	 8999		Octo X
	#  9000	..	 9999		Octo +
	# 10000	..	10999		Wide arm / H frame
	# 11000	..	11999		Hexa Cox
	# 12000	..	12999		Octo Cox
	
	if param compare SYS_AUTOSTART 4008 8
	then
		sh /etc/init.d/4008_ardrone
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 4009 9
	then
		sh /etc/init.d/4009_ardrone_flow
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 4010 10
	then
		set FRAME_GEOMETRY x
		set FRAME_COUNT 4
		set PWM_MIN 1200
		set PWM_MAX 1900
		set PWM_DISARMED 900
		sh /etc/init.d/4010_dji_f330
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 4011 11
	then
		sh /etc/init.d/4011_dji_f450
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 4012
	then
		sh /etc/init.d/666_fmu_q_x550
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 6012 12
	then
		set MIXER /etc/mixers/FMU_hex_x.mix
		sh /etc/init.d/rc.hexa
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 7013 13
	then
		set MIXER /etc/mixers/FMU_hex_+.mix
		sh /etc/init.d/rc.hexa
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 8001
	then
		set MIXER /etc/mixers/FMU_octo_x.mix
		sh /etc/init.d/rc.octo
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 9001
	then
		set MIXER /etc/mixers/FMU_octo_+.mix
		sh /etc/init.d/rc.octo
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 12001
	then
		set MIXER /etc/mixers/FMU_octo_cox.mix
		sh /etc/init.d/rc.octo
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 10015 15
	then
		sh /etc/init.d/10015_tbs_discovery
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 10016 16
	then
		sh /etc/init.d/10016_3dr_iris
		set MODE custom
	fi

	# PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 X Frame
	if param compare SYS_AUTOSTART 4017 17
	then
		set MKBLCTRL_MODE no
		set MKBLCTRL_FRAME x
		sh /etc/init.d/rc.custom_dji_f330_mkblctrl
		set MODE custom
	fi

	# PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 + Frame
	if param compare SYS_AUTOSTART 5018 18
	then
		set MKBLCTRL_MODE no
		set MKBLCTRL_FRAME +
		sh /etc/init.d/rc.custom_dji_f330_mkblctrl
		set MODE custom
	fi

	# PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 X Frame Mikrokopter-Addressing
	if param compare SYS_AUTOSTART 4019 19
	then
		set MKBLCTRL_MODE yes
		set MKBLCTRL_FRAME x
		sh /etc/init.d/rc.custom_dji_f330_mkblctrl
		set MODE custom
	fi

	# PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 + Frame Mikrokopter-Addressing
	if param compare SYS_AUTOSTART 5020 20
	then
		set MKBLCTRL_MODE yes
		set MKBLCTRL_FRAME +
		sh /etc/init.d/rc.custom_dji_f330_mkblctrl
		set MODE custom
	fi

	# PX4FMU v1 with IO + PPM-based ESCs on Quad X-shape frame
	if param compare SYS_AUTOSTART 4021 21
	then
		set FRAME_GEOMETRY x
		set ESC_MAKER afro
		sh /etc/init.d/rc.custom_io_esc
		set MODE custom
	fi

	# PX4FMU v1 with IO + PPM-based ESCs on Quad X-shape frame
	if param compare SYS_AUTOSTART 10022 22
	then
		set FRAME_GEOMETRY w
		sh /etc/init.d/rc.custom_io_esc
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 3030 30
	then
		sh /etc/init.d/3030_io_camflyer
		set MODE custom
	fi

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

	if param compare SYS_AUTOSTART 3033 33
	then
		sh /etc/init.d/3033_io_wingwing
		set MODE custom
	fi

        if param compare SYS_AUTOSTART 3034 34
        then
                sh /etc/init.d/3034_io_fx79
                set MODE custom
        fi

	if param compare SYS_AUTOSTART 40
	then
		sh /etc/init.d/40_io_segway
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 2100 100
	then
		sh /etc/init.d/2100_mpx_easystar
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 2101 101
	then
		sh /etc/init.d/2101_hk_bixler
		set MODE custom
	fi

	if param compare SYS_AUTOSTART 2102 102
	then
		sh /etc/init.d/2102_3dr_skywalker
		set MODE custom
	fi
	
	if param compare SYS_AUTOSTART 800
	then
		sh /etc/init.d/800_sdlogger
		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
		# 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