Refactor TMTC Stack, improve test framework #655

Merged
mohr merged 150 commits from mueller/refactor-tmtc-stack into development 2022-09-12 14:31:23 +02:00
10 changed files with 48 additions and 26 deletions
Showing only changes of commit f591b9793c - Show all commits

View File

@ -7,8 +7,6 @@
class CcsdsTimestampReader : public TimeReaderIF {
public:
ReturnValue_t readTimeStamp(const uint8_t* buffer, uint8_t maxSize) override;
size_t getTimestampLen() override;
timeval& getTime() override;
private:

View File

@ -36,4 +36,14 @@ ReturnValue_t CdsShortTimeStamper::deSerialize(const uint8_t **buffer, size_t *s
return HasReturnvaluesIF::RETURN_FAILED;
}
ReturnValue_t CdsShortTimeStamper::readTimeStamp(const uint8_t *buffer, size_t maxSize) {
if (maxSize < getTimestampSize()) {
return SerializeIF::STREAM_TOO_SHORT;
}
size_t foundLen = 0;
return CCSDSTime::convertFromCcsds(&readTime, buffer, &foundLen, maxSize);
}
timeval &CdsShortTimeStamper::getTime() { return readTime; }
size_t CdsShortTimeStamper::getTimestampSize() const { return TIMESTAMP_LEN; }

View File

@ -2,6 +2,7 @@
#define FSFW_TIMEMANAGER_TIMESTAMPER_H_
#include "CCSDSTime.h"
#include "TimeReaderIF.h"
#include "TimeStamperIF.h"
#include "fsfw/objectmanager/SystemObject.h"
@ -14,7 +15,7 @@
* overriding the #addTimeStamp function.
* @ingroup utility
*/
class CdsShortTimeStamper : public TimeStamperIF, public SystemObject {
class CdsShortTimeStamper : public TimeStamperIF, public TimeReaderIF, public SystemObject {
public:
static constexpr size_t TIMESTAMP_LEN = 7;
/**
@ -37,7 +38,12 @@ class CdsShortTimeStamper : public TimeStamperIF, public SystemObject {
[[nodiscard]] size_t getSerializedSize() const override;
ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
Endianness streamEndianness) override;
ReturnValue_t readTimeStamp(const uint8_t *buffer, size_t maxSize) override;
timeval &getTime() override;
[[nodiscard]] size_t getTimestampSize() const override;
private:
timeval readTime{};
};
#endif /* FSFW_TIMEMANAGER_TIMESTAMPER_H_ */

View File

@ -3,16 +3,13 @@
#include <cstdlib>
#include "TimeStampIF.h"
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
class TimeReaderIF {
class TimeReaderIF : public TimeStampIF {
public:
virtual ~TimeReaderIF() = default;
~TimeReaderIF() override = default;
virtual ReturnValue_t readTimeStamp(const uint8_t* buffer, size_t maxSize) = 0;
// Would be nice to have this, but the clock backend needs to be redesigned
// virtual ReturnValue_t readTimestampLen(const uint8_t* buffer, uint8_t maxSize, size_t&
// timestampLen) = 0;
virtual size_t getTimestampLen() = 0;
virtual timeval& getTime() = 0;
};

View File

@ -0,0 +1,20 @@
#ifndef FSFW_TIMEMANAGER_TIMESTAMPIF_H
#define FSFW_TIMEMANAGER_TIMESTAMPIF_H
#include <cstddef>
#include "fsfw/retval.h"
class TimeStampIF {
public:
static const uint8_t INTERFACE_ID = CLASS_ID::TIME_STAMPER_IF;
static const ReturnValue_t BAD_TIMESTAMP = MAKE_RETURN_CODE(1);
// I am going to assume there are no larger timestamps
static constexpr size_t MAXIMUM_TIMESTAMP_LEN = 16;
virtual ~TimeStampIF() = default;
[[nodiscard]] virtual size_t getTimestampSize() const = 0;
};
#endif // FSFW_TIMEMANAGER_TIMESTAMPIF_H

View File

@ -1,6 +1,7 @@
#ifndef FSFW_TIMEMANAGER_TIMESTAMPERIF_H_
#define FSFW_TIMEMANAGER_TIMESTAMPERIF_H_
#include "TimeStampIF.h"
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
#include "fsfw/serialize/SerializeIF.h"
@ -10,22 +11,11 @@
* Implementors need to ensure that calling the method is thread-safe, i.e.
* addTimeStamp may be called in parallel from a different context.
*/
class TimeStamperIF : public SerializeIF {
class TimeStamperIF : public SerializeIF, public TimeStampIF {

Is the TimeStamper Serializable? Or is the product of the timestamp serializable?

Is the TimeStamper Serializable? Or is the product of the timestamp serializable?

Whatever implements TimeStamperIF should also be serializable.

Whatever implements TimeStamperIF should also be serializable.

Refactored, now named TimeWriterIF

Refactored, now named `TimeWriterIF`
public:
static const uint8_t INTERFACE_ID = CLASS_ID::TIME_STAMPER_IF;
static const ReturnValue_t BAD_TIMESTAMP = MAKE_RETURN_CODE(1);
// I am going to assume there are no larger timestamps
static constexpr size_t MAXIMUM_TIMESTAMP_LEN = 16;
//! This is a mission-specific constant and determines the total
//! size reserved for timestamps.
// static const uint8_t MISSION_TIMESTAMP_SIZE = fsfwconfig::FSFW_MISSION_TIMESTAMP_SIZE;
[[nodiscard]] virtual size_t getTimestampSize() const { return getSerializedSize(); }
virtual ReturnValue_t addTimeStamp(uint8_t* buffer, uint8_t maxSize) = 0;
~TimeStamperIF() override = default;
size_t getTimestampSize() const override { return getSerializedSize(); }
protected:
};

View File

@ -66,7 +66,7 @@ ReturnValue_t PusTmReader::parseData(bool crcCheck) {
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
size_t timestampLen = timeReader->getTimestampLen();
size_t timestampLen = timeReader->getTimestampSize();
if (currentOffset + timestampLen > spReader.getBufSize()) {
return SerializeIF::STREAM_TOO_SHORT;
}

View File

@ -19,7 +19,7 @@ class PusTmReader : public PusTmIF,
ReturnValue_t parseDataWithoutCrcCheck();
ReturnValue_t parseDataWithCrcCheck();
const uint8_t* getFullData() const override;
[[nodiscard]] const uint8_t* getFullData() const override;
explicit operator bool() const;
[[nodiscard]] bool isNull() const;

View File

@ -2,7 +2,8 @@
#include "fsfw/globalfunctions/CRC.h"
PusTmZeroCopyWriter::PusTmZeroCopyWriter(uint8_t* data, size_t size) : PusTmReader(data, size) {}
PusTmZeroCopyWriter::PusTmZeroCopyWriter(TimeReaderIF* timeReader, uint8_t* data, size_t size)
: PusTmReader(timeReader, data, size) {}
void PusTmZeroCopyWriter::setSequenceCount(uint16_t seqCount) {
auto* spHeader =

View File

@ -4,7 +4,7 @@
#include "PusTmReader.h"
class PusTmZeroCopyWriter : public PusTmReader {
public:
PusTmZeroCopyWriter(uint8_t* data, size_t size);
PusTmZeroCopyWriter(TimeReaderIF* timeReader, uint8_t* data, size_t size);
void setSequenceCount(uint16_t seqCount);
void updateErrorControl();