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);