LCOV - code coverage report
Current view: top level - home/pbarker/rc/ardupilot/ArduPlane - Parameters.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 39 39 100.0 %
Date: 2026-09-09 11:02:08 Functions: 2 2 100.0 %

          Line data    Source code
       1             : #include "Plane.h"
       2             : 
       3             : #include <AP_Gripper/AP_Gripper.h>
       4             : 
       5             : /*
       6             :  *  ArduPlane parameter definitions
       7             :  *
       8             :  */
       9             : 
      10             : const AP_Param::Info Plane::var_info[] = {
      11             :     // @Param: FORMAT_VERSION
      12             :     // @DisplayName: Eeprom format version number
      13             :     // @Description: This value is incremented when changes are made to the eeprom format
      14             :     // @User: Advanced
      15             :     GSCALAR(format_version,         "FORMAT_VERSION", 0),
      16             : 
      17             :     // SYSID_THISMAV was here
      18             : 
      19             :     // SYSID_MYGCS was here
      20             : 
      21             :     // AP_SerialManager was here
      22             : 
      23             :     // @Param: AUTOTUNE_LEVEL
      24             :     // @DisplayName: Autotune level
      25             :     // @Description: Level of aggressiveness of pitch and roll PID gains. Lower values result in a 'softer' tune. Level 6 recommended for most planes. A value of 0 means to keep the current values of RMAX and TCONST for the controllers, tuning only the PID values
      26             :     // @Range: 0 10
      27             :     // @Increment: 1
      28             :     // @User: Standard
      29             :     ASCALAR(autotune_level, "AUTOTUNE_LEVEL",  6),
      30             : 
      31             :     // @Param: AUTOTUNE_OPTIONS
      32             :     // @DisplayName: Autotune options bitmask
      33             :     // @Description: Fixed Wing Autotune specific options. Useful on QuadPlanes with higher INS_GYRO_FILTER settings to prevent these filter values from being set too aggressively during Fixed Wing Autotune.
      34             :     // @Bitmask: 0: Disable FLTD update by Autotune
      35             :     // @Bitmask: 1: Disable FLTT update by Autotune
      36             :     // @User: Advanced
      37             :     ASCALAR(autotune_options, "AUTOTUNE_OPTIONS",  0),
      38             : 
      39             :     // TELEM_DELAY was here
      40             : 
      41             :     // @Param: GCS_PID_MASK
      42             :     // @DisplayName: GCS PID tuning mask
      43             :     // @Description: bitmask of PIDs to send MAVLink PID_TUNING messages for
      44             :     // @User: Advanced
      45             :     // @Bitmask: 0:Roll,1:Pitch,2:Yaw,3:Steering,4:Landing,5:AccZ
      46             :     GSCALAR(gcs_pid_mask,           "GCS_PID_MASK",     0),
      47             : 
      48             :     // @Param: KFF_RDDRMIX
      49             :     // @DisplayName: Rudder Mix
      50             :     // @Description: Amount of rudder to add during aileron movement. Increase if nose initially yaws away from roll. Reduces adverse yaw.
      51             :     // @Range: 0 1
      52             :     // @Increment: 0.01
      53             :     // @User: Standard
      54             :     GSCALAR(kff_rudder_mix,         "KFF_RDDRMIX",    RUDDER_MIX),
      55             : 
      56             :     // @Param: KFF_THR2PTCH
      57             :     // @DisplayName: Throttle to Pitch Mix
      58             :     // @Description: Pitch up to add in proportion to throttle. 100% throttle will add this number of degrees to the pitch target.
      59             :     // @Range: -5 5
      60             :     // @Increment: 0.01
      61             :     // @User: Advanced
      62             :     GSCALAR(kff_throttle_to_pitch,  "KFF_THR2PTCH",   0),
      63             : 
      64             :     // @Param: STAB_PITCH_DOWN
      65             :     // @DisplayName: Low throttle pitch down trim 
      66             :     // @Description: Degrees of down pitch added when throttle is below TRIM_THROTTLE in FBWA and AUTOTUNE modes. Scales linearly so full value is added when THR_MIN is reached. Helps to keep airspeed higher in glides or landing approaches and prevents accidental stalls. 2 degrees recommended for most planes.
      67             :     // @Range: 0 15
      68             :     // @Increment: 0.1
      69             :     // @Units: deg
      70             :     // @User: Advanced
      71             :     GSCALAR(stab_pitch_down, "STAB_PITCH_DOWN",   2.0f),
      72             : 
      73             :     // @Param: ALT_SLOPE_MIN
      74             :     // @DisplayName: Altitude slope minimum
      75             :     // @Description: This controls the minimum altitude change for a waypoint before an altitude slope will be used instead of an immediate altitude change. The default value is 15 meters, which helps to smooth out waypoint missions where small altitude changes happen near waypoints. If you don't want altitude slopes to be used in missions then you can set this to zero, which will disable altitude slope calculations. Otherwise you can set it to a minimum number of meters of altitude error to the destination waypoint before an altitude slope will be used to change altitude. This also gates the gradual altitude ramp used during the approach leg of QRTL.
      76             :     // @Range: 0 1000
      77             :     // @Increment: 1
      78             :     // @Units: m
      79             :     // @User: Advanced
      80             :     GSCALAR(alt_slope_min, "ALT_SLOPE_MIN", 15),
      81             : 
      82             :     // @Param: ALT_SLOPE_MAXHGT
      83             :     // @DisplayName: Altitude slope maximum height
      84             :     // @Description: This controls the height above the altitude slope the plane may be before rebuilding it. This is useful for smoothing out an auto-takeoff.
      85             :     // @Range: 0 100
      86             :     // @Increment: 1
      87             :     // @Units: m
      88             :     // @User: Advanced
      89             :     GSCALAR(alt_slope_max_height, "ALT_SLOPE_MAXHGT", 5.0),
      90             : 
      91             :     // @Param: STICK_MIXING
      92             :     // @DisplayName: Stick Mixing
      93             :     // @Description: When enabled, this adds user stick input to the control surfaces in auto modes, allowing the user to have some degree of flight control without changing modes. There are 3 types of stick mixing available. If you set STICK_MIXING to 1 or 4 then it will use "fly by wire" mixing. 4 will provide roll and yaw control, while 1 also provides FBW-A style pitch control. If you set STICK_MIXING to 3 then it will apply to the yaw while in quadplane modes only, such as while doing an automatic VTOL takeoff or landing. WARNING: FBW-A pitch control does not offer flight envelope protections. Prolonged pitch inputs in mode 1 can result in a stall or overspeed condition, and should be avoided.
      94             :     // @Values: 0:Disabled,1:FBW style,3:VTOL Yaw only,4:FBW style (no pitch)
      95             :     // @User: Advanced
      96             :     GSCALAR(stick_mixing,           "STICK_MIXING",   uint8_t(StickMixing::FBW)),
      97             : 
      98             :     // @Param: TKOFF_THR_MINSPD
      99             :     // @DisplayName: Takeoff throttle min speed
     100             :     // @Description: Minimum GPS ground speed in m/s used by the speed check that un-suppresses throttle in auto-takeoff. This can be be used for catapult launches where you want the motor to engage only after the plane leaves the catapult, but it is preferable to use the TKOFF_THR_MINACC and TKOFF_THR_DELAY parameters for catapult launches due to the errors associated with GPS measurements. For hand launches with a pusher prop it is strongly advised that this parameter be set to a value no less than 4 m/s to provide additional protection against premature motor start. Note that the GPS velocity will lag the real velocity by about 0.5 seconds. The ground speed check is delayed by the TKOFF_THR_DELAY parameter.
     101             :     // @Units: m/s
     102             :     // @Range: 0 30
     103             :     // @Increment: 0.1
     104             :     // @User: Standard
     105             :     GSCALAR(takeoff_throttle_min_speed,     "TKOFF_THR_MINSPD",  0),
     106             : 
     107             :     // @Param: TKOFF_THR_MINACC
     108             :     // @DisplayName: Takeoff throttle min acceleration
     109             :     // @Description: Minimum forward acceleration in m/s/s before arming the ground speed check in auto-takeoff. This is meant to be used for hand launches. Setting this value to 0 disables the acceleration test which means the ground speed check will always be armed which could allow GPS velocity jumps to start the engine. For hand launches and bungee launches this should be set to around 15. Also see TKOFF_ACCEL_CNT parameter for control of full "shake to arm".
     110             :     // @Units: m/s/s
     111             :     // @Range: 0 30
     112             :     // @Increment: 0.1
     113             :     // @User: Standard
     114             :     GSCALAR(takeoff_throttle_min_accel,     "TKOFF_THR_MINACC",  0),
     115             : 
     116             :     // @Param: TKOFF_THR_DELAY
     117             :     // @DisplayName: Takeoff throttle delay
     118             :     // @Description: This parameter sets the time delay (in 1/10ths of a second) that the ground speed check is delayed after the forward acceleration check controlled by TKOFF_THR_MINACC has passed. For hand launches with pusher propellers it is essential that this is set to a value of no less than 2 (0.2 seconds) to ensure that the aircraft is safely clear of the throwers arm before the motor can start. For bungee launches a larger value can be used (such as 30) to give time for the bungee to release from the aircraft before the motor is started.
     119             :     // @Units: ds
     120             :     // @Range: 0 127
     121             :     // @Increment: 1
     122             :     // @User: Standard
     123             :     GSCALAR(takeoff_throttle_delay,     "TKOFF_THR_DELAY",  2),
     124             : 
     125             :     // @Param: TKOFF_THR_MAX_T
     126             :     // @DisplayName: Takeoff throttle maximum time
     127             :     // @Description: This sets the time that maximum throttle will be forced during a fixed wing takeoff.
     128             :     // @Units: s
     129             :     // @Range: 0 10
     130             :     // @Increment: 0.5
     131             :     // @User: Standard
     132             :     ASCALAR(takeoff_throttle_max_t,     "TKOFF_THR_MAX_T",  4),
     133             : 
     134             :     // @Param: TKOFF_THR_MIN
     135             :     // @DisplayName: Takeoff minimum throttle
     136             :     // @Description: The minimum throttle to use in takeoffs in AUTO and TAKEOFF flight modes, when TKOFF_OPTIONS bit 0 is set. Also, the minimum throttle to use in a quadpane forward transition. This can be useful to ensure faster takeoffs or transitions on aircraft where the normal throttle control leads to a slow takeoff or transition. It is used when it is larger than THR_MIN, otherwise THR_MIN is used instead.
     137             :     // @Units: %
     138             :     // @Range: 0 100
     139             :     // @Increment: 1
     140             :     // @User: Standard
     141             :     ASCALAR(takeoff_throttle_min,       "TKOFF_THR_MIN",    0),
     142             : 
     143             :     // @Param: TKOFF_THR_IDLE
     144             :     // @DisplayName: Takeoff idle throttle
     145             :     // @Description: The idle throttle to hold after arming and before a takeoff. Applicable in TAKEOFF and AUTO modes.
     146             :     // @Units: %
     147             :     // @Range: 0 100
     148             :     // @Increment: 1
     149             :     // @User: Standard
     150             :     ASCALAR(takeoff_throttle_idle,       "TKOFF_THR_IDLE",    0),
     151             : 
     152             :     // @Param: TKOFF_OPTIONS
     153             :     // @DisplayName: Takeoff options
     154             :     // @Description: This selects the mode of the takeoff in AUTO and TAKEOFF flight modes. 
     155             :     // @Bitmask: 0: When unset the maximum allowed throttle is always used (THR_MAX or TKOFF_THR_MAX) during takeoff. When set TECS is allowed to operate between a minimum (THR_MIN or TKOFF_THR_MIN) and a maximum (THR_MAX or TKOFF_THR_MAX) limit. Applicable only when using an airspeed sensor.
     156             :     // @User: Advanced
     157             :     ASCALAR(takeoff_options,               "TKOFF_OPTIONS",       0),
     158             :     
     159             :     // @Param: TKOFF_TDRAG_ELEV
     160             :     // @DisplayName: Takeoff tail dragger elevator
     161             :     // @Description: This parameter sets the amount of elevator to apply during the initial stage of a takeoff. It is used to hold the tail wheel of a taildragger on the ground during the initial takeoff stage to give maximum steering. This option should be combined with the TKOFF_TDRAG_SPD1 option and the GROUND_STEER_ALT option along with tuning of the ground steering controller. A value of zero means to bypass the initial "tail hold" stage of takeoff. Set to zero for hand and catapult launch. For tail-draggers you should normally set this to 100, meaning full up elevator during the initial stage of takeoff. For most tricycle undercarriage aircraft a value of zero will work well, but for some tricycle aircraft a small negative value (say around -20 to -30) will apply down elevator which will hold the nose wheel firmly on the ground during initial acceleration. Only use a negative value if you find that the nosewheel doesn't grip well during takeoff. Too much down elevator on a tricycle undercarriage may cause instability in steering as the plane pivots around the nosewheel. Add down elevator 10 percent at a time.
     162             :     // @Units: %
     163             :     // @Range: -100 100
     164             :     // @Increment: 1
     165             :     // @User: Standard
     166             :     GSCALAR(takeoff_tdrag_elevator,     "TKOFF_TDRAG_ELEV",  0),
     167             : 
     168             :     // @Param: TKOFF_TDRAG_SPD1
     169             :     // @DisplayName: Takeoff tail dragger speed1
     170             :     // @Description: This parameter sets the airspeed at which to stop holding the tail down and transition to rudder control of steering on the ground. When TKOFF_TDRAG_SPD1 is reached the pitch of the aircraft will be held level until TKOFF_ROTATE_SPD is reached, at which point the takeoff pitch specified in the mission will be used to "rotate" the pitch for takeoff climb. Set TKOFF_TDRAG_SPD1 to zero to go straight to rotation. This should be set to zero for hand launch and catapult launch. It should also be set to zero for tricycle undercarriages unless you are using the method above to gently hold the nose wheel down. For tail dragger aircraft it should be set just below the stall speed.
     171             :     // @Units: m/s
     172             :     // @Range: 0 30
     173             :     // @Increment: 0.1
     174             :     // @User: Standard
     175             :     GSCALAR(takeoff_tdrag_speed1,     "TKOFF_TDRAG_SPD1",  0),
     176             : 
     177             :     // @Param: TKOFF_ROTATE_SPD
     178             :     // @DisplayName: Takeoff rotate speed
     179             :     // @Description: This parameter sets the airspeed at which the aircraft will "rotate", setting climb pitch specified in the mission. If TKOFF_ROTATE_SPD is zero then the climb pitch will be used as soon as takeoff is started. For hand launch and catapult launches a TKOFF_ROTATE_SPD of zero should be set. For all ground launches TKOFF_ROTATE_SPD should be set above the stall speed, usually by about 10 to 30 percent. During the run, use TKOFF_GND_PITCH to keep the aircraft on the runway while below this airspeed.
     180             :     // @Units: m/s
     181             :     // @Range: 0 30
     182             :     // @Increment: 0.1
     183             :     // @User: Standard
     184             :     GSCALAR(takeoff_rotate_speed,     "TKOFF_ROTATE_SPD",  0),
     185             : 
     186             :     // @Param: TKOFF_THR_SLEW
     187             :     // @DisplayName: Takeoff throttle slew rate
     188             :     // @Description: This parameter sets the slew rate for the throttle during auto takeoff. When this is zero the THR_SLEWRATE parameter is used during takeoff. For rolling takeoffs it can be a good idea to set a lower slewrate for takeoff to give a slower acceleration which can improve ground steering control. The value is a percentage throttle change per second, so a value of 20 means to advance the throttle over 5 seconds on takeoff. Values below 20 are not recommended as they may cause the plane to try to climb out with too little throttle. A value of -1 means no limit on slew rate in takeoff.
     189             :     // @Units: %/s
     190             :     // @Range: -1 500
     191             :     // @Increment: 1
     192             :     // @User: Standard
     193             :     GSCALAR(takeoff_throttle_slewrate, "TKOFF_THR_SLEW",  0),
     194             : 
     195             :     // @Param: TKOFF_PLIM_SEC
     196             :     // @DisplayName: Takeoff pitch limit reduction
     197             :     // @Description: This parameter reduces the pitch minimum limit of an auto-takeoff just a few seconds before it reaches the target altitude. This reduces overshoot by allowing the flight controller to start leveling off a few seconds before reaching the target height. When set to zero, the mission pitch min is enforced all the way to and through the target altitude, otherwise the pitch min slowly reduces to zero in the final segment. This is the pitch_min, not the demand. The flight controller should still be commanding to gain altitude to finish the takeoff but with this param it is not forcing it higher than it wants to be.
     198             :     // @Units: s
     199             :     // @Range: 0 10
     200             :     // @Increment: 0.5
     201             :     // @User: Advanced
     202             :     GSCALAR(takeoff_pitch_limit_reduction_sec, "TKOFF_PLIM_SEC",  2),
     203             : 
     204             :     // @Param: TKOFF_FLAP_PCNT
     205             :     // @DisplayName: Takeoff flap percentage
     206             :     // @Description: The amount of flaps (as a percentage) to apply in automatic takeoff
     207             :     // @Range: 0 100
     208             :     // @Units: %
     209             :     // @Increment: 1
     210             :     // @User: Advanced
     211             :     GSCALAR(takeoff_flap_percent,     "TKOFF_FLAP_PCNT", 0),
     212             : 
     213             :     // @Param: LEVEL_ROLL_LIMIT
     214             :     // @DisplayName: Level flight roll limit
     215             :     // @Description: This controls the maximum bank angle in degrees during flight modes where level flight is desired, such as in the final stages of landing, and during auto takeoff. This should be a small angle (such as 5 degrees) to prevent a wing hitting the runway during takeoff or landing. Setting this to zero will completely disable heading hold on auto takeoff while below 5 meters and during the flare portion of a final landing approach.
     216             :     // @Units: deg
     217             :     // @Range: 0 45
     218             :     // @Increment: 1
     219             :     // @User: Standard
     220             :     GSCALAR(level_roll_limit,              "LEVEL_ROLL_LIMIT",   5),
     221             : 
     222             :     // @Param: USE_REV_THRUST
     223             :     // @DisplayName: Bitmask for when to allow negative reverse thrust
     224             :     // @Description: This controls when to use reverse thrust. If set to a non-zero value then the bits correspond to flight stages where reverse thrust may be used. The most commonly used value for USE_REV_THRUST is 2, which means AUTO_LAND only. That enables reverse thrust in the landing stage of AUTO mode. Another common choice is 1, which means to use reverse thrust in all auto flight stages. Reverse thrust is always used in MANUAL mode if enabled with THR_MIN < 0. In non-autothrottle controlled modes, if reverse thrust is not used, then THR_MIN is effectively set to 0 for that mode.
     225             :     // @Bitmask: 0:AUTO_ALWAYS,1:AUTO_LAND,2:AUTO_LOITER_TO_ALT,3:AUTO_LOITER_ALL,4:AUTO_WAYPOINTS,5:LOITER,6:RTL,7:CIRCLE,8:CRUISE,9:FBWB,10:GUIDED,11:AUTO_LANDING_PATTERN,12:FBWA,13:ACRO,14:STABILIZE,15:THERMAL
     226             :     // @User: Advanced
     227             :     GSCALAR(use_reverse_thrust,     "USE_REV_THRUST",  float(UseReverseThrust::AUTO_LAND_APPROACH)),
     228             : 
     229             :     // @Param: ALT_OFFSET
     230             :     // @DisplayName: Altitude offset
     231             :     // @Description: This is added to the target altitude in automatic flight. It can be used to add a global altitude offset to a mission. The offset resets to zero on reboot
     232             :     // @Units: m
     233             :     // @Range: -32767 32767
     234             :     // @Increment: 1
     235             :     // @User: Advanced
     236             :     // @Volatile: True
     237             :     GSCALAR(alt_offset, "ALT_OFFSET",                 0),
     238             : 
     239             :     // @Param: WP_RADIUS
     240             :     // @DisplayName: Waypoint Radius
     241             :     // @Description: Defines the maximum distance from a waypoint that when crossed indicates the waypoint may be complete. To avoid the aircraft looping around the waypoint in case it misses by more than the WP_RADIUS an additional check is made to see if the aircraft has crossed a "finish line" passing through the waypoint and perpendicular to the flight path from the previous waypoint. If that finish line is crossed then the waypoint is considered complete. Note that the navigation controller may decide to turn later than WP_RADIUS before a waypoint, based on how sharp the turn is and the speed of the aircraft. It is safe to set WP_RADIUS much larger than the usual turn radius of your aircraft and the navigation controller will work out when to turn. If you set WP_RADIUS too small then you will tend to overshoot the turns.
     242             :     // @Units: m
     243             :     // @Range: 1 32767
     244             :     // @Increment: 1
     245             :     // @User: Standard
     246             :     GSCALAR(waypoint_radius,        "WP_RADIUS",      WP_RADIUS_DEFAULT),
     247             : 
     248             :     // @Param: WP_MAX_RADIUS
     249             :     // @DisplayName: Waypoint Maximum Radius
     250             :     // @Description: Sets the maximum distance to a waypoint for the waypoint to be considered complete. This overrides the "cross the finish line" logic that is normally used to consider a waypoint complete. For normal AUTO behaviour this parameter should be set to zero. Using a non-zero value is only recommended when it is critical that the aircraft does approach within the given radius, and should loop around until it has done so. This can cause the aircraft to loop forever if its turn radius is greater than the maximum radius set.
     251             :     // @Units: m
     252             :     // @Range: 0 32767
     253             :     // @Increment: 1
     254             :     // @User: Standard
     255             :     GSCALAR(waypoint_max_radius,        "WP_MAX_RADIUS",      0),
     256             : 
     257             :     // @Param: WP_LOITER_RAD
     258             :     // @DisplayName: Waypoint Loiter Radius
     259             :     // @Description: Defines the distance from the waypoint center, the plane will maintain during a loiter. If you set this value to a negative number then the default loiter direction will be counter-clockwise instead of clockwise. If this value is too close to zero, the achieved loiter radius will be determined by ROLL_LIMIT_DEG.
     260             :     // @Units: m
     261             :     // @Range: -32767 32767
     262             :     // @Increment: 1
     263             :     // @User: Standard
     264             :     ASCALAR(loiter_radius,          "WP_LOITER_RAD",  LOITER_RADIUS_DEFAULT),
     265             : 
     266             :     // @Param: RTL_RADIUS
     267             :     // @DisplayName: RTL loiter radius
     268             :     // @Description: Defines the radius of the loiter circle when in RTL mode. If this is zero then WP_LOITER_RAD is used. If the radius is negative then a counter-clockwise is used. If positive then a clockwise loiter is used. For quadplanes with Q_RTL_MODE set to 1 (Enabled), this value is used to set the minimum radius at which the plane will transition from fixed-wing to VTOL mode for landing.
     269             :     // @Units: m
     270             :     // @Range: -32767 32767
     271             :     // @Increment: 1
     272             :     // @User: Standard
     273             :     GSCALAR(rtl_radius,             "RTL_RADIUS",  0),
     274             :     
     275             :     // @Param: STALL_PREVENTION
     276             :     // @DisplayName: Enable stall prevention
     277             :     // @Description: Enables roll limits at low airspeed in roll limiting flight modes. Roll limits based on aerodynamic load factor in turns and scale on AIRSPEED_MIN that must be set correctly. Without airspeed sensor, uses synthetic airspeed from wind speed estimate that may both be inaccurate.
     278             :     // @Values: 0:Disabled,1:Enabled
     279             :     // @User: Standard
     280             :     ASCALAR(stall_prevention, "STALL_PREVENTION",  1),
     281             : 
     282             :     // @Param: AIRSPEED_CRUISE
     283             :     // @DisplayName: Target cruise airspeed
     284             :     // @Description: Target cruise airspeed in m/s in automatic throttle modes. Value is as an indicated (calibrated/apparent) airspeed.
     285             :     // @Units: m/s
     286             :     // @User: Standard
     287             :     ASCALAR(airspeed_cruise,     "AIRSPEED_CRUISE",  AIRSPEED_CRUISE),
     288             : 
     289             :     // @Param: AIRSPEED_MIN
     290             :     // @DisplayName: Minimum Airspeed
     291             :     // @Description: Minimum airspeed demanded in automatic throttle modes. Should be set to 20% higher than level flight stall speed.
     292             :     // @Units: m/s
     293             :     // @Range: 5 100
     294             :     // @Increment: 1
     295             :     // @User: Standard
     296             :     ASCALAR(airspeed_min, "AIRSPEED_MIN",  AIRSPEED_FBW_MIN),
     297             : 
     298             :     // @Param: AIRSPEED_MAX
     299             :     // @DisplayName: Maximum Airspeed
     300             :     // @Description: Maximum airspeed demanded in automatic throttle modes. Should be set slightly less than level flight speed at THR_MAX and also at least 50% above AIRSPEED_MIN to allow for accurate TECS altitude control.
     301             :     // @Units: m/s
     302             :     // @Range: 5 100
     303             :     // @Increment: 1
     304             :     // @User: Standard
     305             :     ASCALAR(airspeed_max, "AIRSPEED_MAX",  AIRSPEED_FBW_MAX),
     306             : 
     307             :     // @Param: AIRSPEED_STALL
     308             :     // @DisplayName: Stall airspeed
     309             :     // @Description: If stall prevention is enabled this speed is used to calculate the minimum airspeed while banking. It is also used during landing final as the minimum airspeed that can be demanded by the TECS, which allows using TECS_LAND_ARSPD or LAND_PF_ARSPD to achieve landings slower than AIRSPEED_MIN. If this is set to 0 then the stall speed is assumed to be the minimum airspeed speed. Typically set slightly higher then true stall speed.
     310             :     // @Units: m/s
     311             :     // @Range: 5 75
     312             :     // @User: Standard
     313             :     ASCALAR(airspeed_stall, "AIRSPEED_STALL", 0),
     314             : 
     315             :     // @Param: FBWB_ELEV_REV
     316             :     // @DisplayName: Fly By Wire elevator reverse
     317             :     // @Description: Reverse sense of elevator in FBWB and CRUISE modes. When set to 0 up elevator (pulling back on the stick) means to raise altitude. When set to 1, up elevator means to lower altitude.
     318             :     // @Values: 0:Disabled,1:Enabled
     319             :     // @User: Standard
     320             :     GSCALAR(flybywire_elev_reverse, "FBWB_ELEV_REV",  0),
     321             : 
     322             : #if AP_TERRAIN_AVAILABLE
     323             :     // @Param: TERRAIN_FOLLOW
     324             :     // @DisplayName: Use terrain following
     325             :     // @Description: This enables terrain following for CRUISE mode, FBWB mode, RTL and for rally points. To use this option you also need to set TERRAIN_ENABLE to 1, which enables terrain data fetching from the GCS, and you need to have a GCS that supports sending terrain data to the aircraft. When terrain following is enabled then CRUISE and FBWB mode will hold height above terrain rather than height above home. In RTL the return to launch altitude will be considered to be a height above the terrain. Rally point altitudes will be taken as height above the terrain. This option does not affect mission items, which have a per-waypoint flag for whether they are height above home or height above the terrain. To use terrain following missions you need a ground station which can set the waypoint type to be a terrain height waypoint when creating the mission.
     326             :     // @Bitmask: 0: Enable all modes, 1:FBWB, 2:Cruise, 3:Auto, 4:RTL, 5:Avoid_ADSB, 6:Guided, 7:Loiter, 8:Circle, 9:QRTL, 10:QLand, 11:Qloiter, 12:AUTOLAND
     327             :     // @User: Standard
     328             :     GSCALAR(terrain_follow, "TERRAIN_FOLLOW",  0),
     329             : 
     330             :     // @Param: TERRAIN_LOOKAHD
     331             :     // @DisplayName: Terrain lookahead
     332             :     // @Description: This controls how far ahead the terrain following code looks to ensure it stays above upcoming terrain. A value of zero means no lookahead, so the controller will track only the terrain directly below the aircraft. The lookahead will never extend beyond the next waypoint when in AUTO mode.
     333             :     // @Range: 0 10000
     334             :     // @Units: m
     335             :     // @User: Standard
     336             :     GSCALAR(terrain_lookahead, "TERRAIN_LOOKAHD",  2000),
     337             : #endif
     338             : 
     339             :     // @Param: FBWB_CLIMB_RATE
     340             :     // @DisplayName: Fly By Wire B altitude change rate
     341             :     // @Description: This sets the rate in m/s at which FBWB and CRUISE modes will change its target altitude for full elevator deflection. Note that the actual climb rate of the aircraft can be lower than this, depending on your airspeed and throttle control settings. If you have this parameter set to the default value of 2.0, then holding the elevator at maximum deflection for 10 seconds would change the target altitude by 20 meters.
     342             :     // @Range: 1 10
     343             :     // @Units: m/s
     344             :         // @Increment: 0.1
     345             :     // @User: Standard
     346             :     GSCALAR(flybywire_climb_rate, "FBWB_CLIMB_RATE",  2.0f),
     347             : 
     348             :     // @Param: THR_MIN
     349             :     // @DisplayName: Minimum Throttle
     350             :     // @Description: Minimum throttle percentage used in all modes except manual, provided THR_PASS_STAB is not set. Negative values allow reverse thrust if hardware supports it.
     351             :     // @Units: %
     352             :     // @Range: -100 100
     353             :     // @Increment: 1
     354             :     // @User: Standard
     355             :     ASCALAR(throttle_min,           "THR_MIN",        THROTTLE_MIN),
     356             : 
     357             :     // @Param: THR_MAX
     358             :     // @DisplayName: Maximum Throttle
     359             :     // @Description: Maximum throttle percentage used in all modes except manual, provided THR_PASS_STAB is not set.
     360             :     // @Units: %
     361             :     // @Range: 0 100
     362             :     // @Increment: 1
     363             :     // @User: Standard
     364             :     ASCALAR(throttle_max,           "THR_MAX",        THROTTLE_MAX),
     365             : 
     366             :     // @Param: TKOFF_THR_MAX
     367             :     // @DisplayName: Maximum Throttle for takeoff
     368             :     // @Description: The maximum throttle setting during automatic takeoff. If this is zero then THR_MAX is used for takeoff as well.
     369             :     // @Units: %
     370             :     // @Range: 0 100
     371             :     // @Increment: 1
     372             :     // @User: Advanced
     373             :     ASCALAR(takeoff_throttle_max,   "TKOFF_THR_MAX",        0),
     374             : 
     375             :     // @Param: THR_SLEWRATE
     376             :     // @DisplayName: Throttle slew rate
     377             :     // @Description: Maximum change in throttle percentage per second. Lower limit  based on 1 microsend of servo increase per loop. Divide SCHED_LOOP_RATE by approximately 10 to determine minimum achievable value.
     378             :     // @Units: %/s
     379             :     // @Range: 0 500
     380             :     // @Increment: 1
     381             :     // @User: Standard
     382             :     ASCALAR(throttle_slewrate,      "THR_SLEWRATE",   100),
     383             : 
     384             :     // @Param: FLAP_SLEWRATE
     385             :     // @DisplayName: Flap slew rate
     386             :     // @Description: maximum percentage change in flap output per second. A setting of 25 means to not change the flap by more than 25% of the full flap range in one second. A value of 0 means no rate limiting.
     387             :     // @Units: %/s
     388             :     // @Range: 0 100
     389             :     // @Increment: 1
     390             :     // @User: Advanced
     391             :     GSCALAR(flap_slewrate,          "FLAP_SLEWRATE",   75),
     392             : 
     393             :     // @Param: THR_SUPP_MAN
     394             :     // @DisplayName: Throttle suppress manual passthru
     395             :     // @Description: When throttle is suppressed in auto mode it is normally forced to zero. If you enable this option, then while suppressed it will be manual throttle. This is useful on petrol engines to hold the idle throttle manually while waiting for takeoff
     396             :         // @Values: 0:Disabled,1:Enabled
     397             :     // @User: Advanced
     398             :     GSCALAR(throttle_suppress_manual,"THR_SUPP_MAN",   0),
     399             : 
     400             :     // @Param: THR_PASS_STAB
     401             :     // @DisplayName: Throttle passthru in stabilize
     402             :     // @Description: If this is set then when in STABILIZE, FBWA or ACRO modes the throttle is a direct passthru from the transmitter. This means the THR_MIN and THR_MAX settings are not used in these modes. This is useful for petrol engines where you setup a throttle cut switch that suppresses the throttle below the normal minimum.
     403             :         // @Values: 0:Disabled,1:Enabled
     404             :     // @User: Advanced
     405             :     GSCALAR(throttle_passthru_stabilize,"THR_PASS_STAB",   0),
     406             : 
     407             :     // @Param: THR_FAILSAFE
     408             :     // @DisplayName: Throttle and RC Failsafe Enable
     409             :     // @Description: 0 disables the failsafe. 1 enables failsafe on loss of RC input. This is detected either by throttle values below THR_FS_VALUE, loss of receiver valid pulses/data, or by the FS bit in receivers that provide it, like SBUS. A programmable failsafe action will occur and RC inputs, if present, will be ignored. A value of 2 means that the RC inputs won't be used when RC failsafe is detected by any of the above methods, but it won't trigger an RC failsafe action.
     410             :     // @Values: 0:Disabled,1:Enabled,2:EnabledNoFailsafe
     411             :     // @User: Standard
     412             :     GSCALAR(throttle_fs_enabled,    "THR_FAILSAFE",   int(ThrFailsafe::Enabled)),
     413             : 
     414             : 
     415             :     // @Param: THR_FS_VALUE
     416             :     // @DisplayName: Throttle Failsafe Value
     417             :     // @Description: The PWM level on the throttle input channel below which throttle failsafe triggers. Note that this should be well below the normal minimum for your throttle channel.
     418             :     // @Range: 925 2200
     419             :     // @Increment: 1
     420             :     // @User: Standard
     421             :     GSCALAR(throttle_fs_value,      "THR_FS_VALUE",   950),
     422             : 
     423             :     // @Param: TRIM_THROTTLE
     424             :     // @DisplayName: Throttle cruise percentage
     425             :     // @Description: Target percentage of throttle to apply for flight in automatic throttle modes and throttle percentage that maintains AIRSPEED_CRUISE. Caution: low battery voltages at the end of flights may require higher throttle to maintain airspeed.
     426             :     // @Units: %
     427             :     // @Range: 0 100
     428             :     // @Increment: 1
     429             :     // @User: Standard
     430             :     ASCALAR(throttle_cruise,        "TRIM_THROTTLE",  AP_PLANE_TRIM_THROTTLE_DEFAULT),
     431             : 
     432             :     // @Param: THROTTLE_NUDGE
     433             :     // @DisplayName: Throttle nudge enable
     434             :     // @Description: When enabled, this uses the throttle input in auto-throttle modes to 'nudge' the throttle or airspeed to higher or lower values. When you have an airspeed sensor the nudge affects the target airspeed, so that throttle inputs above 50% will increase the target airspeed from AIRSPEED_CRUISE up to a maximum of AIRSPEED_MAX. When no airspeed sensor is enabled the throttle nudge will push up the target throttle for throttle inputs above 50%.
     435             :     // @Values: 0:Disabled,1:Enabled
     436             :     // @User: Standard
     437             :     GSCALAR(throttle_nudge,         "THROTTLE_NUDGE",  1),
     438             : 
     439             :     // @Param: FS_SHORT_ACTN
     440             :     // @DisplayName: Short failsafe action
     441             :     // @Description: The action to take on a short failsafe event. A short failsafe event can be triggered instantly by loss of RC control or by throttle value (see THR_FS_VALUE). If in CIRCLE or RTL mode this parameter is ignored. A short failsafe event in stabilization and manual modes will cause a change to CIRCLE mode if FS_SHORT_ACTN is 0 or 1, a change to FBWA mode with zero throttle if FS_SHORT_ACTN is 2, and a change to FBWB mode if FS_SHORT_ACTN is 4. In all other modes (AUTO, GUIDED and LOITER) a short failsafe event will cause no mode change if FS_SHORT_ACTN is set to 0, will cause a change to CIRCLE mode if set to 1, will change to FBWA mode with zero throttle if set to 2, or will change to FBWB if set to 4. Please see the documentation for FS_LONG_ACTN for the behaviour after FS_LONG_TIMEOUT seconds of failsafe. This parameter only applies to failsafes during fixed wing modes. Quadplane modes will switch to QLAND unless Q_OPTIONS bit 5(QRTL) or 20(RTL) are set.
     442             :     // @Values: 0:CIRCLE/no change(if already in AUTO|GUIDED|LOITER),1:CIRCLE,2:FBWA at zero throttle,3:Disable,4:FBWB
     443             :     // @User: Standard
     444             :     GSCALAR(fs_action_short,        "FS_SHORT_ACTN",  FS_ACTION_SHORT_BESTGUESS),
     445             : 
     446             :     // @Param: FS_LONG_ACTN
     447             :     // @DisplayName: Long failsafe action
     448             :     // @Description: The action to take on a long (FS_LONG_TIMEOUT seconds) failsafe event. If the aircraft was in a stabilization or manual mode when failsafe started and a long failsafe occurs then it will change to RTL mode if FS_LONG_ACTN is 0 or 1, and will change to FBWA if FS_LONG_ACTN is set to 2. If the aircraft was in an auto mode (such as AUTO or GUIDED) when the failsafe started then it will continue in the auto mode if FS_LONG_ACTN is set to 0, will change to RTL mode if FS_LONG_ACTN is set to 1 and will change to FBWA mode if FS_LONG_ACTN is set to 2. If FS_LONG_ACTN is set to 3, the parachute will be deployed (make sure the chute is configured and enabled). If FS_LONG_ACTN is set to 4 the aircraft will switch to mode AUTO with the current waypoint if it is not already in mode AUTO, unless it is in the middle of a landing sequence. If FS_LONG_ACTN is set to 5, will switch to AUTOLAND mode if possible, otherwise RTL mode. This parameter only applies to failsafes during fixed wing modes. Quadplane modes will switch to QLAND unless Q_OPTIONS bit 5 (QRTL) or 20(RTL) are set.
     449             :     // @Values: 0:Continue,1:ReturnToLaunch,2:Glide,3:Deploy Parachute,4:Auto,5:AUTOLAND
     450             :     // @User: Standard
     451             :     GSCALAR(fs_action_long,         "FS_LONG_ACTN",   FS_ACTION_LONG_CONTINUE),
     452             : 
     453             :     // @Param: FS_LONG_TIMEOUT
     454             :     // @DisplayName: Long failsafe timeout
     455             :     // @Description: The time in seconds that a failsafe condition has to persist before a long failsafe event will occur. This defaults to 5 seconds.
     456             :     // @Units: s
     457             :     // @Range: 1 300
     458             :     // @Increment: 0.5
     459             :     // @User: Standard
     460             :     GSCALAR(fs_timeout_long,        "FS_LONG_TIMEOUT", 5),
     461             : 
     462             :     // @Param: FS_GCS_ENABL
     463             :     // @DisplayName: GCS failsafe enable
     464             :     // @Description: Enable ground control station telemetry failsafe. Failsafe will trigger after FS_LONG_TIMEOUT seconds of no MAVLink heartbeat messages. There are three possible enabled settings. Setting FS_GCS_ENABL to 1 means that GCS failsafe will be triggered when the aircraft has not received a MAVLink HEARTBEAT message. Note that heartbeat tracking only becomes active after having received the first heartbeat from the MAV_GCS_SYSID primary GCS system. Setting FS_GCS_ENABL to 2 means that GCS failsafe will be triggered on either a loss of HEARTBEAT messages, or a RADIO_STATUS message from a MAVLink enabled telemetry adio indicating that the primary ground station is not receiving status updates from the aircraft, which is indicated by the RADIO_STATUS.remrssi field being zero (this may happen if you have a one way link due to asymmetric noise on the ground station and aircraft radios).Setting FS_GCS_ENABL to 3 means that GCS failsafe will be triggered by Heartbeat(like option one), but only in AUTO mode. WARNING: Enabling this option opens up the possibility of your plane going into failsafe mode and running the motor on the ground it it loses contact with your ground station. If this option is enabled on an electric plane then you should enable ARMING_REQUIRED.
     465             :     // @Values: 0:Disabled,1:Heartbeat,2:HeartbeatAndREMRSSI,3:HeartbeatAndAUTO
     466             :     // @User: Standard
     467             :     GSCALAR(gcs_heartbeat_fs_enabled, "FS_GCS_ENABL", GCS_FAILSAFE_OFF),
     468             : 
     469             :     // @Param: FLTMODE_CH
     470             :     // @DisplayName: Flightmode channel
     471             :     // @Description: RC Channel to use for flight mode control
     472             :     // @Values: 0:Disabled,1:Channel 1,2:Channel 2,3:Channel 3,4:Channel 4,5:Channel 5,6:Channel 6,7:Channel 7,8:Channel 8,9:Channel 9,10:Channel 10,11:Channel 11,12:Channel 12,13:Channel 13,14:Channel 14,15:Channel 15,16:Channel 16
     473             :     // @User: Advanced
     474             :     GSCALAR(flight_mode_channel,    "FLTMODE_CH",     FLIGHT_MODE_CHANNEL),
     475             : 
     476             :     // @Param: FLTMODE1
     477             :     // @DisplayName: FlightMode1
     478             :     // @Description: Flight mode for switch position 1 (910 to 1230 and above 2049)
     479             :     // @Values: 0:Manual,1:CIRCLE,2:STABILIZE,3:TRAINING,4:ACRO,5:FBWA,6:FBWB,7:CRUISE,8:AUTOTUNE,10:Auto,11:RTL,12:Loiter,13:TAKEOFF,14:AVOID_ADSB,15:Guided,17:QSTABILIZE,18:QHOVER,19:QLOITER,20:QLAND,21:QRTL,22:QAUTOTUNE,23:QACRO,24:THERMAL,25:Loiter to QLand,26:AUTOLAND
     480             :     // @User: Standard
     481             :     GARRAY(flight_modes, 0,         "FLTMODE1",       FLIGHT_MODE_1),
     482             : 
     483             :     // @Param: FLTMODE2
     484             :     // @CopyFieldsFrom: FLTMODE1
     485             :     // @DisplayName: FlightMode2
     486             :     // @Description: Flight mode for switch position 2 (1231 to 1360)
     487             :     GARRAY(flight_modes, 1,         "FLTMODE2",       FLIGHT_MODE_2),
     488             : 
     489             :     // @Param: FLTMODE3
     490             :     // @CopyFieldsFrom: FLTMODE1
     491             :     // @DisplayName: FlightMode3
     492             :     // @Description: Flight mode for switch position 3 (1361 to 1490)
     493             :     GARRAY(flight_modes, 2,         "FLTMODE3",       FLIGHT_MODE_3),
     494             : 
     495             :     // @Param: FLTMODE4
     496             :     // @CopyFieldsFrom: FLTMODE1
     497             :     // @DisplayName: FlightMode4
     498             :     // @Description: Flight mode for switch position 4 (1491 to 1620)
     499             :     GARRAY(flight_modes, 3,         "FLTMODE4",       FLIGHT_MODE_4),
     500             : 
     501             :     // @Param: FLTMODE5
     502             :     // @CopyFieldsFrom: FLTMODE1
     503             :     // @DisplayName: FlightMode5
     504             :     // @Description: Flight mode for switch position 5 (1621 to 1749)
     505             :     GARRAY(flight_modes, 4,         "FLTMODE5",       FLIGHT_MODE_5),
     506             : 
     507             :     // @Param: FLTMODE6
     508             :     // @CopyFieldsFrom: FLTMODE1
     509             :     // @DisplayName: FlightMode6
     510             :     // @Description: Flight mode for switch position 6 (1750 to 2049)
     511             :     GARRAY(flight_modes, 5,         "FLTMODE6",       FLIGHT_MODE_6),
     512             : 
     513             :     // @Param: INITIAL_MODE
     514             :     // @DisplayName: Initial flight mode
     515             :     // @Description: This selects the mode to start in on boot. This is useful for when you want to start in AUTO mode on boot without a receiver.
     516             :     // @CopyValuesFrom: FLTMODE1
     517             :     // @User: Advanced
     518             :     GSCALAR(initial_mode,        "INITIAL_MODE",     Mode::Number::MANUAL),
     519             : 
     520             :     // @Param: ROLL_LIMIT_DEG
     521             :     // @DisplayName: Maximum Bank Angle
     522             :     // @Description: Maximum bank angle commanded in modes with stabilized limits. Increase this value for sharper turns, but decrease to prevent accelerated stalls.
     523             :     // @Units: deg
     524             :     // @Range: 0 90
     525             :     // @Increment: 1
     526             :     // @User: Standard
     527             :     ASCALAR(roll_limit,          "ROLL_LIMIT_DEG",    ROLL_LIMIT_DEG),
     528             : 
     529             :     // @Param: PTCH_LIM_MAX_DEG
     530             :     // @DisplayName: Maximum Pitch Angle
     531             :     // @Description: Maximum pitch up angle commanded in modes with stabilized limits.
     532             :     // @Units: deg
     533             :     // @Range: 0 90
     534             :     // @Increment: 1
     535             :     // @User: Standard
     536             :     ASCALAR(pitch_limit_max,     "PTCH_LIM_MAX_DEG",  PITCH_MAX),
     537             : 
     538             :     // @Param: PTCH_LIM_MIN_DEG
     539             :     // @DisplayName: Minimum Pitch Angle
     540             :     // @Description: Maximum pitch down angle commanded in modes with stabilized limits
     541             :     // @Units: deg
     542             :     // @Range: -90 0
     543             :     // @Increment: 1
     544             :     // @User: Standard
     545             :     ASCALAR(pitch_limit_min,     "PTCH_LIM_MIN_DEG",  PITCH_MIN),
     546             : 
     547             :     // @Param: ACRO_ROLL_RATE
     548             :     // @DisplayName: ACRO mode roll rate
     549             :     // @Description: The maximum roll rate at full stick deflection in ACRO mode
     550             :     // @Units: deg/s
     551             :     // @Range: 10 500
     552             :     // @Increment: 1
     553             :     // @User: Standard
     554             :     GSCALAR(acro_roll_rate,          "ACRO_ROLL_RATE",    180),
     555             : 
     556             :     // @Param: ACRO_PITCH_RATE
     557             :     // @DisplayName: ACRO mode pitch rate
     558             :     // @Description: The maximum pitch rate at full stick deflection in ACRO mode
     559             :     // @Units: deg/s
     560             :     // @Range: 10 500
     561             :     // @Increment: 1
     562             :     // @User: Standard
     563             :     GSCALAR(acro_pitch_rate,          "ACRO_PITCH_RATE",  180),
     564             : 
     565             :     // @Param: ACRO_YAW_RATE
     566             :     // @DisplayName: ACRO mode yaw rate
     567             :     // @Description: The maximum yaw rate at full stick deflection in ACRO mode. If this is zero then rudder is directly controlled by rudder stick input. This option is only available if you also set YAW_RATE_ENABLE to 1.
     568             :     // @Units: deg/s
     569             :     // @Range: 0 500
     570             :     // @Increment: 1
     571             :     // @User: Standard
     572             :     GSCALAR(acro_yaw_rate,            "ACRO_YAW_RATE",    0),
     573             :     
     574             :     // @Param: ACRO_LOCKING
     575             :     // @DisplayName: ACRO mode attitude locking
     576             :     // @Description: Enable attitude locking when sticks are released. If set to 2 then quaternion based locking is used if the yaw rate controller is enabled. Quaternion based locking will hold any attitude
     577             :     // @Values: 0:Disabled,1:Enabled,2:Quaternion
     578             :     // @User: Standard
     579             :     GSCALAR(acro_locking,             "ACRO_LOCKING",     0),
     580             : 
     581             :     // @Param: GROUND_STEER_ALT
     582             :     // @DisplayName: Ground steer altitude
     583             :     // @Description: Altitude at which to use the ground steering controller on the rudder. If non-zero then the STEER2SRV controller will be used to control the rudder for altitudes within this limit of the home altitude.
     584             :     // @Units: m
     585             :     // @Range: -100 100
     586             :     // @Increment: 0.1
     587             :     // @User: Standard
     588             :     GSCALAR(ground_steer_alt,         "GROUND_STEER_ALT",   0),
     589             : 
     590             :     // @Param: GROUND_STEER_DPS
     591             :     // @DisplayName: Ground steer rate
     592             :     // @Description: Ground steering rate in degrees per second for full rudder stick deflection
     593             :     // @Units: deg/s
     594             :     // @Range: 10 360
     595             :     // @Increment: 1
     596             :     // @User: Advanced
     597             :     GSCALAR(ground_steer_dps,         "GROUND_STEER_DPS",  90),
     598             : 
     599             :     // @Param: MIXING_GAIN
     600             :     // @DisplayName: Mixing Gain
     601             :     // @Description: The gain for the Vtail and elevon output mixers. The default is 0.5, which ensures that the mixer doesn't saturate, allowing both input channels to go to extremes while retaining control over the output. Hardware mixers often have a 1.0 gain, which gives more servo throw, but can saturate. If you don't have enough throw on your servos with VTAIL_OUTPUT or ELEVON_OUTPUT enabled then you can raise the gain using MIXING_GAIN. The mixer allows outputs in the range 900 to 2100 microseconds.
     602             :     // @Range: 0.5 1.2
     603             :     // @User: Standard
     604             :     GSCALAR(mixing_gain,            "MIXING_GAIN",    0.5f),
     605             : 
     606             :     // @Param: RUDDER_ONLY
     607             :     // @DisplayName: Rudder only aircraft
     608             :     // @Description: Enable rudder only mode. The rudder will control attitude in attitude controlled modes (such as FBWA). You should setup your transmitter to send roll stick inputs to the RCMAP_YAW channel (normally channel 4). The rudder servo should be attached to the RCMAP_YAW channel as well. Note that automatic ground steering will be disabled for rudder only aircraft. You should also set KFF_RDDRMIX to 1.0. You will also need to setup the YAW2SRV_DAMP yaw damping appropriately for your aircraft. A value of 0.5 for YAW2SRV_DAMP is a good starting point.
     609             :     // @Values: 0:Disabled,1:Enabled
     610             :     // @User: Standard
     611             :     GSCALAR(rudder_only,             "RUDDER_ONLY",  0),
     612             : 
     613             :     // @Param: MIXING_OFFSET
     614             :     // @DisplayName: Mixing Offset
     615             :     // @Description: The offset for the Vtail and elevon output mixers, as a percentage. This can be used in combination with MIXING_GAIN to configure how the control surfaces respond to input. The response to aileron or elevator input can be increased by setting this parameter to a positive or negative value. A common usage is to enter a positive value to increase the aileron response of the elevons of a flying wing. The default value of zero will leave the aileron-input response equal to the elevator-input response.
     616             :     // @Units: d%
     617             :     // @Range: -1000 1000
     618             :     // @User: Standard
     619             :     GSCALAR(mixing_offset,          "MIXING_OFFSET",  0),
     620             : 
     621             :     // @Param: DSPOILR_RUD_RATE
     622             :     // @DisplayName: Differential spoilers rudder rate
     623             :     // @Description: Sets the amount of deflection that the rudder output will apply to the differential spoilers, as a percentage. The default value of 100 results in full rudder applying full deflection. A value of 0 will result in the differential spoilers exactly following the elevons (no rudder effect).
     624             :     // @Units: %
     625             :     // @Range: -100 100
     626             :     // @User: Standard
     627             :     GSCALAR(dspoiler_rud_rate,      "DSPOILR_RUD_RATE",  DSPOILR_RUD_RATE_DEFAULT),
     628             : 
     629             :     // @Param: LOG_BITMASK
     630             :     // @DisplayName: Log bitmask
     631             :     // @Description: Bitmap of what on-board log types to enable. This value is made up of the sum of each of the log types you want to be saved. It is usually best just to enable all basic log types by setting this to 65535.
     632             :     // @Bitmask: 0:Fast Attitude,1:Medium Attitude,2:GPS,3:Performance,4:Control Tuning,5:Navigation Tuning,7:IMU,8:Mission Commands,9:Battery Monitor,10:Compass,11:TECS,12:Camera,13:RC Input-Output,14:Rangefinder,19:Raw IMU,20:Fullrate Attitude,21:Video Stabilization,22:Fullrate Notch
     633             :     // @User: Advanced
     634             :     GSCALAR(log_bitmask,            "LOG_BITMASK",    DEFAULT_LOG_BITMASK),
     635             : 
     636             :     // @Param: SCALING_SPEED
     637             :     // @DisplayName: speed used for speed scaling calculations
     638             :     // @Description: Airspeed in m/s to use when calculating surface speed scaling. Note that changing this value will affect all PID values
     639             :     // @Units: m/s
     640             :     // @Range: 0.1 50
     641             :     // @Increment: 0.1
     642             :     // @User: Advanced
     643             :     GSCALAR(scaling_speed,        "SCALING_SPEED",    SCALING_SPEED),
     644             : 
     645             :     // @Param: MIN_GROUNDSPEED
     646             :     // @DisplayName: Minimum ground speed
     647             :     // @Description: Minimum ground speed when under airspeed control
     648             :     // @Units: m/s
     649             :     // @User: Advanced
     650             :     ASCALAR(min_groundspeed,      "MIN_GROUNDSPEED",  MIN_GROUNDSPEED),
     651             : 
     652             :     // @Param: PTCH_TRIM_DEG
     653             :     // @DisplayName: Pitch angle offset
     654             :     // @Description: Offset in degrees used for in-flight pitch trimming for level flight. Correct ground leveling is an alternative to changing this parameter.
     655             :     // @Units: deg
     656             :     // @Range: -45 45
     657             :     // @User: Standard
     658             :     GSCALAR(pitch_trim,             "PTCH_TRIM_DEG",  0.0f),
     659             : 
     660             :     // @Param: RTL_ALTITUDE
     661             :     // @DisplayName: RTL altitude
     662             :     // @Description: Target altitude above home for RTL mode. Maintains current altitude if set to -1. Rally point altitudes are used if plane does not return to home.
     663             :     // @Units: m
     664             :     // @User: Standard
     665             :     GSCALAR(RTL_altitude,        "RTL_ALTITUDE",   ALT_HOLD_HOME),
     666             : 
     667             :     // @Param: CRUISE_ALT_FLOOR
     668             :     // @DisplayName: Minimum altitude for FBWB and CRUISE mode
     669             :     // @Description: This is the minimum altitude in meters (above home) that FBWB and CRUISE modes will allow. If you attempt to descend below this altitude then the plane will level off. It will also force a climb to this altitude if below in these modes. A value of zero means no limit.
     670             :     // @Units: m
     671             :     // @User: Standard
     672             :     GSCALAR(cruise_alt_floor,   "CRUISE_ALT_FLOOR", CRUISE_ALT_FLOOR),
     673             : 
     674             :     // @Param: FLAP_1_PERCNT
     675             :     // @DisplayName: Flap 1 percentage
     676             :     // @Description: The percentage change in flap position when FLAP_1_SPEED is reached. Use zero to disable flaps
     677             :     // @Range: 0 100
     678             :     // @Increment: 1
     679             :     // @Units: %
     680             :     // @User: Advanced
     681             :     GSCALAR(flap_1_percent,         "FLAP_1_PERCNT",  FLAP_1_PERCENT),
     682             : 
     683             :     // @Param: FLAP_1_SPEED
     684             :     // @DisplayName: Flap 1 speed
     685             :     // @Description: The speed in meters per second at which to engage FLAP_1_PERCENT of flaps. Note that FLAP_1_SPEED should be greater than or equal to FLAP_2_SPEED
     686             :     // @Range: 0 100
     687             :         // @Increment: 1
     688             :     // @Units: m/s
     689             :     // @User: Advanced
     690             :     GSCALAR(flap_1_speed,           "FLAP_1_SPEED",   FLAP_1_SPEED),
     691             : 
     692             :     // @Param: FLAP_2_PERCNT
     693             :     // @DisplayName: Flap 2 percentage
     694             :     // @Description: The percentage change in flap position when FLAP_2_SPEED is reached. Use zero to disable flaps
     695             :     // @Range: 0 100
     696             :         // @Units: %
     697             :     // @Increment: 1
     698             :     // @User: Advanced
     699             :     GSCALAR(flap_2_percent,         "FLAP_2_PERCNT",  FLAP_2_PERCENT),
     700             : 
     701             :     // @Param: FLAP_2_SPEED
     702             :     // @DisplayName: Flap 2 speed
     703             :     // @Description: The speed in meters per second at which to engage FLAP_2_PERCENT of flaps. Note that FLAP_1_SPEED should be greater than or equal to FLAP_2_SPEED
     704             :     // @Range: 0 100
     705             :         // @Units: m/s
     706             :         // @Increment: 1
     707             :     // @User: Advanced
     708             :     GSCALAR(flap_2_speed,           "FLAP_2_SPEED",   FLAP_2_SPEED),
     709             : 
     710             : #if HAL_WITH_IO_MCU
     711             :     // @Param: OVERRIDE_CHAN
     712             :     // @DisplayName: IO override channel
     713             :     // @Description: If set to a non-zero value then this is an RC input channel number to use for giving IO manual control in case the main FMU microcontroller on a board with a IO co-processor fails. When this RC input channel goes above 1750 the FMU microcontroller will no longer be involved in controlling the servos and instead the IO microcontroller will directly control the servos. Note that IO manual control will be automatically activated if the FMU crashes for any reason. This parameter allows you to test for correct manual behaviour without actually crashing the FMU. This parameter is can be set to a non-zero value either for ground testing purposes or for giving the effect of an external override control board. Note that you may set OVERRIDE_CHAN to the same channel as FLTMODE_CH to get IO based override when in flight mode 6. Note that when override is triggered due to a FMU crash the 6 auxiliary output channels on the FMU will no longer be updated, so all the flight controls you need must be assigned to the first 8 channels on boards with an IOMCU.
     714             :     // @Range: 0 16
     715             :     // @Increment: 1
     716             :     // @User: Advanced
     717             :     GSCALAR(override_channel,      "OVERRIDE_CHAN",  0),
     718             : #endif
     719             : 
     720             :     // @Param: RTL_AUTOLAND
     721             :     // @DisplayName: RTL auto land
     722             :     // @Description: Automatically begin landing sequence after arriving at RTL location. This requires the addition of a DO_LAND_START mission item, which acts as a marker for the start of a landing sequence. The closest landing sequence will be chosen to the current location For a value of 1 a rally point will be used instead of HOME if in range (see rally point documentation).If this is set to 0 and there is a DO_LAND_START or DO_RETURN_PATH_START mission item then you will get an arming check failure. You can set to a value of 3 to avoid the arming check failure and use the DO_LAND_START for go-around (see wiki for aborting autolandings) without it changing RTL behaviour.
     723             :     // @Values: 0:Disable,1:Fly HOME then land via DO_LAND_START mission item, 2:Go directly to landing sequence via DO_LAND_START mission item, 3:OnlyForGoAround, 4:Go directly to landing sequence via DO_RETURN_PATH_START mission item
     724             :     // @User: Standard
     725             :     GSCALAR(rtl_autoland,         "RTL_AUTOLAND",   float(RtlAutoland::RTL_DISABLE)),
     726             : 
     727             :     // @Param: CRASH_ACC_THRESH
     728             :     // @DisplayName: Crash Deceleration Threshold
     729             :     // @Description: X-Axis deceleration threshold to notify the crash detector that there was a possible impact which helps disarm the motor quickly after a crash. This value should be much higher than normal negative x-axis forces during normal flight, check flight log files to determine the average IMU.x values for your aircraft and motor type. Higher value means less sensitive (triggers on higher impact). For electric planes that don't vibrate much during fight a value of 25 is good (that's about 2.5G). For petrol/nitro planes you'll want a higher value. Set to 0 to disable the collision detector.
     730             :     // @Units: m/s/s
     731             :     // @Range: 0 127
     732             :     // @Increment: 1
     733             :     // @User: Advanced
     734             :     GSCALAR(crash_accel_threshold,          "CRASH_ACC_THRESH",   0),
     735             : 
     736             :     // @Param: CRASH_DETECT
     737             :     // @DisplayName: Crash Detection
     738             :     // @Description: Automatically detect a crash during AUTO flight and perform the bitmask selected action(s). Disarm will turn off motor for safety and to help against burning out ESC and motor. Set to 0 to disable crash detection.
     739             :     // @Bitmask: 0:Disarm
     740             :     // @User: Advanced
     741             :     ASCALAR(crash_detection_enable,         "CRASH_DETECT",   0),
     742             : 
     743             :     // @Group: BARO
     744             :     // @Path: ../libraries/AP_Baro/AP_Baro.cpp
     745             :     GOBJECT(barometer, "BARO", AP_Baro),
     746             : 
     747             :     // GPS driver
     748             :     // @Group: GPS
     749             :     // @Path: ../libraries/AP_GPS/AP_GPS.cpp
     750             :     GOBJECT(gps, "GPS", AP_GPS),
     751             : 
     752             : #if AP_CAMERA_ENABLED
     753             :     // @Group: CAM
     754             :     // @Path: ../libraries/AP_Camera/AP_Camera.cpp
     755             :     GOBJECT(camera, "CAM", AP_Camera),
     756             : #endif
     757             : 
     758             :     // @Group: ARMING_
     759             :     // @Path: AP_Arming_Plane.cpp,../libraries/AP_Arming/AP_Arming.cpp
     760             :     GOBJECT(arming,                 "ARMING_", AP_Arming_Plane),
     761             : 
     762             : #if AP_RELAY_ENABLED
     763             :     // @Group: RELAY
     764             :     // @Path: ../libraries/AP_Relay/AP_Relay.cpp
     765             :     GOBJECT(relay,                  "RELAY", AP_Relay),
     766             : #endif
     767             : 
     768             : #if HAL_PARACHUTE_ENABLED
     769             :         // @Group: CHUTE_
     770             :     // @Path: ../libraries/AP_Parachute/AP_Parachute.cpp
     771             :     GOBJECT(parachute,          "CHUTE_", AP_Parachute),
     772             : #endif
     773             : 
     774             : #if AP_RANGEFINDER_ENABLED
     775             :     // @Group: RNGFND
     776             :     // @Path: ../libraries/AP_RangeFinder/AP_RangeFinder.cpp
     777             :     GOBJECT(rangefinder,            "RNGFND", RangeFinder),
     778             : 
     779             :     // @Param: RNGFND_LANDING
     780             :     // @DisplayName: Enable use of rangefinder
     781             :     // @Description: Sets the use of a rangefinder for automatic landing and other use cases. When enabled for landing and takeoff the rangefinder will be used both on the landing approach and for final flare as well as as VTOL landing and for takeoffs and throttle suppression when close to the ground. When enabled for assist the rangefinder will be used for VTOL assistance. When enabled for climb the rangefinder will be used for the initial climb in QRTL and AUTO. Set to 0 to disable use of the rangefinder.
     782             :     // @Bitmask: 0:All, 1:TakeoffAndLanding, 2:Assist, 3:InitialClimb
     783             :     // @User: Standard
     784             :     GSCALAR(rangefinder_landing,    "RNGFND_LANDING",   0),
     785             : #endif
     786             : 
     787             : #if AP_TERRAIN_AVAILABLE
     788             :     // @Group: TERRAIN_
     789             :     // @Path: ../libraries/AP_Terrain/AP_Terrain.cpp
     790             :     GOBJECT(terrain,                "TERRAIN_", AP_Terrain),
     791             : #endif
     792             : 
     793             : #if HAL_ADSB_ENABLED
     794             :     // @Group: ADSB_
     795             :     // @Path: ../libraries/AP_ADSB/AP_ADSB.cpp
     796             :     GOBJECT(adsb,                "ADSB_", AP_ADSB),
     797             : #endif  // HAL_ADSB_ENABLED
     798             : 
     799             : #if AP_ADSB_AVOIDANCE_ENABLED
     800             :     // @Group: AVD_
     801             :     // @Path: ../libraries/AP_Avoidance/AP_Avoidance.cpp
     802             :     GOBJECT(avoidance_adsb, "AVD_", AP_Avoidance_Plane),
     803             : #endif  // AP_ADSB_AVOIDANCE_ENABLED
     804             : 
     805             : #if HAL_QUADPLANE_ENABLED
     806             :     // @Group: Q_
     807             :     // @Path: quadplane.cpp
     808             :     GOBJECT(quadplane,           "Q_", QuadPlane),
     809             : #endif
     810             : 
     811             : #if AP_TUNING_ENABLED
     812             :     // @Group: TUNE_
     813             :     // @Path: tuning.cpp,../libraries/AP_Tuning/AP_Tuning.cpp
     814             :     GOBJECT(tuning,           "TUNE_", AP_Tuning_Plane),
     815             : #endif
     816             : 
     817             : #if HAL_QUADPLANE_ENABLED
     818             :     // @Group: Q_A_
     819             :     // @Path: ../libraries/AC_AttitudeControl/AC_AttitudeControl.cpp,../libraries/AC_AttitudeControl/AC_AttitudeControl_Multi.cpp
     820             :     { "Q_A_", (const void *)&plane.quadplane.attitude_control,
     821             :       {group_info : AC_AttitudeControl_Multi::var_info}, AP_PARAM_FLAG_POINTER,
     822             :       Parameters::k_param_q_attitude_control, AP_PARAM_GROUP },
     823             : #endif
     824             : 
     825             :     // @Group: RLL
     826             :     // @Path: ../libraries/APM_Control/AP_RollController.cpp
     827             :     GOBJECT(rollController,         "RLL",   AP_RollController),
     828             : 
     829             :     // @Group: PTCH
     830             :     // @Path: ../libraries/APM_Control/AP_PitchController.cpp
     831             :     GOBJECT(pitchController,        "PTCH",  AP_PitchController),
     832             : 
     833             :     // @Group: YAW
     834             :     // @Path: ../libraries/APM_Control/AP_YawController.cpp
     835             :     GOBJECT(yawController,          "YAW",   AP_YawController),
     836             : 
     837             :     // @Group: STEER2SRV_
     838             :     // @Path: ../libraries/APM_Control/AP_SteerController.cpp
     839             :         GOBJECT(steerController,        "STEER2SRV_",   AP_SteerController),
     840             : 
     841             :         // variables not in the g class which contain EEPROM saved variables
     842             : 
     843             :     // @Group: COMPASS_
     844             :     // @Path: ../libraries/AP_Compass/AP_Compass.cpp
     845             :     GOBJECT(compass,                "COMPASS_",     Compass),
     846             : 
     847             :     // @Group: SCHED_
     848             :     // @Path: ../libraries/AP_Scheduler/AP_Scheduler.cpp
     849             :     GOBJECT(scheduler, "SCHED_", AP_Scheduler),
     850             : 
     851             :     // @Group: RCMAP_
     852             :     // @Path: ../libraries/AP_RCMapper/AP_RCMapper.cpp
     853             :     GOBJECT(rcmap,                "RCMAP_",         RCMapper),
     854             : 
     855             :     // SR0 through SR6 were here
     856             : 
     857             :     // @Group: INS
     858             :     // @Path: ../libraries/AP_InertialSensor/AP_InertialSensor.cpp
     859             :     GOBJECT(ins,                    "INS", AP_InertialSensor),
     860             : 
     861             :     // @Group: AHRS_
     862             :     // @Path: ../libraries/AP_AHRS/AP_AHRS.cpp
     863             :     GOBJECT(ahrs,                   "AHRS_",    AP_AHRS),
     864             : 
     865             :     // Airspeed was here
     866             : 
     867             :     // @Group: NAVL1_
     868             :     // @Path: ../libraries/AP_L1_Control/AP_L1_Control.cpp
     869             :     GOBJECT(L1_controller,         "NAVL1_",   AP_L1_Control),
     870             : 
     871             :     // @Group: TECS_
     872             :     // @Path: ../libraries/AP_TECS/AP_TECS.cpp
     873             :     GOBJECT(TECS_controller,         "TECS_",   AP_TECS),
     874             : 
     875             : #if HAL_MOUNT_ENABLED
     876             :     // @Group: MNT
     877             :     // @Path: ../libraries/AP_Mount/AP_Mount.cpp
     878             :     GOBJECT(camera_mount,           "MNT",  AP_Mount),
     879             : #endif
     880             : 
     881             :     // @Group: BATT
     882             :     // @Path: ../libraries/AP_BattMonitor/AP_BattMonitor.cpp
     883             :     GOBJECT(battery,                "BATT", AP_BattMonitor),
     884             : 
     885             :     // @Group: BRD_
     886             :     // @Path: ../libraries/AP_BoardConfig/AP_BoardConfig.cpp
     887             :     GOBJECT(BoardConfig,            "BRD_",       AP_BoardConfig),
     888             : 
     889             : #if HAL_MAX_CAN_PROTOCOL_DRIVERS
     890             :     // @Group: CAN_
     891             :     // @Path: ../libraries/AP_CANManager/AP_CANManager.cpp
     892             :     GOBJECT(can_mgr,        "CAN_",       AP_CANManager),
     893             : #endif
     894             : 
     895             : #if AP_SIM_ENABLED
     896             :     // @Group: SIM_
     897             :     // @Path: ../libraries/SITL/SITL.cpp
     898             :     GOBJECT(sitl, "SIM_", SITL::SIM),
     899             : #endif
     900             : 
     901             : #if AP_ADVANCEDFAILSAFE_ENABLED
     902             :     // @Group: AFS_
     903             :     // @Path: ../libraries/AP_AdvancedFailsafe/AP_AdvancedFailsafe.cpp
     904             :     GOBJECT(afs,  "AFS_", AP_AdvancedFailsafe),
     905             : #endif
     906             : 
     907             : #if AP_OPTICALFLOW_ENABLED
     908             :     // @Group: FLOW
     909             :     // @Path: ../libraries/AP_OpticalFlow/AP_OpticalFlow.cpp
     910             :     GOBJECT(optflow,   "FLOW", AP_OpticalFlow),
     911             : #endif
     912             : 
     913             :     // @Group: MIS_
     914             :     // @Path: ../libraries/AP_Mission/AP_Mission.cpp
     915             :     GOBJECT(mission, "MIS_",       AP_Mission),
     916             : 
     917             : #if HAL_RALLY_ENABLED
     918             :     // @Group: RALLY_
     919             :     // @Path: ../libraries/AP_Rally/AP_Rally.cpp
     920             :     GOBJECT(rally,  "RALLY_",       AP_Rally),
     921             : #endif
     922             : 
     923             : #if HAL_NAVEKF2_AVAILABLE
     924             :     // @Group: EK2_
     925             :     // @Path: ../libraries/AP_NavEKF2/AP_NavEKF2.cpp
     926             :     GOBJECTN(ahrs.ekf2.EKF2, NavEKF2, "EK2_", NavEKF2),
     927             : #endif
     928             : 
     929             : #if HAL_NAVEKF3_AVAILABLE
     930             :     // @Group: EK3_
     931             :     // @Path: ../libraries/AP_NavEKF3/AP_NavEKF3.cpp
     932             :     GOBJECTN(ahrs.ekf3.EKF3, NavEKF3, "EK3_", NavEKF3),
     933             : #endif
     934             : 
     935             : #if AP_RSSI_ENABLED
     936             :     // @Group: RSSI_
     937             :     // @Path: ../libraries/AP_RSSI/AP_RSSI.cpp
     938             :     GOBJECT(rssi, "RSSI_",  AP_RSSI),
     939             : #endif
     940             : 
     941             :     // @Group: NTF_
     942             :     // @Path: ../libraries/AP_Notify/AP_Notify.cpp
     943             :     GOBJECT(notify, "NTF_",  AP_Notify),
     944             : 
     945             :     // @Group: 
     946             :     // @Path: Parameters.cpp
     947             :     GOBJECT(g2, "",  ParametersG2),
     948             :     
     949             :     // @Group: LAND_
     950             :     // @Path: ../libraries/AP_Landing/AP_Landing.cpp
     951             :     GOBJECT(landing, "LAND_", AP_Landing),
     952             : 
     953             : #if OSD_ENABLED || OSD_PARAM_ENABLED
     954             :     // @Group: OSD
     955             :     // @Path: ../libraries/AP_OSD/AP_OSD.cpp
     956             :     GOBJECT(osd, "OSD", AP_OSD),
     957             : #endif
     958             : 
     959             :     // @Group: TKOFF_
     960             :     // @Path: mode_takeoff.cpp
     961             :     GOBJECT(mode_takeoff, "TKOFF_", ModeTakeoff),
     962             : 
     963             : #if MODE_AUTOLAND_ENABLED
     964             :     // @Group: AUTOLAND_
     965             :     // @Path: mode_autoland.cpp
     966             :     GOBJECT(mode_autoland, "AUTOLAND_", ModeAutoLand),
     967             : #endif
     968             : 
     969             : #if AP_PLANE_GLIDER_PULLUP_ENABLED
     970             :     // @Group: PUP_
     971             :     // @Path: pullup.cpp
     972             :     GOBJECTN(mode_auto.pullup, pullup, "PUP_", GliderPullup),
     973             : #endif
     974             :     
     975             :     // @Group:
     976             :     // @Path: ../libraries/AP_Vehicle/AP_Vehicle.cpp
     977             :     PARAM_VEHICLE_INFO,
     978             : 
     979             : #if AP_QUICKTUNE_ENABLED
     980             :     // @Group: QWIK_
     981             :     // @Path: ../libraries/AP_Quicktune/AP_Quicktune.cpp
     982             :     GOBJECT(quicktune, "QWIK_",  AP_Quicktune),
     983             : #endif
     984             : 
     985             : #if HAL_GCS_ENABLED
     986             :     // @Group: MAV
     987             :     // @Path: ../libraries/GCS_MAVLink/GCS.cpp
     988             :     GOBJECT(_gcs,           "MAV",  GCS),
     989             : #endif
     990             : 
     991             :     AP_VAREND
     992             : };
     993             : 
     994             : /*
     995             :   2nd group of parameters
     996             :  */
     997             : const AP_Param::GroupInfo ParametersG2::var_info[] = {
     998             : 
     999             : #if HAL_BUTTON_ENABLED
    1000             :     // @Group: BTN_
    1001             :     // @Path: ../libraries/AP_Button/AP_Button.cpp
    1002             :     AP_SUBGROUPPTR(button_ptr, "BTN_", 1, ParametersG2, AP_Button),
    1003             : #endif
    1004             : 
    1005             : #if AP_ICENGINE_ENABLED
    1006             :     // @Group: ICE_
    1007             :     // @Path: ../libraries/AP_ICEngine/AP_ICEngine.cpp
    1008             :     AP_SUBGROUPINFO(ice_control, "ICE_", 2, ParametersG2, AP_ICEngine),
    1009             : #endif
    1010             : 
    1011             :     // 3 was used by prototype for servo_channels
    1012             : 
    1013             :     // 4 was used by SYSID_ENFORCE
    1014             : 
    1015             :     // AP_Stats was 5
    1016             : 
    1017             :     // @Group: SERVO
    1018             :     // @Path: ../libraries/SRV_Channel/SRV_Channels.cpp
    1019             :     AP_SUBGROUPINFO(servo_channels, "SERVO", 6, ParametersG2, SRV_Channels),
    1020             : 
    1021             :     // @Group: RC
    1022             :     // @Path: ../libraries/RC_Channel/RC_Channels_VarInfo.h
    1023             :     AP_SUBGROUPINFO(rc_channels, "RC", 7, ParametersG2, RC_Channels_Plane),
    1024             :     
    1025             : #if HAL_SOARING_ENABLED
    1026             :     // @Group: SOAR_
    1027             :     // @Path: ../libraries/AP_Soaring/AP_Soaring.cpp
    1028             :     AP_SUBGROUPINFO(soaring_controller, "SOAR_", 8, ParametersG2, SoaringController),
    1029             : #endif
    1030             :   
    1031             :     // @Param: RUDD_DT_GAIN
    1032             :     // @DisplayName: rudder differential thrust gain
    1033             :     // @Description: gain control from rudder to differential thrust
    1034             :     // @Range: 0 100
    1035             :     // @Units: %
    1036             :     // @Increment: 1
    1037             :     // @User: Standard
    1038             :     AP_GROUPINFO("RUDD_DT_GAIN", 9, ParametersG2, rudd_dt_gain, 10),
    1039             : 
    1040             :     // @Param: MANUAL_RCMASK
    1041             :     // @DisplayName: Manual R/C pass-through mask
    1042             :     // @Description: Mask of R/C channels to pass directly to corresponding output channel when in MANUAL mode. When in any mode except MANUAL the channels selected with this option behave normally. This parameter is designed to allow for complex mixing strategies to be used for MANUAL flight using transmitter based mixing. Note that when this option is used you need to be very careful with pre-flight checks to ensure that the output is correct both in MANUAL and non-MANUAL modes.
    1043             :     // @Bitmask: 0:Chan1,1:Chan2,2:Chan3,3:Chan4,4:Chan5,5:Chan6,6:Chan7,7:Chan8,8:Chan9,9:Chan10,10:Chan11,11:Chan12,12:Chan13,13:Chan14,14:Chan15,15:Chan16
    1044             :     // @User: Advanced
    1045             :     AP_GROUPINFO("MANUAL_RCMASK", 10, ParametersG2, manual_rc_mask, 0),
    1046             :     
    1047             :     // @Param: HOME_RESET_ALT
    1048             :     // @DisplayName: Home reset altitude threshold
    1049             :     // @Description: When the aircraft is within this altitude of the home waypoint, while disarmed it will automatically update the home position. Set to 0 to continuously reset it.
    1050             :     // @Values: -1:Never reset,0:Always reset
    1051             :     // @Range: -1 127
    1052             :     // @Units: m
    1053             :     // @User: Advanced
    1054             :     AP_GROUPINFO("HOME_RESET_ALT", 11, ParametersG2, home_reset_threshold, 0),
    1055             : 
    1056             :     // 12 was AP_Gripper
    1057             : 
    1058             :     // @Param: FLIGHT_OPTIONS
    1059             :     // @DisplayName: Flight mode options
    1060             :     // @Description: Flight mode specific options
    1061             :     // @Bitmask: 0: Rudder mixing in direct flight modes only (Manual/Stabilize/Acro)
    1062             :     // @Bitmask: 1: Use centered throttle in Cruise or FBWB to indicate trim airspeed
    1063             :     // @Bitmask: 2: Disable attitude check for takeoff arming
    1064             :     // @Bitmask: 3: Force target airspeed to trim airspeed in Cruise or FBWB
    1065             :     // @Bitmask: 4: Climb to RTL_ALTITUDE before turning for RTL
    1066             :     // @Bitmask: 5: Enable yaw damper in acro mode
    1067             :     // @Bitmask: 6: Suppress speed scaling during auto takeoffs to be 1 or less to prevent oscillations without airspeed sensor.
    1068             :     // @Bitmask: 7: EnableDefaultAirspeed for takeoff
    1069             :     // @Bitmask: 8: Remove the PTCH_TRIM_DEG on the GCS horizon
    1070             :     // @Bitmask: 9: Remove the PTCH_TRIM_DEG on the OSD horizon
    1071             :     // @Bitmask: 10: Adjust mid-throttle to be TRIM_THROTTLE in non-auto throttle modes except MANUAL
    1072             :     // @Bitmask: 11: Disable suppression of fixed wing rate gains in ground mode
    1073             :     // @Bitmask: 12: Enable FBWB style loiter altitude control
    1074             :     // @Bitmask: 13: Indicate takeoff waiting for neutral rudder with flight control surfaces
    1075             :     // @Bitmask: 14: In AUTO - climb to next waypoint altitude immediately instead of linear climb
    1076             :     // @Bitmask: 15: Enable autoflap in manual modes and use minimum of target and actual speed for flap setting
    1077             :     // @Bitmask: 16: Enable full aerodynamic load factor-based roll limits when an airspeed sensor is enabled and AIRSPEED_STALL is set
    1078             :     // @Bitmask: 17: Reset ALT_OFFSET on flight mode or AUTO waypoint changes
    1079             :     // @User: Advanced
    1080             :     AP_GROUPINFO("FLIGHT_OPTIONS", 13, ParametersG2, flight_options, 0),
    1081             : 
    1082             :     // 14 was AP_Scripting
    1083             : 
    1084             :     // @Param: TKOFF_ACCEL_CNT
    1085             :     // @DisplayName: Takeoff throttle acceleration count
    1086             :     // @Description: This is the number of acceleration events to require for arming with TKOFF_THR_MINACC. The default is 1, which means a single forward acceleration above TKOFF_THR_MINACC will arm. By setting this higher than 1 you can require more forward/backward movements to arm.
    1087             :     // @Range: 1 10
    1088             :     // @User: Standard
    1089             :     AP_GROUPINFO("TKOFF_ACCEL_CNT", 15, ParametersG2, takeoff_throttle_accel_count, 1),
    1090             : 
    1091             : #if AP_LANDINGGEAR_ENABLED
    1092             :     // @Group: LGR_
    1093             :     // @Path: ../libraries/AP_LandingGear/AP_LandingGear.cpp
    1094             :     AP_SUBGROUPINFO(landing_gear, "LGR_", 16, ParametersG2, AP_LandingGear),
    1095             : #endif
    1096             : 
    1097             :     // @Param: DSPOILER_CROW_W1
    1098             :     // @DisplayName: Differential spoiler crow flaps outer weight
    1099             :     // @Description: This is amount of deflection applied to the two outer surfaces for differential spoilers for flaps to give crow flaps. It is a number from 0 to 100. At zero no crow flaps are applied. A recommended starting value is 25.
    1100             :     // @Range: 0 100
    1101             :     // @Units: %
    1102             :     // @Increment: 1
    1103             :     // @User: Advanced
    1104             :     AP_GROUPINFO("DSPOILER_CROW_W1", 17, ParametersG2, crow_flap_weight_outer, 0),
    1105             : 
    1106             :     // @Param: DSPOILER_CROW_W2
    1107             :     // @DisplayName: Differential spoiler crow flaps inner weight
    1108             :     // @Description: This is amount of deflection applied to the two inner surfaces for differential spoilers for flaps to give crow flaps. It is a number from 0 to 100. At zero no crow flaps are applied. A recommended starting value is 45.
    1109             :     // @Range: 0 100
    1110             :     // @Units: %
    1111             :     // @Increment: 1
    1112             :     // @User: Advanced
    1113             :     AP_GROUPINFO("DSPOILER_CROW_W2", 18, ParametersG2, crow_flap_weight_inner, 0),
    1114             : 
    1115             :     // @Param: TKOFF_TIMEOUT
    1116             :     // @DisplayName: Takeoff timeout
    1117             :     // @Description: This is the timeout for an automatic takeoff. If this is non-zero and the aircraft does not reach a ground speed of at least 4 m/s within this number of seconds then the takeoff is aborted and the vehicle disarmed. If the value is zero then no timeout applies.
    1118             :     // @Range: 0 120
    1119             :     // @Increment: 1
    1120             :     // @Units: s
    1121             :     // @User: Standard
    1122             :     AP_GROUPINFO("TKOFF_TIMEOUT", 19, ParametersG2, takeoff_timeout, 0),
    1123             : 
    1124             :     // @Param: DSPOILER_OPTS
    1125             :     // @DisplayName: Differential spoiler and crow flaps options
    1126             :     // @Description: Differential spoiler and crow flaps options.  Progressive crow flaps only first (0-50% flap in) then crow flaps (50 - 100% flap in).
    1127             :     // @Bitmask: 0:Pitch input, 1:use both control surfaces on each wing for roll, 2:Progressive crow flaps
    1128             :     // @User: Advanced
    1129             :     AP_GROUPINFO("DSPOILER_OPTS", 20, ParametersG2, crow_flap_options, 3),
    1130             : 
    1131             :     // @Param: DSPOILER_AILMTCH
    1132             :     // @DisplayName: Differential spoiler aileron matching
    1133             :     // @Description: This scales down the inner flaps so less than full downwards range can be used for differential spoiler and full span ailerons, 100 is use full range, upwards travel is unaffected
    1134             :     // @Range: 0 100
    1135             :     // @Units: %
    1136             :     // @Increment: 1
    1137             :     // @User: Advanced
    1138             :     AP_GROUPINFO("DSPOILER_AILMTCH", 21, ParametersG2, crow_flap_aileron_matching, 100),
    1139             : 
    1140             : 
    1141             :     // 22 was EFI
    1142             : 
    1143             :     // @Param: FWD_BAT_VOLT_MAX
    1144             :     // @DisplayName: Forward throttle battery voltage compensation maximum voltage
    1145             :     // @Description: Forward throttle battery voltage compensation maximum voltage (voltage above this will have no additional scaling effect on thrust). Recommend 4.2 * cell count, 0 = Disabled. Recommend THR_MAX is set to no more than 100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX, THR_MIN is set to no less than -100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX and climb descent rate limits are set accordingly.
    1146             :     // @Range: 6 35
    1147             :     // @Units: V
    1148             :     // @Increment: 0.1
    1149             :     // @User: Advanced
    1150             :     AP_GROUPINFO("FWD_BAT_VOLT_MAX", 23, ParametersG2, fwd_batt_cmp.batt_voltage_max, 0.0f),
    1151             : 
    1152             :     // @Param: FWD_BAT_VOLT_MIN
    1153             :     // @DisplayName: Forward throttle battery voltage compensation minimum voltage
    1154             :     // @Description: Forward throttle battery voltage compensation minimum voltage (voltage below this will have no additional scaling effect on thrust).  Recommend 3.5 * cell count, 0 = Disabled. Recommend THR_MAX is set to no more than 100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX, THR_MIN is set to no less than -100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX and climb descent rate limits are set accordingly.
    1155             :     // @Range: 6 35
    1156             :     // @Units: V
    1157             :     // @Increment: 0.1
    1158             :     // @User: Advanced
    1159             :     AP_GROUPINFO("FWD_BAT_VOLT_MIN", 24, ParametersG2, fwd_batt_cmp.batt_voltage_min, 0.0f),
    1160             : 
    1161             :     // @Param: FWD_BAT_IDX
    1162             :     // @DisplayName: Forward throttle battery compensation index
    1163             :     // @Description: Which battery monitor should be used for doing compensation for the forward throttle
    1164             :     // @Values: 0:First battery, 1:Second battery
    1165             :     // @Range: 0 15
    1166             :     // @User: Advanced
    1167             :     AP_GROUPINFO("FWD_BAT_IDX", 25, ParametersG2, fwd_batt_cmp.batt_idx, 0),
    1168             : 
    1169             :     // @Param: FS_EKF_THRESH
    1170             :     // @DisplayName: EKF failsafe variance threshold
    1171             :     // @Description: Allows setting the maximum acceptable compass and velocity variance used to check navigation health in VTOL modes
    1172             :     // @Values: 0.6:Strict, 0.8:Default, 1.0:Relaxed
    1173             :     // @Range: 0.6 1.0
    1174             :     // @User: Advanced
    1175             :     AP_GROUPINFO("FS_EKF_THRESH", 26, ParametersG2, fs_ekf_thresh, FS_EKF_THRESHOLD_DEFAULT),
    1176             : 
    1177             :     // @Param: RTL_CLIMB_MIN
    1178             :     // @DisplayName: RTL minimum climb
    1179             :     // @Description: The vehicle will climb this many m during the initial climb portion of the RTL. During this time the roll will be limited to LEVEL_ROLL_LIMIT degrees.
    1180             :     // @Units: m
    1181             :     // @Range: 0 30
    1182             :     // @Increment: 1
    1183             :     // @User: Standard
    1184             :     AP_GROUPINFO("RTL_CLIMB_MIN", 27, ParametersG2, rtl_climb_min, 0),
    1185             : 
    1186             : #if AP_PLANE_OFFBOARD_GUIDED_SLEW_ENABLED
    1187             :     // @Group: GUIDED_
    1188             :     // @Path: ../libraries/AC_PID/AC_PID.cpp
    1189             :     AP_SUBGROUPINFO(guidedHeading, "GUIDED_", 28, ParametersG2, AC_PID),
    1190             : #endif // AP_PLANE_OFFBOARD_GUIDED_SLEW_ENABLED
    1191             : 
    1192             :     // @Param: MAN_EXPO_ROLL
    1193             :     // @DisplayName: Manual control expo for roll
    1194             :     // @Description: Percentage exponential for roll input in MANUAL, ACRO and TRAINING modes
    1195             :     // @Range: 0 100
    1196             :     // @Increment: 1
    1197             :     // @User: Standard
    1198             :     AP_GROUPINFO("MAN_EXPO_ROLL", 29, ParametersG2, man_expo_roll, 0),
    1199             : 
    1200             :     // @Param: MAN_EXPO_PITCH
    1201             :     // @DisplayName: Manual input expo for pitch
    1202             :     // @Description: Percentage exponential for pitch input in MANUAL, ACRO and TRAINING modes
    1203             :     // @Range: 0 100
    1204             :     // @Increment: 1
    1205             :     // @User: Standard
    1206             :     AP_GROUPINFO("MAN_EXPO_PITCH", 30, ParametersG2, man_expo_pitch, 0),
    1207             : 
    1208             :     // @Param: MAN_EXPO_RUDDER
    1209             :     // @DisplayName: Manual input expo for rudder
    1210             :     // @Description: Percentage exponential for rudder input in MANUAL, ACRO and TRAINING modes
    1211             :     // @Range: 0 100
    1212             :     // @Increment: 1
    1213             :     // @User: Standard
    1214             :     AP_GROUPINFO("MAN_EXPO_RUDDER", 31, ParametersG2, man_expo_rudder, 0),
    1215             : 
    1216             :     // @Param: ONESHOT_MASK
    1217             :     // @DisplayName: Oneshot output mask
    1218             :     // @Description: Mask of output channels to use oneshot on
    1219             :     // @User: Advanced
    1220             :     // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16, 16: Servo 17, 17: Servo 18, 18: Servo 19, 19: Servo 20, 20: Servo 21, 21: Servo 22, 22: Servo 23, 23: Servo 24, 24: Servo 25, 25: Servo 26, 26: Servo 27, 27: Servo 28, 28: Servo 29, 29: Servo 30, 30: Servo 31, 31: Servo 32
    1221             :      AP_GROUPINFO("ONESHOT_MASK", 32, ParametersG2, oneshot_mask, 0),
    1222             : 
    1223             : #if AP_SCRIPTING_ENABLED && AP_FOLLOW_ENABLED
    1224             :     // @Group: FOLL
    1225             :     // @Path: ../libraries/AP_Follow/AP_Follow.cpp
    1226             :     AP_SUBGROUPINFO(follow, "FOLL", 33, ParametersG2, AP_Follow),
    1227             : #endif
    1228             : 
    1229             :     // @Param: AUTOTUNE_AXES
    1230             :     // @DisplayName: Autotune axis bitmask
    1231             :     // @Description: 1-byte bitmap of axes to autotune
    1232             :     // @Bitmask: 0:Roll,1:Pitch,2:Yaw
    1233             :     // @User: Standard
    1234             :     AP_GROUPINFO("AUTOTUNE_AXES", 34, ParametersG2, axis_bitmask, 7),
    1235             : 
    1236             : #if AC_PRECLAND_ENABLED
    1237             :     // @Group: PLND_
    1238             :     // @Path: ../libraries/AC_PrecLand/AC_PrecLand.cpp
    1239             :     AP_SUBGROUPINFO(precland, "PLND_", 35, ParametersG2, AC_PrecLand),
    1240             : #endif
    1241             : 
    1242             : #if AP_RANGEFINDER_ENABLED
    1243             :     // @Param: RNGFND_LND_ORNT
    1244             :     // @DisplayName: rangefinder landing orientation
    1245             :     // @Description: The orientation of rangefinder to use for landing detection. Should be set to Down for normal downward facing rangefinder and Back for rearward facing rangefinder for quadplane tailsitters. Custom orientation can be used with Custom1 or Custom2. The orientation must match at least one of the available rangefinders.
    1246             :     // @Values: 4:Back, 25:Down, 101:Custom1, 102:Custom2
    1247             :     // @User: Standard
    1248             :     AP_GROUPINFO("RNGFND_LND_ORNT", 36, ParametersG2, rangefinder_land_orient, ROTATION_PITCH_270),
    1249             : #endif
    1250             : 
    1251             :     // @Param: FWD_BAT_THR_CUT
    1252             :     // @DisplayName: Forward throttle cutoff battery voltage
    1253             :     // @Description: The estimated battery resting voltage below which the throttle is cut in auto-throttle modes. Measured on the battery used for forward throttle compensation (FWD_BAT_IDX). If set to zero, the throttle will not be cut due to low voltage, allowing the motor(s) to continue running until the battery is depleted. This should be set to the minimum operating voltage of you motor(s) or to a voltage level where minimal thrust is produced, to conserve the remaining battery power for the electronics and actuators.
    1254             :     // @Range: 0 35
    1255             :     // @Units: V
    1256             :     // @Increment: 0.1
    1257             :     // @User: Standard
    1258             :     AP_GROUPINFO("FWD_BAT_THR_CUT", 37, ParametersG2, fwd_batt_cmp.batt_voltage_throttle_cutoff, 0.0f),
    1259             : 
    1260             : #if AP_PLANE_SYSTEMID_ENABLED
    1261             :     // @Group: SID
    1262             :     // @Path: systemid.cpp
    1263             :     AP_SUBGROUPINFO(systemid, "SID", 38, ParametersG2, AP_SystemID),
    1264             : #endif
    1265             :     
    1266             :     // @Param: CLIMB_SLOPE_HGT
    1267             :     // @DisplayName: Climb slope minimum height
    1268             :     // @Description: Sets the minimum height above home at which the aircraft will apply a climb slope between waypoints. Below it, the aircraft will ascend immediately, and will only resume the requested trajectory upon reaching this height. This prevents unsafe behavior such as attempting to slowly gain altitude near obstacles. The default value ensures safe operations in most environments, but it can be adjusted based on specific terrain or operational needs.
    1269             :     // @Units: m
    1270             :     // @Range: 0 50
    1271             :     // @Increment: 1
    1272             :     // @User: Advanced
    1273             :     AP_GROUPINFO("CLIMB_SLOPE_HGT", 39, ParametersG2, waypoint_climb_slope_height_min, 25),
    1274             : 
    1275             :     // @Param: GUIDED_TIMEOUT
    1276             :     // @DisplayName: Timeout for external guided command.
    1277             :     // @Description: If external guided command was not received by this timeout, the vehicle will revert to regular GUIDED mode.
    1278             :     // @Units: s
    1279             :     // @Range: 0 10
    1280             :     // @Increment: 0.5
    1281             :     // @User: Advanced
    1282             :     AP_GROUPINFO("GUIDED_TIMEOUT", 40, ParametersG2, guided_timeout, 3.0f),
    1283             : 
    1284             : #if AP_RANGEFINDER_ENABLED
    1285             :     // @Param: RNGFND_LND_DIST
    1286             :     // @DisplayName: Rangefinder landing engagement distance
    1287             :     // @Description: The horizontal distance to the landing point at which the rangefinder engages when RNGFND_LANDING is enabled. This is useful for landing on platforms or small plateaus, and to avoid interference from uneven terrain or obstacles on approach. A value of 0 engages the rangefinder as soon as it reports valid readings within its range limits. Very small values are not recommended unless required by the landing scenario, as they can force large slope corrections near the ground, increase auto-abort frequency if LAND_ABORT_DEG is set, and provide no slope-correction benefit if the rangefinder is engaged after flare.
    1288             :     // @Range: 0 500
    1289             :     // @Units: m
    1290             :     // @Increment: 1
    1291             :     // @User: Standard
    1292             :     AP_GROUPINFO("RNGFND_LND_DIST", 41, ParametersG2, rangefinder_land_engage_dist_m, 0),
    1293             : #endif
    1294             : 
    1295             :     AP_GROUPEND
    1296             : };
    1297             : 
    1298         692 : ParametersG2::ParametersG2(void) :
    1299         692 :     unused_integer{1}
    1300             : #if HAL_BUTTON_ENABLED
    1301         692 :     ,button_ptr(&plane.button)
    1302             : #endif
    1303             : #if HAL_SOARING_ENABLED
    1304         692 :     ,soaring_controller(plane.TECS_controller, plane.aparm)
    1305             : #endif
    1306             : {
    1307         692 :     AP_Param::setup_object_defaults(this, var_info);
    1308         692 : }
    1309             : 
    1310         692 : void Plane::load_parameters(void)
    1311             : {
    1312         692 :     AP_Vehicle::load_parameters(g.format_version, Parameters::k_format_version);
    1313             : 
    1314             :     // setup defaults in SRV_Channels
    1315         692 :     g2.servo_channels.set_default_function(CH_1, SRV_Channel::k_aileron);
    1316         692 :     g2.servo_channels.set_default_function(CH_2, SRV_Channel::k_elevator);
    1317         692 :     g2.servo_channels.set_default_function(CH_3, SRV_Channel::k_throttle);
    1318         692 :     g2.servo_channels.set_default_function(CH_4, SRV_Channel::k_rudder);
    1319             : 
    1320             : #if HAL_QUADPLANE_ENABLED
    1321         692 :     if (quadplane.enable) {
    1322             :         // quadplanes needs a higher loop rate
    1323         201 :         AP_Param::set_default_by_name("SCHED_LOOP_RATE", 300);
    1324             :     }
    1325             : #endif
    1326             : 
    1327         692 :     AP_Param::set_frame_type_flags(AP_PARAM_FRAME_PLANE);
    1328             : 
    1329             :     // PARAMETER_CONVERSION - Added: Jun-2026 for FBWB_CLIMB_RATE width change
    1330         692 :     g.flybywire_climb_rate.convert_parameter_width(AP_PARAM_INT8);
    1331             : 
    1332             :     // PARAMETER_CONVERSION - Added: Jul-2025 for ArduPilot-4.7
    1333             : #if AP_RPM_ENABLED
    1334         692 :     AP_Param::convert_class(g.k_param_rpm_sensor_old, &rpm_sensor, rpm_sensor.var_info, 0, true, true);
    1335             : #endif
    1336             : 
    1337             :     // PARAMETER_CONVERSION - Added: Dec-2023 for ArduPlane-4.5
    1338             :     // Convert _CM (centimeter) parameters to meters and _CD (centidegrees) parameters to meters
    1339         692 :     g.pitch_trim.convert_centi_parameter(AP_PARAM_INT16);
    1340         692 :     aparm.airspeed_cruise.convert_centi_parameter(AP_PARAM_INT32);
    1341         692 :     aparm.min_groundspeed.convert_centi_parameter(AP_PARAM_INT32);
    1342         692 :     g.RTL_altitude.convert_centi_parameter(AP_PARAM_INT32);
    1343         692 :     g.cruise_alt_floor.convert_centi_parameter(AP_PARAM_INT16);
    1344         692 :     aparm.pitch_limit_max.convert_centi_parameter(AP_PARAM_INT16);
    1345         692 :     aparm.pitch_limit_min.convert_centi_parameter(AP_PARAM_INT16);
    1346             : 
    1347             :     // PARAMETER_CONVERSION - Added: Mar-2026 for THR_SLEWRATE width change
    1348             :     // Convert throttle slewrate parameters from int8 to int16 to support higher slew rates
    1349         692 :     aparm.throttle_slewrate.convert_parameter_width(AP_PARAM_INT8);
    1350         692 :     g.takeoff_throttle_slewrate.convert_parameter_width(AP_PARAM_INT8);
    1351         692 :     aparm.roll_limit.convert_centi_parameter(AP_PARAM_INT16);
    1352             : 
    1353         692 :     landing.convert_parameters();
    1354             : 
    1355             :     static const AP_Param::G2ObjectConversion g2_conversions[] {
    1356             : #if AP_STATS_ENABLED
    1357             :     // PARAMETER_CONVERSION - Added: Jan-2024 for Plane-4.6
    1358         692 :         { &stats, stats.var_info, 5 },
    1359             : #endif
    1360             : #if AP_SCRIPTING_ENABLED
    1361             :     // PARAMETER_CONVERSION - Added: Jan-2024 for Plane-4.6
    1362         692 :         { &scripting, scripting.var_info, 14 },
    1363             : #endif
    1364             : #if AP_GRIPPER_ENABLED
    1365             :     // PARAMETER_CONVERSION - Added: Feb-2024 for Plane-4.6
    1366         692 :         { &gripper, gripper.var_info, 12 },
    1367             : #endif
    1368         692 :     };
    1369             : 
    1370         692 :     AP_Param::convert_g2_objects(&g2, g2_conversions, ARRAY_SIZE(g2_conversions));
    1371             : 
    1372             :     // PARAMETER_CONVERSION - Added: Feb-2024 for Copter-4.6
    1373             : #if HAL_LOGGING_ENABLED
    1374         692 :     AP_Param::convert_class(g.k_param_logger, &logger, logger.var_info, 0, true);
    1375             : #endif
    1376             : 
    1377             :     static const AP_Param::TopLevelObjectConversion toplevel_conversions[] {
    1378             : #if AP_SERIALMANAGER_ENABLED
    1379             :         // PARAMETER_CONVERSION - Added: Feb-2024 for Plane-4.6
    1380         692 :         { &serial_manager, serial_manager.var_info, Parameters::k_param_serial_manager_old },
    1381             : #endif
    1382         692 :     };
    1383             : 
    1384         692 :     AP_Param::convert_toplevel_objects(toplevel_conversions, ARRAY_SIZE(toplevel_conversions));
    1385             : 
    1386             : #if HAL_GCS_ENABLED
    1387             :     // Move parameters into new MAV_ parameter namespace
    1388             :     // PARAMETER_CONVERSION - Added: Mar-2025 for ArduPilot-4.7
    1389             :     {
    1390             :         static const AP_Param::ConversionInfo gcs_conversion_info[] {
    1391             :             { Parameters::k_param_sysid_this_mav_old, 0, AP_PARAM_INT16,  "MAV_SYSID" },
    1392             :             { Parameters::k_param_sysid_my_gcs_old, 0, AP_PARAM_INT16, "MAV_GCS_SYSID" },
    1393             :             { Parameters::k_param_g2,  4, AP_PARAM_INT8, "MAV_OPTIONS" },
    1394             :             { Parameters::k_param_telem_delay_old,  0, AP_PARAM_INT8, "MAV_TELEM_DELAY" },
    1395             :         };
    1396         692 :         AP_Param::convert_old_parameters(&gcs_conversion_info[0], ARRAY_SIZE(gcs_conversion_info));
    1397             :     }
    1398             : #endif  // HAL_GCS_ENABLED
    1399         692 : }

Generated by: LCOV version 1.14