2020-10-01 13:23:06 +02:00
|
|
|
#ifndef FSFW_TCDISTRIBUTION_PUSDISTRIBUTOR_H_
|
|
|
|
#define FSFW_TCDISTRIBUTION_PUSDISTRIBUTOR_H_
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2020-08-13 20:53:35 +02:00
|
|
|
#include "PUSDistributorIF.h"
|
|
|
|
#include "TcDistributor.h"
|
|
|
|
#include "TcPacketCheck.h"
|
2020-10-01 13:23:06 +02:00
|
|
|
|
2021-06-14 10:19:01 +02:00
|
|
|
#include "../tmtcpacket/pus/tc.h"
|
2020-10-01 13:23:06 +02:00
|
|
|
#include "../returnvalues/HasReturnvaluesIF.h"
|
2020-08-13 20:53:35 +02:00
|
|
|
#include "../tmtcservices/AcceptsTelecommandsIF.h"
|
|
|
|
#include "../tmtcservices/VerificationReporter.h"
|
2016-06-15 23:48:41 +02:00
|
|
|
|
|
|
|
/**
|
2020-10-01 13:23:06 +02:00
|
|
|
* This class accepts PUS Telecommands and forwards them to Application
|
|
|
|
* services. In addition, the class performs a formal packet check and
|
|
|
|
* sends acceptance success or failure messages.
|
|
|
|
* @ingroup tc_distribution
|
2016-06-15 23:48:41 +02:00
|
|
|
*/
|
2018-07-12 16:29:32 +02:00
|
|
|
class PUSDistributor: public TcDistributor,
|
2021-06-24 09:47:28 +02:00
|
|
|
public PUSDistributorIF,
|
|
|
|
public AcceptsTelecommandsIF {
|
2018-07-12 16:29:32 +02:00
|
|
|
public:
|
2021-06-24 09:47:28 +02:00
|
|
|
/**
|
|
|
|
* The ctor passes @c set_apid to the checker class and calls the
|
|
|
|
* TcDistribution ctor with a certain object id.
|
|
|
|
* @param setApid The APID of this receiving Application.
|
|
|
|
* @param setObjectId Object ID of the distributor itself
|
|
|
|
* @param setPacketSource Object ID of the source of TC packets.
|
|
|
|
* Must implement CCSDSDistributorIF.
|
|
|
|
*/
|
|
|
|
PUSDistributor(uint16_t setApid, object_id_t setObjectId,
|
|
|
|
object_id_t setPacketSource);
|
|
|
|
/**
|
|
|
|
* The destructor is empty.
|
|
|
|
*/
|
|
|
|
virtual ~PUSDistributor();
|
|
|
|
ReturnValue_t registerService(AcceptsTelecommandsIF* service) override;
|
|
|
|
MessageQueueId_t getRequestQueue() override;
|
|
|
|
ReturnValue_t initialize() override;
|
|
|
|
uint16_t getIdentifier() override;
|
2020-10-01 13:23:06 +02:00
|
|
|
|
2016-06-15 23:48:41 +02:00
|
|
|
protected:
|
2021-06-24 09:47:28 +02:00
|
|
|
/**
|
|
|
|
* This attribute contains the class, that performs a formal packet check.
|
|
|
|
*/
|
|
|
|
TcPacketCheck checker;
|
|
|
|
/**
|
|
|
|
* With this class, verification messages are sent to the
|
|
|
|
* TC Verification service.
|
|
|
|
*/
|
|
|
|
VerificationReporter verifyChannel;
|
|
|
|
/**
|
|
|
|
* The currently handled packet is stored here.
|
|
|
|
*/
|
|
|
|
TcPacketStoredPus* currentPacket = nullptr;
|
2021-06-13 16:29:13 +02:00
|
|
|
|
2021-06-24 09:47:28 +02:00
|
|
|
/**
|
|
|
|
* With this variable, the current check status is stored to generate
|
|
|
|
* acceptance messages later.
|
|
|
|
*/
|
|
|
|
ReturnValue_t tcStatus;
|
2018-07-12 16:29:32 +02:00
|
|
|
|
2021-06-24 09:47:28 +02:00
|
|
|
const object_id_t packetSource;
|
2020-10-01 13:23:06 +02:00
|
|
|
|
2021-06-24 09:47:28 +02:00
|
|
|
/**
|
|
|
|
* This method reads the packet service, checks if such a service is
|
|
|
|
* registered and forwards the packet to the destination.
|
|
|
|
* It also initiates the formal packet check and sending of verification
|
|
|
|
* messages.
|
|
|
|
* @return Iterator to map entry of found service id
|
|
|
|
* or iterator to @c map.end().
|
|
|
|
*/
|
|
|
|
TcMqMapIter selectDestination() override;
|
|
|
|
/**
|
|
|
|
* The callback here handles the generation of acceptance
|
|
|
|
* success/failure messages.
|
|
|
|
*/
|
|
|
|
ReturnValue_t callbackAfterSending(ReturnValue_t queueStatus) override;
|
2016-06-15 23:48:41 +02:00
|
|
|
};
|
|
|
|
|
2020-10-01 13:23:06 +02:00
|
|
|
#endif /* FSFW_TCDISTRIBUTION_PUSDISTRIBUTOR_H_ */
|