CCSDSPack
C++ Library for CCSDS Space Packet manipulation. i.e. generation, extraction, analisys and more
Loading...
Searching...
No Matches
CCSDSDataField.h
Go to the documentation of this file.
1#ifndef CCSDS_DATA_FIELD_H
2#define CCSDS_DATA_FIELD_H
3
4#include <CCSDSResult.h>
5#include <vector>
6#include <memory>
9#include "PusServices.h"
10
11namespace CCSDS {
25 class DataField {
26 public:
28 bool noError = true;
29 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<BufferHeader>()));
30 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<PusA>()));
31 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<PusB>()));
32 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<PusC>()));
33 if (!noError) {
34 printf("[CCSDS DataField] Unable to Create Data field, secondary header registration failed.");
35 }
36 };
37
38 ~DataField() = default;
39
48 template <typename T>
50
52
53 return true;
54 }
55
67 [[nodiscard]] ResultBool setApplicationData(const std::vector<std::uint8_t> &applicationData);
68
81 [[nodiscard]] ResultBool setApplicationData(const std::uint8_t *pData, const size_t &sizeData);
82
96 [[nodiscard]] ResultBool setDataFieldHeader(const std::uint8_t *pData, const size_t &sizeData);
97
113 [[nodiscard]] ResultBool setDataFieldHeader(const std::uint8_t *pData, const size_t &sizeData,
114 const std::string &pType);
115
130 [[nodiscard]] ResultBool setDataFieldHeader(const std::vector<std::uint8_t> &data, const std::string &pType);
131
146 [[nodiscard]] ResultBool setDataFieldHeader(const std::vector<std::uint8_t> &dataFieldHeader);
147
148
149#ifndef CCSDS_MCU
159 [[nodiscard]] ResultBool setDataFieldHeader(const Config& cfg);
160#endif
167 void setDataFieldHeader(std::shared_ptr<SecondaryHeaderAbstract> header);
168
175
183
193 void setDataPacketSize(const std::uint16_t &value);
194
200
209 std::uint16_t getDataFieldAbsoluteBytesSize() const;
210
216 std::uint16_t getApplicationDataBytesSize() const;
217
225 std::uint16_t getDataFieldUsedBytesSize() const;
226
234 std::uint16_t getDataFieldAvailableBytesSize() const;
235
244 std::vector<std::uint8_t> getDataFieldHeaderBytes();
245
254 std::vector<std::uint8_t> serialize();
255
263 std::vector<std::uint8_t> getApplicationData();
264
266 [[nodiscard]] bool getDataFieldHeaderAutoUpdateStatus() const { return m_enableDataFieldUpdate; }
267
273 [[nodiscard]] bool getDataFieldHeaderFlag() const {
274 return m_secondaryHeader != nullptr;
275 }
276
282 [[nodiscard]] std::shared_ptr<SecondaryHeaderAbstract> getSecondaryHeader();
283
292 void update();
293
294 private:
295 std::shared_ptr<SecondaryHeaderAbstract> m_secondaryHeader{};
297 std::vector<std::uint8_t> m_applicationData{};
298 std::string m_dataFieldHeaderType{};
299 std::uint16_t m_dataPacketSize{2024};
302
303 };
304}
305
306#endif // CCSDS_DATA_FIELD_H
#define ASSIGN_OR_PRINT(var, result)
Macro to assign a result value or print an error message.
#define FORWARD_RESULT(result)
Macro to return a result as-is (for functions returning Result<T>).
Represents the data field of a CCSDS packet.
std::shared_ptr< SecondaryHeaderAbstract > m_secondaryHeader
Shared pointer to the secondary header class.
ResultBool RegisterSecondaryHeader()
Registers a new header type with its creation function.
std::vector< std::uint8_t > serialize()
Retrieves the full data field by combining the data field header and application data.
SecondaryHeaderAbstract & getDataFieldHeader()
returns the secondary header A SecondaryHeaderAbstract derived object containing the header data.
std::shared_ptr< SecondaryHeaderAbstract > getSecondaryHeader()
retrieves the known PUS type
bool m_dataFieldHeaderUpdated
Boolean for secondary header updated status.
std::uint16_t getDataFieldUsedBytesSize() const
Retrieves the used size of the data field in bytes.
bool getDataFieldHeaderAutoUpdateStatus() const
returns true if auto update has been enabled for the secondary header
bool getDataFieldHeaderFlag() const
retrieves true if a known secondary header has been set
SecondaryHeaderFactory m_secondaryHeaderFactory
secondary header dispatcher factory
void setDataPacketSize(const std::uint16_t &value)
Sets the maximum data packet size for the CCSDS DataField.
std::string m_dataFieldHeaderType
Data field Header type.
ResultBool setDataFieldHeader(const std::uint8_t *pData, const size_t &sizeData)
Sets the secondary header data for the data field.
std::uint16_t getDataFieldAbsoluteBytesSize() const
Retrieves the absolute size of the data field in bytes.
void update()
Updates the data field header based on the current application data size.
std::vector< std::uint8_t > getDataFieldHeaderBytes()
Retrieves the secondary header data as a vector of bytes.
void setDataFieldHeaderAutoUpdateStatus(const bool enable)
Sets The auto update variable, if disabled the data size in the header field will not be updated.
std::uint16_t m_dataPacketSize
Data field maximum size in bytes.
SecondaryHeaderFactory & getDataFieldHeaderFactory()
returns the secondary header factory
~DataField()=default
bool m_enableDataFieldUpdate
Boolean for secondary header update enable.
std::uint16_t getApplicationDataBytesSize() const
Retrieves the size of the application data stored in the data field.
std::vector< std::uint8_t > getApplicationData()
Retrieves the application data from the data field.
std::vector< std::uint8_t > m_applicationData
Application data buffer.
ResultBool setApplicationData(const std::vector< std::uint8_t > &applicationData)
Sets the application data using a vector of bytes.
std::uint16_t getDataFieldAvailableBytesSize() const
Retrieves the available size of the data field in bytes.
Encapsulates a result that can hold either a value or an Error.
Definition CCSDSResult.h:82
Abstract base class for a (Packet Utilization Standard) header.
A singleton factory class responsible for registering and creating instances of SecondaryHeaderAbstra...
ResultBool registerType(std::shared_ptr< SecondaryHeaderAbstract > header)
Registers a new header type with its creation function.
Parses and stores config values from custom file format.
Definition CCSDSConfig.h:11
Contains definitions and classes for handling CCSDS headers.