2022-07-21 11:34:11 +02:00
|
|
|
#include "fsfw/timemanager/CdsShortTimeStamper.h"
|
|
|
|
|
2020-09-16 19:36:15 +02:00
|
|
|
#include <cstring>
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
#include "fsfw/timemanager/Clock.h"
|
2020-09-16 19:36:15 +02:00
|
|
|
|
2023-02-07 12:06:34 +01:00
|
|
|
CdsShortTimeStamper::CdsShortTimeStamper() : SystemObject(0, false) {}
|
|
|
|
|
2022-07-20 22:21:15 +02:00
|
|
|
CdsShortTimeStamper::CdsShortTimeStamper(object_id_t objectId) : SystemObject(objectId) {}
|
2020-09-16 19:36:15 +02:00
|
|
|
|
2022-07-20 22:21:15 +02:00
|
|
|
ReturnValue_t CdsShortTimeStamper::serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
|
|
|
SerializeIF::Endianness streamEndianness) const {
|
|
|
|
if (*size + getSerializedSize() > maxSize) {
|
|
|
|
return SerializeIF::BUFFER_TOO_SHORT;
|
|
|
|
}
|
|
|
|
timeval now{};
|
2022-02-02 10:29:30 +01:00
|
|
|
Clock::getClock_timeval(&now);
|
2022-07-20 22:21:15 +02:00
|
|
|
CCSDSTime::CDS_short cds{};
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t result = CCSDSTime::convertToCcsds(&cds, &now);
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
return result;
|
|
|
|
}
|
2022-07-20 22:21:15 +02:00
|
|
|
std::memcpy(*buffer, &cds, sizeof(cds));
|
|
|
|
*buffer += getSerializedSize();
|
|
|
|
*size += getSerializedSize();
|
2022-02-02 10:29:30 +01:00
|
|
|
return result;
|
2020-09-16 19:36:15 +02:00
|
|
|
}
|
2022-07-21 11:34:11 +02:00
|
|
|
|
2022-07-20 22:21:15 +02:00
|
|
|
size_t CdsShortTimeStamper::getSerializedSize() const { return getTimestampSize(); }
|
2022-07-21 11:34:11 +02:00
|
|
|
|
2022-07-20 22:21:15 +02:00
|
|
|
ReturnValue_t CdsShortTimeStamper::deSerialize(const uint8_t **buffer, size_t *size,
|
|
|
|
SerializeIF::Endianness streamEndianness) {
|
2022-09-05 14:44:35 +02:00
|
|
|
if (size == nullptr or buffer == nullptr) {
|
|
|
|
return returnvalue::FAILED;
|
|
|
|
}
|
|
|
|
if (*size < getTimestampSize()) {
|
2022-07-27 17:33:39 +02:00
|
|
|
return SerializeIF::STREAM_TOO_SHORT;
|
|
|
|
}
|
|
|
|
size_t foundLen = 0;
|
2022-09-05 14:44:35 +02:00
|
|
|
if (((**buffer >> 4) & 0b111) != CCSDSTime::TimeCodeIdentification::CDS) {
|
|
|
|
return BAD_TIMESTAMP;
|
|
|
|
}
|
|
|
|
auto res = CCSDSTime::convertFromCcsds(&readTime, *buffer, &foundLen, *size);
|
|
|
|
if (res == returnvalue::OK) {
|
|
|
|
*size -= getSerializedSize();
|
|
|
|
*buffer += getSerializedSize();
|
|
|
|
}
|
|
|
|
return res;
|
2022-07-27 17:33:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
timeval &CdsShortTimeStamper::getTime() { return readTime; }
|
|
|
|
|
2022-07-20 22:21:15 +02:00
|
|
|
size_t CdsShortTimeStamper::getTimestampSize() const { return TIMESTAMP_LEN; }
|