diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/home_menu.c | 88 | ||||
-rw-r--r-- | apps/home_menu.cpp | 93 | ||||
-rw-r--r-- | apps/home_menu.h | 15 | ||||
-rw-r--r-- | apps/home_menu.hpp | 15 | ||||
-rw-r--r-- | apps/main_clock.cpp (renamed from apps/main_clock.c) | 6 | ||||
-rw-r--r-- | apps/main_clock.hpp (renamed from apps/main_clock.h) | 0 |
6 files changed, 112 insertions, 105 deletions
diff --git a/apps/home_menu.c b/apps/home_menu.c deleted file mode 100644 index b7c15b0..0000000 --- a/apps/home_menu.c +++ /dev/null @@ -1,88 +0,0 @@ -#include <stdio.h> -#include "pico/stdlib.h" -#include "hardware/rtc.h" -#include "pico/util/datetime.h" -#include "../oled/ss_oled.h" - -#include "home_menu.h" -#include "../buttons.h" - -extern void app_switch(int old_appid, int new_appid); - -#define NUMBER_OF_APPS 2 - -char* APPS_NAME[NUMBER_OF_APPS][12] = {"Home", "Clock"}; - -void 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 show_title(SSOLED *oled) { - char datetime_buf[256]; - char *datetime_str = &datetime_buf[0]; - datetime_t t; - rtc_get_datetime(&t); - - // title with time - title_str(datetime_str, sizeof(datetime_buf), &t); - oledWriteString(oled, 0,0,0, datetime_str, FONT_8x8, 0, 1); -} - -// Rendering of app -int home_menu_render(SSOLED *oled, char *data, uint data_size) { - show_title(oled); - oledWriteString(oled, 0,0,2, &data[0], FONT_6x8, 0, 1); - oledWriteString(oled, 0,5,3, APPS_NAME[data[1]][0], FONT_12x16, 0, 1); // FIXME: The name does not update, it seems that the second string is empty… but data[1]'s content is correct, as BUTTON_SELECT switches to the correct app. - return 0; -} - -// Interpret button inputs -int home_menu_btnpressed(SSOLED *oled, char *data, uint data_size, uint gpio) { - switch (gpio) { - case BUTTON_HOME: - data[0] = 'H'; break; - case BUTTON_SELECT: - data[0] = 'S'; - app_switch(0, data[1]); - break; - case BUTTON_MODE: - data[0] = 'M'; break; - case BUTTON_DOWN: - data[0] = 'D'; - data[1]--; - break; - case BUTTON_UP: - data[0] = 'U'; - data[1]++; - break; - default: - data[0] = '?'; - } - if (data[1] > NUMBER_OF_APPS-1) { - data[1] = NUMBER_OF_APPS-1; data[0] = '>'; - } else if (data[1] < NUMBER_OF_APPS-1) { - data[1] = 0; data[0] = '<'; - } - return 0; -} - -// Initlisation of the app. -int home_menu_init(SSOLED *oled, char *data, uint data_size) { - data[1] = 0; - return 0; // return 1 when function not implemented -} - -// 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 home_menu_bgrefresh(SSOLED *oled, char *data, uint data_size, char in_foreground) { - return 1; -} - -// Destruction of app, deinitlisation should be done here. This is only called if the app's APPS_DESTROY_ON_EXIT is set to 1. When it is not a "service" app. -int home_menu_destroy(SSOLED *oled, char *data, uint data_size) { - return 1; -} diff --git a/apps/home_menu.cpp b/apps/home_menu.cpp new file mode 100644 index 0000000..30caed0 --- /dev/null +++ b/apps/home_menu.cpp @@ -0,0 +1,93 @@ +#include <stdio.h> +#include "pico/stdlib.h" +extern "C" { +#include "hardware/rtc.h" +} +#include "pico/util/datetime.h" +#include "../oled/ss_oled.h" + +#include "home_menu.hpp" +#include "../buttons.hpp" + +extern void app_switch(int old_appid, int new_appid); +extern bool rtc_get_datetime(datetime_t *t); + +#define NUMBER_OF_APPS 2 + +namespace app_home_menu { + const char* APPS_NAME[NUMBER_OF_APPS][12] = {"Home", "Clock"}; + + void 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 show_title(SSOLED *oled) { + char datetime_buf[256]; + char *datetime_str = &datetime_buf[0]; + datetime_t t; + rtc_get_datetime(&t); + + // title with time + title_str(datetime_str, sizeof(datetime_buf), &t); + oledWriteString(oled, 0,0,0, datetime_str, FONT_8x8, 0, 1); + } + + // Rendering of app + int render(SSOLED *oled, char *data, uint data_size) { + show_title(oled); + oledWriteString(oled, 0,0,2, &data[0], FONT_6x8, 0, 1); + oledWriteString(oled, 0,5,3, const_cast<char*>(APPS_NAME[data[1]][0]), FONT_12x16, 0, 1); // FIXME: The name does not update, it seems that the second string is empty… but data[1]'s content is correct, as BUTTON_SELECT switches to the correct app. + return 0; + } + + // Interpret button inputs + int btnpressed(SSOLED *oled, char *data, uint data_size, uint gpio) { + switch (gpio) { + case BUTTON_HOME: + data[0] = 'H'; break; + case BUTTON_SELECT: + data[0] = 'S'; + app_switch(0, data[1]); + break; + case BUTTON_MODE: + data[0] = 'M'; break; + case BUTTON_DOWN: + data[0] = 'D'; + data[1]--; + break; + case BUTTON_UP: + data[0] = 'U'; + data[1]++; + break; + default: + data[0] = '?'; + } + if (data[1] > NUMBER_OF_APPS-1) { + data[1] = NUMBER_OF_APPS-1; data[0] = '>'; + } else if (data[1] < NUMBER_OF_APPS-1) { + data[1] = 0; data[0] = '<'; + } + return 0; + } + + // Initlisation of the app. + int init(SSOLED *oled, char *data, uint data_size) { + data[1] = 0; + return 0; // return 1 when function not implemented + } + + // 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 bgrefresh(SSOLED *oled, char *data, uint data_size, char in_foreground) { + return 1; + } + + // Destruction of app, deinitlisation should be done here. This is only called if the app's APPS_DESTROY_ON_EXIT is set to 1. When it is not a "service" app. + int destroy(SSOLED *oled, char *data, uint data_size) { + return 1; + } +} diff --git a/apps/home_menu.h b/apps/home_menu.h deleted file mode 100644 index 507e818..0000000 --- a/apps/home_menu.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __HOME_MENU_H__ -#define __HOME_MENU_H__ - -#include "pico/util/datetime.h" -#include "../oled/ss_oled.h" - -void show_title(SSOLED *oled); - -int home_menu_init(SSOLED *oled, char *data, uint data_size); -int home_menu_render(SSOLED *oled, char *data, uint data_size); -int home_menu_btnpressed(SSOLED *oled, char *data, uint data_size, uint gpio); -int home_menu_bgrefresh(SSOLED *oled, char *data, uint data_size, char in_foreground); -int home_menu_destroy(SSOLED *oled, char *data, uint data_size); - -#endif
\ No newline at end of file diff --git a/apps/home_menu.hpp b/apps/home_menu.hpp new file mode 100644 index 0000000..bd648d3 --- /dev/null +++ b/apps/home_menu.hpp @@ -0,0 +1,15 @@ +#ifndef __HOME_MENU_H__ +#define __HOME_MENU_H__ + +#include "pico/util/datetime.h" +#include "../oled/ss_oled.h" + +namespace app_home_menu { + int init(SSOLED *oled, char *data, uint data_size); + int render(SSOLED *oled, char *data, uint data_size); + int btnpressed(SSOLED *oled, char *data, uint data_size, uint gpio); + int bgrefresh(SSOLED *oled, char *data, uint data_size, char in_foreground); + int destroy(SSOLED *oled, char *data, uint data_size); +} + +#endif diff --git a/apps/main_clock.c b/apps/main_clock.cpp index 547057e..9dfee0f 100644 --- a/apps/main_clock.c +++ b/apps/main_clock.cpp @@ -1,11 +1,13 @@ #include <stdio.h> #include "pico/stdlib.h" +extern "C" { #include "hardware/rtc.h" +} #include "pico/util/datetime.h" #include "../oled/ss_oled.h" -#include "main_clock.h" -#include "../buttons.h" +#include "main_clock.hpp" +#include "../buttons.hpp" // Time as string // Adapted from pico-sdk/scr/common/pico_util/datetime.c diff --git a/apps/main_clock.h b/apps/main_clock.hpp index 70d9755..70d9755 100644 --- a/apps/main_clock.h +++ b/apps/main_clock.hpp |