diff options
Diffstat (limited to 'pico-watch.c')
-rw-r--r-- | pico-watch.c | 71 |
1 files changed, 28 insertions, 43 deletions
diff --git a/pico-watch.c b/pico-watch.c index a07cd23..a7c3886 100644 --- a/pico-watch.c +++ b/pico-watch.c @@ -6,57 +6,42 @@ #include "oled/ss_oled.h" #include "init.h" +#include "apps/main_clock.h" +int current_app = 0; -// Time as string -// Adapted from pico-sdk/scr/common/pico_util/datetime.c -void time_as_str(char *buf, uint buf_size, const datetime_t *t) { - snprintf(buf, - buf_size, - "%d:%02d:%02d", - t->hour, - t->min, - t->sec); -}; -void date_as_str(char *buf, uint buf_size, const datetime_t *t) { - static const char *DATETIME_DOWS[7] = { - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat", - }; - snprintf(buf, - buf_size, - "%02d-%02d-%02d %s", - t->year, - t->month, - t->day, - DATETIME_DOWS[t->dotw - 1]); -}; - -void show_datetime() { - char datetime_buf[256]; - char *datetime_str = &datetime_buf[0]; - datetime_t t; - rtc_get_datetime(&t); - - // time - time_as_str(datetime_str, sizeof(datetime_buf), &t); - oledWriteString(&oled, 0,10,3, datetime_str, FONT_12x16, 0, 1); - - // date - date_as_str(datetime_str, sizeof(datetime_buf), &t); - oledWriteString(&oled, 0,0,7, datetime_str, FONT_8x8, 0, 1); +#define NUMBER_OF_APPS 1 +#define APP_DATA_BUFFER_LEN 256 +int (*APPS_FUNC_INIT[NUMBER_OF_APPS])(SSOLED *oled, char *data, uint data_size) = {main_clock_init}; +int (*APPS_FUNC_RENDER[NUMBER_OF_APPS])(SSOLED *oled, char *data, uint data_size) = {main_clock_render}; +int (*APPS_FUNC_BGREFRESH[NUMBER_OF_APPS])(SSOLED *oled, char *data, uint data_size) = {main_clock_bgrefresh}; +int (*APPS_FUNC_DESTROY[NUMBER_OF_APPS])(SSOLED *oled, char *data, uint data_size) = {main_clock_destroy}; +char APPS_DATA[NUMBER_OF_APPS][APP_DATA_BUFFER_LEN]; +int APPS_DESTROY_ON_EXIT[NUMBER_OF_APPS] = {1}; +int APPS_IS_INIT[NUMBER_OF_APPS] = {0}; + +int app_init(int app_id) { + APPS_IS_INIT[app_id] = 1; + return (*APPS_FUNC_INIT[app_id])(&oled, &APPS_DATA[app_id][0], sizeof(APPS_DATA[app_id])); +} + +int app_render(int app_id) { + return (*APPS_FUNC_RENDER[app_id])(&oled, &APPS_DATA[app_id][0], sizeof(APPS_DATA[app_id])); +} + +int app_destroy(int app_id) { + if (APPS_IS_INIT[app_id]) + return (*APPS_FUNC_INIT[app_id])(&oled, &APPS_DATA[app_id][0], sizeof(APPS_DATA[app_id])); } int main() { init_all(); + + app_init(current_app); + oledWriteString(&oled, 0,15,0, (char *)"Test clock", FONT_8x8, 0, 1); while (1) { - show_datetime(); + app_render(current_app); sleep_ms(500); } return 0; |