blk_box_tc/main/drivers/game_timer.hpp
2024-08-04 21:47:23 -05:00

57 lines
1.0 KiB
C++

#ifndef GAME_TIMER_HPP
#define GAME_TIMER_HPP
#include "freertos/FreeRTOS.h"
#include "sseg.hpp"
static bool playing;
static uint32_t time_left;
static void game_timer_task(void *arg);
uint32_t sat_sub(uint32_t x, uint32_t y);
void start_timer(void) {
playing = true;
}
void stop_timer(void) {
playing = false;
}
void init_game_timer(void) {
xTaskCreate(game_timer_task, "game_timer", 4096, NULL, 10, NULL);
}
void set_game_time(uint32_t new_time) {
time_left = new_time;
}
uint32_t get_game_time() {
return time_left;
}
static void game_timer_task(void *arg)
{
TickType_t lastWakeTime = xTaskGetTickCount();
const uint32_t frequency = 100;
while (1) {
vTaskDelayUntil( &lastWakeTime, pdMS_TO_TICKS(frequency));
if (playing) {
time_left = sat_sub(time_left, frequency);
set_game_timer(time_left / 100, 1);
}
}
vTaskDelete(NULL);
}
uint32_t sat_sub(uint32_t x, uint32_t y)
{
uint32_t res = x - y;
res &= -(res <= x);
return res;
}
#endif /* GAME_TIMER_HPP */