AC_AutoTune: restrict scoping of LEVEL_ISSUE enum

This gives us tighter type-checking and scoping
This commit is contained in:
Peter Barker 2019-02-28 21:38:39 +11:00 committed by Peter Barker
parent a451380d61
commit 87d05d843e
2 changed files with 24 additions and 24 deletions

View File

@ -226,19 +226,19 @@ bool AC_AutoTune::start(void)
const char *AC_AutoTune::level_issue_string() const const char *AC_AutoTune::level_issue_string() const
{ {
switch (level_problem.issue) { switch (level_problem.issue) {
case LEVEL_ISSUE_NONE: case LevelIssue::NONE:
return "None"; return "None";
case LEVEL_ISSUE_ANGLE_ROLL: case LevelIssue::ANGLE_ROLL:
return "Angle(R)"; return "Angle(R)";
case LEVEL_ISSUE_ANGLE_PITCH: case LevelIssue::ANGLE_PITCH:
return "Angle(P)"; return "Angle(P)";
case LEVEL_ISSUE_ANGLE_YAW: case LevelIssue::ANGLE_YAW:
return "Angle(Y)"; return "Angle(Y)";
case LEVEL_ISSUE_RATE_ROLL: case LevelIssue::RATE_ROLL:
return "Rate(R)"; return "Rate(R)";
case LEVEL_ISSUE_RATE_PITCH: case LevelIssue::RATE_PITCH:
return "Rate(P)"; return "Rate(P)";
case LEVEL_ISSUE_RATE_YAW: case LevelIssue::RATE_YAW:
return "Rate(Y)"; return "Rate(Y)";
} }
return "Bug"; return "Bug";
@ -414,7 +414,7 @@ void AC_AutoTune::run()
} }
bool AC_AutoTune::check_level(const LEVEL_ISSUE issue, const float current, const float maximum) bool AC_AutoTune::check_level(const LevelIssue issue, const float current, const float maximum)
{ {
if (current > maximum) { if (current > maximum) {
level_problem.current = current; level_problem.current = current;
@ -435,33 +435,33 @@ bool AC_AutoTune::currently_level()
threshold_mul *= 2; threshold_mul *= 2;
} }
if (!check_level(LEVEL_ISSUE_ANGLE_ROLL, if (!check_level(LevelIssue::ANGLE_ROLL,
abs(ahrs_view->roll_sensor - roll_cd), abs(ahrs_view->roll_sensor - roll_cd),
threshold_mul*AUTOTUNE_LEVEL_ANGLE_CD)) { threshold_mul*AUTOTUNE_LEVEL_ANGLE_CD)) {
return false; return false;
} }
if (!check_level(LEVEL_ISSUE_ANGLE_PITCH, if (!check_level(LevelIssue::ANGLE_PITCH,
abs(ahrs_view->pitch_sensor - pitch_cd), abs(ahrs_view->pitch_sensor - pitch_cd),
threshold_mul*AUTOTUNE_LEVEL_ANGLE_CD)) { threshold_mul*AUTOTUNE_LEVEL_ANGLE_CD)) {
return false; return false;
} }
if (!check_level(LEVEL_ISSUE_ANGLE_YAW, if (!check_level(LevelIssue::ANGLE_YAW,
fabsf(wrap_180_cd(ahrs_view->yaw_sensor - desired_yaw_cd)), fabsf(wrap_180_cd(ahrs_view->yaw_sensor - desired_yaw_cd)),
threshold_mul*AUTOTUNE_LEVEL_ANGLE_CD)) { threshold_mul*AUTOTUNE_LEVEL_ANGLE_CD)) {
return false; return false;
} }
if (!check_level(LEVEL_ISSUE_RATE_ROLL, if (!check_level(LevelIssue::RATE_ROLL,
(ToDeg(ahrs_view->get_gyro().x) * 100.0f), (ToDeg(ahrs_view->get_gyro().x) * 100.0f),
threshold_mul*AUTOTUNE_LEVEL_RATE_RP_CD)) { threshold_mul*AUTOTUNE_LEVEL_RATE_RP_CD)) {
return false; return false;
} }
if (!check_level(LEVEL_ISSUE_RATE_PITCH, if (!check_level(LevelIssue::RATE_PITCH,
(ToDeg(ahrs_view->get_gyro().y) * 100.0f), (ToDeg(ahrs_view->get_gyro().y) * 100.0f),
threshold_mul*AUTOTUNE_LEVEL_RATE_RP_CD)) { threshold_mul*AUTOTUNE_LEVEL_RATE_RP_CD)) {
return false; return false;
} }
if (!check_level(LEVEL_ISSUE_RATE_YAW, if (!check_level(LevelIssue::RATE_YAW,
(ToDeg(ahrs_view->get_gyro().z) * 100.0f), (ToDeg(ahrs_view->get_gyro().z) * 100.0f),
threshold_mul*AUTOTUNE_LEVEL_RATE_Y_CD)) { threshold_mul*AUTOTUNE_LEVEL_RATE_Y_CD)) {
return false; return false;

View File

@ -114,16 +114,16 @@ private:
void announce_state_to_gcs(); void announce_state_to_gcs();
void do_gcs_announcements(); void do_gcs_announcements();
enum LEVEL_ISSUE { enum struct LevelIssue {
LEVEL_ISSUE_NONE, NONE,
LEVEL_ISSUE_ANGLE_ROLL, ANGLE_ROLL,
LEVEL_ISSUE_ANGLE_PITCH, ANGLE_PITCH,
LEVEL_ISSUE_ANGLE_YAW, ANGLE_YAW,
LEVEL_ISSUE_RATE_ROLL, RATE_ROLL,
LEVEL_ISSUE_RATE_PITCH, RATE_PITCH,
LEVEL_ISSUE_RATE_YAW, RATE_YAW,
}; };
bool check_level(const enum LEVEL_ISSUE issue, const float current, const float maximum); bool check_level(const enum LevelIssue issue, const float current, const float maximum);
bool currently_level(); bool currently_level();
// autotune modes (high level states) // autotune modes (high level states)
@ -216,7 +216,7 @@ private:
float roll_cd, pitch_cd; float roll_cd, pitch_cd;
struct { struct {
LEVEL_ISSUE issue{LEVEL_ISSUE_NONE}; LevelIssue issue{LevelIssue::NONE};
float maximum; float maximum;
float current; float current;
} level_problem; } level_problem;