systemlib hysteresis improve field packing and cleanup

This commit is contained in:
Daniel Agar
2019-02-11 11:57:05 -05:00
committed by GitHub
parent d7ba8cc3f0
commit fb7c0376a0
2 changed files with 35 additions and 30 deletions
+24 -7
View File
@@ -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()
{
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;
}
}
}
}
+11 -23
View File
@@ -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()
{}
~Hysteresis() = default;
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;
bool get_state() const { return _state; }
} else {
_hysteresis_time_from_false_us = new_hysteresis_time_us;
}
}
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:
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