Removed Timer and updated Countdown
This commit is contained in:
parent
1e380fe562
commit
8ec35f158c
@ -1,45 +0,0 @@
|
|||||||
#include "Timer.h"
|
|
||||||
#include "../../serviceinterface/ServiceInterfaceStream.h"
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
|
|
||||||
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){
|
|
||||||
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
|
||||||
sif::error << "Timer creation failed with: " << status <<
|
|
||||||
" errno: " << errno << std::endl;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
#ifndef FRAMEWORK_OSAL_LINUX_TIMER_H_
|
|
||||||
#define FRAMEWORK_OSAL_LINUX_TIMER_H_
|
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class is a helper for the creation of a Clock Monotonic timer which does not trigger a signal
|
|
||||||
*/
|
|
||||||
class Timer {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Creates the Timer sets the timerId Member
|
|
||||||
*/
|
|
||||||
Timer();
|
|
||||||
/**
|
|
||||||
* Deletes the timer
|
|
||||||
*
|
|
||||||
* Careful! According to POSIX documentation:
|
|
||||||
* The treatment of any pending signal generated by the deleted timer is unspecified.
|
|
||||||
*/
|
|
||||||
virtual ~Timer();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the timer given in timerId to the given interval
|
|
||||||
*
|
|
||||||
* @param intervalMs Interval in ms to be set
|
|
||||||
* @return 0 on Success 1 else
|
|
||||||
*/
|
|
||||||
int setTimer(uint32_t intervalMs);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the remaining time of the timer
|
|
||||||
*
|
|
||||||
* @param remainingTimeMs Pointer to integer value which is used to return the remaining time
|
|
||||||
* @return 0 on Success 1 else (see timer_getime documentation of posix function)
|
|
||||||
*/
|
|
||||||
int getTimer(uint32_t* remainingTimeMs);
|
|
||||||
|
|
||||||
private:
|
|
||||||
timer_t timerId;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* FRAMEWORK_OSAL_LINUX_TIMER_H_ */
|
|
@ -1,4 +1,6 @@
|
|||||||
#include "Countdown.h"
|
#include "Countdown.h"
|
||||||
|
#include "fsfw/serviceinterface/ServiceInterfaceStream.h"
|
||||||
|
|
||||||
|
|
||||||
Countdown::Countdown(uint32_t initialTimeout): timeout(initialTimeout) {
|
Countdown::Countdown(uint32_t initialTimeout): timeout(initialTimeout) {
|
||||||
}
|
}
|
||||||
@ -6,16 +8,14 @@ Countdown::Countdown(uint32_t initialTimeout): timeout(initialTimeout) {
|
|||||||
Countdown::~Countdown() {
|
Countdown::~Countdown() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t Countdown::setTimeout(uint32_t miliseconds) {
|
ReturnValue_t Countdown::setTimeout(uint32_t milliseconds) {
|
||||||
ReturnValue_t return_value = Clock::getUptime( &startTime );
|
ReturnValue_t returnValue = Clock::getUptime( &startTime );
|
||||||
timeout = miliseconds;
|
timeout = milliseconds;
|
||||||
return return_value;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Countdown::hasTimedOut() const {
|
bool Countdown::hasTimedOut() const {
|
||||||
uint32_t current_time;
|
if ( uint32_t( this->getCurrentTime() - startTime) >= timeout) {
|
||||||
Clock::getUptime( ¤t_time );
|
|
||||||
if ( uint32_t(current_time - startTime) >= timeout) {
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -31,7 +31,23 @@ ReturnValue_t Countdown::resetTimer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Countdown::timeOut() {
|
void Countdown::timeOut() {
|
||||||
uint32_t current_time;
|
startTime = this->getCurrentTime() - timeout;
|
||||||
Clock::getUptime( ¤t_time );
|
}
|
||||||
startTime= current_time - timeout;
|
|
||||||
|
uint32_t Countdown::getRemainingMillis() const {
|
||||||
|
// We fetch the time before the if-statement
|
||||||
|
// to be sure that the return is in
|
||||||
|
// range 0 <= number <= timeout
|
||||||
|
uint32_t currentTime = this->getCurrentTime();
|
||||||
|
if (this->hasTimedOut()){
|
||||||
|
return 0;
|
||||||
|
}else{
|
||||||
|
return (startTime + timeout) - currentTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Countdown::getCurrentTime() const {
|
||||||
|
uint32_t current_time;
|
||||||
|
Clock::getUptime( ¤t_time );
|
||||||
|
return current_time;
|
||||||
}
|
}
|
||||||
|
@ -4,28 +4,77 @@
|
|||||||
#include "Clock.h"
|
#include "Clock.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This file defines the Countdown class.
|
*
|
||||||
* @author baetz
|
* Countdown keeps track of a timespan.
|
||||||
|
*
|
||||||
|
* Countdown::resetTimer restarts the timer.
|
||||||
|
* Countdown::setTimeout sets a new countdown duration and resets.
|
||||||
|
*
|
||||||
|
* Can be checked with Countdown::hasTimedOut or
|
||||||
|
* Countdown::isBusy.
|
||||||
|
*
|
||||||
|
* Countdown::timeOut will force the timer to time out.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
class Countdown {
|
class Countdown {
|
||||||
public:
|
public:
|
||||||
uint32_t timeout;
|
/**
|
||||||
|
* Constructor which sets the countdown duration in milliseconds
|
||||||
|
*
|
||||||
|
* It does not start the countdown!
|
||||||
|
* Call resetTimer or setTimeout before usage!
|
||||||
|
* Otherwise a call to hasTimedOut might return True.
|
||||||
|
*
|
||||||
|
* @param initialTimeout Countdown duration in milliseconds
|
||||||
|
*/
|
||||||
Countdown(uint32_t initialTimeout = 0);
|
Countdown(uint32_t initialTimeout = 0);
|
||||||
~Countdown();
|
~Countdown();
|
||||||
ReturnValue_t setTimeout(uint32_t miliseconds);
|
/**
|
||||||
|
* Call to set a new countdown duration.
|
||||||
|
*
|
||||||
|
* Resets the countdown!
|
||||||
|
*
|
||||||
|
* @param milliseconds new countdown duration in milliseconds
|
||||||
|
* @return Returnvalue from Clock::getUptime
|
||||||
|
*/
|
||||||
|
ReturnValue_t setTimeout(uint32_t milliseconds);
|
||||||
|
/**
|
||||||
|
* Returns true if the countdown duration has passed.
|
||||||
|
*
|
||||||
|
* @return True if the countdown has passed
|
||||||
|
* False if it is still running
|
||||||
|
*/
|
||||||
bool hasTimedOut() const;
|
bool hasTimedOut() const;
|
||||||
|
/**
|
||||||
|
* Complementary to hasTimedOut.
|
||||||
|
*
|
||||||
|
* @return True if the countdown is till running
|
||||||
|
* False if it is still running
|
||||||
|
*/
|
||||||
bool isBusy() const;
|
bool isBusy() const;
|
||||||
|
/**
|
||||||
//!< Use last set timeout value and restart timer.
|
* Uses last set timeout value and restarts timer.
|
||||||
|
*/
|
||||||
ReturnValue_t resetTimer();
|
ReturnValue_t resetTimer();
|
||||||
|
/**
|
||||||
//!< Make hasTimedOut() return true
|
* Returns the remaining milliseconds (0 if timeout)
|
||||||
|
*/
|
||||||
|
uint32_t getRemainingMillis() const;
|
||||||
|
/**
|
||||||
|
* Makes hasTimedOut() return true
|
||||||
|
*/
|
||||||
void timeOut();
|
void timeOut();
|
||||||
|
/**
|
||||||
|
* Internal countdown duration in milliseconds
|
||||||
|
*/
|
||||||
|
uint32_t timeout;
|
||||||
private:
|
private:
|
||||||
|
/**
|
||||||
|
* Last time the timer was started (uptime)
|
||||||
|
*/
|
||||||
uint32_t startTime = 0;
|
uint32_t startTime = 0;
|
||||||
|
|
||||||
|
uint32_t getCurrentTime() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSFW_TIMEMANAGER_COUNTDOWN_H_ */
|
#endif /* FSFW_TIMEMANAGER_COUNTDOWN_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user