diff --git a/devices/video/videoctrl.cpp b/devices/video/videoctrl.cpp index f8b3e02..56b2acc 100644 --- a/devices/video/videoctrl.cpp +++ b/devices/video/videoctrl.cpp @@ -21,6 +21,7 @@ along with this program. If not, see . /** @file Video Conroller base class implementation. */ +#include #include #include #include @@ -149,6 +150,22 @@ void VideoCtrlBase::update_screen() SDL_RenderPresent(this->renderer); } +void VideoCtrlBase::start_refresh_task() { + uint64_t refresh_interval = static_cast(1.0f / refresh_rate * NS_PER_SEC + 0.5); + this->refresh_task_id = TimerManager::get_instance()->add_cyclic_timer( + refresh_interval, + [this]() { + this->update_screen(); + } + ); +} + +void VideoCtrlBase::stop_refresh_task() { + if (this->refresh_task_id) { + TimerManager::get_instance()->cancel_timer(this->refresh_task_id); + } +} + void VideoCtrlBase::get_palette_colors(uint8_t index, uint8_t& r, uint8_t& g, uint8_t& b, uint8_t& a) { diff --git a/devices/video/videoctrl.h b/devices/video/videoctrl.h index f2625d2..14a3b79 100644 --- a/devices/video/videoctrl.h +++ b/devices/video/videoctrl.h @@ -40,6 +40,9 @@ public: void blank_display(); void update_screen(void); + void start_refresh_task(); + void stop_refresh_task(); + void get_palette_colors(uint8_t index, uint8_t& r, uint8_t& g, uint8_t& b, uint8_t& a); void set_palette_color(uint8_t index, uint8_t r, uint8_t g, uint8_t b, uint8_t a);