Setting a parameter on ArduPilot causes the autopilot to emit the new
value in a PARAM_VALUE message, so we do not need to fetch it ourselves.
Fetching it ourselves causes subtle problems for the autotest suite
where a PARAM_VALUE is currently in the uart buffer - so the autotest
set_parameter has consumed one PARAM_VALUE message (the auto-emitted
one). If it immediately does a set_parameter then the next
PARAM_VALUE it sees will be the OLD value as the value comes out of the
uart.
the regex used to parse the values field later is rather strict - no
spaces allowed around the : for example.
Canonicalise the string before trying to do anything more with it
(including validation)
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