summaryrefslogtreecommitdiff
path: root/src/DisplayApp/DisplayApp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DisplayApp/DisplayApp.cpp')
-rw-r--r--src/DisplayApp/DisplayApp.cpp84
1 files changed, 61 insertions, 23 deletions
diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp
index ca13942..d7d62dd 100644
--- a/src/DisplayApp/DisplayApp.cpp
+++ b/src/DisplayApp/DisplayApp.cpp
@@ -4,35 +4,39 @@
#include <libraries/log/nrf_log.h>
#include <boards.h>
#include <nrf_font.h>
-#include <hal/nrf_rtc.h>
-#include "Components/Gfx/Gfx.h"
#include <queue.h>
#include <Components/DateTime/DateTimeController.h>
#include <drivers/Cst816s.h>
-#include <chrono>
#include <string>
+#include <lvgl/lvgl.h>
+#include <DisplayApp/Screens/Tile.h>
+#include <DisplayApp/Screens/Message.h>
+#include <DisplayApp/Screens/Meter.h>
+#include <DisplayApp/Screens/Gauge.h>
+#include "../SystemTask/SystemTask.h"
using namespace Pinetime::Applications;
DisplayApp::DisplayApp(Pinetime::Drivers::St7789& lcd,
- Pinetime::Components::Gfx& gfx,
+ Pinetime::Components::LittleVgl& lvgl,
Pinetime::Drivers::Cst816S& touchPanel,
Controllers::Battery &batteryController,
Controllers::Ble &bleController,
- Controllers::DateTime &dateTimeController) :
+ Controllers::DateTime &dateTimeController,
+ Pinetime::System::SystemTask& systemTask) :
lcd{lcd},
- gfx{gfx},
+ lvgl{lvgl},
touchPanel{touchPanel},
batteryController{batteryController},
bleController{bleController},
dateTimeController{dateTimeController},
- clockScreen{gfx} {
+ currentScreen{new Screens::Clock(this, dateTimeController, batteryController, bleController) },
+ systemTask{systemTask} {
msgQueue = xQueueCreate(queueSize, itemSize);
- currentScreen = &clockScreen;
}
void DisplayApp::Start() {
- if (pdPASS != xTaskCreate(DisplayApp::Process, "DisplayApp", 256, this, 0, &taskHandle))
+ if (pdPASS != xTaskCreate(DisplayApp::Process, "DisplayApp", 512, this, 0, &taskHandle))
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
}
@@ -40,8 +44,14 @@ void DisplayApp::Process(void *instance) {
auto *app = static_cast<DisplayApp *>(instance);
NRF_LOG_INFO("DisplayApp task started!");
app->InitHw();
+
+ // Send a dummy notification to unlock the lvgl display driver for the first iteration
+ xTaskNotifyGive(xTaskGetCurrentTaskHandle());
+
while (1) {
+
app->Refresh();
+
}
}
@@ -52,8 +62,6 @@ void DisplayApp::InitHw() {
nrf_gpio_pin_clear(pinLcdBacklight1);
nrf_gpio_pin_clear(pinLcdBacklight2);
nrf_gpio_pin_clear(pinLcdBacklight3);
-
- currentScreen->Refresh(true);
}
uint32_t acc = 0;
@@ -68,7 +76,7 @@ void DisplayApp::Refresh() {
break;
case States::Running:
RunningState();
- queueTimeout = 1000;
+ queueTimeout = 20;
break;
}
@@ -99,25 +107,51 @@ void DisplayApp::Refresh() {
case Messages::UpdateDateTime:
break;
case Messages::UpdateBleConnection:
- clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected : Screens::Clock::BleConnectionStates::NotConnected);
+// clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected : Screens::Clock::BleConnectionStates::NotConnected);
break;
case Messages::UpdateBatteryLevel:
- clockScreen.SetBatteryPercentRemaining(batteryController.PercentRemaining());
+// clockScreen.SetBatteryPercentRemaining(batteryController.PercentRemaining());
break;
case Messages::TouchEvent:
if(state != States::Running) break;
OnTouchEvent();
break;
+ case Messages::ButtonPushed:
+ if(!currentScreen->OnButtonPushed()) {
+ systemTask.PushMessage(System::SystemTask::Messages::GoToSleep);
+ }
+// currentScreen.reset(nullptr);
+// if(toggle) {
+// modal.Show();
+//// currentScreen.reset(new Screens::Tile(this));
+// toggle = false;
+// } else {
+// modal.Hide();
+//// currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController));
+// toggle = true;
+// }
+
+ break;
}
}
}
void DisplayApp::RunningState() {
- clockScreen.SetCurrentDateTime(dateTimeController.CurrentDateTime());
-
- if(currentScreen != nullptr) {
- currentScreen->Refresh(false);
+// clockScreen.SetCurrentDateTime(dateTimeController.CurrentDateTime());
+
+ if(!currentScreen->Refresh()) {
+ currentScreen.reset(nullptr);
+ switch(nextApp) {
+ case Apps::None:
+ case Apps::Launcher: currentScreen.reset(new Screens::Tile(this)); break;
+ case Apps::Clock: currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController)); break;
+ case Apps::Test: currentScreen.reset(new Screens::Message(this)); break;
+ case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break;
+ case Apps::Gauge: currentScreen.reset(new Screens::Gauge(this)); break;
+ }
+ nextApp = Apps::None;
}
+ lv_task_handler();
}
void DisplayApp::IdleState() {
@@ -136,10 +170,14 @@ void DisplayApp::PushMessage(DisplayApp::Messages msg) {
static uint16_t pointColor = 0x07e0;
void DisplayApp::OnTouchEvent() {
- auto info = touchPanel.GetTouchInfo();
+// auto info = touchPanel.GetTouchInfo();
+//
+// if(info.isTouch) {
+// lcd.DrawPixel(info.x, info.y, pointColor);
+// pointColor+=10;
+// }
+}
- if(info.isTouch) {
- gfx.FillRectangle(info.x-10, info.y-10, 20,20, pointColor);
- pointColor+=10;
- }
+void DisplayApp::StartApp(DisplayApp::Apps app) {
+ nextApp = app;
}