fsfw/src/fsfw/cfdp/tlv/Tlv.h

67 lines
1.8 KiB
C
Raw Normal View History

#ifndef FSFW_SRC_FSFW_CFDP_TLV_H_
#define FSFW_SRC_FSFW_CFDP_TLV_H_
#include "TlvIF.h"
#include "fsfw/serialize/SerialBufferAdapter.h"
namespace cfdp {
/**
* @brief Type-Length-Value field implementation
* @details
* Thin abstraction layer around a serial buffer adapter
*/
2022-02-02 10:29:30 +01:00
class Tlv : public TlvIF {
public:
2022-09-15 18:41:15 +02:00
Tlv(TlvType type, const uint8_t *value, size_t size);
2022-02-02 10:29:30 +01:00
Tlv();
2022-02-02 10:29:30 +01:00
/**
* Serialize a TLV into a given buffer
* @param buffer
* @param size
* @param maxSize
* @param streamEndianness
* @return
2022-08-16 12:12:21 +02:00
* - returnvalue::OK on success
2022-02-02 10:29:30 +01:00
* - INVALID_TLV_TYPE
* - SerializeIF returncode on wrong serialization parameters
*/
2022-08-09 21:03:56 +02:00
ReturnValue_t serialize(uint8_t **buffer, size_t *size, size_t maxSize,
Endianness streamEndianness) const override;
2022-08-09 21:03:56 +02:00
[[nodiscard]] size_t getSerializedSize() const override;
2022-02-02 10:29:30 +01:00
/**
* @brief Deserialize a LV field from a raw buffer. Zero-copy implementation
* @param buffer Raw buffer including the size field
* @param size
* @param streamEndianness
2022-08-16 12:12:21 +02:00
* - returnvalue::OK on success
2022-02-02 10:29:30 +01:00
* - INVALID_TLV_TYPE
* - SerializeIF returncode on wrong deserialization parameters
*/
2022-08-09 21:03:56 +02:00
ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
Endianness streamEndianness) override;
2022-02-02 10:29:30 +01:00
void setValue(uint8_t *value, size_t len);
2022-08-09 21:03:56 +02:00
[[nodiscard]] const uint8_t *getValue() const;
[[nodiscard]] const uint8_t *getRawData() const;
2022-09-15 18:41:15 +02:00
void setType(TlvType type);
[[nodiscard]] TlvType getType() const override;
2022-08-09 21:03:56 +02:00
[[nodiscard]] uint8_t getLengthField() const override;
2022-02-02 10:29:30 +01:00
private:
bool checkType(uint8_t rawType);
2022-02-02 10:29:30 +01:00
bool zeroLen = true;
const uint8_t *rawData = nullptr;
2022-09-15 18:41:15 +02:00
TlvType type = TlvType::INVALID_TLV;
2022-02-02 10:29:30 +01:00
SerialBufferAdapter<uint8_t> value;
};
2022-02-02 10:29:30 +01:00
} // namespace cfdp
#endif /* FSFW_SRC_FSFW_CFDP_TLV_H_ */