diff --git a/datapoollocal/LocalDataPoolManager.h b/datapoollocal/LocalDataPoolManager.h index 0e98b90c..d4e2052c 100644 --- a/datapoollocal/LocalDataPoolManager.h +++ b/datapoollocal/LocalDataPoolManager.h @@ -1,6 +1,7 @@ #ifndef FSFW_DATAPOOLLOCAL_LOCALDATAPOOLMANAGER_H_ #define FSFW_DATAPOOLLOCAL_LOCALDATAPOOLMANAGER_H_ +#include #include "HasLocalDataPoolIF.h" #include "../housekeeping/HousekeepingPacketDownlink.h" @@ -47,11 +48,13 @@ class HousekeepingPacketUpdate; * Each pool entry has a valid state too. * @author R. Mueller */ -class LocalDataPoolManager { +class LocalDataPoolManager: public ProvidesDataPoolSubscriptionIF { template friend class LocalPoolVariable; template friend class LocalPoolVector; friend class LocalPoolDataSetBase; friend void (Factory::setStaticFrameworkObjectIds)(); + + public: static constexpr uint8_t INTERFACE_ID = CLASS_ID::HOUSEKEEPING_MANAGER; @@ -61,6 +64,7 @@ public: static constexpr ReturnValue_t REPORTING_STATUS_UNCHANGED = MAKE_RETURN_CODE(0x02); static constexpr ReturnValue_t PERIODIC_HELPER_INVALID = MAKE_RETURN_CODE(0x03); + /** * This constructor is used by a class which wants to implement * a personal local data pool. The queueToUse can be supplied if it @@ -116,7 +120,7 @@ public: */ ReturnValue_t subscribeForPeriodicPacket(sid_t sid, bool enableReporting, float collectionInterval, bool isDiagnostics, - object_id_t packetDestination = defaultHkDestination); + object_id_t packetDestination = defaultHkDestination) override; /** * @brief Subscribe for the generation of packets if the dataset @@ -130,7 +134,7 @@ public: */ ReturnValue_t subscribeForUpdatePackets(sid_t sid, bool reportingEnabled, bool isDiagnostics, - object_id_t packetDestination = defaultHkDestination); + object_id_t packetDestination = defaultHkDestination) override; /** * @brief Subscribe for a notification message which will be sent @@ -149,7 +153,7 @@ public: ReturnValue_t subscribeForSetUpdateMessages(const uint32_t setId, object_id_t destinationObject, MessageQueueId_t targetQueueId, - bool generateSnapshot); + bool generateSnapshot) override; /** * @brief Subscribe for an notification message which will be sent if a @@ -168,7 +172,7 @@ public: ReturnValue_t subscribeForVariableUpdateMessages(const lp_id_t localPoolId, object_id_t destinationObject, MessageQueueId_t targetQueueId, - bool generateSnapshot); + bool generateSnapshot) override; /** * Non-Diagnostics packets usually have a lower minimum sampling frequency diff --git a/datapoollocal/ProvidesDataPoolSubscriptionIF.h b/datapoollocal/ProvidesDataPoolSubscriptionIF.h new file mode 100644 index 00000000..6f96d518 --- /dev/null +++ b/datapoollocal/ProvidesDataPoolSubscriptionIF.h @@ -0,0 +1,79 @@ +#include +#include +#include + + + +class ProvidesDataPoolSubscriptionIF{ +public: + virtual ~ProvidesDataPoolSubscriptionIF(){}; + + /** + * @brief Subscribe for the generation of periodic packets. + * @details + * This subscription mechanism will generally be used by the data creator + * to generate housekeeping packets which are downlinked directly. + * @return + */ + virtual ReturnValue_t subscribeForPeriodicPacket(sid_t sid, + bool enableReporting, + float collectionInterval, bool isDiagnostics, + object_id_t packetDestination) = 0; + + + /** + * @brief Subscribe for the generation of packets if the dataset + * is marked as changed. + * @details + * This subscription mechanism will generally be used by the data creator. + * @param sid + * @param isDiagnostics + * @param packetDestination + * @return + */ + virtual ReturnValue_t subscribeForUpdatePackets(sid_t sid, + bool reportingEnabled, + bool isDiagnostics, + object_id_t packetDestination) = 0; + + + /** + * @brief Subscribe for a notification message which will be sent + * if a dataset has changed. + * @details + * This subscription mechanism will generally be used internally by + * other software components. + * @param setId Set ID of the set to receive update messages from. + * @param destinationObject + * @param targetQueueId + * @param generateSnapshot If this is set to true, a copy of the current + * data with a timestamp will be generated and sent via message. + * Otherwise, only an notification message is sent. + * @return + */ + virtual ReturnValue_t subscribeForSetUpdateMessages(const uint32_t setId, + object_id_t destinationObject, + MessageQueueId_t targetQueueId, + bool generateSnapshot) = 0; + + /** + * @brief Subscribe for an notification message which will be sent if a + * pool variable has changed. + * @details + * This subscription mechanism will generally be used internally by + * other software components. + * @param localPoolId Pool ID of the pool variable + * @param destinationObject + * @param targetQueueId + * @param generateSnapshot If this is set to true, a copy of the current + * data with a timestamp will be generated and sent via message. + * Otherwise, only an notification message is sent. + * @return + */ + virtual ReturnValue_t subscribeForVariableUpdateMessages( + const lp_id_t localPoolId, + object_id_t destinationObject, + MessageQueueId_t targetQueueId, + bool generateSnapshot) = 0; + +};