Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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