Add Stopwatch application

It can be started, stopped, and cleared. It also continues to run if
you leave the screen.
This commit is contained in:
2019-12-17 22:12:20 -08:00
parent 00c9910872
commit 463c3afd3d
7 changed files with 279 additions and 13 deletions

View File

@@ -34,6 +34,7 @@
#include "Application/Screens/MenuScreen.h"
#include "Application/Screens/SetTimeScreen.h"
#include "Application/Screens/SetDateScreen.h"
#include "Application/Screens/StopwatchScreen.h"
#include "Bsp/macros.h"
@@ -51,29 +52,43 @@ static BSP::ButtonManager g_btn_manager(g_sched, 2, 1, 0, Time::millis(1));
static ScreenManager g_screen_manager(g_sched, g_display, g_btn_manager);
static SetTimeScreen g_set_time_screen(g_display, g_screen_manager);
static SetTimeScreen g_set_date_screen(g_display, g_screen_manager);
static StopwatchScreen g_stopwatch_screen(g_display, g_screen_manager);
static MenuScreen g_enable_debug(g_display,
g_screen_manager,
"SW Update",
std::initializer_list<MenuScreenItem>({MenuScreenItem("Enable", []() { BSP::LowPower::enable_debug(); }),
MenuScreenItem("Disable", []() { BSP::LowPower::disable_debug();
})}));
MenuScreenItem("Disable", []() { BSP::LowPower::disable_debug();}
)}));
// static DebugScreen g_debug_screen(g_display, g_screen_manager);
static MenuScreen g_set_face_screen(g_display,
g_screen_manager,
"Face",
std::initializer_list<MenuScreenItem>());
static MenuScreen g_settings_menu_screen(g_display,
g_screen_manager,
"Settings",
std::initializer_list<MenuScreenItem>({MenuScreenItem("Set Time", g_set_time_screen),
MenuScreenItem("Set Date", g_set_date_screen),
MenuScreenItem("Set Face", g_set_date_screen),
MenuScreenItem("Set Face", g_set_face_screen),
MenuScreenItem("SW Update", g_enable_debug)}));
static MenuScreen g_apps_menu_screen(g_display,
g_screen_manager,
"Apps",
std::initializer_list<MenuScreenItem>({MenuScreenItem("Stopwatch", g_stopwatch_screen)}));
static MenuScreen g_main_menu_screen(g_display,
g_screen_manager,
"Main Menu",
std::initializer_list<MenuScreenItem>({MenuScreenItem("Apps", g_settings_menu_screen),
std::initializer_list<MenuScreenItem>({MenuScreenItem("Apps", g_apps_menu_screen),
MenuScreenItem("Settings", g_settings_menu_screen)}));
static AnalogTimeScreen g_display_time_screen(g_display, g_screen_manager, g_main_menu_screen);
static AnalogTimeScreen g_analog_time_screen(g_display, g_screen_manager, g_main_menu_screen);
static BigDigitalTimeScreen g_digital_time_screen(g_display, g_screen_manager, g_main_menu_screen);
extern "C" void __cxa_pure_virtual() { while(1) {} }
@@ -206,7 +221,12 @@ static void _init(void)
g_btn_manager.init();
g_display.init();
g_screen_manager.init();
g_screen_manager.set_root_screen(g_display_time_screen);
g_screen_manager.set_root_screen(g_analog_time_screen);
g_set_face_screen.add_item(MenuScreenItem("Analog",
[]() { g_screen_manager.set_root_screen(g_analog_time_screen); }));
g_set_face_screen.add_item(MenuScreenItem("Digital",
[]() { g_screen_manager.set_root_screen(g_digital_time_screen); }));
// Enqueue each of the tasks
BSP::Schedule::NextTime asap = BSP::Schedule::NextTime::asap();