AC_Fence: use pre-arm checks for sanity checks

Magically resetting people's parameters not a great look.
This commit is contained in:
Peter Barker 2017-12-27 13:53:39 +11:00 committed by Francisco Ferreira
parent 155407956c
commit a5aafab7ff
2 changed files with 31 additions and 9 deletions

View File

@ -77,14 +77,6 @@ AC_Fence::AC_Fence(const AP_AHRS_NavEKF& ahrs) :
_ahrs(ahrs) _ahrs(ahrs)
{ {
AP_Param::setup_object_defaults(this, var_info); AP_Param::setup_object_defaults(this, var_info);
// check for silly fence values
if (_alt_max < 0.0f) {
_alt_max.set_and_save(AC_FENCE_ALT_MAX_DEFAULT);
}
if (_circle_radius < 0) {
_circle_radius.set_and_save(AC_FENCE_CIRCLE_RADIUS_DEFAULT);
}
} }
void AC_Fence::enable(bool value) void AC_Fence::enable(bool value)
@ -120,6 +112,26 @@ bool AC_Fence::pre_arm_check_polygon(const char* &fail_msg) const
return true; return true;
} }
// additional checks for the circle fence:
bool AC_Fence::pre_arm_check_circle(const char* &fail_msg) const
{
if (_circle_radius < 0) {
fail_msg = "Invalid FENCE_RADIUS value";
return false;
}
return true;
}
// additional checks for the alt fence:
bool AC_Fence::pre_arm_check_alt(const char* &fail_msg) const
{
if (_alt_max < 0.0f) {
fail_msg = "Invalid FENCE_ALT_MAX value";
return false;
}
return true;
}
/// pre_arm_check - returns true if all pre-takeoff checks have completed successfully /// pre_arm_check - returns true if all pre-takeoff checks have completed successfully
bool AC_Fence::pre_arm_check(const char* &fail_msg) const bool AC_Fence::pre_arm_check(const char* &fail_msg) const
@ -152,6 +164,14 @@ bool AC_Fence::pre_arm_check(const char* &fail_msg) const
return false; return false;
} }
if (!pre_arm_check_circle(fail_msg)) {
return false;
}
if (!pre_arm_check_alt(fail_msg)) {
return false;
}
// if we got this far everything must be ok // if we got this far everything must be ok
return true; return true;
} }

View File

@ -130,8 +130,10 @@ private:
/// clear_breach - update breach bitmask, time and count /// clear_breach - update breach bitmask, time and count
void clear_breach(uint8_t fence_type); void clear_breach(uint8_t fence_type);
// additional checks for the polygon fence: // additional checks for the different fence types:
bool pre_arm_check_polygon(const char* &fail_msg) const; bool pre_arm_check_polygon(const char* &fail_msg) const;
bool pre_arm_check_circle(const char* &fail_msg) const;
bool pre_arm_check_alt(const char* &fail_msg) const;
/// load polygon points stored in eeprom into boundary array and perform validation. returns true if load successfully completed /// load polygon points stored in eeprom into boundary array and perform validation. returns true if load successfully completed
bool load_polygon_from_eeprom(bool force_reload = false); bool load_polygon_from_eeprom(bool force_reload = false);