fsfw/src/fsfw/osal/freertos/Timekeeper.cpp

36 lines
880 B
C++
Raw Normal View History

2021-07-14 00:54:39 +02:00
#include "fsfw/osal/freertos/Timekeeper.h"
2018-07-13 15:56:37 +02:00
#include "FreeRTOSConfig.h"
2018-07-13 15:56:37 +02:00
2022-02-02 10:29:30 +01:00
Timekeeper* Timekeeper::myinstance = nullptr;
2020-04-08 19:33:01 +02:00
2022-02-02 10:29:30 +01:00
Timekeeper::Timekeeper() : offset({0, 0}) {}
2020-05-29 17:51:15 +02:00
Timekeeper::~Timekeeper() {}
2018-07-13 15:56:37 +02:00
2022-02-02 10:29:30 +01:00
const timeval& Timekeeper::getOffset() const { return offset; }
2018-07-13 15:56:37 +02:00
Timekeeper* Timekeeper::instance() {
2022-02-02 10:29:30 +01:00
if (myinstance == nullptr) {
myinstance = new Timekeeper();
}
return myinstance;
2018-07-13 15:56:37 +02:00
}
2022-02-02 10:29:30 +01:00
void Timekeeper::setOffset(const timeval& offset) { this->offset = offset; }
2018-07-13 15:56:37 +02:00
timeval Timekeeper::ticksToTimeval(TickType_t ticks) {
2022-02-02 10:29:30 +01:00
timeval uptime;
uptime.tv_sec = ticks / configTICK_RATE_HZ;
2018-07-13 15:56:37 +02:00
2022-02-02 10:29:30 +01:00
// TODO explain, think about overflow
uint32_t subsecondTicks = ticks % configTICK_RATE_HZ;
uint64_t usecondTicks = subsecondTicks * 1000000;
2018-07-13 15:56:37 +02:00
2022-02-02 10:29:30 +01:00
uptime.tv_usec = usecondTicks / configTICK_RATE_HZ;
2018-07-13 15:56:37 +02:00
2022-02-02 10:29:30 +01:00
return uptime;
2018-07-13 15:56:37 +02:00
}
2020-04-08 19:33:01 +02:00
2022-02-02 10:29:30 +01:00
TickType_t Timekeeper::getTicks() { return xTaskGetTickCount(); }