forked from Archive/PX4-Autopilot
DataValidatorGroup: add add_new_validator() to dynamically add new validators
This commit is contained in:
parent
ded3b1a690
commit
227938d263
|
@ -41,6 +41,7 @@
|
||||||
|
|
||||||
#include "data_validator_group.h"
|
#include "data_validator_group.h"
|
||||||
#include <ecl/ecl.h>
|
#include <ecl/ecl.h>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
DataValidatorGroup::DataValidatorGroup(unsigned siblings) :
|
DataValidatorGroup::DataValidatorGroup(unsigned siblings) :
|
||||||
_first(nullptr),
|
_first(nullptr),
|
||||||
|
@ -49,6 +50,7 @@ DataValidatorGroup::DataValidatorGroup(unsigned siblings) :
|
||||||
_first_failover_time(0),
|
_first_failover_time(0),
|
||||||
_toggle_count(0)
|
_toggle_count(0)
|
||||||
{
|
{
|
||||||
|
assert(siblings > 0);
|
||||||
DataValidator *next = _first;
|
DataValidator *next = _first;
|
||||||
|
|
||||||
for (unsigned i = 0; i < siblings; i++) {
|
for (unsigned i = 0; i < siblings; i++) {
|
||||||
|
@ -56,6 +58,7 @@ DataValidatorGroup::DataValidatorGroup(unsigned siblings) :
|
||||||
}
|
}
|
||||||
|
|
||||||
_first = next;
|
_first = next;
|
||||||
|
_timeout_interval_us = _first->get_timeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
DataValidatorGroup::~DataValidatorGroup()
|
DataValidatorGroup::~DataValidatorGroup()
|
||||||
|
@ -67,6 +70,15 @@ DataValidatorGroup::~DataValidatorGroup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DataValidator *DataValidatorGroup::add_new_validator()
|
||||||
|
{
|
||||||
|
DataValidator *validator = new DataValidator(_first);
|
||||||
|
if (!validator) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
_first = validator;
|
||||||
|
_first->set_timeout(_timeout_interval_us);
|
||||||
|
return _first;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -78,6 +90,7 @@ DataValidatorGroup::set_timeout(uint32_t timeout_interval_us)
|
||||||
next->set_timeout(timeout_interval_us);
|
next->set_timeout(timeout_interval_us);
|
||||||
next = next->sibling();
|
next = next->sibling();
|
||||||
}
|
}
|
||||||
|
_timeout_interval_us = timeout_interval_us;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -48,6 +48,12 @@ public:
|
||||||
DataValidatorGroup(unsigned siblings);
|
DataValidatorGroup(unsigned siblings);
|
||||||
virtual ~DataValidatorGroup();
|
virtual ~DataValidatorGroup();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new Validator (with index equal to the number of currently existing validators)
|
||||||
|
* @return the newly created DataValidator or nullptr on error
|
||||||
|
*/
|
||||||
|
DataValidator *add_new_validator();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Put an item into the validator group.
|
* Put an item into the validator group.
|
||||||
*
|
*
|
||||||
|
@ -117,6 +123,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DataValidator *_first; /**< sibling in the group */
|
DataValidator *_first; /**< sibling in the group */
|
||||||
|
uint32_t _timeout_interval_us; /**< currently set timeout */
|
||||||
int _curr_best; /**< currently best index */
|
int _curr_best; /**< currently best index */
|
||||||
int _prev_best; /**< the previous best index */
|
int _prev_best; /**< the previous best index */
|
||||||
uint64_t _first_failover_time; /**< timestamp where the first failover occured or zero if none occured */
|
uint64_t _first_failover_time; /**< timestamp where the first failover occured or zero if none occured */
|
||||||
|
|
Loading…
Reference in New Issue