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

          Line data    Source code
       1             : #include "GCS_Plane.h"
       2             : #include "Plane.h"
       3             : 
       4      555335 : void GCS_Plane::update_vehicle_sensor_status_flags(void)
       5             : {
       6             :     // reverse thrust
       7      555335 :     if (plane.have_reverse_thrust()) {
       8           0 :         control_sensors_present |= MAV_SYS_STATUS_REVERSE_MOTOR;
       9             :     }
      10      555335 :     if (plane.have_reverse_thrust() && is_negative(SRV_Channels::get_output_scaled(SRV_Channel::k_throttle))) {
      11           0 :         control_sensors_enabled |= MAV_SYS_STATUS_REVERSE_MOTOR;
      12           0 :         control_sensors_health |= MAV_SYS_STATUS_REVERSE_MOTOR;
      13             :     }
      14             : 
      15             :     // flightmode-specific
      16      555335 :     control_sensors_present |=
      17             :         MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL |
      18             :         MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION |
      19             :         MAV_SYS_STATUS_SENSOR_YAW_POSITION |
      20             :         MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL |
      21             :         MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL;
      22             : 
      23      555335 :     bool rate_controlled = false;
      24      555335 :     bool attitude_stabilized = false;
      25      555335 :     switch (plane.control_mode->mode_number()) {
      26       88883 :     case Mode::Number::MANUAL:
      27       88883 :         break;
      28             : 
      29         648 :     case Mode::Number::ACRO:
      30             : #if HAL_QUADPLANE_ENABLED
      31             :     case Mode::Number::QACRO:
      32             : #endif
      33         648 :         rate_controlled = true;
      34         648 :         break;
      35             : 
      36      108827 :     case Mode::Number::STABILIZE:
      37             :     case Mode::Number::FLY_BY_WIRE_A:
      38             :     case Mode::Number::AUTOTUNE:
      39             : #if HAL_QUADPLANE_ENABLED
      40             :     case Mode::Number::QSTABILIZE:
      41             :     case Mode::Number::QHOVER:
      42             :     case Mode::Number::QLAND:
      43             :     case Mode::Number::QLOITER:
      44             : #if QAUTOTUNE_ENABLED
      45             :     case Mode::Number::QAUTOTUNE:
      46             : #endif
      47             : #endif  // HAL_QUADPLANE_ENABLED
      48             :     case Mode::Number::FLY_BY_WIRE_B:
      49             :     case Mode::Number::CRUISE:
      50      108827 :         rate_controlled = true;
      51      108827 :         attitude_stabilized = true;
      52      108827 :         break;
      53             : 
      54          46 :     case Mode::Number::TRAINING:
      55          46 :         if (!plane.training_manual_roll || !plane.training_manual_pitch) {
      56          40 :             rate_controlled = true;
      57          40 :             attitude_stabilized = true;
      58             :         }
      59          46 :         break;
      60             : 
      61      356672 :     case Mode::Number::AUTO:
      62             :     case Mode::Number::RTL:
      63             :     case Mode::Number::LOITER:
      64             :     case Mode::Number::AVOID_ADSB:
      65             :     case Mode::Number::GUIDED:
      66             :     case Mode::Number::CIRCLE:
      67             :     case Mode::Number::TAKEOFF:
      68             : #if MODE_AUTOLAND_ENABLED
      69             :     case Mode::Number::AUTOLAND:
      70             : #endif
      71             : #if HAL_QUADPLANE_ENABLED
      72             :     case Mode::Number::QRTL:
      73             :     case Mode::Number::LOITER_ALT_QLAND:
      74             : #endif
      75             :     case Mode::Number::THERMAL:
      76      356672 :         rate_controlled = true;
      77      356672 :         attitude_stabilized = true;
      78      356672 :         control_sensors_enabled |= MAV_SYS_STATUS_SENSOR_YAW_POSITION;
      79      356672 :         control_sensors_health |= MAV_SYS_STATUS_SENSOR_YAW_POSITION;
      80      356672 :         control_sensors_enabled |= MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL;
      81      356672 :         control_sensors_health |= MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL;
      82      356672 :         control_sensors_enabled |= MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL;
      83      356672 :         control_sensors_health |= MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL;
      84      356672 :         break;
      85             : 
      86         259 :     case Mode::Number::INITIALISING:
      87         259 :         break;
      88             :     }
      89             : 
      90      555335 :     if (rate_controlled) {
      91      466187 :         control_sensors_enabled |= MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL; // 3D angular rate control
      92      466187 :         control_sensors_health |= MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL; // 3D angular rate control
      93             :     }
      94      555335 :     if (attitude_stabilized) {
      95      465539 :         control_sensors_enabled |= MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION;
      96      465539 :         control_sensors_health |= MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION;
      97             :     }
      98             : 
      99             : #if AP_TERRAIN_AVAILABLE
     100      555335 :     switch (plane.terrain.status()) {
     101        3514 :     case AP_Terrain::TerrainStatusDisabled:
     102        3514 :         break;
     103       34001 :     case AP_Terrain::TerrainStatusUnhealthy:
     104       34001 :         control_sensors_present |= MAV_SYS_STATUS_TERRAIN;
     105       34001 :         control_sensors_enabled |= MAV_SYS_STATUS_TERRAIN;
     106       34001 :         break;
     107      517820 :     case AP_Terrain::TerrainStatusOK:
     108      517820 :         control_sensors_present |= MAV_SYS_STATUS_TERRAIN;
     109      517820 :         control_sensors_enabled |= MAV_SYS_STATUS_TERRAIN;
     110      517820 :         control_sensors_health  |= MAV_SYS_STATUS_TERRAIN;
     111      517820 :         break;
     112             :     }
     113             : #endif
     114             : 
     115             : #if AP_RANGEFINDER_ENABLED
     116      555335 :     const RangeFinder *rangefinder = RangeFinder::get_singleton();
     117      555335 :     if (rangefinder && rangefinder->has_orientation(plane.rangefinder_orientation())) {
     118       18633 :         control_sensors_present |= MAV_SYS_STATUS_SENSOR_LASER_POSITION;
     119       18633 :         if (uint16_t(plane.g.rangefinder_landing.get()) != 0) {
     120        5551 :             control_sensors_enabled |= MAV_SYS_STATUS_SENSOR_LASER_POSITION;
     121             :         }
     122       18633 :         if (rangefinder->has_data_orient(plane.rangefinder_orientation())) {
     123       17606 :             control_sensors_health |= MAV_SYS_STATUS_SENSOR_LASER_POSITION;            
     124             :         }
     125             :     }
     126             : #endif
     127      555335 : }

Generated by: LCOV version 1.14