summaryrefslogtreecommitdiff
path: root/src/DisplayApp/Screens
diff options
context:
space:
mode:
Diffstat (limited to 'src/DisplayApp/Screens')
-rw-r--r--src/DisplayApp/Screens/Clock.cpp17
-rw-r--r--src/DisplayApp/Screens/Label.cpp28
-rw-r--r--src/DisplayApp/Screens/Label.h24
-rw-r--r--src/DisplayApp/Screens/ScreenList.cpp125
-rw-r--r--src/DisplayApp/Screens/ScreenList.h34
-rw-r--r--src/DisplayApp/Screens/Tile.cpp6
-rw-r--r--src/DisplayApp/Screens/Tile.h2
7 files changed, 215 insertions, 21 deletions
diff --git a/src/DisplayApp/Screens/Clock.cpp b/src/DisplayApp/Screens/Clock.cpp
index 00590777..07db83ee 100644
--- a/src/DisplayApp/Screens/Clock.cpp
+++ b/src/DisplayApp/Screens/Clock.cpp
@@ -37,23 +37,6 @@ Clock::Clock(DisplayApp* app,
lv_img_set_src(bleIcon, BleIcon::GetIcon(false));
lv_obj_align(bleIcon, batteryIcon, LV_ALIGN_OUT_LEFT_MID, 0, 0);
-// label_battery = lv_label_create(lv_scr_act(), NULL);
-// lv_obj_align(label_battery, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, -80, 0);
-
-// labelStyle = const_cast<lv_style_t *>(lv_label_get_style(label_battery, LV_LABEL_STYLE_MAIN));
-// labelStyle->text.font = &jetbrains_mono_bold_20;
-//
-// lv_style_copy(&labelBigStyle, labelStyle);
-// labelBigStyle.text.font = &jetbrains_mono_extrabold_compressed;
-//
-// lv_label_set_style(label_battery, LV_LABEL_STYLE_MAIN, labelStyle);
-
-// label_ble = lv_label_create(lv_scr_act(), NULL);
-
-
-// lv_label_set_style(label_ble, LV_LABEL_STYLE_MAIN, labelStyle);
-// lv_obj_align(label_ble, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 10, 0);
-
label_date = lv_label_create(lv_scr_act(), NULL);
lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, 60);
diff --git a/src/DisplayApp/Screens/Label.cpp b/src/DisplayApp/Screens/Label.cpp
new file mode 100644
index 00000000..ba35279d
--- /dev/null
+++ b/src/DisplayApp/Screens/Label.cpp
@@ -0,0 +1,28 @@
+#include <libs/lvgl/lvgl.h>
+#include "Label.h"
+
+using namespace Pinetime::Applications::Screens;
+
+
+Label::Label(const char* text) : text{text} {
+
+}
+
+Label::~Label() {
+
+}
+
+void Label::Refresh() {
+
+}
+
+void Label::Show() {
+ label = lv_label_create(lv_scr_act(), NULL);
+ lv_label_set_align(label, LV_LABEL_ALIGN_LEFT);
+ lv_obj_set_size(label, 240, 240);
+ lv_label_set_text(label, text);
+}
+
+void Label::Hide() {
+ lv_obj_clean(lv_scr_act());
+}
diff --git a/src/DisplayApp/Screens/Label.h b/src/DisplayApp/Screens/Label.h
new file mode 100644
index 00000000..b73540f4
--- /dev/null
+++ b/src/DisplayApp/Screens/Label.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <vector>
+#include "Screen.h"
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class Label {
+ public:
+ Label() = default;
+ explicit Label(const char* text);
+ ~Label();
+ void Refresh();
+
+ void Hide();
+ void Show();
+ private:
+ lv_obj_t * label = nullptr;
+ const char* text = nullptr;
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/ScreenList.cpp b/src/DisplayApp/Screens/ScreenList.cpp
new file mode 100644
index 00000000..bea335ff
--- /dev/null
+++ b/src/DisplayApp/Screens/ScreenList.cpp
@@ -0,0 +1,125 @@
+#include <libs/lvgl/lvgl.h>
+#include <DisplayApp/DisplayApp.h>
+#include "ScreenList.h"
+
+using namespace Pinetime::Applications::Screens;
+
+// TODO this class must be improved to receive the list of "sub screens" via pointer or
+// move operation.
+// It should accept many type of "sub screen" (it only supports Label for now).
+// The number of sub screen it supports must be dynamic.
+ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::DateTime &dateTimeController,
+ Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Drivers::WatchdogView& watchdog) :
+ Screen(app),
+ dateTimeController{dateTimeController}, batteryController{batteryController}, brightnessController{brightnessController}, watchdog{watchdog} {
+ screens.reserve(3);
+
+ // TODO all of this is far too heavy (string processing). This should be improved.
+ // TODO the info (battery, time,...) should be updated in the Refresh method.
+ char t1[200];
+
+ auto batteryPercent = static_cast<int16_t>(batteryController.PercentRemaining());
+ if(batteryPercent > 100) batteryPercent = 100;
+ else if(batteryPercent < 0) batteryPercent = 0;
+
+ uint8_t brightness = 0;
+ switch(brightnessController.Level()) {
+ case Controllers::BrightnessController::Levels::Low: brightness = 1; break;
+ case Controllers::BrightnessController::Levels::Medium: brightness = 2; break;
+ case Controllers::BrightnessController::Levels::High: brightness = 3; break;
+ }
+ auto resetReason = [&watchdog]() {
+ switch (watchdog.ResetReason()) {
+ case Drivers::Watchdog::ResetReasons::Watchdog: return "wtdg";
+ case Drivers::Watchdog::ResetReasons::HardReset: return "hardr";
+ case Drivers::Watchdog::ResetReasons::NFC: return "nfc";
+ case Drivers::Watchdog::ResetReasons::SoftReset: return "softr";
+ case Drivers::Watchdog::ResetReasons::CpuLockup: return "cpulock";
+ case Drivers::Watchdog::ResetReasons::SystemOff: return "off";
+ case Drivers::Watchdog::ResetReasons::LpComp: return "lpcomp";
+ case Drivers::Watchdog::ResetReasons::DebugInterface: return "dbg";
+ case Drivers::Watchdog::ResetReasons::ResetPin: return "rst";
+ default: return "?";
+ }
+ }();
+
+
+ sprintf(t1, "Pinetime\n"
+ "Version:%d.%d.%d\n"
+ "Build: xx/xx/xxxx\n"
+ "Time: %02d:%02d:%02d\n"
+ "date: %02d/%02d/%04d\n"
+ "Uptime: xd xxhxx:xx\n"
+ "Battery: %d%%\n"
+ "Backlight: %d/3\n"
+ "Last reset: %s\n"
+ "BLE MAC: \n AA:BB:CC:DD:EE:FF", Version::Major(), Version::Minor(), Version::Patch(),
+ dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(),
+ dateTimeController.Day(), dateTimeController.Month(), dateTimeController.Year(),
+ batteryPercent, brightness, resetReason);
+/*
+ auto t1 = "Pinetime\n"
+ "Version:\n"
+ "Build: 23/03/2020\n"
+ "Time: 17:23:12\n"
+ "date: 23/03/2020\n"
+ "Uptime: 2d 13h52:21\n"
+ "Battery: 3.56v/82%\n"
+ "Backlight: 2/3\n"
+ "Last reset: wtdg\n"
+ "BLE MAC: \n AA:BB:CC:DD:EE:FF";*/
+ screens.emplace_back(t1);
+
+ auto t2 = "Hello from\nthe developper!";
+ screens.emplace_back(t2);
+
+ auto t3 = "Place holder\nin case we need\nmore room!";
+ screens.emplace_back(t3);
+
+ auto &screen = screens[screenIndex];
+ screen.Show();
+}
+
+ScreenList::~ScreenList() {
+ lv_obj_clean(lv_scr_act());
+}
+
+bool ScreenList::Refresh() {
+ auto &screen = screens[screenIndex];
+ screen.Refresh();
+
+ return running;
+}
+
+bool ScreenList::OnButtonPushed() {
+ running = false;
+ return true;
+}
+
+bool ScreenList::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
+ switch (event) {
+ case TouchEvents::SwipeDown:
+ if (screenIndex > 0) {
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down);
+ auto &oldScreen = screens[screenIndex];
+ oldScreen.Hide();
+ screenIndex--;
+ auto &newScreen = screens[screenIndex];
+ newScreen.Show();
+ }
+ return true;
+ case TouchEvents::SwipeUp:
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::Up);
+ if (screenIndex < screens.size() - 1) {
+ auto &oldScreen = screens[screenIndex];
+ oldScreen.Hide();
+ screenIndex++;
+ auto &newScreen = screens[screenIndex];
+ newScreen.Show();
+ }
+ return true;
+ default:
+ return false;
+ }
+ return false;
+}
diff --git a/src/DisplayApp/Screens/ScreenList.h b/src/DisplayApp/Screens/ScreenList.h
new file mode 100644
index 00000000..ba8e7700
--- /dev/null
+++ b/src/DisplayApp/Screens/ScreenList.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <vector>
+#include "Screen.h"
+#include "Label.h"
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class ScreenList : public Screen {
+ public:
+ explicit ScreenList(DisplayApp* app,
+ Pinetime::Controllers::DateTime& dateTimeController,
+ Pinetime::Controllers::Battery& batteryController,
+ Pinetime::Controllers::BrightnessController& brightnessController,
+ Pinetime::Drivers::WatchdogView& watchdog);
+ ~ScreenList() override;
+ bool Refresh() override;
+ bool OnButtonPushed() override;
+ bool OnTouchEvent(TouchEvents event) override;
+ private:
+ bool running = true;
+ uint8_t screenIndex = 0;
+
+ // TODO choose another container without dynamic alloc
+ std::vector<Screens::Label> screens;
+ Pinetime::Controllers::DateTime& dateTimeController;
+ Pinetime::Controllers::Battery& batteryController;
+ Pinetime::Controllers::BrightnessController& brightnessController;
+ Pinetime::Drivers::WatchdogView& watchdog;
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/Tile.cpp b/src/DisplayApp/Screens/Tile.cpp
index 5dc1fce4..7eb1018c 100644
--- a/src/DisplayApp/Screens/Tile.cpp
+++ b/src/DisplayApp/Screens/Tile.cpp
@@ -126,7 +126,7 @@ void Tile::OnObjectEvent(lv_obj_t *obj, lv_event_t event, uint32_t buttonId) {
modal->Show();
break;
case 4:
- tile->StartTestApp();
+ tile->StartSysInfoApp();
break;
case 5:
tile->StartBrightnessApp();
@@ -148,8 +148,8 @@ void Tile::StartClockApp() {
running = false;
}
-void Tile::StartTestApp() {
- app->StartApp(DisplayApp::Apps::Test);
+void Tile::StartSysInfoApp() {
+ app->StartApp(DisplayApp::Apps::SysInfo);
running = false;
}
diff --git a/src/DisplayApp/Screens/Tile.h b/src/DisplayApp/Screens/Tile.h
index cfd9b01f..fa2d6db0 100644
--- a/src/DisplayApp/Screens/Tile.h
+++ b/src/DisplayApp/Screens/Tile.h
@@ -52,7 +52,7 @@ namespace Pinetime {
uint32_t clickCount = 0 ;
uint32_t previousClickCount = 0;
void StartClockApp();
- void StartTestApp();
+ void StartSysInfoApp();
void StartMeterApp();
void StartGaugeApp();
bool running = true;