π§ Full variant β the F7 / H7 / 2 MB track. Every upstream backend compiled in, plus the fork additions. Built on ArduPlane 4.6.3; everything stock 4.6.3 does still applies underneath the ArduCustom additions.
π Full feature & parameter reference: README_CUSTOM.md (full variant)
πͺΆ Light variant (1 MB F4, backend-stripped to fit): light-v1.1 release β
Firmware version string: ArduPlane V4.6.3 ArduCustom v1.1 (4e6897a) β 4e6897a is the git short-hash the binaries were built from. No Light suffix on this track.
β οΈ Release tracks now split by MCU class
As of v1.1 the two tracks no longer overlap. A given board appears on exactly one of them:
| Track | Boards | MCU |
|---|---|---|
| full (this release) | 3 boards | F7 / H7 / 2 MB |
| light | 9 boards | 1 MB F4 only |
MatekF765-Wing, MatekH743-bdshot and KakuteH7-Wing were previously built for both tracks. They're now full-only β a 2 MB board has no reason to run a backend-stripped build.
1 MB F4 boards are not on this release. The accumulated fork feature set no longer fits in ~1 MB alongside every upstream backend. Flash those from light-v1.1 instead β the board-specific fixes are shared, the light variant uses the same hwdefs.
New in v1.1
π Move sticks to cancel auto launch
Nudge pitch or roll during an automatic takeoff and the plane drops to FBWA, so you can save a bad launch without reaching for the mode switch. Modelled on iNav's "move sticks to cancel auto launch". Works in TAKEOFF mode and in AUTO while a NAV_TAKEOFF item is running.
| Phase | Cancel available? |
|---|---|
| Armed, waiting for the throw | β immediately |
Launch β TKOFF_CNCL_DLY (default 1 s) |
β locked β the throw can't abort its own launch |
| After the grace period β target altitude | β |
| Target altitude onward | β never |
Two GCS announcements make it visible: Move sticks to cancel auto launch when the pre-launch window opens, and Launch cancel armed once the grace period elapses. Cancelling reports Auto launch cancelled. The takeover is sticky β you stay in FBWA until you flip the mode switch.
New parameter β TKOFF_CNCL_DLY (default 1.0 s, range 0-10): how long stick input is ignored after launch. This is the equivalent of iNav's nav_fw_launch_min_time, and exists because you throw one-handed while holding the transmitter. Set 0 to allow cancelling from the instant of launch.
β οΈ RC_OPTIONSbit 20 has been removed. Earlier builds had bit 20 (AUTO_SWITCH_TO_FBWA_WITH_STICKS), which fired any time you were in AUTO, at any altitude, mid-mission β a 10 % stick bump silently ended missions, and stock ArduPlane has no equivalent. That option no longer exists; the behaviour is takeoff-only and always available, with nothing to configure. If your savedRC_OPTIONSstill has bit 20 set it is simply ignored. NewRC_OPTIONSdefault is544(was1049120).
ποΈ STICK_MIXING back to upstream's default
STICK_MIXING now defaults to 1 (FBW-style pilot override in auto/RTL/guided), matching stock ArduPlane. This fork previously shipped 0, which made sense only while the old always-on takeover existed β running both gave an invisible threshold where a small nudge biased the mission and a slightly larger one ended it. With the takeover confined to the takeoff, mixing is the right tool for mid-mission pilot input. Set 0 if you want pilot input ignored in nav modes.
π Pilot loiter radius and direction in TAKEOFF mode
TAKEOFF mode stays in TAKEOFF mode after the climb and circles at TKOFF_DIST/TKOFF_ALT β it does not switch to LOITER. Previously that circle used WP_LOITER_RAD with no pilot control. Now all three sticks work there, as they already did in LOITER and RTL:
| Stick | Effect in the TAKEOFF loiter |
|---|---|
| Pitch | loiter altitude (FBWB_CLIMB_RATE, release to lock) |
| Roll | loiter radius, clamped 20-1000 m |
| Rudder | loiter direction, beyond 50 % deflection |
Stick mixing is suppressed in that phase so the same input isn't applied twice β matching the existing guards for RTL and LOITER. During the climb, mixing behaves exactly as before. π Full details in README_CUSTOM.md β
π Other additions
- Takeoff cues on plain GPIO buzzers. Pre-launch audio cues previously only worked on boards with a PWM/ALARM ToneAlarm output. Boards that only have a simple on/off GPIO buzzer now get the same cues, with three cadences chosen to stay distinguishable by ear: slow lone beeps = raise throttle, medium double-beeps = spooling to idle, fast continuous = ready to launch (repeats until you throw).
The other v1.1 board change β re-enabling
AP_MountonAtomRCF405NAVIβ applies only to that 1 MB F4 board and ships in light-v1.1. The full variant already has every mount backend compiled in.
π Fixes
-
Takeoff cues could arrive up to 3.3 s late. The pre-launch cues were queued behind the notify layer's minimum-separation guard, which enforces a gap of
32 bits Γ 100 ms + 100= 3300 ms between patterns. A cue announcing "ready to launch" could therefore sound well after a hand launch had already happened β worse than useless, since it invites a throw at the wrong moment. State-change cues now bypass the guard and fire immediately. The repeating launch-ready cue deliberately stays behind it:update()runs at 50 Hz, so preempting there would reset the pattern every 20 ms and the buzzer would sit on one solid tone. -
TAKEOFF mode latched a stale climb target β airframes with an airspeed sensor only.
ModeTakeoff::navigate()wrote the pilot-adjustable target altitude back into the loiter waypoint unconditionally, from the moment the mode started, before that value had been seeded off the loiter waypoint. Entering TAKEOFF from FBWB could therefore latch the climb target at ground level, so the plane levelled off almost immediately instead of climbing toTKOFF_ALT. Airframes without an airspeed sensor were unaffected, because their climb is pitch-driven (TKOFF_LVL_PITCH) rather than TECS-driven. The write-back is now gated on the altitude having been seeded.
Docs
MNT1_TYPE=7documented for non-stabilised head-track servos.- FrSky Ethos sound path added to the Yaapu Course Hold install table.
- F4 EKF3/RAM section rewritten around allocation order (logger β terrain β EKF3), plus
LOG_FILE_BUFSIZEas a RAM-headroom lever. (Applies to the F4 fleet on the light track; kept in the shared README.)
π‘ Yaapu telemetry β Course Hold name + audio cue
Stock Yaapu doesn't know Plane mode 26, so Course Hold shows as a blank chip with no audio cue. The two non-firmware files attached below fix that β no need to clone the repo:
plane.luaβ replace Yaapu's copy underWIDGETS/yaapu/(EdgeTX widget install), then delete theplane.luacsitting next to it (compiled cache, regenerates itself).coursehold.wavβ copy intoWIDGETS/yaapu/sounds/en/(use your language folder if not English).
β οΈ Right name but no sound? The WAV is in a folder Yaapu isn't reading β the mode name and the sound file are looked up separately, so the HUD text can work while the cue silently doesn't. The folder depends on your Yaapu build:
Build coursehold.wavgoes inEdgeTX widget (TX16S) WIDGETS/yaapu/sounds/en/OpenTX / Horus script SOUNDS/yaapu0/en/FrSky Ethos scripts/yaaputelemetry/audio/en/None of these is EdgeTX's own
SOUNDS/en/folder, which is for Special Functions and unrelated to Yaapu.
π Full install notes, including the Yaapu GCS desktop tool and recording your own cue: Tools/yaapu-coursehold/README.md β
Fleet (3 boards)
| Board | MCU / Flash | Free flash | Notes |
|---|---|---|---|
| MatekF765-Wing | F7 / 2 MB | 519.4 KB | Matek F765-WING β most headroom in the fleet |
| MatekH743-bdshot | H7 / 2 MB | 99.0 KB | Matek H743-WING, bidirectional DShot |
| KakuteH7-Wing | H7 / 2 MB | 103.5 KB | Holybro Kakute H743 Wing |
Which file do I flash?
Each <board>_plane_bin_full-v1.1_.zip contains four build products. Two of them are flashable:
| File | Use it when |
|---|---|
arduplane.apj |
Normal upgrade. Load it from MissionPlanner / QGC β "Load custom firmware" onto a board that already has a working ArduPilot bootloader. This is the usual path. |
arduplane_with_bl.hex |
The .apj won't take. Flash over DFU (board in bootloader mode β STM32CubeProgrammer, dfu-util, or MissionPlanner's DFU option). This writes the bootloader and the firmware, so it recovers a board whose bootloader is missing, stale, or the wrong family. |
arduplane / arduplane.bin |
ELF and raw binary, for debugging and toolchain use. Not for GCS flashing. |
π‘ If the
.apjis rejected or the flash fails, go straight toarduplane_with_bl.hexover DFU. Confirmed onKakuteH7-Wingwith this release: the.apjwould not flash, the_with_bl.hexworked first try. Boards that shipped with Betaflight, or that have been moved between firmware families, are the usual candidates β their on-board bootloader isn't the one the.apjpath expects.
π Full feature & parameter reference β README_CUSTOM.md (full variant)
π Other track β light-v1.1 release β
π Issues or questions β open an issue