CCSDS
pus_time.h
1
12#ifndef _PUS_TIME_H_
13#define _PUS_TIME_H_
14
15#include <cstdio>
16
17/****************************************************************/
18/* PUS TC Packet according to */
19/* */
20/* ECSS-E-70-41A - Space Packet Protocol */
21/* */
22/* Time base is TAI. */
23/* */
24/****************************************************************/
25
26
27namespace PUS
28{
29
30
31 class Time
32 {
33 protected:
34 uint32_t mu32_Sec;
35 uint32_t mu32_SubSec;
36
37 public:
38
39 Time(const uint32_t u32_Sec = 0, const uint32_t u32_SubSec = 0);
40
41 void set(const uint32_t u32_Sec, const uint32_t u32_SubSec = 0);
42 uint32_t get(uint32_t *pu32_Sec = NULL, uint32_t *pu32_SubSec = NULL);
43
44 bool operator==(const Time &T2);
45 bool operator<=(const Time &T2);
46 bool operator<(const Time &T2);
47 bool operator>=(const Time &T2);
48 bool operator>(const Time &T2);
49 };
50
51
52
53 const uint8_t CTimeCucSize = 8;
54
55 typedef enum
56 {
57 TimeCUC10 = 0x20,
58 TimeCUC11 = 0x21,
59 TimeCUC12 = 0x22,
60 TimeCUC13 = 0x23,
61 TimeCUC20 = 0x24,
62 TimeCUC21 = 0x25,
63 TimeCUC22 = 0x26,
64 TimeCUC23 = 0x27,
65 TimeCUC30 = 0x28,
66 TimeCUC31 = 0x29,
67 TimeCUC32 = 0x2A,
68 TimeCUC33 = 0x2B,
69 TimeCUC40 = 0x2C,
70 TimeCUC41 = 0x2D,
71 TimeCUC42 = 0x2E,
72 TimeCUC43 = 0x2F
73 } ETimeCucFormat;
74
75
76
77 class TimeCuc : public Time
78 {
79 public:
80 void set(const uint8_t *pu8_TimeCucBuffer, const uint8_t u8_BufferSize);
81 void get(uint8_t *pu8_TimeCucBuffer, const uint8_t u8_BufferSize, const ETimeCucFormat e_TimeCucFormat = TimeCUC42);
82 };
83
84
85
86
87 class TimeGregorian : public Time
88 {
89 private:
90 // static int8_t ms8_UtcLeapSec;
91 static uint32_t mu32_EpochOffset; // default epoch is 1970-01-01 00:00:00 UTC (Unixtime)
92 int16_t ms16_TimeZoneInMin;
93
94 public:
95 TimeGregorian(const int16_t s16_TimeZoneInMin = 0);
96
97 static void time2Gregorian(uint16_t *pu16_Year, uint8_t *pu8_Month, uint8_t *pu8_Day,
98 uint8_t *pu8_Hour, uint8_t *pu8_Min, uint8_t *pu8_Sec, const uint32_t u32_TimeInSec, const int16_t s16_TimeZoneMin = 0);
99
100 static uint32_t gregorian2Time(uint32_t *pu32_TimeInSec,
101 const uint16_t u16_Year, const uint8_t u8_Month, const uint8_t u8_Day,
102 const uint8_t u8_Hour, const uint8_t u8_Min, const uint8_t u8_Sec,
103 const int16_t s16_TimeZoneMin = 0);
104
105 static int32_t setEpoch(const uint16_t u16_Year = 1970, const uint8_t u8_Month = 1, const uint8_t u8_Day = 1,
106 const uint8_t u8_Hour = 0, const uint8_t u8_Min = 0, const uint8_t u8_Sec = 0);
107
108 static int32_t time2Iso8601(char *pc_Buffer, const uint8_t u8_BufferSize, const uint32_t u32_TimeInSec, const int16_t s16_TimeZoneMin = 0);
109
110 void set(const uint16_t u16_Year, const uint8_t u8_Month, const uint8_t u8_Day,
111 const uint8_t u8_Hour, const uint8_t u8_Min, const uint8_t u8_Sec = 0);
112
113 void get(uint16_t *pu16_Year, uint8_t *pu8_Month, uint8_t *pu8_Day,
114 uint8_t *pu8_Hour, uint8_t *pu8_Min, uint8_t *pu8_Sec = NULL);
115
116 private:
117 static uint32_t _gregorian2UnixTime(uint32_t *pu32_TimeInSec,
118 const uint16_t u16_Year, const uint8_t u8_Month, const uint8_t u8_Day,
119 const uint8_t u8_Hour, const uint8_t u8_Min, const uint8_t u8_Sec,
120 const int16_t s16_TimeZoneMin = 0);
121 };
122
123
124}
125
126#endif // _PUS_TIME_H_
Definition: pus_time.h:78
Definition: pus_time.h:88
Definition: pus_time.h:32