fsfw/osal/linux/Timer.cpp

46 lines
1.1 KiB
C++
Raw Normal View History

2020-12-14 21:46:33 +01:00
#include "Timer.h"
2020-08-13 20:53:35 +02:00
#include "../../serviceinterface/ServiceInterfaceStream.h"
2018-07-13 18:28:26 +02:00
#include <errno.h>
2020-12-14 21:46:33 +01:00
2018-07-13 18:28:26 +02:00
Timer::Timer() {
sigevent sigEvent;
sigEvent.sigev_notify = SIGEV_NONE;
sigEvent.sigev_signo = 0;
sigEvent.sigev_value.sival_ptr = &timerId;
int status = timer_create(CLOCK_MONOTONIC, &sigEvent, &timerId);
if(status!=0){
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2020-04-30 22:03:16 +02:00
sif::error << "Timer creation failed with: " << status <<
" errno: " << errno << std::endl;
#endif
2018-07-13 18:28:26 +02:00
}
}
Timer::~Timer() {
timer_delete(timerId);
}
int Timer::setTimer(uint32_t intervalMs) {
itimerspec timer;
timer.it_value.tv_sec = intervalMs / 1000;
timer.it_value.tv_nsec = (intervalMs * 1000000) % (1000000000);
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_nsec = 0;
return timer_settime(timerId, 0, &timer, NULL);
}
int Timer::getTimer(uint32_t* remainingTimeMs){
itimerspec timer;
timer.it_value.tv_sec = 0;
timer.it_value.tv_nsec = 0;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_nsec = 0;
int status = timer_gettime(timerId, &timer);
*remainingTimeMs = timer.it_value.tv_sec * 1000 + timer.it_value.tv_nsec / 1000000;
return status;
}