Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds comprehensive AM32 ESC EEPROM settings support to QGroundControl for PX4 autopilots, enabling wireless configuration of AM32 ESCs via MAVLink. The implementation includes schema-based settings management with version-aware field visibility, per-ESC selection with majority-match detection, and a complete UI for reading/writing ESC parameters.
Changes:
- Implemented AM32 EEPROM read/write via MAVLink ESC_EEPROM messages with schema-based field definitions
- Added PX4 AutoPilot plugin component with QML UI for ESC settings configuration
- Refactored ESC status indicators to use per-ESC online status instead of shared bitmask, with grid layout support for >4 ESCs
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
Vehicle.h/cc |
Integrated AM32EepromFactGroupListModel into Vehicle class |
eeprom.json |
Added bundled AM32 EEPROM schema with field definitions and version-specific metadata |
EscStatusFactGroupListModel.cc |
Fixed per-ESC online status extraction from bitmask instead of using shared value |
AM32EepromSchema.h/cc |
Implemented schema loader with remote fetch capability and version-aware field filtering |
AM32EepromFactGroupListModel.h/cc |
Created MAVLink message handling for ESC EEPROM with write masks and setting comparison |
AM32EepromFact.json |
Defined fact metadata for AM32 EEPROM version and firmware info fields |
EscIndicator.qml/EscIndicatorPage.qml |
Updated to per-ESC online status and grid layout for multiple ESCs |
PX4AutoPilotPlugin.h/cc |
Added conditional AM32Component instantiation based on DSHOT_ESC_TYPE parameter |
AM32Component.h/cc/qml |
Created new vehicle component for AM32 ESC configuration |
AM32SettingsComponent.qml |
Implemented full settings UI with ESC selection and grouped setting controls |
AM32SettingSlider.qml |
Created reusable slider control with pending change indicators |
AM32ComponentSummary.qml |
Added summary view showing ESC detection status |
Build ResultsPlatform Status
Some builds failed. Pre-commit
Pre-commit hooks: 4 passed, 35 failed, 7 skipped. Artifact Sizes
|
|
@DonLakeFlyer do you have any feedback on the design? |
|
I'll try to to get to this. I'm swamped with my own wildlife drone testing right now. |
Okay no rush, I just wasn't sure if you saw it. Let me know if I can help. |
|
First quick comment: With regards to the new |
There's a couple of reasons I went with the message "package" structure
There's a lot more context in the original RFC mavlink/rfcs#27 |
I'm all good as long as there is some way to determine whether it worked or not. |
|
@dakejahl Can you squash to a reasonable set of commits. Rebase and then I'll submit it for another CoPilot review. |
e039772 to
98595e2
Compare
98595e2 to
a00368e
Compare
|
I'm also going to run some Claude /review on this. Let's hold off on copilot since it can really thrash the PR discussion with noise. |
a00368e to
9f39bae
Compare
|
I guess the thing I wonder about with this is why it's valuable to increase the surface area of QGC for something which is already supported by an external tool. Why not go the same route as ArduPilot which has a mode to make the regular configurator? Also means you need to chase changes made to the original tool. I always worry about biggish new things since I tend to get left holding the bag on them for years to come... |
AM32 configurator requires a physical USB connection.
The eeprom data has a
Totally understand that. I can always make a separate Qt tool for AM32 over MAVLink, but it's nice to have everything in one tool. The impact to other modules is low, so can be easily removed if it becomes a burden. We get this complaint very often:
And PX4 doesn't support "ESC passthrough" (the USB protocol) so indeed they need to use an FC that runs betaflight. So they have to disassemble their airframe just configure settings or flash fw or they need an FC that supports both PX4 and Betaflight. And the counter argument is
But a lot of people don't know this and end up frustrated. All of this work is coming from real world user complaints around setting up and updating AM32 firmware. |
|
Good reasons to add this then... |
Yup. I'll work with Claude today/tomorrow and try to get this as good as possible before you review so that you don't have to spend too much time on it 😃 |
f64537f to
0ed1f59
Compare
0ed1f59 to
a011d5f
Compare
ESC_EEPROM write messages were encoded with the vehicle's system/component IDs as the source, causing mavlink-router to drop them since they appeared to originate from the autopilot rather than the GCS. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Summary
This is effectively the AM32 Configurator built into QGC. This enables a wireless method to check and edit ESC settings.
The accompanying PX4 PR is here PX4/PX4-Autopilot#26263
Details
New files:
AM32Component— PX4 auto-pilot plugin component for the AM32 settings pageAM32SettingsComponent.qml— Full settings UI with read/write controls, unsaved change indicators, and setting slidersAM32EepromFactGroupListModel— MAVLink message handling for ESC EEPROM read/write, including write masks and majority matching across selected ESCsAM32EepromSchema— Remote schema fetching withCachedFileDownload, JSON parsing, version overrides, and conversion factor supportModified:
EscIndicator.qml/EscIndicatorPage.qml— Per-ESC online status instead of shared bitmask; grid layout for motor count >4EscStatusFactGroupListModel.cc— Fix index-to-bitmask mapping for 4-per-message groupsVehicle.cc/h— Integrate AM32 EEPROM modelTest plan
Screenshots
All settings match

One ESC beep volume is different

ESC indicator grid layout
