Replay: tear down threads before exitting
NKQ is a generated name - don't copy it across to output
Stop whinging about presence of NKF6 and friends; we know these generated names are not going to be present in modern logs
memcpy rather than strncpy within log_FMT
Correct strings vs optionally-terminated structure entries in sanity checks
Call AP_Param::load_all() to start the parameter saving thread. AP_Compass' init() method now saves parameters (compass reordering), and because we're disarmed we will block until the parameter is pushed onto the to-save queue; if there's no thread popping off that list we block indefinitely.
Remove duplicate definitions of various singleton objects.
Replay: write out GPS message to output log
Useful for diagnosis, but also because we struggle to find a time base
without this and the pymavlink tools take forever to work
Replay: set COMPASS_DEV_ID and COMPASS_PRIO1_ID so EKF gets mag data
Replay: avoid use of system clock; use stopped-clock only
Replay: constraint to emitting output for single core only
Tools: Replay: ignore setting of LOG_DISARMED
Otherwise log files that come in with LOG_DISARMED false don't get any
significant output
Tools: Replay: apply user parameters after any PARM message
Tools: Replay: emit timestamp when EKF is force-started
Tools: Replay: use stderr for what it's good for
Tools: Replay: force log disarmed
AP_AHRS_NavEKF doesn't use the rangefinder, it just delegates the
calls to the right estimator.
For libraries/AP_AHRS/examples/AHRS_Test/AHRS_Test.cpp the initialization
order has also been modified to match the order on vehicles. It's more
correct since it passes a reference when EKF2/EKF3 are already
constructed, while thos constructors use a pointer. Ideally these
should be moved to an init() method though, or use a get_instance().