Browse Source

systemlib hysteresis improve field packing and cleanup

sbg
Daniel Agar 6 years ago committed by GitHub
parent
commit
fb7c0376a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 31
      src/lib/systemlib/hysteresis/hysteresis.cpp
  2. 34
      src/lib/systemlib/hysteresis/hysteresis.h

31
src/lib/systemlib/hysteresis/hysteresis.cpp

@ -37,13 +37,21 @@ @@ -37,13 +37,21 @@
* @author Julian Oes <julian@oes.ch>
*/
#include <px4_log.h>
#include "systemlib/hysteresis/hysteresis.h"
#include "hysteresis.h"
namespace systemlib
{
void
Hysteresis::set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us)
{
if (from_state == true) {
_time_from_true_us = new_hysteresis_time_us;
} else {
_time_from_false_us = new_hysteresis_time_us;
}
}
void
Hysteresis::set_state_and_update(const bool new_state)
@ -66,10 +74,19 @@ Hysteresis::update() @@ -66,10 +74,19 @@ Hysteresis::update()
{
if (_requested_state != _state) {
if (hrt_elapsed_time(&_last_time_to_change_state) >= (_state ?
_hysteresis_time_from_true_us :
_hysteresis_time_from_false_us)) {
_state = _requested_state;
const hrt_abstime elapsed = hrt_elapsed_time(&_last_time_to_change_state);
if (_state && !_requested_state) {
// true -> false
if (elapsed >= _time_from_true_us) {
_state = false;
}
} else if (!_state && _requested_state) {
// false -> true
if (elapsed >= _time_from_false_us) {
_state = true;
}
}
}
}

34
src/lib/systemlib/hysteresis/hysteresis.h

@ -49,31 +49,17 @@ namespace systemlib @@ -49,31 +49,17 @@ namespace systemlib
class Hysteresis
{
public:
Hysteresis(bool init_state) :
explicit Hysteresis(bool init_state) :
_state(init_state),
_requested_state(init_state),
_hysteresis_time_from_true_us(0),
_hysteresis_time_from_false_us(0),
_last_time_to_change_state(0)
_requested_state(init_state)
{}
Hysteresis() = delete; // no default constructor
~Hysteresis()
{}
void set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us)
{
if (from_state == true) {
_hysteresis_time_from_true_us = new_hysteresis_time_us;
~Hysteresis() = default;
} else {
_hysteresis_time_from_false_us = new_hysteresis_time_us;
}
}
bool get_state() const { return _state; }
bool get_state() const
{
return _state;
}
void set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us);
void set_state_and_update(const bool new_state);
@ -81,11 +67,13 @@ public: @@ -81,11 +67,13 @@ public:
private:
hrt_abstime _last_time_to_change_state{0};
hrt_abstime _time_from_true_us{0};
hrt_abstime _time_from_false_us{0};
bool _state;
bool _requested_state;
hrt_abstime _hysteresis_time_from_true_us;
hrt_abstime _hysteresis_time_from_false_us;
hrt_abstime _last_time_to_change_state;
};
} // namespace systemlib

Loading…
Cancel
Save