diff --git a/ROMFS/px4fmu_common/init.d/1000_rc_fw_easystar.hil b/ROMFS/px4fmu_common/init.d/1000_rc_fw_easystar.hil index 1e3dc6c5f6..7938c47bae 100644 --- a/ROMFS/px4fmu_common/init.d/1000_rc_fw_easystar.hil +++ b/ROMFS/px4fmu_common/init.d/1000_rc_fw_easystar.hil @@ -1,7 +1,15 @@ #!nsh # -# HILStar -# +# @name HILStar (XPlane) +# +# @type Simulation +# +# @output MAIN1 aileron +# @output MAIN2 elevator +# @output MAIN3 rudder +# @output MAIN4 throttle +# +# @maintainer Lorenz Meier # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/10015_tbs_discovery b/ROMFS/px4fmu_common/init.d/10015_tbs_discovery index 0dd4837644..ce5e1c71dc 100644 --- a/ROMFS/px4fmu_common/init.d/10015_tbs_discovery +++ b/ROMFS/px4fmu_common/init.d/10015_tbs_discovery @@ -1,8 +1,10 @@ #!nsh # -# Team Blacksheep Discovery Quadcopter +# @name Team Blacksheep Discovery Quadcopter # -# Anton Babushkin , Simon Wilks +# @type Quadrotor Wide +# +# @maintainer Anton Babushkin , Simon Wilks # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/10016_3dr_iris b/ROMFS/px4fmu_common/init.d/10016_3dr_iris index 68428be6f6..a2536e5418 100644 --- a/ROMFS/px4fmu_common/init.d/10016_3dr_iris +++ b/ROMFS/px4fmu_common/init.d/10016_3dr_iris @@ -1,8 +1,10 @@ #!nsh # -# 3DR Iris Quadcopter +# @name 3DR Iris Quadrotor # -# Anton Babushkin +# @type Quadrotor Wide +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/10017_steadidrone_qu4d b/ROMFS/px4fmu_common/init.d/10017_steadidrone_qu4d index 36d387c759..7e27043156 100644 --- a/ROMFS/px4fmu_common/init.d/10017_steadidrone_qu4d +++ b/ROMFS/px4fmu_common/init.d/10017_steadidrone_qu4d @@ -1,8 +1,10 @@ #!nsh # -# Steadidrone QU4D +# @name Steadidrone QU4D # -# Thomas Gubler +# @type Quadrotor Wide +# +# @maintainer Thomas Gubler # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/10018_tbs_endurance b/ROMFS/px4fmu_common/init.d/10018_tbs_endurance index e83a864d8d..fd74e17807 100644 --- a/ROMFS/px4fmu_common/init.d/10018_tbs_endurance +++ b/ROMFS/px4fmu_common/init.d/10018_tbs_endurance @@ -1,10 +1,12 @@ #!nsh # -# Team Blacksheep Discovery Long Range Quadcopter +# @name Team Blacksheep Discovery Long Range Quadcopter # # Setup: 15 x 5" Props, 6S 4000mAh TBS LiPo, TBS 30A ESCs, TBS 400kV Motors # -# Simon Wilks +# @type Quadrotor Wide +# +# @maintainer Simon Wilks # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/10019_sk450_deadcat b/ROMFS/px4fmu_common/init.d/10019_sk450_deadcat index b91de228c5..4f22ddc436 100644 --- a/ROMFS/px4fmu_common/init.d/10019_sk450_deadcat +++ b/ROMFS/px4fmu_common/init.d/10019_sk450_deadcat @@ -1,8 +1,10 @@ #!nsh # -# HobbyKing SK450 DeadCat modification +# @name HobbyKing SK450 DeadCat modification # -# Anton Matosov +# @type Quadrotor Wide +# +# @maintainer Anton Matosov # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/1001_rc_quad_x.hil b/ROMFS/px4fmu_common/init.d/1001_rc_quad_x.hil index 03b6b30d27..e1f2cdfe8d 100644 --- a/ROMFS/px4fmu_common/init.d/1001_rc_quad_x.hil +++ b/ROMFS/px4fmu_common/init.d/1001_rc_quad_x.hil @@ -1,8 +1,10 @@ #!nsh # -# HIL Quadcopter X +# @name HIL Quadcopter X # -# Anton Babushkin +# @type Simulation +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/1003_rc_quad_+.hil b/ROMFS/px4fmu_common/init.d/1003_rc_quad_+.hil index 7e651216d0..7aa888c763 100644 --- a/ROMFS/px4fmu_common/init.d/1003_rc_quad_+.hil +++ b/ROMFS/px4fmu_common/init.d/1003_rc_quad_+.hil @@ -1,8 +1,10 @@ #!nsh # -# HIL Quadcopter + +# @name HIL Quadcopter + # -# Anton Babushkin +# @type Simulation +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/1004_rc_fw_Rascal110.hil b/ROMFS/px4fmu_common/init.d/1004_rc_fw_Rascal110.hil index 0909208478..57bcd24d02 100644 --- a/ROMFS/px4fmu_common/init.d/1004_rc_fw_Rascal110.hil +++ b/ROMFS/px4fmu_common/init.d/1004_rc_fw_Rascal110.hil @@ -1,8 +1,10 @@ #!nsh # -# HIL Rascal 110 (Flightgear) +# @name HIL Rascal 110 (Flightgear) # -# Thomas Gubler +# @type Simulation +# +# @maintainer Thomas Gubler # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/1005_rc_fw_Malolo1.hil b/ROMFS/px4fmu_common/init.d/1005_rc_fw_Malolo1.hil index 15e5cf21d8..5e0b6cd746 100644 --- a/ROMFS/px4fmu_common/init.d/1005_rc_fw_Malolo1.hil +++ b/ROMFS/px4fmu_common/init.d/1005_rc_fw_Malolo1.hil @@ -1,8 +1,10 @@ #!nsh # -# HIL Malolo 1 (Flightgear) +# @name HIL Malolo 1 (Flightgear) # -# Thomas Gubler +# @type Simulation +# +# @maintainer Thomas Gubler # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/11001_hexa_cox b/ROMFS/px4fmu_common/init.d/11001_hexa_cox index 0bb8cb52ee..16d34ecab6 100644 --- a/ROMFS/px4fmu_common/init.d/11001_hexa_cox +++ b/ROMFS/px4fmu_common/init.d/11001_hexa_cox @@ -1,6 +1,8 @@ #!nsh # -# Generic 10" Hexa coaxial geometry +# @name Generic Hexa coaxial geometry +# +# @type Hexarotor Coaxial # # Lorenz Meier # diff --git a/ROMFS/px4fmu_common/init.d/12001_octo_cox b/ROMFS/px4fmu_common/init.d/12001_octo_cox index 16e86fd5fa..431d883155 100644 --- a/ROMFS/px4fmu_common/init.d/12001_octo_cox +++ b/ROMFS/px4fmu_common/init.d/12001_octo_cox @@ -1,8 +1,10 @@ #!nsh # -# Generic 10" Octo coaxial geometry +# @name Generic 10" Octo coaxial geometry # -# Lorenz Meier +# @type Octorotor Coaxial +# +# @maintainer Lorenz Meier # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/13001_caipirinha_vtol b/ROMFS/px4fmu_common/init.d/13001_caipirinha_vtol index 912202f962..e9f48d401b 100644 --- a/ROMFS/px4fmu_common/init.d/13001_caipirinha_vtol +++ b/ROMFS/px4fmu_common/init.d/13001_caipirinha_vtol @@ -1,7 +1,12 @@ +#!nsh # -# Generic configuration file for caipirinha VTOL version +# @name Duorotor Tailsitter # -# Roman Bapst +# Generic configuration file for a tailsitter with motors in tandem configuration. +# +# @type VTOL Tailsitter +# +# @maintainer Roman Bapst # sh /etc/init.d/rc.vtol_defaults diff --git a/ROMFS/px4fmu_common/init.d/13002_firefly6 b/ROMFS/px4fmu_common/init.d/13002_firefly6 index 963341d138..1ec65dff3e 100644 --- a/ROMFS/px4fmu_common/init.d/13002_firefly6 +++ b/ROMFS/px4fmu_common/init.d/13002_firefly6 @@ -1,8 +1,10 @@ #!nsh # -# Generic configuration file for BirdsEyeView Aerobotics FireFly6 +# @name BirdsEyeView Aerobotics FireFly6 # -# Roman Bapst +# @type VTOL Tiltrotor +# +# @maintainer Roman Bapst # sh /etc/init.d/rc.vtol_defaults diff --git a/ROMFS/px4fmu_common/init.d/13003_quad_tailsitter b/ROMFS/px4fmu_common/init.d/13003_quad_tailsitter index 17560526a3..b41ad749cf 100644 --- a/ROMFS/px4fmu_common/init.d/13003_quad_tailsitter +++ b/ROMFS/px4fmu_common/init.d/13003_quad_tailsitter @@ -1,7 +1,12 @@ +#!nsh +# +# @name Quadrotor X Tailsitter # # Generic configuration file for a tailsitter with motors in X configuration. # -# Roman Bapst +# @type VTOL Tailsitter +# +# @maintainer Roman Bapst # sh /etc/init.d/rc.vtol_defaults diff --git a/ROMFS/px4fmu_common/init.d/13004_quad+_tailsitter b/ROMFS/px4fmu_common/init.d/13004_quad+_tailsitter new file mode 100644 index 0000000000..672a809354 --- /dev/null +++ b/ROMFS/px4fmu_common/init.d/13004_quad+_tailsitter @@ -0,0 +1,23 @@ +#!nsh +# +# @name Quadrotor + Tailsitter +# +# Generic configuration file for a tailsitter with motors in X configuration. +# +# @type VTOL Tailsitter +# +# @maintainer Roman Bapst +# + +sh /etc/init.d/rc.vtol_defaults + +set MIXER quad_+_vtol + +set PWM_OUT 1234 +set PWM_MAX 2000 +set PWM_RATE 400 +set MAV_TYPE 20 +param set VT_MOT_COUNT 4 +param set VT_IDLE_PWM_MC 1080 +param set VT_TYPE 0 +param set VT_ELEV_MC_LOCK 1 diff --git a/ROMFS/px4fmu_common/init.d/14001_tri_y_yaw+ b/ROMFS/px4fmu_common/init.d/14001_tri_y_yaw+ index 3bb68ecf3f..4a85405199 100644 --- a/ROMFS/px4fmu_common/init.d/14001_tri_y_yaw+ +++ b/ROMFS/px4fmu_common/init.d/14001_tri_y_yaw+ @@ -1,9 +1,12 @@ #!nsh # -# Generic Tricopter Y Geometry +# @name Generic Tricopter Y Geometry +# # Yaw Servo +Output ==> +Yaw Vehicle Rotation # -# Trent Lukaczyk +# @type Tricopter Y+ +# +# @maintainer Trent Lukaczyk # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/14002_tri_y_yaw- b/ROMFS/px4fmu_common/init.d/14002_tri_y_yaw- index fd4d476476..a3443e43ad 100644 --- a/ROMFS/px4fmu_common/init.d/14002_tri_y_yaw- +++ b/ROMFS/px4fmu_common/init.d/14002_tri_y_yaw- @@ -1,9 +1,12 @@ #!nsh # -# Generic Tricopter Y Geometry +# @name Generic Tricopter Y Geometry +# # Yaw Servo +Output ==> -Yaw Vehicle Rotation # -# Trent Lukaczyk +# @type Tricopter Y- +# +# @maintainer Trent Lukaczyk # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/2100_mpx_easystar b/ROMFS/px4fmu_common/init.d/2100_mpx_easystar index 3ab2ac3d1a..12c12aec92 100644 --- a/ROMFS/px4fmu_common/init.d/2100_mpx_easystar +++ b/ROMFS/px4fmu_common/init.d/2100_mpx_easystar @@ -1,6 +1,10 @@ #!nsh # -# MPX EasyStar Plane +# @name Multiplex Easystar +# +# @type Standard Plane +# +# @maintainer Lorenz Meier # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/2101_fw_AERT b/ROMFS/px4fmu_common/init.d/2101_fw_AERT index 05ee57ffa0..19a47cda8c 100644 --- a/ROMFS/px4fmu_common/init.d/2101_fw_AERT +++ b/ROMFS/px4fmu_common/init.d/2101_fw_AERT @@ -1,4 +1,21 @@ #!nsh +# +# @name Standard AERT Plane +# +# @type Standard Plane +# +# @output MAIN1 aileron +# @output MAIN2 elevator +# @output MAIN4 rudder +# @output MAIN3 throttle +# @output MAIN5 flaps +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Lorenz Meier +# sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/2102_3dr_skywalker b/ROMFS/px4fmu_common/init.d/2102_3dr_skywalker index 906f4b1ccf..e2e1b307f4 100644 --- a/ROMFS/px4fmu_common/init.d/2102_3dr_skywalker +++ b/ROMFS/px4fmu_common/init.d/2102_3dr_skywalker @@ -1,4 +1,21 @@ #!nsh +# +# @name Skywalker (3DR or Generic) +# +# @type Standard Plane +# +# @output MAIN1 aileron +# @output MAIN2 elevator +# @output MAIN4 rudder +# @output MAIN3 throttle +# @output MAIN5 flaps +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Lorenz Meier +# sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/2103_skyhunter_1800 b/ROMFS/px4fmu_common/init.d/2103_skyhunter_1800 index 2433ab4f40..133ffe5722 100644 --- a/ROMFS/px4fmu_common/init.d/2103_skyhunter_1800 +++ b/ROMFS/px4fmu_common/init.d/2103_skyhunter_1800 @@ -1,4 +1,19 @@ #!nsh +# +# @name Skyhunter 1800 +# +# @type Standard Plane +# +# @output MAIN1 aileron +# @output MAIN2 elevator +# @output MAIN4 throttle +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Lorenz Meier +# sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/2104_fw_AETR b/ROMFS/px4fmu_common/init.d/2104_fw_AETR index bb4390b1d3..083eb42330 100644 --- a/ROMFS/px4fmu_common/init.d/2104_fw_AETR +++ b/ROMFS/px4fmu_common/init.d/2104_fw_AETR @@ -1,4 +1,21 @@ #!nsh +# +# @name Standard AETR Plane +# +# @type Standard Plane +# +# @output MAIN1 aileron +# @output MAIN2 elevator +# @output MAIN3 throttle +# @output MAIN4 rudder +# @output MAIN5 flaps +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Lorenz Meier +# sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/3030_io_camflyer b/ROMFS/px4fmu_common/init.d/3030_io_camflyer index 9fe5002de9..a15d0ac6d0 100644 --- a/ROMFS/px4fmu_common/init.d/3030_io_camflyer +++ b/ROMFS/px4fmu_common/init.d/3030_io_camflyer @@ -1,4 +1,21 @@ #!nsh +# +# @name IO Camflyer +# +# @url https://pixhawk.org/platforms/planes/bormatec_camflyer_q +# +# @type Flying Wing +# +# @output MAIN1 left aileron +# @output MAIN2 right aileron +# @output MAIN4 throttle +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Simon Wilks +# sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/3031_phantom b/ROMFS/px4fmu_common/init.d/3031_phantom index 43db1ed6de..84d9a9f39e 100644 --- a/ROMFS/px4fmu_common/init.d/3031_phantom +++ b/ROMFS/px4fmu_common/init.d/3031_phantom @@ -1,8 +1,20 @@ #!nsh # -# Phantom FPV Flying Wing +# @name Phantom FPV Flying Wing # -# Simon Wilks +# @url https://pixhawk.org/platforms/planes/z-84_wing_wing +# +# @type Flying Wing +# +# @output MAIN1 left aileron +# @output MAIN2 right aileron +# @output MAIN4 throttle +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Simon Wilks # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/3032_skywalker_x5 b/ROMFS/px4fmu_common/init.d/3032_skywalker_x5 index 4950c3183f..3dedf8170d 100644 --- a/ROMFS/px4fmu_common/init.d/3032_skywalker_x5 +++ b/ROMFS/px4fmu_common/init.d/3032_skywalker_x5 @@ -1,8 +1,20 @@ #!nsh # -# Skywalker X5 Flying Wing +# @name Skywalker X5 Flying Wing # -# Thomas Gubler , Julian Oes +# @url https://pixhawk.org/platforms/planes/skywalker_x5 +# +# @type Flying Wing +# +# @output MAIN1 left aileron +# @output MAIN2 right aileron +# @output MAIN4 throttle +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Thomas Gubler , Julian Oes # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/3033_wingwing b/ROMFS/px4fmu_common/init.d/3033_wingwing index 3c2312fc7d..25a14312f3 100644 --- a/ROMFS/px4fmu_common/init.d/3033_wingwing +++ b/ROMFS/px4fmu_common/init.d/3033_wingwing @@ -1,8 +1,20 @@ #!nsh # -# Wing Wing (aka Z-84) Flying Wing +# @name Wing Wing (aka Z-84) Flying Wing # -# Simon Wilks +# @url https://pixhawk.org/platforms/planes/z-84_wing_wing +# +# @type Flying Wing +# +# @output MAIN1 left aileron +# @output MAIN2 right aileron +# @output MAIN4 throttle +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Simon Wilks # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/3034_fx79 b/ROMFS/px4fmu_common/init.d/3034_fx79 index 9f45c636b0..353da2ffc4 100644 --- a/ROMFS/px4fmu_common/init.d/3034_fx79 +++ b/ROMFS/px4fmu_common/init.d/3034_fx79 @@ -1,8 +1,10 @@ #!nsh # -# FX-79 Buffalo Flying Wing +# @name FX-79 Buffalo Flying Wing # -# Simon Wilks +# @type Flying Wing +# +# @maintainer Simon Wilks # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/3035_viper b/ROMFS/px4fmu_common/init.d/3035_viper index 0f5f5502aa..c216abf7b2 100644 --- a/ROMFS/px4fmu_common/init.d/3035_viper +++ b/ROMFS/px4fmu_common/init.d/3035_viper @@ -1,8 +1,11 @@ +# #!nsh # -# Viper +# @name Viper # -# Simon Wilks +# @type Flying Wing +# +# @maintainer Simon Wilks # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/3100_tbs_caipirinha b/ROMFS/px4fmu_common/init.d/3100_tbs_caipirinha index 4f3c593cab..5aa004db1b 100644 --- a/ROMFS/px4fmu_common/init.d/3100_tbs_caipirinha +++ b/ROMFS/px4fmu_common/init.d/3100_tbs_caipirinha @@ -1,8 +1,10 @@ #!nsh # -# TBS Caipirinha +# @name TBS Caipirinha # -# Lorenz Meier +# @type Flying Wing +# +# @maintainer Lorenz Meier # sh /etc/init.d/rc.fw_defaults diff --git a/ROMFS/px4fmu_common/init.d/4001_quad_x b/ROMFS/px4fmu_common/init.d/4001_quad_x index e0538160f0..8f7c8da356 100644 --- a/ROMFS/px4fmu_common/init.d/4001_quad_x +++ b/ROMFS/px4fmu_common/init.d/4001_quad_x @@ -1,8 +1,14 @@ #!nsh # -# Generic 10" Quad X geometry +# @name Generic Quadrotor X config # -# Lorenz Meier +# @type Quadrotor x +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Lorenz Meier # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/4008_ardrone b/ROMFS/px4fmu_common/init.d/4008_ardrone index c3358ef4c8..9d3e4427be 100644 --- a/ROMFS/px4fmu_common/init.d/4008_ardrone +++ b/ROMFS/px4fmu_common/init.d/4008_ardrone @@ -1,6 +1,10 @@ #!nsh # -# ARDrone +# @name AR.Drone Frame +# +# @type Quadrotor x +# +# @maintainer Lorenz Meier # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/4010_dji_f330 b/ROMFS/px4fmu_common/init.d/4010_dji_f330 index a530d75ba9..4303320ffe 100644 --- a/ROMFS/px4fmu_common/init.d/4010_dji_f330 +++ b/ROMFS/px4fmu_common/init.d/4010_dji_f330 @@ -1,8 +1,14 @@ #!nsh # -# DJI Flame Wheel F330 +# @name DJI Flame Wheel F330 # -# Anton Babushkin +# @type Quadrotor x +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Lorenz Meier # sh /etc/init.d/4001_quad_x diff --git a/ROMFS/px4fmu_common/init.d/4011_dji_f450 b/ROMFS/px4fmu_common/init.d/4011_dji_f450 index dafa3bf7bf..55e5237945 100644 --- a/ROMFS/px4fmu_common/init.d/4011_dji_f450 +++ b/ROMFS/px4fmu_common/init.d/4011_dji_f450 @@ -1,8 +1,14 @@ #!nsh # -# DJI Flame Wheel F450 +# @name DJI Flame Wheel F450 # -# Lorenz Meier +# @type Quadrotor x +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Lorenz Meier # sh /etc/init.d/4001_quad_x diff --git a/ROMFS/px4fmu_common/init.d/4012_quad_x_can b/ROMFS/px4fmu_common/init.d/4012_quad_x_can index c6341a4f74..1ffffea22b 100644 --- a/ROMFS/px4fmu_common/init.d/4012_quad_x_can +++ b/ROMFS/px4fmu_common/init.d/4012_quad_x_can @@ -1,8 +1,10 @@ #!nsh # -# F450-sized quadrotor with CAN +# @name F450-sized quadrotor with CAN # -# Pavel Kirienko +# @type Quadrotor x +# +# @maintainer Pavel Kirienko # sh /etc/init.d/4001_quad_x diff --git a/ROMFS/px4fmu_common/init.d/4020_hk_micro_pcb b/ROMFS/px4fmu_common/init.d/4020_hk_micro_pcb index aec0c62f8f..4fd3a50c28 100644 --- a/ROMFS/px4fmu_common/init.d/4020_hk_micro_pcb +++ b/ROMFS/px4fmu_common/init.d/4020_hk_micro_pcb @@ -1,11 +1,12 @@ #!nsh # -# Hobbyking Micro Integrated PCB Quadcopter +# @name Hobbyking Micro Integrated PCB Quadcopter # with SimonK ESC firmware and Mystery A1510 motors # -# Thomas Gubler +# @type Quadrotor x +# +# @maintainer Thomas Gubler # -echo "HK Micro PCB Quad" sh /etc/init.d/4001_quad_x diff --git a/ROMFS/px4fmu_common/init.d/50001_axialracing_ax10 b/ROMFS/px4fmu_common/init.d/50001_axialracing_ax10 index a36bac5cc8..8b60805a2f 100644 --- a/ROMFS/px4fmu_common/init.d/50001_axialracing_ax10 +++ b/ROMFS/px4fmu_common/init.d/50001_axialracing_ax10 @@ -1,5 +1,9 @@ #!nsh # +# @name Axial Racing AX10 +# +# @type Rover +# # loading default values for the axialracing ax10 # diff --git a/ROMFS/px4fmu_common/init.d/5001_quad_+ b/ROMFS/px4fmu_common/init.d/5001_quad_+ index e51f9cf89d..8c5eed28cd 100644 --- a/ROMFS/px4fmu_common/init.d/5001_quad_+ +++ b/ROMFS/px4fmu_common/init.d/5001_quad_+ @@ -1,8 +1,10 @@ #!nsh # -# Generic 10" Quad + geometry +# @name Generic 10" Quad + geometry # -# Anton Babushkin +# @type Quadrotor + +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/6001_hexa_x b/ROMFS/px4fmu_common/init.d/6001_hexa_x index 7a6dda648a..584c4a381c 100644 --- a/ROMFS/px4fmu_common/init.d/6001_hexa_x +++ b/ROMFS/px4fmu_common/init.d/6001_hexa_x @@ -1,8 +1,14 @@ #!nsh # -# Generic 10" Hexa X geometry +# @name Generic Hexarotor x geometry # -# Anton Babushkin +# @type Hexarotor x +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/7001_hexa_+ b/ROMFS/px4fmu_common/init.d/7001_hexa_+ index dd9589d614..11d732471a 100644 --- a/ROMFS/px4fmu_common/init.d/7001_hexa_+ +++ b/ROMFS/px4fmu_common/init.d/7001_hexa_+ @@ -1,8 +1,14 @@ #!nsh # -# Generic 10" Hexa + geometry +# @name Generic Hexarotor + geometry # -# Anton Babushkin +# @type Hexarotor + +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/8001_octo_x b/ROMFS/px4fmu_common/init.d/8001_octo_x index 7cbb3ddfcd..272e093550 100644 --- a/ROMFS/px4fmu_common/init.d/8001_octo_x +++ b/ROMFS/px4fmu_common/init.d/8001_octo_x @@ -1,8 +1,14 @@ #!nsh # -# Generic 10" Octo X geometry +# @name Generic Octocopter X geometry # -# Anton Babushkin +# @type Octorotor x +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/9001_octo_+ b/ROMFS/px4fmu_common/init.d/9001_octo_+ index 5d608d593c..d0db57cf17 100644 --- a/ROMFS/px4fmu_common/init.d/9001_octo_+ +++ b/ROMFS/px4fmu_common/init.d/9001_octo_+ @@ -1,8 +1,14 @@ #!nsh # -# Generic 10" Octo + geometry +# @name Generic Octocopter + geometry # -# Anton Babushkin +# @type Octorotor + +# +# @output AUX1 feed-through of RC AUX1 channel +# @output AUX2 feed-through of RC AUX2 channel +# @output AUX3 feed-through of RC AUX3 channel +# +# @maintainer Anton Babushkin # sh /etc/init.d/rc.mc_defaults diff --git a/ROMFS/px4fmu_common/init.d/rc.autostart b/ROMFS/px4fmu_common/init.d/rc.autostart index ec405accac..0bb66a4b49 100644 --- a/ROMFS/px4fmu_common/init.d/rc.autostart +++ b/ROMFS/px4fmu_common/init.d/rc.autostart @@ -282,6 +282,14 @@ then sh /etc/init.d/13003_quad_tailsitter fi +# +# Tailsitter with 4 motors in + config +# +if param compare SYS_AUTOSTART 13004 +then + sh /etc/init.d/13004_quad+_tailsitter +fi + # # TriCopter Y Yaw+ # diff --git a/ROMFS/px4fmu_common/mixers/quad_+_vtol.main.mix b/ROMFS/px4fmu_common/mixers/quad_+_vtol.main.mix new file mode 100644 index 0000000000..1f79661f9a --- /dev/null +++ b/ROMFS/px4fmu_common/mixers/quad_+_vtol.main.mix @@ -0,0 +1,28 @@ +Mixer for Tailsitter with + motor configuration and elevons +=========================================================== + +This file defines a single mixer for tailsitter with motors in X configuration. All controls +are mixed 100%. + +R: 4+ 10000 10000 10000 0 + +# mixer for the elevons +M: 2 +O: 10000 10000 0 -10000 10000 +S: 1 0 10000 10000 0 -10000 10000 +S: 1 1 10000 10000 0 -10000 10000 + +M: 2 +O: 10000 10000 0 -10000 10000 +S: 1 0 10000 10000 0 -10000 10000 +S: 1 1 -10000 -10000 0 -10000 10000 + +# mixer for canard surface +M: 2 +O: 10000 10000 0 -10000 10000 +S: 1 1 -10000 -10000 0 -10000 10000 + +# mixer for rudder +M: 2 +O: 10000 10000 0 -10000 10000 +S: 1 2 -10000 -10000 0 -10000 10000 diff --git a/Tools/px4airframes/README.md b/Tools/px4airframes/README.md new file mode 100644 index 0000000000..50dcd2e296 --- /dev/null +++ b/Tools/px4airframes/README.md @@ -0,0 +1 @@ +This folder contains a python library used by px_process_params.py diff --git a/Tools/px4airframes/__init__.py b/Tools/px4airframes/__init__.py new file mode 100644 index 0000000000..3a9f1e2c6d --- /dev/null +++ b/Tools/px4airframes/__init__.py @@ -0,0 +1 @@ +__all__ = ["srcscanner", "srcparser", "xmlout", "dokuwikiout", "dokuwikirpc"] \ No newline at end of file diff --git a/Tools/px4airframes/srcparser.py b/Tools/px4airframes/srcparser.py new file mode 100644 index 0000000000..130b0f24cf --- /dev/null +++ b/Tools/px4airframes/srcparser.py @@ -0,0 +1,342 @@ +import sys +import re + +class ParameterGroup(object): + """ + Single parameter group + """ + def __init__(self, name): + self.name = name + self.params = [] + + def AddParameter(self, param): + """ + Add parameter to the group + """ + self.params.append(param) + + def GetName(self): + """ + Get parameter group name + """ + return self.name + + def GetParams(self): + """ + Returns the parsed list of parameters. Every parameter is a Parameter + object. Note that returned object is not a copy. Modifications affect + state of the parser. + """ + return sorted(self.params, + key=lambda x: x.GetFieldValue("code")) + +class Parameter(object): + """ + Single parameter + """ + + # Define sorting order of the fields + priority = { + "board": 9, + "short_desc": 8, + "long_desc": 7, + "min": 5, + "max": 4, + "unit": 3, + # all others == 0 (sorted alphabetically) + } + + def __init__(self, name, airframe_type, airframe_id, maintainer): + self.fields = {} + self.outputs = {} + self.name = name + self.type = airframe_type + self.id = airframe_id + self.maintainer = maintainer + + def GetName(self): + return self.name + + def GetType(self): + return self.type + + def GetId(self): + return self.id + + def GetMaintainer(self): + return self.maintainer + + def SetField(self, code, value): + """ + Set named field value + """ + self.fields[code] = value + + def SetOutput(self, code, value): + """ + Set named output value + """ + self.outputs[code] = value + + def GetFieldCodes(self): + """ + Return list of existing field codes in convenient order + """ + keys = self.fields.keys() + keys = sorted(keys) + keys = sorted(keys, key=lambda x: self.priority.get(x, 0), reverse=True) + return keys + + def GetFieldValue(self, code): + """ + Return value of the given field code or None if not found. + """ + fv = self.fields.get(code) + if not fv: + # required because python 3 sorted does not accept None + return "" + return self.fields.get(code) + + def GetOutputCodes(self): + """ + Return list of existing output codes in convenient order + """ + keys = self.outputs.keys() + keys = sorted(keys) + keys = sorted(keys, key=lambda x: self.priority.get(x, 0), reverse=True) + return keys + + def GetOutputValue(self, code): + """ + Return value of the given output code or None if not found. + """ + fv = self.outputs.get(code) + if not fv: + # required because python 3 sorted does not accept None + return "" + return self.outputs.get(code) + +class SourceParser(object): + """ + Parses provided data and stores all found parameters internally. + """ + + re_split_lines = re.compile(r'[\r\n]+') + re_comment_start = re.compile(r'^\#\s') + re_comment_content = re.compile(r'^\#\s*(.*)') + re_comment_tag = re.compile(r'@([a-zA-Z][a-zA-Z0-9_]*)\s*(.*)') + re_comment_end = re.compile(r'(.*?)\s*\#\n/') + re_cut_type_specifier = re.compile(r'[a-z]+$') + re_is_a_number = re.compile(r'^-?[0-9\.]') + re_remove_dots = re.compile(r'\.+$') + re_remove_carriage_return = re.compile('\n+') + + valid_tags = set(["url", "maintainer", "output", "name", "type"]) + + # Order of parameter groups + priority = { + # All other groups = 0 (sort alphabetically) + "Miscellaneous": -10 + } + + def __init__(self): + self.param_groups = {} + + def GetSupportedExtensions(self): + """ + Returns list of supported file extensions that can be parsed by this + parser. The parser uses any extension. + """ + return [""] + + def Parse(self, path, contents): + """ + Incrementally parse program contents and append all found airframes + to the list. + """ + + airframe_id = None + airframe_id = path.rsplit('/',1)[1].split('_',1)[0] + + # Skip if not numeric + if (not self.IsNumber(airframe_id)): + return True + + # This code is essentially a comment-parsing grammar. "state" + # represents parser state. It contains human-readable state + # names. + state = None + tags = {} + outputs = {} + for line in self.re_split_lines.split(contents): + line = line.strip() + # Ignore empty lines + if line == "": + continue + if state is None and self.re_comment_start.match(line): + state = "wait-short" + short_desc = None + long_desc = None + if state is not None and state != "comment-processed": + m = self.re_comment_end.search(line) + if m: + line = m.group(1) + last_comment_line = True + else: + last_comment_line = False + m = self.re_comment_content.match(line) + if m: + comment_content = m.group(1) + if comment_content == "": + # When short comment ends with empty comment line, + # start waiting for the next part - long comment. + if state == "wait-short-end": + state = "wait-long" + else: + m = self.re_comment_tag.match(comment_content) + if m: + tag, desc = m.group(1, 2) + if (tag == "output"): + key, text = desc.split(' ', 1) + outputs[key] = text; + else: + tags[tag] = desc + current_tag = tag + state = "wait-tag-end" + elif state == "wait-short": + # Store first line of the short description + short_desc = comment_content + state = "wait-short-end" + elif state == "wait-short-end": + # Append comment line to the short description + short_desc += "\n" + comment_content + elif state == "wait-long": + # Store first line of the long description + long_desc = comment_content + state = "wait-long-end" + elif state == "wait-long-end": + # Append comment line to the long description + long_desc += "\n" + comment_content + elif state == "wait-tag-end": + # Append comment line to the tag text + tags[current_tag] += "\n" + comment_content + else: + raise AssertionError( + "Invalid parser state: %s" % state) + elif not last_comment_line: + # Invalid comment line (inside comment, but not starting with + # "*" or "*/". Reset parsed content. + state = None + if last_comment_line: + state = "comment-processed" + else: + state = None + + # Process parsed content + airframe_type = None + maintainer = "John Doe " + airframe_name = None + + # Done with file, store + for tag in tags: + if tag == "maintainer": + maintainer = tags[tag] + elif tag == "type": + airframe_type = tags[tag] + elif tag == "name": + airframe_name = tags[tag] + elif tag not in self.valid_tags: + sys.stderr.write("Aborting due to invalid documentation tag: '%s'\n" % tag) + return False + + # Sanity check + if airframe_type == None: + sys.stderr.write("Aborting due to missing @type tag in file: '%s'\n" % path) + return False + + if airframe_name == None: + sys.stderr.write("Aborting due to missing @name tag in file: '%s'\n" % path) + return False + + # We already know this is an airframe config, so add it + param = Parameter(airframe_name, airframe_type, airframe_id, maintainer) + + # Done with file, store + for tag in tags: + if tag == "maintainer": + maintainer = tags[tag] + if tag == "type": + airframe_type = tags[tag] + if tag == "name": + airframe_name = tags[tag] + else: + param.SetField(tag, tags[tag]) + + # Store outputs + for output in outputs: + param.SetOutput(output, outputs[output]) + + # Store the parameter + if airframe_type not in self.param_groups: + self.param_groups[airframe_type] = ParameterGroup(airframe_type) + self.param_groups[airframe_type].AddParameter(param) + + return True + + def IsNumber(self, numberString): + try: + float(numberString) + return True + except ValueError: + return False + + def Validate(self): + """ + Validates the airframe meta data. + """ + seenParamNames = [] + for group in self.GetParamGroups(): + for param in group.GetParams(): + name = param.GetName() + board = param.GetFieldValue("board") + # Check for duplicates + name_plus_board = name + "+" + board + for seenParamName in seenParamNames: + if seenParamName == name_plus_board: + sys.stderr.write("Duplicate parameter definition: {0}\n".format(name_plus_board)) + return False + seenParamNames.append(name_plus_board) + # Validate values + default = param.GetDefault() + min = param.GetFieldValue("min") + max = param.GetFieldValue("max") + #sys.stderr.write("{0} default:{1} min:{2} max:{3}\n".format(name, default, min, max)) + if default != "" and not self.IsNumber(default): + sys.stderr.write("Default value not number: {0} {1}\n".format(name, default)) + return False + if min != "": + if not self.IsNumber(min): + sys.stderr.write("Min value not number: {0} {1}\n".format(name, min)) + return False + if default != "" and float(default) < float(min): + sys.stderr.write("Default value is smaller than min: {0} default:{1} min:{2}\n".format(name, default, min)) + return False + if max != "": + if not self.IsNumber(max): + sys.stderr.write("Max value not number: {0} {1}\n".format(name, max)) + return False + if default != "" and float(default) > float(max): + sys.stderr.write("Default value is larger than max: {0} default:{1} max:{2}\n".format(name, default, max)) + return False + return True + + def GetParamGroups(self): + """ + Returns the parsed list of parameters. Every parameter is a Parameter + object. Note that returned object is not a copy. Modifications affect + state of the parser. + """ + groups = self.param_groups.values() + groups = sorted(groups, key=lambda x: x.GetName()) + groups = sorted(groups, key=lambda x: self.priority.get(x.GetName(), 0), reverse=True) + return groups diff --git a/Tools/px4airframes/srcscanner.py b/Tools/px4airframes/srcscanner.py new file mode 100644 index 0000000000..c1f280668d --- /dev/null +++ b/Tools/px4airframes/srcscanner.py @@ -0,0 +1,37 @@ +import os +import re +import codecs + +class SourceScanner(object): + """ + Traverses directory tree, reads all source files, and passes their contents + to the Parser. + """ + + def ScanDir(self, srcdir, parser): + """ + Scans provided path and passes all found contents to the parser using + parser.Parse method. + """ + extensions = tuple(parser.GetSupportedExtensions()) + for dirname, dirnames, filenames in os.walk(srcdir): + for filename in filenames: + if filename.endswith(extensions): + path = os.path.join(dirname, filename) + if not self.ScanFile(path, parser): + return False + return True + + def ScanFile(self, path, parser): + """ + Scans provided file and passes its contents to the parser using + parser.Parse method. + """ + with codecs.open(path, 'r', 'utf-8') as f: + try: + contents = f.read() + except: + contents = '' + print('Failed reading file: %s, skipping content.' % path) + pass + return parser.Parse(path, contents) diff --git a/Tools/px4airframes/xmlout.py b/Tools/px4airframes/xmlout.py new file mode 100644 index 0000000000..f5d254bbc0 --- /dev/null +++ b/Tools/px4airframes/xmlout.py @@ -0,0 +1,82 @@ +import xml.etree.ElementTree as ET +import codecs + +def indent(elem, level=0): + i = "\n" + level*" " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + " " + if not elem.tail or not elem.tail.strip(): + elem.tail = i + for elem in elem: + indent(elem, level+1) + if not elem.tail or not elem.tail.strip(): + elem.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + +class XMLOutput(): + + def __init__(self, groups, board): + xml_parameters = ET.Element("airframes") + xml_version = ET.SubElement(xml_parameters, "version") + xml_version.text = "1" + last_param_name = "" + board_specific_param_set = False + for group in groups: + xml_group = ET.SubElement(xml_parameters, "airframe_group") + xml_group.attrib["name"] = group.GetName() + if (group.GetName() == "Standard Plane"): + xml_group.attrib["image"] = "AirframeStandardPlane.png" + elif (group.GetName() == "Flying Wing"): + xml_group.attrib["image"] = "AirframeFlyingWing.png" + elif (group.GetName() == "Quadrotor x"): + xml_group.attrib["image"] = "AirframeQuadRotorX.png" + elif (group.GetName() == "Quadrotor +"): + xml_group.attrib["image"] = "AirframeQuadRotorPlus.png" + elif (group.GetName() == "Hexa x"): + xml_group.attrib["image"] = "AirframeHexaRotorX.png" + elif (group.GetName() == "Hexa +"): + xml_group.attrib["image"] = "AirframeHexaRotorPlus.png" + elif (group.GetName() == "Octo +"): + xml_group.attrib["image"] = "AirframeOctoRotorPlus.png" + elif (group.GetName() == "Octo X"): + xml_group.attrib["image"] = "AirframeOctoRotorX.png" + elif (group.GetName() == "Quadrotor H"): + xml_group.attrib["image"] = "AirframeQuadRotorH.png" + elif (group.GetName() == "Simulation"): + xml_group.attrib["image"] = "AirframeSimulation.png" + else: + xml_group.attrib["image"] = "AirframeStandardPlane.png" + for param in group.GetParams(): + if (last_param_name == param.GetName() and not board_specific_param_set) or last_param_name != param.GetName(): + xml_param = ET.SubElement(xml_group, "airframe") + xml_param.attrib["name"] = param.GetName() + xml_param.attrib["id"] = param.GetId() + xml_param.attrib["maintainer"] = param.GetMaintainer() + last_param_name = param.GetName() + for code in param.GetFieldCodes(): + value = param.GetFieldValue(code) + if code == "board": + if value == board: + board_specific_param_set = True + xml_field = ET.SubElement(xml_param, code) + xml_field.text = value + else: + xml_group.remove(xml_param) + else: + xml_field = ET.SubElement(xml_param, code) + xml_field.text = value + for code in param.GetOutputCodes(): + value = param.GetOutputValue(code) + xml_field = ET.SubElement(xml_param, "output") + xml_field.attrib["name"] = code + xml_field.text = value + if last_param_name != param.GetName(): + board_specific_param_set = False + indent(xml_parameters) + self.xml_document = ET.ElementTree(xml_parameters) + + def Save(self, filename): + self.xml_document.write(filename, encoding="UTF-8") diff --git a/Tools/px_process_airframes.py b/Tools/px_process_airframes.py new file mode 100755 index 0000000000..50aaa699ef --- /dev/null +++ b/Tools/px_process_airframes.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +############################################################################ +# +# Copyright (C) 2013-2015 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +# +# PX4 airframe config processor (main executable file) +# +# This tool scans the PX4 source code for declarations of airframes +# +# Currently supported formats are: +# * XML for the parametric UI generator +# +# + +from __future__ import print_function +import sys +import os +import argparse +from px4airframes import srcscanner, srcparser, xmlout + +def main(): + # Parse command line arguments + parser = argparse.ArgumentParser(description="Process airframe documentation.") + parser.add_argument("-a", "--airframes-path", + default="../ROMFS/px4fmu_common", + metavar="PATH", + help="path to source files to scan for parameters") + parser.add_argument("-x", "--xml", + nargs='?', + const="airframes.xml", + metavar="FILENAME", + help="Create XML file" + " (default FILENAME: airframes.xml)") + parser.add_argument("-b", "--board", + nargs='?', + const="", + metavar="BOARD", + help="Board to create airframes xml for") + args = parser.parse_args() + + # Check for valid command + if not (args.xml): + print("Error: You need to specify at least one output method!\n") + parser.print_usage() + sys.exit(1) + + # Initialize source scanner and parser + scanner = srcscanner.SourceScanner() + parser = srcparser.SourceParser() + + # Scan directories, and parse the files + print("Scanning source path " + args.airframes_path) + if not scanner.ScanDir(args.airframes_path, parser): + sys.exit(1) + # We can't validate yet + # if not parser.Validate(): + # sys.exit(1) + param_groups = parser.GetParamGroups() + + # Output to XML file + if args.xml: + print("Creating XML file " + args.xml) + out = xmlout.XMLOutput(param_groups, args.board) + out.Save(args.xml) + + print("All done!") + + +if __name__ == "__main__": + main() diff --git a/makefiles/firmware.mk b/makefiles/firmware.mk index 5163a4c9f3..8ab53089ed 100644 --- a/makefiles/firmware.mk +++ b/makefiles/firmware.mk @@ -496,7 +496,7 @@ $(PRODUCT_BUNDLE): $(PRODUCT_BIN) @$(ECHO) %% Generating $@ ifdef GEN_PARAM_XML $(Q) $(PYTHON) $(PX4_BASE)/Tools/px_process_params.py --src-path $(PX4_BASE)/src --board CONFIG_ARCH_BOARD_$(CONFIG_BOARD) --xml - $(Q) $(COPY) $(PX4_BASE)/Tools/airframes.xml $(WORK_DIR)/airframes.xml + $(Q) $(PYTHON) $(PX4_BASE)/Tools/px_process_airframes.py -a $(PX4_BASE)/ROMFS/px4fmu_common/init.d --board CONFIG_ARCH_BOARD_$(CONFIG_BOARD) --xml $(Q) $(MKFW) --prototype $(IMAGE_DIR)/$(BOARD).prototype \ --git_identity $(PX4_BASE) \ --parameter_xml $(PRODUCT_PARAMXML) \