Failure Detector - use bitmask field instead of boolean in vehicle_status msg (failure_detector_status) and instead of struct in class

This commit is contained in:
bresch
2018-08-28 11:23:25 -04:00
committed by Daniel Agar
parent 0001031e59
commit 9be0c97346
4 changed files with 41 additions and 22 deletions
@@ -74,8 +74,18 @@ FailureDetector::update_attitude_status()
const float max_roll(fabsf(math::radians(max_roll_deg)));
const float max_pitch(fabsf(math::radians(max_pitch_deg)));
_status.roll = (max_roll > 0.0f) && (fabsf(roll) > max_roll);
_status.pitch = (max_pitch > 0.0f) && (fabsf(pitch) > max_pitch);
const bool roll_status = (max_roll > 0.0f) && (fabsf(roll) > max_roll);
const bool pitch_status = (max_pitch > 0.0f) && (fabsf(pitch) > max_pitch);
// Update bitmask
_status &= ~(FAILURE_ROLL | FAILURE_PITCH);
if (roll_status) {
_status |= FAILURE_ROLL;
}
if (pitch_status) {
_status |= FAILURE_PITCH;
}
updated = true;
@@ -51,12 +51,14 @@
#include <uORB/Subscription.hpp>
#include <uORB/topics/vehicle_attitude_setpoint.h>
#include <uORB/topics/vehicle_attitude.h>
#include <uORB/topics/vehicle_status.h>
struct failure_detector_status_s {
bool roll;
bool pitch;
bool altitude;
};
typedef enum {
FAILURE_NONE = vehicle_status_s::FAILURE_NONE,
FAILURE_ROLL = vehicle_status_s::FAILURE_ROLL,
FAILURE_PITCH = vehicle_status_s::FAILURE_PITCH,
FAILURE_ALT = vehicle_status_s::FAILURE_ALT,
} failure_detector_bitmak;
using uORB::Subscription;
@@ -67,7 +69,7 @@ public:
bool update();
const failure_detector_status_s& get_status() const {return _status;}
uint8_t get_status() const {return _status;}
private:
@@ -80,7 +82,7 @@ private:
Subscription<vehicle_attitude_s> _sub_vehicle_attitude_setpoint;
Subscription<vehicle_attitude_s> _sub_vehicule_attitude;
struct failure_detector_status_s _status;
uint8_t _status{FAILURE_NONE};
bool update_attitude_status();
};