diff options
Diffstat (limited to 'apps/home_menu/main.cpp')
-rw-r--r-- | apps/home_menu/main.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/apps/home_menu/main.cpp b/apps/home_menu/main.cpp new file mode 100644 index 0000000..02965c3 --- /dev/null +++ b/apps/home_menu/main.cpp @@ -0,0 +1,71 @@ +#include <stdio.h> +#include "pico/stdlib.h" + +#include "../../globals.hpp" +#include "../../app_manager.hpp" +#include "main.hpp" + +extern bool rtc_get_datetime(datetime_t *t); + +void app_home_menu::title_str(char *buf, uint buf_size, const datetime_t *t) { + snprintf(buf, + buf_size, + "%d:%02d Home Menu", + t->hour, + t->min, + t->sec); +}; + +void app_home_menu::show_title(Api *app_api) { + char datetime_buf[256]; + char *datetime_str = &datetime_buf[0]; + datetime_t t; + app_api->datetime_get(&t); + + // title with time + title_str(datetime_str, sizeof(datetime_buf), &t); + app_api->gui_header_text((std::string)datetime_str); +} + +// Rendering of app +int app_home_menu::render(Api *app_api) { + show_title(app_api); + app_api->display_write_string(0,5,3, display_app_name, FONT_12x16, 0, 1); + return 0; +} + +// Example of how button inputs could be interpreted. +// Drawing on screen should be done in the render function. +int app_home_menu::btnpressed(Api *app_api, uint gpio, unsigned long delta) { + switch (gpio) { + case BUTTON_SELECT: + app_switch_request( selected_app); + return 0; + case BUTTON_DOWN: + selected_app--; + break; + case BUTTON_UP: + selected_app++; + break; + } + if (selected_app > NUMBER_OF_APPS-1) { + selected_app = NUMBER_OF_APPS-1; + } else if (selected_app < 0) { + selected_app = 0; + } + // Add spaces to avoid "ghost" characters from app names displayed before + snprintf(display_app_name, SIZE_APP_NAME, "%s ", APPS_NAME[selected_app]); + return 0; +} + +// Initlisation of the app. +app_home_menu::app_home_menu(Api *app_api) { + app_api->performance_set(Api::perf_modes::LOW_POWER); + selected_app = 0; + snprintf(display_app_name, SIZE_APP_NAME, "%s", APPS_NAME[0]); +} + +// Processor intensive operations and functions related to drawing to the screen should only be done when the app is in_foreground(=1). This function is only called when the app is init. +int app_home_menu::bgrefresh(Api *app_api, bool in_foreground) { + return 1; +} |