#ifndef ECSS_SERVICES_TIMEHELPER_HPP #define ECSS_SERVICES_TIMEHELPER_HPP #include <cstdint> #include <Message.hpp> /** * This class formats the spacecraft time and cooperates closely with the ST[09] time management. * The ECSS standard supports two time formats:the CUC and CSD that are described in * CCSDS 301.0-B-4 standard * The chosen time format is CUC. The reasons for this selection are the followings: * 1)It is more flexible from the CSD. The designer is free to decide how much memory will use * for the time unit and what that time unit will be(seconds, minutes, hours etc.). * 2)It can use TAI(international atomic time) as reference time scale. So there is not need * to worry about leap seconds(code UTC-based) * * Note: The implementation of the time formats are in general RTC-dependent. First, we need to * get the time data from the RTC, so we know what time is it and then format it! */ class TimeHelper { public: /** * Implement the CUC time format * * @details The CUC time format consists of two main fields: the time code preamble field * (P-field) and the time specification field(T-field).The P-Field is the metadata for the * T-Field. The T-Field contains the value of the time unit and the designer decides what the * time unit will be, so this is a subject for discussion. The recommended time unit from the * standard is the second and it is probably the best solution for accuracy. * @param seconds the seconds provided from the RTC. This function in general should have * parameters corresponding with the RTC. For the time being we assume that the RTC has a * 32-bit counter that counts seconds(the RTC in Nucleo F103RB!) * @param data it is needed to access the data-member data of class Message. Remember this * function will be used from the ST[09] service to generate time reports * @todo check if we need milliseconds(fractions of the time unit) * @todo the time unit should be declared in the metadata. But how? * @todo check if we need to define other epoch than the 1 January 1958 * @todo time security for critical time operations */ static void implementCUCTimeFormat(uint32_t seconds, Message &data); }; #endif //ECSS_SERVICES_TIMEHELPER_HPP