10 std::vector<uint8_t> fullData{};
11 if (!dataFieldHeader.empty()) {
12 fullData.insert(fullData.end(), dataFieldHeader.begin(), dataFieldHeader.end());
20 return m_applicationData;
25 return m_dataPacketSize - getDataFieldUsedBytesSize();
30 return m_dataPacketSize;
35 if (!getDataFieldHeaderFlag()) {
36 return m_applicationData.size();
38 if (m_secondaryHeader !=
nullptr) {
39 return m_applicationData.size() + m_secondaryHeader->getSize();
45 return m_secondaryHeader;
49 if (!m_dataFieldHeaderUpdated && m_enableDataFieldUpdate) {
50 if (m_secondaryHeaderFactory.typeIsRegistered(m_dataFieldHeaderType) && m_dataFieldHeaderType !=
"BufferHeader") {
51 m_secondaryHeader->setDataLength(m_applicationData.size());;
53 m_dataFieldHeaderUpdated =
true;
61 "Application data field exceeds available size");
63 if (!m_applicationData.empty()) {
64 std::cerr <<
"[ CCSDS Data ] Warning: Data field is not empty, it has been overwritten." << std::endl;
66 m_applicationData.assign(pData, pData + sizeData);
67 m_dataFieldHeaderUpdated =
false;
73 "Application data field exceeds available size.");
74 m_applicationData = applicationData;
75 m_dataFieldHeaderUpdated =
false;
83 "Secondary header data exceeds available size.");
85 std::vector<uint8_t> data;
86 data.assign(pData, pData + sizeData);
92 const std::string &pType) {
96 "Secondary header type is not registered: " + pType);
98 if (m_secondaryHeaderFactory.typeIsRegistered(pType)) {
99 std::vector<uint8_t> data;
100 data.assign(pData, pData + sizeData);
104 m_dataFieldHeaderType = pType;
106 m_dataFieldHeaderUpdated =
false;
111 const std::string &pType) {
113 "Secondary header data exceeds available size");
115 "Secondary header type is not registered: " + pType);
117 auto header = m_secondaryHeaderFactory.create(pType);
120 "Secondary header data size mismatch for type: " + pType);
123 m_secondaryHeader = std::move(header);
126 m_dataFieldHeaderType = pType;
128 m_dataFieldHeaderUpdated =
false;
134 "Secondary header data exceeds available size");
137 m_secondaryHeader = std::make_shared<BufferHeader>(dataFieldHeader);
138 FORWARD_RESULT( m_secondaryHeader->deserialize(dataFieldHeader) );
140 m_dataFieldHeaderType = m_secondaryHeader->getType(); ;
141 m_dataFieldHeaderUpdated =
false;
146 m_secondaryHeader = std::move(header);
147 m_dataFieldHeaderType = m_secondaryHeader->getType();
148 m_dataFieldHeaderUpdated =
false;
155 if (m_secondaryHeader) {
156 return m_secondaryHeader->serialize();
#define RET_IF_ERR_MSG(condition, errorCode, message)
Macro to return an error with an error message if a condition is met.
#define FORWARD_RESULT(result)
Macro to return a result as-is (for functions returning Result<T>).
ResultBool setDataFieldHeader(const uint8_t *pData, const size_t &sizeData)
Sets the secondary header data for the data field.
uint16_t getDataFieldAvailableBytesSize()
Retrieves the available size of the data field in bytes.
uint16_t getDataFieldUsedBytesSize()
Retrieves the used size of the data field in bytes.
std::vector< uint8_t > m_applicationData
Application data buffer.
std::vector< uint8_t > getDataFieldHeaderBytes()
Retrieves the secondary header data as a vector of bytes.
std::shared_ptr< SecondaryHeaderAbstract > getSecondaryHeader()
retrieves the known PUS type
std::vector< uint8_t > getApplicationData()
Retrieves the application data from the data field.
ResultBool setApplicationData(const std::vector< uint8_t > &applicationData)
Sets the application data using a vector of bytes.
void update()
Updates the data field header based on the current application data size.
void setDataPacketSize(const uint16_t &value)
Sets the maximum data packet size for the CCSDS DataField.
std::vector< uint8_t > getFullDataFieldBytes()
Retrieves the full data field by combining the data field header and application data.
uint16_t getDataFieldAbsoluteBytesSize()
Retrieves the absolute size of the data field in bytes.
Encapsulates a result that can hold either a value or an Error.
@ INVALID_APPLICATION_DATA
Application data is invalid.
@ INVALID_SECONDARY_HEADER_DATA
Secondary header data is invalid.
@ NULL_POINTER
Null pointer encountered.