Browse Source

px4io: only publish safety at 1 Hz or immeidately on change

sbg
Daniel Agar 5 years ago
parent
commit
c6aafed9d0
  1. 27
      src/drivers/px4io/px4io.cpp

27
src/drivers/px4io/px4io.cpp

@ -275,6 +275,8 @@ private: @@ -275,6 +275,8 @@ private:
uORB::Publication<servorail_status_s> _to_servorail{ORB_ID(servorail_status)};
uORB::Publication<safety_s> _to_safety{ORB_ID(safety)};
safety_s _safety{};
bool _primary_pwm_device; ///< true if we are the default PWM output
bool _lockdown_override; ///< allow to override the safety lockdown
bool _armed; ///< wether the system is armed
@ -1691,14 +1693,23 @@ PX4IO::io_handle_status(uint16_t status) @@ -1691,14 +1693,23 @@ PX4IO::io_handle_status(uint16_t status)
/**
* Get and handle the safety status
*/
safety_s safety{};
safety.timestamp = hrt_absolute_time();
safety.safety_switch_available = true;
safety.safety_off = (status & PX4IO_P_STATUS_FLAGS_SAFETY_OFF) ? true : false;
safety.override_available = _override_available;
safety.override_enabled = (status & PX4IO_P_STATUS_FLAGS_OVERRIDE) ? true : false;
_to_safety.publish(safety);
const bool safety_off = status & PX4IO_P_STATUS_FLAGS_SAFETY_OFF;
const bool override_enabled = status & PX4IO_P_STATUS_FLAGS_OVERRIDE;
// publish immediately on change, otherwise at 1 Hz
if ((hrt_elapsed_time(&_safety.timestamp) >= 1_s)
|| (_safety.safety_off != safety_off)
|| (_safety.override_available != _override_available)
|| (_safety.override_enabled != override_enabled)) {
_safety.safety_switch_available = true;
_safety.safety_off = safety_off;
_safety.override_available = _override_available;
_safety.override_enabled = override_enabled;
_safety.timestamp = hrt_absolute_time();
_to_safety.publish(_safety);
}
return ret;
}

Loading…
Cancel
Save