From 881e87b298a083470c277b5c338656e54cab0628 Mon Sep 17 00:00:00 2001 From: Ihor Ivlev Date: Sat, 31 Oct 2026 14:14:52 +0100 Subject: [PATCH] osd: flight mode names keyed by FLIGHT_MODE_* values The heartbeat handler in mavlink.cpp converts the ArduPlane custom_mode into the FLIGHT_MODE_* values from mavlink.h, but the OSD switch was keyed by the ArduPlane numbers. Only STABILIZE (2 in both) was shown right: ACRO showed Unknown, MANUAL showed CIRCLE, RTL showed FLY_BY_WIRE_A, FBWA showed AUTO. --- .../openipc/pixelpilot/osd/OSDManager.java | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java b/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java index 68e9c088..d178fa41 100644 --- a/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java +++ b/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java @@ -190,30 +190,31 @@ public void render(MavlinkData data) { binding.tvRoll.setText(formatFloat(data.telemetryRoll, " degree", "")); binding.tvPitch.setText(formatFloat(data.telemetryPitch, " degree", "")); + // data.flight_mode carries the FLIGHT_MODE_* values from mavlink.h, + // not the ArduPlane custom_mode numbers. String flightMode = switch (data.flight_mode) { - case 0 -> "MANUAL"; - case 1 -> "CIRCLE"; + case 1 -> "MANUAL"; case 2 -> "STABILIZE"; - case 3 -> "TRAINING"; - case 4 -> "ACRO"; - case 5 -> "FLY_BY_WIRE_A"; - case 6 -> "FLY_BY_WIRE_B"; - case 7 -> "CRUISE"; + case 3 -> "ALT_HOLD"; + case 4 -> "LOITER"; + case 5 -> "RTL"; + case 6 -> "LAND"; + case 7 -> "POS_HOLD"; case 8 -> "AUTOTUNE"; - case 10 -> "AUTO"; - case 11 -> "RTL"; - case 12 -> "LOITER"; + case 9 -> "ACRO"; + case 10 -> "FBWA"; + case 11 -> "FBWB"; + case 12 -> "CRUISE"; case 13 -> "TAKEOFF"; - case 14 -> "AVOID_ADSB"; - case 15 -> "GUIDED"; - case 16 -> "INITIALIZING"; - case 17 -> "QSTABILIZE"; - case 18 -> "QHOVER"; - case 19 -> "QLOITER"; - case 20 -> "QLAND"; - case 21 -> "QRTL"; - case 22 -> "QAUTOTUNE"; - case 23 -> "ENUM_END"; + case 15 -> "RATE"; + case 16 -> "HORIZON"; + case 17 -> "CIRCLE"; + case 18 -> "AUTO"; + case 20 -> "QSTABILIZE"; + case 21 -> "QHOVER"; + case 22 -> "QLOITER"; + case 23 -> "QLAND"; + case 24 -> "QRTL"; default -> "Unknown"; }; binding.tvFlightMode.setText(flightMode);