99 lines
2.9 KiB
C
99 lines
2.9 KiB
C
|
#ifndef FRAMEWORK_DATAPOOLGLOB_DATASET_H_
|
||
|
#define FRAMEWORK_DATAPOOLGLOB_DATASET_H_
|
||
|
|
||
|
#include "../datapool/PoolDataSetBase.h"
|
||
|
|
||
|
/**
|
||
|
* @brief The DataSet class manages a set of locally checked out variables
|
||
|
* for the global data pool.
|
||
|
* @details
|
||
|
* This class uses the read-commit() semantic provided by the DataSetBase class.
|
||
|
* It extends the base class by using the global data pool,
|
||
|
* having a valid state and implementing lock und unlock calls for the global
|
||
|
* datapool.
|
||
|
*
|
||
|
* For more information on how this class works, see the DataSetBase
|
||
|
* documentation.
|
||
|
* @author Bastian Baetz
|
||
|
* @ingroup data_pool
|
||
|
*/
|
||
|
class GlobDataSet: public PoolDataSetBase {
|
||
|
public:
|
||
|
|
||
|
/**
|
||
|
* @brief Creates an empty GlobDataSet. Use registerVariable or
|
||
|
* supply a pointer to this dataset to PoolVariable
|
||
|
* initializations to register pool variables.
|
||
|
*/
|
||
|
GlobDataSet();
|
||
|
|
||
|
/**
|
||
|
* @brief The destructor automatically manages writing the valid
|
||
|
* information of variables.
|
||
|
* @details
|
||
|
* In case the data set was read out, but not committed(indicated by state),
|
||
|
* the destructor parses all variables that are still registered to the set.
|
||
|
* For each, the valid flag in the data pool is set to "invalid".
|
||
|
*/
|
||
|
~GlobDataSet();
|
||
|
|
||
|
/**
|
||
|
* Variant of method above which sets validity of all elements of the set.
|
||
|
* @param valid Validity information from PoolVariableIF.
|
||
|
* @return - @c RETURN_OK if all variables were read successfully.
|
||
|
* - @c COMMITING_WITHOUT_READING if set was not read yet and
|
||
|
* contains non write-only variables
|
||
|
*/
|
||
|
ReturnValue_t commit(bool valid, uint32_t lockTimeout = MutexIF::BLOCKING);
|
||
|
ReturnValue_t commit(uint32_t lockTimeout = MutexIF::BLOCKING) override;
|
||
|
|
||
|
/**
|
||
|
* Set all entries
|
||
|
* @param valid
|
||
|
*/
|
||
|
void setSetValid(bool valid);
|
||
|
|
||
|
bool isValid() const override;
|
||
|
|
||
|
/**
|
||
|
* Set the valid information of all variables contained in the set which
|
||
|
* are not read-only
|
||
|
*
|
||
|
* @param valid Validity information from PoolVariableIF.
|
||
|
*/
|
||
|
void setEntriesValid(bool valid);
|
||
|
|
||
|
//!< This definition sets the maximum number of variables to
|
||
|
//! register in one DataSet.
|
||
|
static const uint8_t DATA_SET_MAX_SIZE = 63;
|
||
|
|
||
|
private:
|
||
|
/**
|
||
|
* If the valid state of a dataset is always relevant to the whole
|
||
|
* data set we can use this flag.
|
||
|
*/
|
||
|
bool valid = false;
|
||
|
|
||
|
/**
|
||
|
* @brief This is a small helper function to facilitate locking
|
||
|
* the global data pool.
|
||
|
* @details
|
||
|
* It makes use of the lockDataPool method offered by the DataPool class.
|
||
|
*/
|
||
|
ReturnValue_t lockDataPool(uint32_t timeoutMs) override;
|
||
|
/**
|
||
|
* @brief This is a small helper function to facilitate
|
||
|
* unlocking the global data pool
|
||
|
* @details
|
||
|
* It makes use of the freeDataPoolLock method offered by the DataPool class.
|
||
|
*/
|
||
|
ReturnValue_t unlockDataPool() override;
|
||
|
|
||
|
void handleAlreadyReadDatasetCommit();
|
||
|
ReturnValue_t handleUnreadDatasetCommit();
|
||
|
|
||
|
PoolVariableIF* registeredVariables[DATA_SET_MAX_SIZE];
|
||
|
};
|
||
|
|
||
|
#endif /* FRAMEWORK_DATAPOOLGLOB_DATASET_H_ */
|