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// Copyright 2025-2026 ExoSpaceLabs
2// SPDX-License-Identifier: Apache-2.0
3
4#ifndef CCSDS_DATA_FIELD_H
5#define CCSDS_DATA_FIELD_H
6
7#include <CCSDSResult.h>
8#include <vector>
9#include <memory>
12#include "PusServices.h"
13
14namespace CCSDS {
28 class DataField {
29 public:
31 bool noError = true;
32 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<BufferHeader>()));
33 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<PusA>()));
34 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<PusB>()));
35 ASSIGN_OR_PRINT(noError, m_secondaryHeaderFactory.registerType(std::make_shared<PusC>()));
36 if (!noError) {
37 printf("[CCSDS DataField] Unable to Create Data field, secondary header registration failed.");
38 }
39 };
40
41 ~DataField() = default;
42
51 template <typename T>
53
55
56 return true;
57 }
58
70 [[nodiscard]] ResultBool setApplicationData(const std::vector<std::uint8_t> &applicationData);
71
84 [[nodiscard]] ResultBool setApplicationData(const std::uint8_t *pData, const size_t &sizeData);
85
99 [[nodiscard]] ResultBool setDataFieldHeader(const std::uint8_t *pData, const size_t &sizeData);
100
116 [[nodiscard]] ResultBool setDataFieldHeader(const std::uint8_t *pData, const size_t &sizeData,
117 const std::string &pType);
118
133 [[nodiscard]] ResultBool setDataFieldHeader(const std::vector<std::uint8_t> &data, const std::string &pType);
134
149 [[nodiscard]] ResultBool setDataFieldHeader(const std::vector<std::uint8_t> &dataFieldHeader);
150
151
152#ifndef CCSDS_MCU
162 [[nodiscard]] ResultBool setDataFieldHeader(const Config& cfg);
163#endif
170 void setDataFieldHeader(std::shared_ptr<SecondaryHeaderAbstract> header);
171
178
186
196 void setDataPacketSize(const std::uint16_t &value);
197
203
212 std::uint16_t getDataFieldAbsoluteBytesSize() const;
213
219 std::uint16_t getApplicationDataBytesSize() const;
220
228 std::uint16_t getDataFieldUsedBytesSize() const;
229
237 std::uint16_t getDataFieldAvailableBytesSize() const;
238
247 std::vector<std::uint8_t> getDataFieldHeaderBytes();
248
257 std::vector<std::uint8_t> serialize();
258
266 std::vector<std::uint8_t> getApplicationData();
267
269 [[nodiscard]] bool getDataFieldHeaderAutoUpdateStatus() const { return m_enableDataFieldUpdate; }
270
276 [[nodiscard]] bool getDataFieldHeaderFlag() const {
277 return m_secondaryHeader != nullptr;
278 }
279
285 [[nodiscard]] std::shared_ptr<SecondaryHeaderAbstract> getSecondaryHeader();
286
295 void update();
296
297 private:
298 std::shared_ptr<SecondaryHeaderAbstract> m_secondaryHeader{};
300 std::vector<std::uint8_t> m_applicationData{};
301 std::string m_dataFieldHeaderType{};
302 std::uint16_t m_dataPacketSize{2024};
305
306 };
307}
308
309#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:85
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:14
Contains definitions and classes for handling CCSDS headers.