diff --git a/datapoollocal/CMakeLists.txt b/datapoollocal/CMakeLists.txt index c6b187cd2..925be505c 100644 --- a/datapoollocal/CMakeLists.txt +++ b/datapoollocal/CMakeLists.txt @@ -5,4 +5,6 @@ target_sources(${LIB_FSFW_NAME} LocalPoolDataSetBase.cpp LocalPoolObjectBase.cpp SharedLocalDataSet.cpp + HasLocalDpIFUserAttorney.cpp + HasLocalDpIFManagerAttorney.cpp ) \ No newline at end of file diff --git a/datapoollocal/HasLocalDataPoolIF.h b/datapoollocal/HasLocalDataPoolIF.h index 3132277d4..c1afb4a07 100644 --- a/datapoollocal/HasLocalDataPoolIF.h +++ b/datapoollocal/HasLocalDataPoolIF.h @@ -1,7 +1,8 @@ #ifndef FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_ #define FSFW_DATAPOOLLOCAL_HASLOCALDATAPOOLIF_H_ -#include +#include "localPoolDefinitions.h" + #include "../datapool/PoolEntryIF.h" #include "../serviceinterface/ServiceInterface.h" #include "../ipc/MessageQueueSenderIF.h" diff --git a/datapoollocal/HasLocalDpIFManagerAttorney.cpp b/datapoollocal/HasLocalDpIFManagerAttorney.cpp index 997f4dfa4..a683cf7be 100644 --- a/datapoollocal/HasLocalDpIFManagerAttorney.cpp +++ b/datapoollocal/HasLocalDpIFManagerAttorney.cpp @@ -3,16 +3,16 @@ #include "LocalPoolDataSetBase.h" #include "HasLocalDataPoolIF.h" -LocalPoolDataSetBase* HasLocalDpIFManagerAttorney::getDataSetHandle(HasLocalDataPoolIF* interface, +LocalPoolDataSetBase* HasLocalDpIFManagerAttorney::getDataSetHandle(HasLocalDataPoolIF* clientIF, sid_t sid) { - return interface->getDataSetHandle(sid); + return clientIF->getDataSetHandle(sid); } -LocalPoolObjectBase* HasLocalDpIFManagerAttorney::getPoolObjectHandle(HasLocalDataPoolIF* interface, +LocalPoolObjectBase* HasLocalDpIFManagerAttorney::getPoolObjectHandle(HasLocalDataPoolIF* clientIF, lp_id_t localPoolId) { - return interface->getPoolObjectHandle(localPoolId); + return clientIF->getPoolObjectHandle(localPoolId); } -object_id_t HasLocalDpIFManagerAttorney::getObjectId(HasLocalDataPoolIF* interface) { - return interface->getObjectId(); +object_id_t HasLocalDpIFManagerAttorney::getObjectId(HasLocalDataPoolIF* clientIF) { + return clientIF->getObjectId(); } diff --git a/datapoollocal/HasLocalDpIFManagerAttorney.h b/datapoollocal/HasLocalDpIFManagerAttorney.h index ca5965995..44b06592a 100644 --- a/datapoollocal/HasLocalDpIFManagerAttorney.h +++ b/datapoollocal/HasLocalDpIFManagerAttorney.h @@ -9,12 +9,12 @@ class LocalPoolObjectBase; class HasLocalDpIFManagerAttorney { - static LocalPoolDataSetBase* getDataSetHandle(HasLocalDataPoolIF* interface, sid_t sid); + static LocalPoolDataSetBase* getDataSetHandle(HasLocalDataPoolIF* clientIF, sid_t sid); - static LocalPoolObjectBase* getPoolObjectHandle(HasLocalDataPoolIF* interface, + static LocalPoolObjectBase* getPoolObjectHandle(HasLocalDataPoolIF* clientIF, lp_id_t localPoolId); - static object_id_t getObjectId(HasLocalDataPoolIF* interface); + static object_id_t getObjectId(HasLocalDataPoolIF* clientIF); friend class LocalDataPoolManager; }; diff --git a/datapoollocal/HasLocalDpIFUserAttorney.cpp b/datapoollocal/HasLocalDpIFUserAttorney.cpp index 002230fee..bb4d83d14 100644 --- a/datapoollocal/HasLocalDpIFUserAttorney.cpp +++ b/datapoollocal/HasLocalDpIFUserAttorney.cpp @@ -1,6 +1,7 @@ #include "HasLocalDpIFUserAttorney.h" +#include "AccessLocalPoolF.h" #include "HasLocalDataPoolIF.h" -AccessPoolManagerIF* HasLocalDpIFUserAttorney::getAccessorHandle(HasLocalDataPoolIF *interface) { - return interface->getAccessorHandle(); +AccessPoolManagerIF* HasLocalDpIFUserAttorney::getAccessorHandle(HasLocalDataPoolIF *clientIF) { + return clientIF->getAccessorHandle(); } diff --git a/datapoollocal/HasLocalDpIFUserAttorney.h b/datapoollocal/HasLocalDpIFUserAttorney.h index 67b51a4ae..a07c2d595 100644 --- a/datapoollocal/HasLocalDpIFUserAttorney.h +++ b/datapoollocal/HasLocalDpIFUserAttorney.h @@ -7,7 +7,7 @@ class AccessPoolManagerIF; class HasLocalDpIFUserAttorney { private: - static AccessPoolManagerIF* getAccessorHandle(HasLocalDataPoolIF* interface); + static AccessPoolManagerIF* getAccessorHandle(HasLocalDataPoolIF* clientIF); friend class LocalPoolObjectBase; friend class LocalPoolDataSetBase; diff --git a/datapoollocal/LocalPoolDataSetBase.h b/datapoollocal/LocalPoolDataSetBase.h index 2d170c3ff..5f17eeb68 100644 --- a/datapoollocal/LocalPoolDataSetBase.h +++ b/datapoollocal/LocalPoolDataSetBase.h @@ -1,8 +1,8 @@ #ifndef FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETBASE_H_ #define FSFW_DATAPOOLLOCAL_LOCALPOOLDATASETBASE_H_ -#include #include "MarkChangedIF.h" +#include "localPoolDefinitions.h" #include "../datapool/DataSetIF.h" #include "../datapool/PoolDataSetBase.h" diff --git a/datapoollocal/localPoolDefinitions.h b/datapoollocal/localPoolDefinitions.h index 5f5588958..86073e6fc 100644 --- a/datapoollocal/localPoolDefinitions.h +++ b/datapoollocal/localPoolDefinitions.h @@ -21,8 +21,11 @@ static constexpr uint8_t INTERFACE_ID = CLASS_ID::LOCAL_POOL_OWNER_IF; static constexpr ReturnValue_t POOL_ENTRY_NOT_FOUND = MAKE_RETURN_CODE(0x00); static constexpr ReturnValue_t POOL_ENTRY_TYPE_CONFLICT = MAKE_RETURN_CODE(0x01); +//! This is the core data structure of the local data pools. Users should insert all desired +//! pool variables, using the std::map interface. using DataPool = std::map; using DataPoolMapIter = DataPool::iterator; + } /** diff --git a/unittest/tests/datapoollocal/LocalPoolOwnerBase.h b/unittest/tests/datapoollocal/LocalPoolOwnerBase.h index a5389812b..aaccc90ed 100644 --- a/unittest/tests/datapoollocal/LocalPoolOwnerBase.h +++ b/unittest/tests/datapoollocal/LocalPoolOwnerBase.h @@ -92,7 +92,7 @@ public: // This is called by initializeAfterTaskCreation of the HK manager. virtual ReturnValue_t initializeLocalDataPool( - LocalDataPool& localDataPoolMap, + localpool::DataPool& localDataPoolMap, LocalDataPoolManager& poolManager) { // Default initialization empty for now. localDataPoolMap.emplace(lpool::uint8VarId, @@ -109,7 +109,16 @@ public: return HasReturnvaluesIF::RETURN_OK; } - LocalDataPoolManager* getHkManagerHandle() override { + /** + * This function can be used by data pool consumers to retrieve a handle + * which allows subscriptions to dataset and variable updates. + * @return + */ + virtual ProvidesDataPoolSubscriptionIF* getSubscriptionInterface() override { + return &hkManager; + } + + virtual AccessPoolManagerIF* getAccessorHandle() override { return &hkManager; } diff --git a/unittest/tests/datapoollocal/LocalPoolVariableTest.cpp b/unittest/tests/datapoollocal/LocalPoolVariableTest.cpp index 5f7118ff2..2e4cb7ecd 100644 --- a/unittest/tests/datapoollocal/LocalPoolVariableTest.cpp +++ b/unittest/tests/datapoollocal/LocalPoolVariableTest.cpp @@ -81,15 +81,15 @@ TEST_CASE("LocalPoolVariable" , "[LocPoolVarTest]") { lp_var_t invalidVariable = lp_var_t( objects::TEST_LOCAL_POOL_OWNER_BASE, 0xffffffff); REQUIRE(invalidVariable.read() == - static_cast(HasLocalDataPoolIF::POOL_ENTRY_NOT_FOUND)); + static_cast(localpool::POOL_ENTRY_NOT_FOUND)); REQUIRE(invalidVariable.commit() == - static_cast(HasLocalDataPoolIF::POOL_ENTRY_NOT_FOUND)); + static_cast(localpool::POOL_ENTRY_NOT_FOUND)); // now try to access with wrong type lp_var_t invalidVariable2 = lp_var_t( objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint8VarId); REQUIRE(invalidVariable2.read() == - static_cast(HasLocalDataPoolIF::POOL_ENTRY_TYPE_CONFLICT)); + static_cast(localpool::POOL_ENTRY_TYPE_CONFLICT)); lp_var_t readOnlyVar = lp_var_t( objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint8VarId, diff --git a/unittest/tests/datapoollocal/LocalPoolVectorTest.cpp b/unittest/tests/datapoollocal/LocalPoolVectorTest.cpp index cfc2ec2ed..7c309bbb8 100644 --- a/unittest/tests/datapoollocal/LocalPoolVectorTest.cpp +++ b/unittest/tests/datapoollocal/LocalPoolVectorTest.cpp @@ -91,17 +91,17 @@ TEST_CASE("LocalPoolVector" , "[LocPoolVecTest]") { lp_vec_t invalidVector = lp_vec_t( objects::TEST_LOCAL_POOL_OWNER_BASE, 0xffffffff); REQUIRE(invalidVector.read() == - static_cast(HasLocalDataPoolIF::POOL_ENTRY_NOT_FOUND)); + static_cast(localpool::POOL_ENTRY_NOT_FOUND)); REQUIRE(invalidVector.commit() == - static_cast(HasLocalDataPoolIF::POOL_ENTRY_NOT_FOUND)); + static_cast(localpool::POOL_ENTRY_NOT_FOUND)); // now try to access with wrong type lp_vec_t invalidVector2 = lp_vec_t( objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint16Vec3Id); REQUIRE(invalidVector2.read() == - static_cast(HasLocalDataPoolIF::POOL_ENTRY_TYPE_CONFLICT)); + static_cast(localpool::POOL_ENTRY_TYPE_CONFLICT)); REQUIRE(invalidVector2.commit() == - static_cast(HasLocalDataPoolIF::POOL_ENTRY_TYPE_CONFLICT)); + static_cast(localpool::POOL_ENTRY_TYPE_CONFLICT)); lp_vec_t writeOnlyVec = lp_vec_t( objects::TEST_LOCAL_POOL_OWNER_BASE, lpool::uint16Vec3Id,