diff --git a/src/lib/circuit_breaker/circuit_breaker.cpp b/src/lib/circuit_breaker/circuit_breaker.cpp index 099238d2fd..42d7816097 100644 --- a/src/lib/circuit_breaker/circuit_breaker.cpp +++ b/src/lib/circuit_breaker/circuit_breaker.cpp @@ -53,3 +53,8 @@ bool circuit_breaker_enabled(const char *breaker, int32_t magic) return (PX4_PARAM_GET_BYNAME(breaker, &val) == 0) && (val == magic); } + +bool circuit_breaker_enabled_by_val(int32_t breaker_val, int32_t magic) +{ + return (breaker_val == magic); +} diff --git a/src/lib/circuit_breaker/circuit_breaker.h b/src/lib/circuit_breaker/circuit_breaker.h index d3ac50ea66..bd08b887c0 100644 --- a/src/lib/circuit_breaker/circuit_breaker.h +++ b/src/lib/circuit_breaker/circuit_breaker.h @@ -64,6 +64,7 @@ __BEGIN_DECLS extern "C" __EXPORT bool circuit_breaker_enabled(const char *breaker, int32_t magic); +extern "C" __EXPORT bool circuit_breaker_enabled_by_val(int32_t breaker_val, int32_t magic); __END_DECLS diff --git a/src/lib/mixer_module/mixer_module.cpp b/src/lib/mixer_module/mixer_module.cpp index 2c791776b2..7220babd5a 100644 --- a/src/lib/mixer_module/mixer_module.cpp +++ b/src/lib/mixer_module/mixer_module.cpp @@ -89,7 +89,7 @@ void MixingOutput::updateParams() { ModuleParams::updateParams(); - bool safety_disabled = circuit_breaker_enabled("CBRK_IO_SAFETY", CBRK_IO_SAFETY_KEY); + bool safety_disabled = circuit_breaker_enabled_by_val(_param_cbrk_io_safety.get(), CBRK_IO_SAFETY_KEY); if (safety_disabled) { _safety_off = true; diff --git a/src/lib/mixer_module/mixer_module.hpp b/src/lib/mixer_module/mixer_module.hpp index 46f010c690..63d23a60fe 100644 --- a/src/lib/mixer_module/mixer_module.hpp +++ b/src/lib/mixer_module/mixer_module.hpp @@ -234,7 +234,9 @@ private: (ParamInt) _param_mc_airmode, ///< multicopter air-mode (ParamFloat) _param_mot_slew_max, (ParamFloat) _param_thr_mdl_fac, ///< thrust to pwm modelling factor - (ParamInt) _param_mot_ordering + (ParamInt) _param_mot_ordering, + (ParamInt) _param_cbrk_io_safety + ) }; diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 58e6d638c7..3adbe20faa 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -188,8 +188,6 @@ void usage(const char *reason); void control_status_leds(vehicle_status_s *status_local, const actuator_armed_s *actuator_armed, bool changed, const uint8_t battery_warning, const cpuload_s *cpuload_local); -void get_circuit_breaker_params(); - bool stabilization_required(); void print_reject_mode(const char *msg); @@ -2469,17 +2467,15 @@ Commander::run() } void -get_circuit_breaker_params() +Commander::get_circuit_breaker_params() { - status_flags.circuit_breaker_engaged_power_check = circuit_breaker_enabled("CBRK_SUPPLY_CHK", CBRK_SUPPLY_CHK_KEY); - status_flags.circuit_breaker_engaged_usb_check = circuit_breaker_enabled("CBRK_USB_CHK", CBRK_USB_CHK_KEY); - status_flags.circuit_breaker_engaged_airspd_check = circuit_breaker_enabled("CBRK_AIRSPD_CHK", CBRK_AIRSPD_CHK_KEY); - status_flags.circuit_breaker_engaged_enginefailure_check = circuit_breaker_enabled("CBRK_ENGINEFAIL", - CBRK_ENGINEFAIL_KEY); - status_flags.circuit_breaker_engaged_gpsfailure_check = circuit_breaker_enabled("CBRK_GPSFAIL", CBRK_GPSFAIL_KEY); - status_flags.circuit_breaker_flight_termination_disabled = circuit_breaker_enabled("CBRK_FLIGHTTERM", - CBRK_FLIGHTTERM_KEY); - status_flags.circuit_breaker_engaged_posfailure_check = circuit_breaker_enabled("CBRK_VELPOSERR", CBRK_VELPOSERR_KEY); + status_flags.circuit_breaker_engaged_power_check = circuit_breaker_enabled_by_val(_param_cbrk_supply_chk.get(), CBRK_SUPPLY_CHK_KEY); + status_flags.circuit_breaker_engaged_usb_check = circuit_breaker_enabled_by_val(_param_cbrk_usb_chk.get(), CBRK_USB_CHK_KEY); + status_flags.circuit_breaker_engaged_airspd_check = circuit_breaker_enabled_by_val(_param_cbrk_airspd_chk.get(), CBRK_AIRSPD_CHK_KEY); + status_flags.circuit_breaker_engaged_enginefailure_check = circuit_breaker_enabled_by_val(_param_cbrk_enginefail.get(), CBRK_ENGINEFAIL_KEY); + status_flags.circuit_breaker_engaged_gpsfailure_check = circuit_breaker_enabled_by_val(_param_cbrk_gpsfail.get(), CBRK_GPSFAIL_KEY); + status_flags.circuit_breaker_flight_termination_disabled = circuit_breaker_enabled_by_val(_param_cbrk_flightterm.get(), CBRK_FLIGHTTERM_KEY); + status_flags.circuit_breaker_engaged_posfailure_check = circuit_breaker_enabled_by_val(_param_cbrk_velposerr.get(), CBRK_VELPOSERR_KEY); } void diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index 5fad5ce808..90a14ffaad 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -97,6 +97,8 @@ public: // TODO: only temporarily static until low priority thread is removed static bool preflight_check(bool report); + void get_circuit_breaker_params(); + private: DEFINE_PARAMETERS( @@ -114,7 +116,7 @@ private: (ParamFloat) _param_com_home_v_t, (ParamFloat) _param_com_pos_fs_eph, - (ParamFloat) _param_com_pos_fs_epv, + (ParamFloat) _param_com_pos_fs_epv, /*Not realy used for now*/ (ParamFloat) _param_com_vel_fs_evh, (ParamInt) _param_com_posctl_navl, /* failsafe response to loss of navigation accuracy */ @@ -142,8 +144,15 @@ private: (ParamInt) _param_com_obl_act, (ParamInt) _param_com_obl_rc_act, - (ParamInt) _param_com_prearm_mode + (ParamInt) _param_com_prearm_mode, + (ParamInt) _param_cbrk_supply_chk, + (ParamInt) _param_cbrk_usb_chk, + (ParamInt) _param_cbrk_airspd_chk, + (ParamInt) _param_cbrk_enginefail, + (ParamInt) _param_cbrk_gpsfail, + (ParamInt) _param_cbrk_flightterm, + (ParamInt) _param_cbrk_velposerr ) enum class PrearmedMode { diff --git a/src/modules/mc_att_control/mc_att_control.hpp b/src/modules/mc_att_control/mc_att_control.hpp index 153002b2cd..200c7d92e6 100644 --- a/src/modules/mc_att_control/mc_att_control.hpp +++ b/src/modules/mc_att_control/mc_att_control.hpp @@ -265,7 +265,10 @@ private: _param_mpc_thr_hover, /**< throttle at which vehicle is at hover equilibrium */ (ParamInt) _param_mpc_thr_curve, /**< throttle curve behavior */ - (ParamInt) _param_mc_airmode + (ParamInt) _param_mc_airmode, + + (ParamInt) _param_cbrk_rate_ctrl + ) bool _is_tailsitter{false}; diff --git a/src/modules/mc_att_control/mc_att_control_main.cpp b/src/modules/mc_att_control/mc_att_control_main.cpp index ef281eaf2a..71f4982900 100644 --- a/src/modules/mc_att_control/mc_att_control_main.cpp +++ b/src/modules/mc_att_control/mc_att_control_main.cpp @@ -131,7 +131,7 @@ MulticopterAttitudeControl::parameters_updated() _man_tilt_max = math::radians(_param_mpc_man_tilt_max.get()); - _actuators_0_circuit_breaker_enabled = circuit_breaker_enabled("CBRK_RATE_CTRL", CBRK_RATE_CTRL_KEY); + _actuators_0_circuit_breaker_enabled = circuit_breaker_enabled_by_val(_param_cbrk_rate_ctrl.get(), CBRK_RATE_CTRL_KEY); } void