aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorConfuSomu2021-02-08 12:44:05 -0500
committerConfuSomu2021-02-08 12:44:05 -0500
commit8c27dc6445eedd928e8f7886f9d1b62f74e189f1 (patch)
treeb18492e60eee24add13c79a8ffcbbbed84f33b61 /apps
parentfef4e0343b14d8d95749e60867828b2773bf8f7d (diff)
downloadpico-watch-8c27dc6445eedd928e8f7886f9d1b62f74e189f1.tar
pico-watch-8c27dc6445eedd928e8f7886f9d1b62f74e189f1.tar.gz
pico-watch-8c27dc6445eedd928e8f7886f9d1b62f74e189f1.zip
Create a sort of framework for apps
Each app has its own init, render, bgrefresh and destroy functions. The app data array alllows apps to persist data between function calls.
Diffstat (limited to 'apps')
-rw-r--r--apps/main_clock.c72
-rw-r--r--apps/main_clock.h16
2 files changed, 88 insertions, 0 deletions
diff --git a/apps/main_clock.c b/apps/main_clock.c
new file mode 100644
index 0000000..ec95585
--- /dev/null
+++ b/apps/main_clock.c
@@ -0,0 +1,72 @@
+#include <stdio.h>
+#include "pico/stdlib.h"
+#include "hardware/rtc.h"
+#include "pico/util/datetime.h"
+#include "../oled/ss_oled.h"
+
+#include "main_clock.h"
+
+// 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(SSOLED *oled) {
+ 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);
+}
+
+int main_clock_render(SSOLED *oled, char *data, uint data_size) {
+ show_datetime(oled);
+// data[1] += 1; // testing
+// oledWriteString(oled, 0,0,2, &data[0], FONT_6x8, 0, 1);
+ return 0;
+}
+
+int main_clock_init(SSOLED *oled, char *data, uint data_size) {
+// data[0] = 'a'; // testing, to showcase the use of data
+// data[1] = 'b';
+ return 1; // return 1 when function not implemented
+}
+
+int main_clock_bgrefresh(SSOLED *oled, char *data, uint data_size) {
+ return 1;
+}
+
+int main_clock_destroy(SSOLED *oled, char *data, uint data_size) {
+ return 1;
+}
diff --git a/apps/main_clock.h b/apps/main_clock.h
new file mode 100644
index 0000000..d47e837
--- /dev/null
+++ b/apps/main_clock.h
@@ -0,0 +1,16 @@
+#ifndef __MAIN_CLOCK_H__
+#define __MAIN_CLOCK_H__
+
+#include "pico/util/datetime.h"
+#include "../oled/ss_oled.h"
+
+void time_as_str(char *buf, uint buf_size, const datetime_t *t);
+void date_as_str(char *buf, uint buf_size, const datetime_t *t);
+void show_datetime(SSOLED *oled);
+
+int main_clock_init(SSOLED *oled, char *data, uint data_size);
+int main_clock_render(SSOLED *oled, char *data, uint data_size);
+int main_clock_bgrefresh(SSOLED *oled, char *data, uint data_size);
+int main_clock_destroy(SSOLED *oled, char *data, uint data_size);
+
+#endif \ No newline at end of file