vmount: fix new input getting lost in throttling

This fixes the case where a new gimbal input gets lost in the output
throttling.

This is required because an input is potentially set only once and
then not computed again. In the failure case, control_data is set
to nullptr in subsequent calls and therefore not used for the output
calculation ever.
This commit is contained in:
Julian Oes 2018-01-18 10:23:44 +01:00 committed by Lorenz Meier
parent b468551b6c
commit b7404ad6c1
1 changed files with 9 additions and 1 deletions

View File

@ -352,6 +352,8 @@ static int vmount_thread_main(int argc, char *argv[])
}
}
bool input_changed = false;
if (thread_data.input_objs_len > 0) {
//get input: we cannot make the timeout too large, because the output needs to update
@ -373,11 +375,17 @@ static int vmount_thread_main(int argc, char *argv[])
if (control_data_to_check != nullptr || already_active) {
control_data = control_data_to_check;
last_active = i;
if (!already_active) {
input_changed = true;
}
}
}
hrt_abstime now = hrt_absolute_time();
if (now - last_output_update > 10000) { // rate-limit the update of outputs
// Rate-limit the update of outputs, unless we just changed inputs because we wouldn't
// want to miss the new control data.
if (now - last_output_update > 10000 || input_changed) {
last_output_update = now;
//update output