#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_ */