This flashes the MCU boards attached to the unit — control surface, wheel displays, mixer and motor — from the payloads shipped in /usr/Engine/Firmware/[FIRMWARE_PART]/.
It isn't launched directly. Engine exits with a quit reason of UpdateFirmware and the wrapper script /usr/Engine/Scripts/engine dispatches, passing the product code as the only argument:
/usr/Engine/FirmwareUpdater $PRODUCTCODE
See MIDI Devices for the payload directory layout, the firmware.json descriptor that carries each board's version, and how devices are matched in the first place.
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Unable to set double buffer mode! (Invalid argument)
air.deviceidentifier: Can't find file: "KnownDevices.xml"
bool FirmwareUpdater::checkForUpdateAndPrepare()
bool FirmwareUpdater::checkForUpdateAndPrepare() Run: 0
void FirmwareUpdater::tryToUpdateUnscannedDevices(const QStringList&) ()
Finished
air.devicemanager.midi.out: The port isn't' opened for Midi::Out::PRIME GO Control Surface