--- /dev/null
+#include "oswald.h"
+#include "oswald_watch_faces.h"
+
+#include "oswald_main.h"
+
+/*
+ * some variable defining our curent state
+ * these are globals in order to avoid having to pass pointers
+ * through function calls thus saving stack space
+ */
+clock_state OswaldClk;
+watch_state OswaldState;
+
+void update_screen(void)
+{
+ switch (OswaldState.screen) {
+ case IDLE_SCREEN:
+ if (OswaldState.idle_draw_func != NULL)
+ OswaldState.idle_draw_func(OswaldState.idle_show_seconds);
+ break;
+ case APPLICATION_SCREEN:
+ break;
+ deafault:
+ break;
+ };
+}
+
+void oswald_change_to_screen(screen_number screen)
+{
+ // we spare the update if no change
+ if (OswaldState.screen != screen) {
+ OswaldState.screen = screen;
+ update_screen();
+ }
+}
+
+void oswald_set_time(u8t hour, u8t minute, u8t second)
+{
+ OswaldClk.hour = hour;
+ OswaldClk.minute = minute;
+ OswaldClk.second = second;
+}
+
+static void update_clock_state (void)
+{
+ OswaldClk.second += 1;
+ if (OswaldClk.second > 59) {
+ OswaldClk.second = 0;
+ OswaldClk.minute += 1;
+ } else
+ return;
+ if (OswaldClk.minute > 59) {
+ OswaldClk.minute = 0;
+ OswaldClk.hour += 1;
+ } else
+ return;
+ if (OswaldClk.hour > 23) {
+ OswaldClk.hour = 0;
+ // day++
+ } else
+ return;
+}
+
+void oswald_one_second_tick(void)
+{
+ update_clock_state();
+ update_screen();
+}
+
+void oswald_handle_button_press(watch_button button)
+{
+}
+
+void oswald_init(void)
+{
+ OswaldState.screen = IDLE_SCREEN;
+ OswaldState.idle_draw_func = DrawLcdDigitalClock;
+ OswaldState.idle_show_seconds = FALSE;
+}
+