mixer_module: Reset RC passthrough functions to disarmed value when no stick input

This commit is contained in:
Matthias Grob
2024-08-07 14:31:32 +02:00
parent 2d99ae18ad
commit a8d54c7fae
@@ -45,9 +45,7 @@ class FunctionManualRC : public FunctionProviderBase
public:
FunctionManualRC()
{
for (int i = 0; i < num_data_points; ++i) {
_data[i] = NAN;
}
resetAllToDisarmedValue();
}
static FunctionProviderBase *allocate(const Context &context) { return new FunctionManualRC(); }
@@ -57,17 +55,22 @@ public:
manual_control_setpoint_s manual_control_setpoint;
if (_topic.update(&manual_control_setpoint)) {
_data[0] = manual_control_setpoint.roll;
_data[1] = manual_control_setpoint.pitch;
_data[2] = manual_control_setpoint.throttle;
_data[3] = manual_control_setpoint.yaw;
_data[4] = manual_control_setpoint.flaps;
_data[5] = manual_control_setpoint.aux1;
_data[6] = manual_control_setpoint.aux2;
_data[7] = manual_control_setpoint.aux3;
_data[8] = manual_control_setpoint.aux4;
_data[9] = manual_control_setpoint.aux5;
_data[10] = manual_control_setpoint.aux6;
if (manual_control_setpoint.valid) {
_data[0] = manual_control_setpoint.roll;
_data[1] = manual_control_setpoint.pitch;
_data[2] = manual_control_setpoint.throttle;
_data[3] = manual_control_setpoint.yaw;
_data[4] = manual_control_setpoint.flaps;
_data[5] = manual_control_setpoint.aux1;
_data[6] = manual_control_setpoint.aux2;
_data[7] = manual_control_setpoint.aux3;
_data[8] = manual_control_setpoint.aux4;
_data[9] = manual_control_setpoint.aux5;
_data[10] = manual_control_setpoint.aux6;
} else {
resetAllToDisarmedValue();
}
}
}
@@ -76,6 +79,13 @@ public:
private:
static constexpr int num_data_points = 11;
void resetAllToDisarmedValue()
{
for (int i = 0; i < num_data_points; ++i) {
_data[i] = NAN;
}
}
static_assert(num_data_points == (int)OutputFunction::RC_AUXMax - (int)OutputFunction::RC_Roll + 1,
"number of functions mismatch");