v1.5.0 — Critical fix: FCC unlock broken since v1.4.8 (byte order revert)
v1.5.0 — Critical fix: FCC unlock broken since v1.4.8
The problem
v1.4.8 introduced a DUML frame byte order change that broke FCC unlock on real RC2 hardware. v1.4.7 worked perfectly.
Root cause
The DUML frame builder was modified based on an incorrect analysis of the wire format. The correct byte layout is defined by the public dji-firmware-tools project (comm_mkdupc.py, GPL-3.0), which is the authoritative reference for the DUML protocol:
[4] = sender [5] = receiver/dst [6-7] = sequence [8] = cmdType [9] = cmdSet [10] = cmdId
Verification
Confirmed against three independent sources:
- dji-firmware-tools (public GPL-3.0 reference) — the DJICmdV1Header struct defines [5]=receiver_info, [8]=cmd_type_data
- Real RC2 hardware — v1.4.7 layout works, v1.4.8+ layout breaks
- Empirical testing — the reverted layout restores FCC unlock
What was fixed
- Reverted frame builder to the correct byte layout ([5]=dst, [8]=cmdType)
- Reverted response validation to match
- Reverted FCC profile timing to the known-working values (150ms inter-frame, 400ms inter-round, 80ms read window, 2 rounds)
- Reverted keepalive timing (100ms inter-frame, 80ms read window)
What was NOT reverted (still improved from v1.4.7)
- LED fix (no longer blocks FCC keepalive)
- 4G hardening (model whitelist, dongle pre-check, serial caching, single-socket reuse)
- Auto-update fix (rate-limit retry, install permission check, error surfacing, Check Again button)
- Update-available banner on FCC page