clean-up fence manipulation functions and add test for auto-enablement on copter
update tests to have some FENCE_ENABLE tests
add avoidance minimum and maximum altitude fence
add fence switch test while flying
add FenceAutoEnableDisableSwitch for auto mode 2
add more scenarios for plane fence auto-enable
validate fence rc switch behaviour
check fence autoenable by taking off in guided mode
more FENCE_AUTOENABLE tests
add FenceEnableDisableAux and FenceMinAltAutoEnableAbort
control copter floor fence with autoenable
autoenable floor fence with a margin
check for manual recovery only after having checked the fences
make auto-disabling for minimum altitude fence an option
output message when fence floor auto-enabled
re-use fence floor auto-enable/disable from plane
auto-disable on landing
do not update enable parameter when controlling through mavlink
make sure get_enabled_fences() actually returns enabled fences.
make current fences enabled internal state rather than persistent
implement auto options correctly and on copter
add fence names utility
use ExpandingString for constructing fence names
correctly check whether fences are enabled or not and disable min alt for landing in all auto modes
add enable_configured() for use by mavlink and rc
add events for all fence types
make sure that auto fences are no longer candidates after manual updates
add fence debug
make sure rc switch is the ultimate authority on fences
reset auto mask when enabling or disabling fencing
ensure auto-enable on arming works as intended
simplify printing fence notices
reset autofences when auot-enablement is changed
output fence breach type
when switching mode without a fence action do not go into manual recovery
only recover if there is a fence action
implement auto-takeoff fence options
output user-friendly fence names
auto-enable fences on auto-takeoff
use fence enable_configured()
simplify message printing
Fixes the following issues:
* Compound array elements subject to tail array optimization could be
decoded incorrectly, causing a decode failure.
* Invalid array lengths could be sent over the wire if a
longer-than-max array was encoded (though only the max number of
elements was sent).
* Lengths were not validated when decoding arrays of compound elements
using TAO, causing memory corruption if an invalid length was received.
* Union tags were not validated, causing undefined behavior if an
invalid tag was received.