aboutsummaryrefslogtreecommitdiffstats
path: root/src/displayapp
diff options
context:
space:
mode:
Diffstat (limited to 'src/displayapp')
-rw-r--r--src/displayapp/DisplayApp.cpp47
-rw-r--r--src/displayapp/DisplayApp.h2
-rw-r--r--src/displayapp/Messages.h1
-rw-r--r--src/displayapp/screens/settings/SettingDisplay.cpp1
4 files changed, 43 insertions, 8 deletions
diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp
index ccba7ee6..2aa828bb 100644
--- a/src/displayapp/DisplayApp.cpp
+++ b/src/displayapp/DisplayApp.cpp
@@ -155,6 +155,29 @@ void DisplayApp::Refresh() {
LoadScreen(returnAppStack.Pop(), returnDirection);
};
+ auto DimScreen = [this]() {
+ if (brightnessController.Level() != Controllers::BrightnessController::Levels::Off) {
+ isDimmed = true;
+ brightnessController.Set(Controllers::BrightnessController::Levels::Low);
+ }
+ };
+
+ auto RestoreBrightness = [this]() {
+ if (brightnessController.Level() != Controllers::BrightnessController::Levels::Off) {
+ isDimmed = false;
+ lv_disp_trig_activity(nullptr);
+ ApplyBrightness();
+ }
+ };
+
+ auto IsPastDimTime = [this]() -> bool {
+ return lv_disp_get_inactive_time(nullptr) >= pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000);
+ };
+
+ auto IsPastSleepTime = [this]() -> bool {
+ return lv_disp_get_inactive_time(nullptr) >= pdMS_TO_TICKS(settingsController.GetScreenTimeOut());
+ };
+
TickType_t queueTimeout;
switch (state) {
case States::Idle:
@@ -165,6 +188,18 @@ void DisplayApp::Refresh() {
LoadPreviousScreen();
}
queueTimeout = lv_task_handler();
+
+ if (!systemTask->IsSleepDisabled() && IsPastDimTime()) {
+ if (!isDimmed) {
+ DimScreen();
+ }
+ if (IsPastSleepTime()) {
+ systemTask->PushMessage(System::Messages::GoToSleep);
+ state = States::Idle;
+ }
+ } else if (isDimmed) {
+ RestoreBrightness();
+ }
break;
default:
queueTimeout = portMAX_DELAY;
@@ -175,10 +210,10 @@ void DisplayApp::Refresh() {
if (xQueueReceive(msgQueue, &msg, queueTimeout) == pdTRUE) {
switch (msg) {
case Messages::DimScreen:
- brightnessController.Set(Controllers::BrightnessController::Levels::Low);
+ DimScreen();
break;
case Messages::RestoreBrightness:
- ApplyBrightness();
+ RestoreBrightness();
break;
case Messages::GoToSleep:
while (brightnessController.Level() != Controllers::BrightnessController::Levels::Off) {
@@ -191,12 +226,10 @@ void DisplayApp::Refresh() {
break;
case Messages::GoToRunning:
lcd.Wakeup();
+ lv_disp_trig_activity(nullptr);
ApplyBrightness();
state = States::Running;
break;
- case Messages::UpdateTimeOut:
- PushMessageToSystemTask(System::Messages::UpdateTimeOut);
- break;
case Messages::UpdateBleConnection:
// clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected :
// Screens::Clock::BleConnectionStates::NotConnected);
@@ -206,6 +239,7 @@ void DisplayApp::Refresh() {
break;
case Messages::TimerDone:
if (currentApp == Apps::Timer) {
+ lv_disp_trig_activity(nullptr);
auto* timer = static_cast<Screens::Timer*>(currentScreen.get());
timer->Reset();
} else {
@@ -319,6 +353,7 @@ void DisplayApp::Refresh() {
motorController.RunForDuration(35);
break;
case Messages::OnChargingEvent:
+ RestoreBrightness();
motorController.RunForDuration(15);
break;
}
@@ -352,7 +387,7 @@ void DisplayApp::LoadNewScreen(Apps app, DisplayApp::FullRefreshDirections direc
void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections direction) {
lvgl.CancelTap();
- ApplyBrightness();
+ lv_disp_trig_activity(nullptr);
motorController.StopRinging();
currentScreen.reset(nullptr);
diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h
index 09111865..58df99c0 100644
--- a/src/displayapp/DisplayApp.h
+++ b/src/displayapp/DisplayApp.h
@@ -128,6 +128,8 @@ namespace Pinetime {
static constexpr size_t returnAppStackSize = 10;
StaticStack<Apps, returnAppStackSize> returnAppStack;
StaticStack<FullRefreshDirections, returnAppStackSize> appStackDirections;
+
+ bool isDimmed = false;
};
}
}
diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h
index b670b1aa..dada3088 100644
--- a/src/displayapp/Messages.h
+++ b/src/displayapp/Messages.h
@@ -17,7 +17,6 @@ namespace Pinetime {
NewNotification,
TimerDone,
BleFirmwareUpdateStarted,
- UpdateTimeOut,
DimScreen,
RestoreBrightness,
ShowPairingKey,
diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp
index a9476432..91f4d590 100644
--- a/src/displayapp/screens/settings/SettingDisplay.cpp
+++ b/src/displayapp/screens/settings/SettingDisplay.cpp
@@ -69,7 +69,6 @@ void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
if (object == cbOption[i]) {
lv_checkbox_set_checked(cbOption[i], true);
settingsController.SetScreenTimeOut(options[i]);
- app->PushMessage(Applications::Display::Messages::UpdateTimeOut);
} else {
lv_checkbox_set_checked(cbOption[i], false);
}