Skip to content

Add thrust interlock and move gamepad status to Flight tab#780

Open
ataffanel wants to merge 5 commits intomasterfrom
ataffanel/775
Open

Add thrust interlock and move gamepad status to Flight tab#780
ataffanel wants to merge 5 commits intomasterfrom
ataffanel/775

Conversation

@ataffanel
Copy link
Copy Markdown
Member

When connecting to a Crazyflie or selecting/changing an input device or mapping, a thrust interlock is now engaged that forces thrust to zero until the physical throttle is brought to zero by the user. This prevents unexpected take-off due to a misconfigured mapping or a non-zero throttle position at connection time.

The gamepad device info (device name, mapping, mux) previously shown in the status bar is now displayed in a dedicated Gamepad section in the Flight tab, alongside an interlock status indicator.

Fixes #775

@stefanthorstenson
Copy link
Copy Markdown
Contributor

Live demo with @ataffanel proved indented functionality!

Copy link
Copy Markdown
Member

@enyanil enyanil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Super nice addition! I have some comments about how it works:

  • The state is "ready" when no gamepad is connected which is a bit misleading. Maybe add a state that is "not connected" or just a "-".
  • When creating a custom mapping, the mapping is applied to the gamepad but the name in the gamepad info box is not updated. It however gets updated if you go into the menu and select a custom mapping.
  • The red text about throttle in the state field is visible for a very short time and then switches to "ready" when selecting a mapping, even when everything is ok. This is not super distracting but maybe could be removed by changing order of reading?

We're also going to have to update some docs about the flight tab and input devices when this is merged.

Some things that I don't think comes from your updates (that can be made into separate issues):

  • When creating a custom mapping and adding assist to the rb button, saving and applying the mapping, and then pressing rb while not connected to a cf causes the entire client to crash.
  • When setting a mapping (for example ps_mode2) it is remembered when closing and re-opening the client, custom mappings are not remembered when they are selected.

@stefanthorstenson
Copy link
Copy Markdown
Contributor

Tested against #775 issue. I cannot reproduce the error, but I don't exactly what made the error appeared in the first place. Seems promising though!

@ataffanel ataffanel requested a review from enyanil March 17, 2026 17:46
@enyanil
Copy link
Copy Markdown
Member

enyanil commented Mar 18, 2026

Looks great! One last thing that could be nice is that now the status is "-" when the gamepad is connected but no mapping is selected yet, making it a bit confusing since it looks like everything is ok otherwise but the gamepad still doesn't work. Could we add a "No input mapping selected" or similar state to help steer the user on how to proceed?

When connecting to a Crazyflie or selecting/changing an input device or
mapping, a thrust interlock is now engaged that forces thrust to zero
until the physical throttle is brought to zero by the user. This
prevents unexpected take-off due to a misconfigured mapping or a
non-zero throttle position at connection time.

The gamepad device info (device name, mapping, mux) previously shown in
the status bar is now displayed in a dedicated Gamepad section in the
Flight tab, alongside an interlock status indicator.

Fixes #775
- Show "—" instead of "Ready" when no gamepad is connected
- Update mapping name in Flight tab and input menu after saving
  a custom mapping in the config dialog
- Restore original mapping when cancelling the config dialog
- Skip thrust interlock when throttle is already at zero to avoid
  a brief red flash when selecting a mapping
When a gamepad is connected but no mapping is selected, the status
now shows "No mapping selected" in orange instead of "Ready", which
was misleading since the gamepad won't work without a mapping.
Copy link
Copy Markdown
Contributor

@stefanthorstenson stefanthorstenson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had some minor suggestions that I think is worth fixing, should be very fast.

- Remove unnecessary blank lines between signal declarations in FlightTab
- Rename gamepad_device_updated to _gamepad_device_updated for private naming convention
Copy link
Copy Markdown
Contributor

@stefanthorstenson stefanthorstenson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! Looks good from my point of view! Looking forward to running the client with this!

Copy link
Copy Markdown
Member

@enyanil enyanil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works great! If you want to be picky, the mapping name that is displayed in the gamepad box is the name of the json file for the mapping and not the name from the name field in the json which is formatted nicer but it is no big deal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Incorrect input mapping can lead to Crazyflie unindendently taking off when connecting

3 participants