dosgame1/system/sdl/Timer.cpp

56 lines
842 B
C++

#include <SDL.h>
#include "../Timer.h"
SDL_TimerID timerId;
void timerISR() {
Timer::instance().update();
}
Timer::Timer() {
_freq = 50;
timerId = SDL_AddTimer(1000/_freq, [] (Uint32, void*) -> Uint32 {
timerISR();
return 1000 / instance().getFrequency();
}, nullptr);
}
Timer::~Timer() {
SDL_RemoveTimer(timerId);
}
void Timer::update() {
// TODO
_ticks++;
if (_callback) _callback();
}
uint32_t Timer::getTicks() const {
return _ticks;
}
void Timer::setFrequency(uint16_t freq) {
_freq = freq;
// TODO
}
uint16_t Timer::getFrequency() const {
return _freq;
}
void Timer::setDivider(uint16_t div) {
// TODO
}
Timer::Callback Timer::setCallback(Timer::Callback callback) {
auto oldCallback = _callback;
_callback = callback;
return oldCallback;
}
Timer &Timer::instance() {
static Timer inst;
return inst;
}