2021-09-19 12:27:48 +02:00
|
|
|
#ifndef CCSDSHANDLER_H_
|
|
|
|
#define CCSDSHANDLER_H_
|
|
|
|
|
2021-09-26 08:29:30 +02:00
|
|
|
#include "OBSWConfig.h"
|
2021-09-19 12:27:48 +02:00
|
|
|
#include "fsfw/objectmanager/SystemObject.h"
|
|
|
|
#include "fsfw/tasks/ExecutableObjectIF.h"
|
|
|
|
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
|
|
|
|
#include "fsfw/parameters/ParameterHelper.h"
|
2021-09-26 08:29:30 +02:00
|
|
|
#include "VirtualChannel.h"
|
|
|
|
#include <unordered_map>
|
2021-09-19 12:27:48 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief This class handles the data exchange with the CCSDS IP cores implemented in the
|
|
|
|
* programmable logic of the Q7S.
|
|
|
|
*
|
|
|
|
* @author J. Meier
|
|
|
|
*/
|
|
|
|
class CCSDSHandler: public SystemObject,
|
|
|
|
public ExecutableObjectIF,
|
|
|
|
public AcceptsTelemetryIF,
|
|
|
|
public HasReturnvaluesIF,
|
|
|
|
public ReceivesParameterMessagesIF {
|
|
|
|
public:
|
2021-09-26 08:29:30 +02:00
|
|
|
|
|
|
|
using VcId_t = uint8_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Constructor
|
|
|
|
*
|
|
|
|
* @param objectId Object ID of the CCSDS handler
|
|
|
|
* @param ptmeId Object ID of the PTME object providing access to the PTME IP Core.
|
|
|
|
*/
|
|
|
|
CCSDSHandler(object_id_t objectId, object_id_t ptmeId);
|
|
|
|
|
2021-09-19 12:27:48 +02:00
|
|
|
~CCSDSHandler();
|
|
|
|
|
2021-09-26 08:29:30 +02:00
|
|
|
ReturnValue_t performOperation(uint8_t operationCode = 0) override;
|
2021-09-19 12:27:48 +02:00
|
|
|
ReturnValue_t initialize();
|
|
|
|
MessageQueueId_t getCommandQueue() const;
|
2021-09-22 16:54:55 +02:00
|
|
|
|
2021-09-19 12:27:48 +02:00
|
|
|
/**
|
2021-09-22 16:54:55 +02:00
|
|
|
* @brief Function to add a virtual channel
|
|
|
|
*
|
|
|
|
* @param virtualChannelId ID of the virtual channel to add
|
|
|
|
* @param virtualChannel Pointer to virtual channel object
|
2021-09-19 12:27:48 +02:00
|
|
|
*/
|
2021-09-22 16:54:55 +02:00
|
|
|
void addVirtualChannel(VcId_t virtualChannelId, VirtualChannel* virtualChannel);
|
2021-09-19 12:27:48 +02:00
|
|
|
|
|
|
|
MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel = 0);
|
2021-09-22 16:54:55 +02:00
|
|
|
ReturnValue_t getParameter(uint8_t domainId, uint8_t uniqueIdentifier,
|
|
|
|
ParameterWrapper *parameterWrapper, const ParameterWrapper *newValues,
|
|
|
|
uint16_t startAtIndex);
|
|
|
|
|
2021-09-19 12:27:48 +02:00
|
|
|
private:
|
2021-09-22 16:54:55 +02:00
|
|
|
|
2021-09-26 08:29:30 +02:00
|
|
|
static const uint32_t QUEUE_SIZE = config::CCSDS_HANDLER_QUEUE_SIZE;
|
|
|
|
|
|
|
|
using VirtualChannelMap = std::unordered_map<VcId_t, VirtualChannel*>;
|
2021-09-22 16:54:55 +02:00
|
|
|
using VirtualChannelMapIter = VirtualChannelMap::iterator;
|
|
|
|
|
|
|
|
VirtualChannelMap virtualChannelMap;
|
|
|
|
|
2021-09-26 08:29:30 +02:00
|
|
|
// Object ID of PTME object
|
|
|
|
object_id_t ptmeId;
|
|
|
|
|
|
|
|
MessageQueueIF* commandQueue = nullptr;
|
|
|
|
|
|
|
|
ParameterHelper parameterHelper;
|
|
|
|
|
|
|
|
void readCommandQueue(void);
|
2021-09-22 16:54:55 +02:00
|
|
|
void handleTelemetry();
|
|
|
|
void handleTelecommands();
|
2021-09-19 12:27:48 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* CCSDSHANDLER_H_ */
|