diff --git a/datapoollocal/LocalDataPoolManager.cpp b/datapoollocal/LocalDataPoolManager.cpp index 7706db31..5e45dec1 100644 --- a/datapoollocal/LocalDataPoolManager.cpp +++ b/datapoollocal/LocalDataPoolManager.cpp @@ -207,7 +207,9 @@ ReturnValue_t LocalDataPoolManager::handleNotificationSnapshot( // prepare and send update snapshot. CommandMessage notification; // todo: serialize into store with timestamp. - HousekeepingPacketUpdate updatePacket() + + // HousekeepingPacketUpdate updatePacket(timeStamp, timeStampSize, + // owner->getDataSetHandle(receiver.dataId.sid)); store_address_t storeId; HousekeepingMessage::setUpdateSnapshotSetCommand( ¬ification, receiver.dataId.sid, storeId); diff --git a/pus/Service9TimeManagement.cpp b/pus/Service9TimeManagement.cpp index 5625bdd8..8c90ae40 100644 --- a/pus/Service9TimeManagement.cpp +++ b/pus/Service9TimeManagement.cpp @@ -28,7 +28,7 @@ ReturnValue_t Service9TimeManagement::handleRequest(uint8_t subservice) { } ReturnValue_t Service9TimeManagement::setTime() { - Clock::TimeOfDay_t timeToSet; + TimeOfDay_t timeToSet; TimePacket timePacket(currentPacket.getApplicationData(), currentPacket.getApplicationDataSize()); ReturnValue_t result = CCSDSTime::convertFromCcsds(&timeToSet, diff --git a/serviceinterface/ServiceInterfaceBuffer.cpp b/serviceinterface/ServiceInterfaceBuffer.cpp index 68fc4dec..cede344c 100644 --- a/serviceinterface/ServiceInterfaceBuffer.cpp +++ b/serviceinterface/ServiceInterfaceBuffer.cpp @@ -93,7 +93,7 @@ bool ServiceInterfaceBuffer::isBuffered() const { } std::string* ServiceInterfaceBuffer::getPreamble(size_t * preambleSize) { - Clock::TimeOfDay_t loggerTime; + TimeOfDay_t loggerTime; Clock::getDateAndTime(&loggerTime); size_t currentSize = 0; char* parsePosition = &preamble[0]; diff --git a/timemanager/CCSDSTime.cpp b/timemanager/CCSDSTime.cpp index 8878a38a..30f9768b 100644 --- a/timemanager/CCSDSTime.cpp +++ b/timemanager/CCSDSTime.cpp @@ -1,4 +1,4 @@ -#include "../timemanager/CCSDSTime.h" +#include "CCSDSTime.h" #include #include #include @@ -12,7 +12,7 @@ CCSDSTime::~CCSDSTime() { } ReturnValue_t CCSDSTime::convertToCcsds(Ccs_seconds* to, - const Clock::TimeOfDay_t* from) { + const TimeOfDay_t* from) { ReturnValue_t result = checkTimeOfDay(from); if (result != RETURN_OK) { return result; @@ -32,7 +32,7 @@ ReturnValue_t CCSDSTime::convertToCcsds(Ccs_seconds* to, } ReturnValue_t CCSDSTime::convertToCcsds(Ccs_mseconds* to, - const Clock::TimeOfDay_t* from) { + const TimeOfDay_t* from) { ReturnValue_t result = checkTimeOfDay(from); if (result != RETURN_OK) { return result; @@ -53,7 +53,7 @@ ReturnValue_t CCSDSTime::convertToCcsds(Ccs_mseconds* to, return RETURN_OK; } -ReturnValue_t CCSDSTime::convertFromCcsds(Clock::TimeOfDay_t* to, const uint8_t* from, +ReturnValue_t CCSDSTime::convertFromCcsds(TimeOfDay_t* to, const uint8_t* from, uint32_t length) { ReturnValue_t result; if (length > 0xFF) { @@ -81,12 +81,12 @@ ReturnValue_t CCSDSTime::convertFromCcsds(Clock::TimeOfDay_t* to, const uint8_t* } } -ReturnValue_t CCSDSTime::convertFromCUC(Clock::TimeOfDay_t* to, const uint8_t* from, +ReturnValue_t CCSDSTime::convertFromCUC(TimeOfDay_t* to, const uint8_t* from, uint8_t length) { return UNSUPPORTED_TIME_FORMAT; } -ReturnValue_t CCSDSTime::convertFromCDS(Clock::TimeOfDay_t* to, const uint8_t* from, +ReturnValue_t CCSDSTime::convertFromCDS(TimeOfDay_t* to, const uint8_t* from, uint8_t length) { timeval time; ReturnValue_t result = convertFromCDS(&time, from, NULL, length); @@ -96,7 +96,7 @@ ReturnValue_t CCSDSTime::convertFromCDS(Clock::TimeOfDay_t* to, const uint8_t* f return convertTimevalToTimeOfDay(to, &time); } -ReturnValue_t CCSDSTime::convertFromCCS(Clock::TimeOfDay_t* to, const uint8_t* from, +ReturnValue_t CCSDSTime::convertFromCCS(TimeOfDay_t* to, const uint8_t* from, uint32_t* foundLength, uint32_t maxLength) { uint8_t subsecondsLength = *from & 0b111; uint32_t totalLength = subsecondsLength + 8; @@ -152,7 +152,7 @@ ReturnValue_t CCSDSTime::convertFromCCS(Clock::TimeOfDay_t* to, const uint8_t* f } -ReturnValue_t CCSDSTime::convertFromASCII(Clock::TimeOfDay_t* to, const uint8_t* from, +ReturnValue_t CCSDSTime::convertFromASCII(TimeOfDay_t* to, const uint8_t* from, uint8_t length) { if (length < 19) { return RETURN_FAILED; @@ -427,7 +427,7 @@ ReturnValue_t CCSDSTime::convertFromCUC(timeval* to, const uint8_t* from, return result; } -ReturnValue_t CCSDSTime::checkTimeOfDay(const Clock::TimeOfDay_t* time) { +ReturnValue_t CCSDSTime::checkTimeOfDay(const TimeOfDay_t* time) { if ((time->month > 12) || (time->month == 0)) { return INVALID_TIME_FORMAT; } @@ -482,7 +482,7 @@ ReturnValue_t CCSDSTime::checkTimeOfDay(const Clock::TimeOfDay_t* time) { } -ReturnValue_t CCSDSTime::convertTimevalToTimeOfDay(Clock::TimeOfDay_t* to, +ReturnValue_t CCSDSTime::convertTimevalToTimeOfDay(TimeOfDay_t* to, timeval* from) { //This is rather tricky. Implement only if needed. Also, if so, move to OSAL. return UNSUPPORTED_TIME_FORMAT; @@ -592,7 +592,7 @@ uint32_t CCSDSTime::subsecondsToMicroseconds(uint16_t subseconds) { ReturnValue_t CCSDSTime::convertFromCCS(timeval* to, const uint8_t* from, uint32_t* foundLength, uint32_t maxLength) { - Clock::TimeOfDay_t tempTime; + TimeOfDay_t tempTime; ReturnValue_t result = convertFromCCS(&tempTime, from, foundLength, maxLength); if (result != RETURN_OK) { diff --git a/timemanager/CCSDSTime.h b/timemanager/CCSDSTime.h index 89fcff92..ac8bb266 100644 --- a/timemanager/CCSDSTime.h +++ b/timemanager/CCSDSTime.h @@ -1,9 +1,10 @@ -#ifndef CCSDSTIME_H_ -#define CCSDSTIME_H_ +#ifndef FSFW_TIMEMANAGER_CCSDSTIME_H_ +#define FSFW_TIMEMANAGER_CCSDSTIME_H_ // COULDDO: have calls in Clock.h which return time quality and use timespec accordingly #include "Clock.h" +#include "clockDefinitions.h" #include "../returnvalues/HasReturnvaluesIF.h" #include @@ -111,7 +112,7 @@ public: * - @c INVALID_TIMECODE if not OK */ static ReturnValue_t convertToCcsds(Ccs_seconds *to, - Clock::TimeOfDay_t const *from); + TimeOfDay_t const *from); /** * Converts to CDS format from timeval. @@ -136,7 +137,7 @@ public: * - @c INVALID_TIMECODE if not OK */ static ReturnValue_t convertToCcsds(Ccs_mseconds *to, - Clock::TimeOfDay_t const *from); + TimeOfDay_t const *from); /** * SHOULDDO: can this be modified to recognize padding? @@ -154,7 +155,7 @@ public: * - @c LENGTH_MISMATCH if the length does not match the P Field * - @c INVALID_TIME_FORMAT if the format or a value is invalid */ - static ReturnValue_t convertFromCcsds(Clock::TimeOfDay_t *to, uint8_t const *from, + static ReturnValue_t convertFromCcsds(TimeOfDay_t *to, uint8_t const *from, uint32_t length); /** @@ -167,7 +168,7 @@ public: static ReturnValue_t convertFromCcsds(timeval *to, uint8_t const *from, uint32_t* foundLength, uint32_t maxLength); - static ReturnValue_t convertFromCUC(Clock::TimeOfDay_t *to, uint8_t const *from, + static ReturnValue_t convertFromCUC(TimeOfDay_t *to, uint8_t const *from, uint8_t length); static ReturnValue_t convertFromCUC(timeval *to, uint8_t const *from, @@ -182,16 +183,16 @@ public: static ReturnValue_t convertFromCCS(timeval *to, uint8_t pField, uint8_t const *from, uint32_t* foundLength, uint32_t maxLength); - static ReturnValue_t convertFromCDS(Clock::TimeOfDay_t *to, uint8_t const *from, + static ReturnValue_t convertFromCDS(TimeOfDay_t *to, uint8_t const *from, uint8_t length); static ReturnValue_t convertFromCDS(timeval *to, uint8_t const *from, uint32_t* foundLength, uint32_t maxLength); - static ReturnValue_t convertFromCCS(Clock::TimeOfDay_t *to, uint8_t const *from, + static ReturnValue_t convertFromCCS(TimeOfDay_t *to, uint8_t const *from, uint32_t* foundLength, uint32_t maxLength); - static ReturnValue_t convertFromASCII(Clock::TimeOfDay_t *to, uint8_t const *from, + static ReturnValue_t convertFromASCII(TimeOfDay_t *to, uint8_t const *from, uint8_t length); static uint32_t subsecondsToMicroseconds(uint16_t subseconds); @@ -209,7 +210,7 @@ private: */ static ReturnValue_t checkCcs(const uint8_t* time, uint8_t length); - static ReturnValue_t checkTimeOfDay(const Clock::TimeOfDay_t *time); + static ReturnValue_t checkTimeOfDay(const TimeOfDay_t *time); static const uint32_t SECONDS_PER_DAY = 24 * 60 * 60; static const uint32_t SECONDS_PER_NON_LEAP_YEAR = SECONDS_PER_DAY * 365; @@ -226,8 +227,8 @@ private: uint8_t *month, uint8_t *day); static bool isLeapYear(uint32_t year); - static ReturnValue_t convertTimevalToTimeOfDay(Clock::TimeOfDay_t* to, + static ReturnValue_t convertTimevalToTimeOfDay(TimeOfDay_t* to, timeval* from); }; -#endif /* CCSDSTIME_H_ */ +#endif /* FSFW_TIMEMANAGER_CCSDSTIME_H_ */ diff --git a/timemanager/Clock.h b/timemanager/Clock.h index 1ad88305..d97eecbe 100644 --- a/timemanager/Clock.h +++ b/timemanager/Clock.h @@ -1,6 +1,7 @@ -#ifndef FRAMEWORK_TIMEMANAGER_CLOCK_H_ -#define FRAMEWORK_TIMEMANAGER_CLOCK_H_ +#ifndef FSFW_TIMEMANAGER_CLOCK_H_ +#define FSFW_TIMEMANAGER_CLOCK_H_ +#include "clockDefinitions.h" #include "../returnvalues/HasReturnvaluesIF.h" #include "../ipc/MutexFactory.h" #include "../globalfunctions/timevalOperations.h" @@ -8,20 +9,11 @@ #include #include -//! Don't use these for time points, type is not large enough for UNIX epoch. -using dur_millis_t = uint32_t; - +// TODO: Maybe a namespace would be better/more fitting for this? +// After all, right now it is just a collection of static functions. +// The mutex and leap seconds can be put in an anonymous namespace. class Clock { public: - typedef struct { - uint32_t year; //!< Year, A.D. - uint32_t month; //!< Month, 1 .. 12. - uint32_t day; //!< Day, 1 .. 31. - uint32_t hour; //!< Hour, 0 .. 23. - uint32_t minute; //!< Minute, 0 .. 59. - uint32_t second; //!< Second, 0 .. 59. - uint32_t usecond; //!< Microseconds, 0 .. 999999 - } TimeOfDay_t; /** * This method returns the number of clock ticks per second. @@ -84,13 +76,17 @@ public: * Returns the time in microseconds since an OS-defined epoch. * The time is returned in a 64 bit unsigned integer. * @param time A pointer to a 64 bit unisigned integer where the data is stored. - * @return \c RETURN_OK on success. Otherwise, the OS failure code is returned. + * @return + * - @c RETURN_OK on success. + * - Otherwise, the OS failure code is returned. */ static ReturnValue_t getClock_usecs(uint64_t* time); /** * Returns the time in a TimeOfDay_t struct. * @param time A pointer to a TimeOfDay_t struct. - * @return \c RETURN_OK on success. Otherwise, the OS failure code is returned. + * @return + * - @c RETURN_OK on success. + * - Otherwise, the OS failure code is returned. */ static ReturnValue_t getDateAndTime(TimeOfDay_t* time); @@ -98,17 +94,20 @@ public: * Converts a time of day struct to POSIX seconds. * @param time The time of day as input * @param timeval The corresponding seconds since the epoch. - * @return \c RETURN_OK on success. Otherwise, the OS failure code is returned. + * @return + * - @c RETURN_OK on success. + * - Otherwise, the OS failure code is returned. */ static ReturnValue_t convertTimeOfDayToTimeval(const TimeOfDay_t* from, timeval* to); /** - * Converts a time represented as seconds and subseconds since unix epoch to days since J2000 + * Converts a time represented as seconds and subseconds since unix + * epoch to days since J2000 * * @param time seconds since unix epoch * @param[out] JD2000 days since J2000 - * @return \c RETURN_OK + * @return @c RETURN_OK */ static ReturnValue_t convertTimevalToJD2000(timeval time, double* JD2000); @@ -119,7 +118,9 @@ public: * * @param utc timeval, corresponding to UTC time * @param[out] tt timeval, corresponding to Terrestial Time - * @return \c RETURN_OK on success, \c RETURN_FAILED if leapSeconds are not set + * @return + * - @c RETURN_OK on success + * - @c RETURN_FAILED if leapSeconds are not set */ static ReturnValue_t convertUTCToTT(timeval utc, timeval* tt); @@ -127,7 +128,9 @@ public: * Set the Leap Seconds since 1972 * * @param leapSeconds_ - * @return \c RETURN_OK on success. Otherwise, the OS failure code is returned. + * @return + * - @c RETURN_OK on success. + * - Otherwise, the OS failure code is returned. */ static ReturnValue_t setLeapSeconds(const uint16_t leapSeconds_); @@ -137,13 +140,17 @@ public: * Must be set before! * * @param[out] leapSeconds_ - * @return \c RETURN_OK on success. Otherwise, the OS failure code is returned. + * @return + * - @c RETURN_OK on success. + * - Otherwise, the OS failure code is returned. */ static ReturnValue_t getLeapSeconds(uint16_t *leapSeconds_); /** * Function to check and create the Mutex for the clock - * @return \c RETURN_OK on success. Otherwise \c RETURN_FAILED if not able to create one + * @return + * - @c RETURN_OK on success. + * - Otherwise @c RETURN_FAILED if not able to create one */ static ReturnValue_t checkOrCreateClockMutex(); @@ -153,4 +160,4 @@ private: }; -#endif /* FRAMEWORK_TIMEMANAGER_CLOCK_H_ */ +#endif /* FSFW_TIMEMANAGER_CLOCK_H_ */ diff --git a/timemanager/ReceivesTimeInfoIF.h b/timemanager/ReceivesTimeInfoIF.h index 680e94f2..c1247a42 100644 --- a/timemanager/ReceivesTimeInfoIF.h +++ b/timemanager/ReceivesTimeInfoIF.h @@ -1,12 +1,6 @@ -/** - * @file ReceivesTimeInfoIF.h - * @brief This file defines the ReceivesTimeInfoIF class. - * @date 26.02.2013 - * @author baetz - */ +#ifndef FSFW_TIMEMANAGER_RECEIVESTIMEINFOIF_H_ +#define FSFW_TIMEMANAGER_RECEIVESTIMEINFOIF_H_ -#ifndef RECEIVESTIMEINFOIF_H_ -#define RECEIVESTIMEINFOIF_H_ #include "../ipc/MessageQueueSenderIF.h" /** @@ -29,4 +23,4 @@ public: }; -#endif /* RECEIVESTIMEINFOIF_H_ */ +#endif /* FSFW_TIMEMANAGER_RECEIVESTIMEINFOIF_H_ */ diff --git a/timemanager/TimeMessage.h b/timemanager/TimeMessage.h index bb83708c..f5ac3e14 100644 --- a/timemanager/TimeMessage.h +++ b/timemanager/TimeMessage.h @@ -1,15 +1,8 @@ -/** - * @file TimeMessage.h - * @brief This file defines the TimeMessage class. - * @date 26.02.2013 - * @author baetz - */ - -#ifndef TIMEMESSAGE_H_ -#define TIMEMESSAGE_H_ +#ifndef FSFW_TIMEMANAGER_TIMEMESSAGE_H_ +#define FSFW_TIMEMANAGER_TIMEMESSAGE_H_ +#include "Clock.h" #include "../ipc/MessageQueueMessage.h" -#include "../timemanager/Clock.h" #include class TimeMessage : public MessageQueueMessage { @@ -53,4 +46,4 @@ public: uint32_t getCounterValue(); }; -#endif /* TIMEMESSAGE_H_ */ +#endif /* FSFW_TIMEMANAGER_TIMEMESSAGE_H_ */ diff --git a/timemanager/TimeStamperIF.h b/timemanager/TimeStamperIF.h index 96011088..57b7f014 100644 --- a/timemanager/TimeStamperIF.h +++ b/timemanager/TimeStamperIF.h @@ -1,5 +1,5 @@ -#ifndef FRAMEWORK_TIMEMANAGER_TIMESTAMPERIF_H_ -#define FRAMEWORK_TIMEMANAGER_TIMESTAMPERIF_H_ +#ifndef FSFW_TIMEMANAGER_TIMESTAMPERIF_H_ +#define FSFW_TIMEMANAGER_TIMESTAMPERIF_H_ #include "../returnvalues/HasReturnvaluesIF.h" @@ -25,4 +25,4 @@ public: -#endif /* FRAMEWORK_TIMEMANAGER_TIMESTAMPERIF_H_ */ +#endif /* FSFW_TIMEMANAGER_TIMESTAMPERIF_H_ */ diff --git a/timemanager/clockDefinitions.h b/timemanager/clockDefinitions.h new file mode 100644 index 00000000..1cfbe804 --- /dev/null +++ b/timemanager/clockDefinitions.h @@ -0,0 +1,22 @@ +#ifndef FSFW_TIMEMANAGER_CLOCKDEFINITIONS_H_ +#define FSFW_TIMEMANAGER_CLOCKDEFINITIONS_H_ + +#include + +// It would be better to put this in a clock namespace, but then we +// have a nameclash with the class Clock (which propably also should be put +// in a namespace) +typedef struct { + uint32_t year; //!< Year, A.D. + uint32_t month; //!< Month, 1 .. 12. + uint32_t day; //!< Day, 1 .. 31. + uint32_t hour; //!< Hour, 0 .. 23. + uint32_t minute; //!< Minute, 0 .. 59. + uint32_t second; //!< Second, 0 .. 59. + uint32_t usecond; //!< Microseconds, 0 .. 999999 +} TimeOfDay_t; + +//! Don't use these for time points, type is not large enough for UNIX epoch. +using dur_millis_t = uint32_t; + +#endif /* FSFW_TIMEMANAGER_CLOCKDEFINITIONS_H_ */