src.nth.io/

summaryrefslogtreecommitdiff
path: root/main/viewport_state.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/viewport_state.c')
-rw-r--r--main/viewport_state.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/main/viewport_state.c b/main/viewport_state.c
new file mode 100644
index 0000000..9115ce3
--- /dev/null
+++ b/main/viewport_state.c
@@ -0,0 +1,46 @@
+#include "viewport_state.h"
+
+#include <string.h>
+
+#include "esp_timer.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/semphr.h"
+
+static viewport_state_t s_state;
+static SemaphoreHandle_t s_mutex;
+
+void viewport_state_init(void)
+{
+ memset(&s_state, 0, sizeof(s_state));
+ s_state.configured = false;
+ s_state.state = VIEWPORT_STATE_UNCONFIGURED;
+ s_state.brightness = 80;
+ s_state.idle_timeout_ms = 60000;
+ s_state.orientation = VIEWPORT_ORIENTATION_PORTRAIT;
+ s_state.boot_us = (uint64_t)esp_timer_get_time();
+ s_state.last_frame_us = -1;
+
+ s_mutex = xSemaphoreCreateMutex();
+}
+
+viewport_state_t *viewport_state_get(void)
+{
+ return &s_state;
+}
+
+void viewport_state_lock(void)
+{
+ xSemaphoreTake(s_mutex, portMAX_DELAY);
+}
+
+void viewport_state_unlock(void)
+{
+ xSemaphoreGive(s_mutex);
+}
+
+const char *viewport_state_resolution_str(void)
+{
+ return (s_state.orientation == VIEWPORT_ORIENTATION_PORTRAIT)
+ ? "480x800"
+ : "800x480";
+}