summaryrefslogtreecommitdiffstats
path: root/pico-watch.cpp
diff options
context:
space:
mode:
authorConfuSomu2021-02-27 13:29:37 -0500
committerConfuSomu2021-02-27 13:29:37 -0500
commit2a0571ba87183023b1073af1badb5fb91da763cf (patch)
treeb73cd5d8d810e398c614611ecd7b602d10d7b58d /pico-watch.cpp
parent06d5f492eca8e57bc8ce7479ec6149fbc6a15d08 (diff)
downloadpico-watch-2a0571ba87183023b1073af1badb5fb91da763cf.tar
pico-watch-2a0571ba87183023b1073af1badb5fb91da763cf.tar.gz
pico-watch-2a0571ba87183023b1073af1badb5fb91da763cf.zip
Use an Api class for abstraction
It is currently very basic as functions will be added to it when the time comes. The idea is to have a method to, for example, show notifications (and store them in a list with metadata) to the user or also to easily show a message box overlaying the current display. Private class members will permit encapsulations of variables related to these features and limit the privilage that each app has on the device.
Diffstat (limited to 'pico-watch.cpp')
-rw-r--r--pico-watch.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/pico-watch.cpp b/pico-watch.cpp
index 243f1e1..e888ba1 100644
--- a/pico-watch.cpp
+++ b/pico-watch.cpp
@@ -6,49 +6,51 @@
#include "oled/ss_oled.h"
#include "init.hpp"
+#include "api.hpp"
#include "buttons.hpp"
#include "apps/main_clock.hpp"
#include "apps/home_menu.hpp"
int current_app = 0;
+Api app_api;
#define NUMBER_OF_APPS 2
#define APP_DATA_BUFFER_LEN 256
-int (*APPS_FUNC_INIT[NUMBER_OF_APPS])(SSOLED *oled) = {app_home_menu::init, app_main_clock::init};
-int (*APPS_FUNC_RENDER[NUMBER_OF_APPS])(SSOLED *oled) = {app_home_menu::render, app_main_clock::render};
-int (*APPS_FUNC_BTNPRESS[NUMBER_OF_APPS])(SSOLED *oled, uint gpio) = {app_home_menu::btnpressed, app_main_clock::btnpressed};
-int (*APPS_FUNC_BGREFRESH[NUMBER_OF_APPS])(SSOLED *oled, char in_foreground) = {app_home_menu::bgrefresh, app_main_clock::bgrefresh};
-int (*APPS_FUNC_DESTROY[NUMBER_OF_APPS])(SSOLED *oled) = {app_home_menu::destroy, app_main_clock::destroy};
+int (*APPS_FUNC_INIT[NUMBER_OF_APPS])(Api *app_api) = {app_home_menu::init, app_main_clock::init};
+int (*APPS_FUNC_RENDER[NUMBER_OF_APPS])(Api *app_api) = {app_home_menu::render, app_main_clock::render};
+int (*APPS_FUNC_BTNPRESS[NUMBER_OF_APPS])(Api *app_api, uint gpio) = {app_home_menu::btnpressed, app_main_clock::btnpressed};
+int (*APPS_FUNC_BGREFRESH[NUMBER_OF_APPS])(Api *app_api, char in_foreground) = {app_home_menu::bgrefresh, app_main_clock::bgrefresh};
+int (*APPS_FUNC_DESTROY[NUMBER_OF_APPS])(Api *app_api) = {app_home_menu::destroy, app_main_clock::destroy};
int APPS_DESTROY_ON_EXIT[NUMBER_OF_APPS] = {0, 1};
int APPS_IS_INIT[NUMBER_OF_APPS] = {0, 0}; // Only run in background if init
int app_init(int app_id) {
- oledFill(&oled, 0,1); // Clear OLED
+ app_api.dispFill(0,1); // Clear OLED
if (!APPS_IS_INIT[app_id]) {
APPS_IS_INIT[app_id] = 1;
- return (*APPS_FUNC_INIT[app_id])(&oled);
+ return (*APPS_FUNC_INIT[app_id])(&app_api);
}
}
int app_render(int app_id) {
- return (*APPS_FUNC_RENDER[app_id])(&oled);
+ return (*APPS_FUNC_RENDER[app_id])(&app_api);
}
int app_btnpressed(int app_id, uint gpio) {
- return (*APPS_FUNC_BTNPRESS[app_id])(&oled, gpio);
+ return (*APPS_FUNC_BTNPRESS[app_id])(&app_api, gpio);
}
int app_destroy(int app_id) {
// TODO: reset APPS_DATA for the app
if (APPS_IS_INIT[app_id]) {
APPS_IS_INIT[app_id] = 0;
- return (*APPS_FUNC_DESTROY[app_id])(&oled);
+ return (*APPS_FUNC_DESTROY[app_id])(&app_api);
}
}
int app_bgrefresh(int app_id) {
if (APPS_IS_INIT[app_id])
- return (*APPS_FUNC_BGREFRESH[app_id])(&oled, app_id==current_app);
+ return (*APPS_FUNC_BGREFRESH[app_id])(&app_api, app_id==current_app);
}
bool apps_bgrefresh(struct repeating_timer *t) { // TODO: Refresh done on core1
@@ -69,6 +71,7 @@ void app_switch(int old_appid, int new_appid) {
int main() {
init_all();
init_buttons();
+ app_api.init();
struct repeating_timer timer;
add_repeating_timer_ms(250, apps_bgrefresh, NULL, &timer);