#include "oswald.h" #include "oswald_watch_faces.h" #include "Fonts.h" #include "LcdDisplay.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) { if (OswaldState.user_screendraw_func != NULL) OswaldState.user_screendraw_func(); } void oswald_change_to_screen(screen_number screen) { // we spare the update if no change happened 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 draw_accel_screen(void) { lcd_clear_display(); SetFont(MetaWatch16); WriteLcdString(2, 2, "X:"); WriteLcdString(20, 2, "123"); WriteLcdString(2, 18, "Z:"); WriteLcdString(20, 18, "123"); WriteLcdString(2, 34, "Y:"); WriteLcdString(20, 34, "123"); } void idle_handle_user_buttons(watch_button button) { } void oswald_handle_button_press(watch_button button) { switch (button) { case BUTTON_A: case BUTTON_B: case BUTTON_D: case BUTTON_E: if (OswaldState.user_button_func != NULL) OswaldState.user_button_func(button); break; case BUTTON_C: // next screen OswaldState.screen++; if (OswaldState.screen >= LAST_SCREEN) { OswaldState.screen = IDLE_SCREEN; OswaldState.user_button_func = idle_handle_user_buttons; OswaldState.user_screendraw_func = DrawLcdDigitalClock; } else { switch (OswaldState.screen) { case SETTING_DATETIME_SCREEN: OswaldState.user_button_func = idle_handle_user_buttons; OswaldState.user_screendraw_func = draw_accel_screen; break; default: break; }; }; update_screen(); break; case BUTTON_F: // backlight on/off break; default: // should never get here break; }; } void oswald_init(void) { OswaldState.screen = IDLE_SCREEN; OswaldState.idle_show_seconds = FALSE; OswaldState.user_screendraw_func = DrawLcdDigitalClock; OswaldState.user_button_func = idle_handle_user_buttons; }