fsfw/datapoollocal/OwnsLocalDataPoolIF.h

56 lines
2.2 KiB
C
Raw Normal View History

2020-05-17 01:17:11 +02:00
#ifndef FRAMEWORK_DATAPOOL_HASHKPOOLPARAMETERSIF_H_
#define FRAMEWORK_DATAPOOL_HASHKPOOLPARAMETERSIF_H_
#include <framework/datapool/PoolEntryIF.h>
#include <framework/ipc/MessageQueueSenderIF.h>
2020-06-05 20:35:08 +02:00
#include <framework/housekeeping/HousekeepingMessage.h>
2020-05-17 01:17:11 +02:00
#include <map>
2020-06-07 02:22:18 +02:00
class LocalDataPoolManager;
2020-06-05 20:35:08 +02:00
class DataSetIF;
2020-05-17 01:17:11 +02:00
/**
* @brief Type definition for local pool entries.
*/
using lp_id_t = uint32_t;
2020-06-07 02:22:18 +02:00
using LocalDataPool = std::map<lp_id_t, PoolEntryIF*>;
using LocalDataPoolMapIter = LocalDataPool::iterator;
2020-05-17 01:17:11 +02:00
/**
2020-06-05 20:35:08 +02:00
* @brief This interface is implemented by classes which posses a local
2020-06-07 02:22:18 +02:00
* data pool (not the managing class). It defines the relationship
* between the local data pool owner and the LocalDataPoolManager.
2020-06-05 20:35:08 +02:00
* @details
2020-06-07 02:22:18 +02:00
* Any class implementing this interface shall also have a LocalDataPoolManager
* member class which contains the actual pool data structure
* and exposes the public interface for it.
2020-06-05 20:35:08 +02:00
* This is required because the pool entries are templates, which makes
2020-06-07 02:22:18 +02:00
* specifying an interface rather difficult. The local data pool can be
* accessed by using the LocalPoolVariable, LocalPoolVector or LocalDataSet
* classes.
2020-06-05 20:35:08 +02:00
*
2020-06-07 02:22:18 +02:00
* Architectural Note:
* This could be circumvented by using a wrapper/accessor function or
* implementing the templated function in this interface..
* The first solution sounds better than the second but
2020-06-05 20:35:08 +02:00
* the LocalPoolVariable classes are templates as well, so this just shifts
* the problem somewhere else. Interfaces are nice, but the most
* pragmatic solution I found was to offer the client the full interface
2020-06-07 02:22:18 +02:00
* of the LocalDataPoolManager.
2020-05-17 01:17:11 +02:00
*/
2020-06-07 02:22:18 +02:00
class OwnsLocalDataPoolIF {
2020-05-17 01:17:11 +02:00
public:
2020-06-07 02:22:18 +02:00
virtual~ OwnsLocalDataPoolIF() {};
2020-05-17 01:17:11 +02:00
2020-06-05 20:35:08 +02:00
static constexpr uint8_t INTERFACE_ID = CLASS_ID::HOUSEKEEPING;
static constexpr ReturnValue_t POOL_ENTRY_NOT_FOUND = MAKE_RETURN_CODE(0XA0);
static constexpr ReturnValue_t POOL_ENTRY_TYPE_CONFLICT = MAKE_RETURN_CODE(0xA1);
2020-05-17 01:17:11 +02:00
virtual MessageQueueId_t getCommandQueue() const = 0;
virtual ReturnValue_t initializeHousekeepingPoolEntries(
2020-06-07 02:22:18 +02:00
LocalDataPool& localDataPoolMap) = 0;
2020-06-06 23:15:42 +02:00
//virtual float setMinimalHkSamplingFrequency() = 0;
2020-06-07 02:22:18 +02:00
virtual LocalDataPoolManager* getHkManagerHandle() = 0;
2020-06-05 20:35:08 +02:00
virtual DataSetIF* getDataSetHandle(sid_t sid) = 0;
2020-05-17 01:17:11 +02:00
};
#endif /* FRAMEWORK_DATAPOOL_HASHKPOOLPARAMETERSIF_H_ */