2023-12-11 22:42:19 +02:00
|
|
|
#include <sys/time.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
2023-11-17 06:16:32 +02:00
|
|
|
#include "timer.h"
|
|
|
|
|
|
|
|
|
|
struct timeval start_time;
|
|
|
|
|
|
|
|
|
|
double get_time() {
|
|
|
|
|
struct timeval current_time;
|
|
|
|
|
gettimeofday(¤t_time, NULL);
|
|
|
|
|
|
|
|
|
|
return (double)(current_time.tv_sec - start_time.tv_sec) + (double)(current_time.tv_usec - start_time.tv_usec) / 1000000.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void start_internal_timer() {
|
|
|
|
|
gettimeofday(&start_time, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool timer_ended(Timer *timer) {
|
2023-11-30 00:44:00 +02:00
|
|
|
if (timer->state == TIMER_STOPPED) return false;
|
2023-11-17 06:16:32 +02:00
|
|
|
|
2023-11-30 00:44:00 +02:00
|
|
|
return get_time() - timer->start >= timer->duration;
|
2023-11-17 06:16:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void timer_start(Timer *timer, float duration) {
|
2023-11-30 00:44:00 +02:00
|
|
|
timer->start = get_time();
|
|
|
|
|
timer->elapsed = 0;
|
2023-11-17 06:16:32 +02:00
|
|
|
timer->duration = duration;
|
2023-11-30 00:44:00 +02:00
|
|
|
timer->state = TIMER_RUNNING;
|
2023-11-17 06:16:32 +02:00
|
|
|
}
|
|
|
|
|
|
2023-11-21 02:52:15 +02:00
|
|
|
void timer_stop(Timer *timer) {
|
2023-11-30 00:44:00 +02:00
|
|
|
timer->state = TIMER_STOPPED;
|
2023-11-21 02:52:15 +02:00
|
|
|
}
|
|
|
|
|
|
2023-11-17 06:16:32 +02:00
|
|
|
void timer_reset(Timer *timer) {
|
2023-11-30 00:44:00 +02:00
|
|
|
timer->start = get_time();
|
|
|
|
|
timer->elapsed = 0;
|
|
|
|
|
timer->state = TIMER_RUNNING;
|
2023-11-17 06:16:32 +02:00
|
|
|
}
|
|
|
|
|
|
2023-12-11 22:42:19 +02:00
|
|
|
double timer_remaining(Timer *timer) {
|
2023-11-30 00:44:00 +02:00
|
|
|
return timer->duration - (get_time() - timer->start);
|
2023-11-17 06:16:32 +02:00
|
|
|
}
|
|
|
|
|
|
2023-12-11 22:42:19 +02:00
|
|
|
double timer_elapsed(Timer *timer) {
|
2023-11-30 00:44:00 +02:00
|
|
|
return get_time() - timer->start + timer->elapsed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void timer_pause(Timer *timer) {
|
|
|
|
|
timer->state = TIMER_PAUSED;
|
|
|
|
|
timer->elapsed = get_time() - timer->start + timer->elapsed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void timer_resume(Timer *timer) {
|
|
|
|
|
timer->state = TIMER_RUNNING;
|
|
|
|
|
timer->start = get_time();
|
2023-11-17 06:16:32 +02:00
|
|
|
}
|