diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-04-12 03:11:16 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-04-12 03:11:16 (GMT) |
| commit | 502dfad3d3dd062b37722ea65ec42908139b2e17 (patch) | |
| tree | 334dbd66e0e074a5d8f47423702d3e0cd2fa1731 | |
| parent | adc82f138237b17797f695aa6e272188ccb3fb15 (diff) | |
Fixed screen brightness, no sleep or wake up
21 files changed, 10 insertions, 755 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0f5ff2b..292e2c1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -390,7 +390,6 @@ list(APPEND SOURCE_FILES displayapp/screens/BatteryIcon.cpp displayapp/screens/BleIcon.cpp displayapp/screens/NotificationIcon.cpp - displayapp/screens/Brightness.cpp displayapp/screens/Label.cpp displayapp/screens/FirmwareUpdate.cpp displayapp/screens/FirmwareValidation.cpp @@ -405,7 +404,6 @@ list(APPEND SOURCE_FILES displayapp/screens/settings/QuickSettings.cpp displayapp/screens/settings/Settings.cpp displayapp/screens/settings/SettingTimeFormat.cpp - displayapp/screens/settings/SettingWakeUp.cpp displayapp/screens/settings/SettingDisplay.cpp ## Watch faces @@ -548,7 +546,6 @@ set(INCLUDE_FILES displayapp/screens/BatteryIcon.h displayapp/screens/BleIcon.h displayapp/screens/NotificationIcon.h - displayapp/screens/Brightness.h displayapp/screens/ScreenList.h displayapp/screens/Label.h displayapp/screens/FirmwareUpdate.h diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index cf99f01..51e9e5d 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -122,11 +122,6 @@ int DfuService::WritePacketHandler(uint16_t connectionHandle, os_mbuf* om) { NRF_LOG_INFO( "[DFU] -> Start data received : SD size : %d, BT size : %d, app size : %d", softdeviceSize, bootloaderSize, applicationSize); - // wait until SystemTask has finished waking up all devices - while (systemTask.IsSleeping()) { - vTaskDelay(50); // 50ms - } - dfuImage.Erase(); uint8_t data[] {16, 1, 1}; diff --git a/src/components/brightness/BrightnessController.cpp b/src/components/brightness/BrightnessController.cpp index 2d9f980..29de5bb 100644 --- a/src/components/brightness/BrightnessController.cpp +++ b/src/components/brightness/BrightnessController.cpp @@ -8,119 +8,8 @@ void BrightnessController::Init() { nrf_gpio_cfg_output(PinMap::LcdBacklightLow); nrf_gpio_cfg_output(PinMap::LcdBacklightMedium); nrf_gpio_cfg_output(PinMap::LcdBacklightHigh); - Set(level); + nrf_gpio_pin_clear(PinMap::LcdBacklightLow); + nrf_gpio_pin_set(PinMap::LcdBacklightMedium); + nrf_gpio_pin_set(PinMap::LcdBacklightHigh); } -void BrightnessController::Set(BrightnessController::Levels level) { - this->level = level; - switch (level) { - default: - case Levels::High: - nrf_gpio_pin_clear(PinMap::LcdBacklightLow); - nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); - nrf_gpio_pin_clear(PinMap::LcdBacklightHigh); - break; - case Levels::Medium: - nrf_gpio_pin_clear(PinMap::LcdBacklightLow); - nrf_gpio_pin_clear(PinMap::LcdBacklightMedium); - nrf_gpio_pin_set(PinMap::LcdBacklightHigh); - break; - case Levels::Low: - nrf_gpio_pin_clear(PinMap::LcdBacklightLow); - nrf_gpio_pin_set(PinMap::LcdBacklightMedium); - nrf_gpio_pin_set(PinMap::LcdBacklightHigh); - break; - case Levels::Off: - nrf_gpio_pin_set(PinMap::LcdBacklightLow); - nrf_gpio_pin_set(PinMap::LcdBacklightMedium); - nrf_gpio_pin_set(PinMap::LcdBacklightHigh); - break; - } -} - -void BrightnessController::Lower() { - switch (level) { - case Levels::High: - Set(Levels::Medium); - break; - case Levels::Medium: - Set(Levels::Low); - break; - case Levels::Low: - Set(Levels::Off); - break; - default: - break; - } -} - -void BrightnessController::Higher() { - switch (level) { - case Levels::Off: - Set(Levels::Low); - break; - case Levels::Low: - Set(Levels::Medium); - break; - case Levels::Medium: - Set(Levels::High); - break; - default: - break; - } -} - -BrightnessController::Levels BrightnessController::Level() const { - return level; -} - -void BrightnessController::Backup() { - backupLevel = level; -} - -void BrightnessController::Restore() { - Set(backupLevel); -} - -void BrightnessController::Step() { - switch (level) { - case Levels::Low: - Set(Levels::Medium); - break; - case Levels::Medium: - Set(Levels::High); - break; - case Levels::High: - Set(Levels::Low); - break; - default: - break; - } -} - -const char* BrightnessController::GetIcon() { - switch (level) { - case Levels::Medium: - return Applications::Screens::Symbols::brightnessMedium; - case Levels::High: - return Applications::Screens::Symbols::brightnessHigh; - default: - break; - } - return Applications::Screens::Symbols::brightnessLow; -} - -const char* BrightnessController::ToString() { - switch (level) { - case Levels::Off: - return "Off"; - case Levels::Low: - return "Low"; - case Levels::Medium: - return "Medium"; - case Levels::High: - return "High"; - default: - return "???"; - } -}
\ No newline at end of file diff --git a/src/components/brightness/BrightnessController.h b/src/components/brightness/BrightnessController.h index 0d7ac2f..31ef40a 100644 --- a/src/components/brightness/BrightnessController.h +++ b/src/components/brightness/BrightnessController.h @@ -6,24 +6,7 @@ namespace Pinetime { namespace Controllers { class BrightnessController { public: - enum class Levels { Off, Low, Medium, High }; void Init(); - - void Set(Levels level); - Levels Level() const; - void Lower(); - void Higher(); - void Step(); - - void Backup(); - void Restore(); - - const char* GetIcon(); - const char* ToString(); - - private: - Levels level = Levels::High; - Levels backupLevel = Levels::High; }; } } diff --git a/src/components/motion/MotionController.cpp b/src/components/motion/MotionController.cpp index 0404e3f..6ddb876 100644 --- a/src/components/motion/MotionController.cpp +++ b/src/components/motion/MotionController.cpp @@ -8,29 +8,6 @@ void MotionController::Update(int16_t x, int16_t y, int16_t z) { this->z = z; } -bool MotionController::Should_RaiseWake(bool isSleeping) { - if ((x + 335) <= 670 && z < 0) { - if (not isSleeping) { - if (y <= 0) { - return false; - } else { - lastYForWakeUp = 0; - return false; - } - } - - if (y >= 0) { - lastYForWakeUp = 0; - return false; - } - if (y + 230 < lastYForWakeUp) { - lastYForWakeUp = y; - return true; - } - } - return false; -} - void MotionController::IsSensorOk(bool isOk) { isSensorOk = isOk; } diff --git a/src/components/motion/MotionController.h b/src/components/motion/MotionController.h index a56991a..8802412 100644 --- a/src/components/motion/MotionController.h +++ b/src/components/motion/MotionController.h @@ -25,7 +25,6 @@ namespace Pinetime { return z; } - bool Should_RaiseWake(bool isSleeping); void IsSensorOk(bool isOk); bool IsSensorOk() const { return isSensorOk; @@ -41,7 +40,6 @@ namespace Pinetime { int16_t x; int16_t y; int16_t z; - int16_t lastYForWakeUp = 0; bool isSensorOk = false; DeviceTypes deviceType = DeviceTypes::Unknown; diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 5201b77..7842664 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -1,7 +1,6 @@ #pragma once #include <cstdint> #include <bitset> -#include "components/brightness/BrightnessController.h" namespace Pinetime { namespace Controllers { @@ -9,11 +8,6 @@ namespace Pinetime { public: enum class ClockType : uint8_t { H24, H12 }; enum class Notification : uint8_t { ON, OFF }; - enum class WakeUpMode : uint8_t { - SingleTap = 0, - DoubleTap = 1, - RaiseWrist = 2, - }; enum class Colors : uint8_t { White, Silver, @@ -95,47 +89,8 @@ namespace Pinetime { return settings.screenTimeOut; }; - void setWakeUpMode(WakeUpMode wakeUp, bool enabled) { - if (enabled != isWakeUpModeOn(wakeUp)) { - settingsChanged = true; - } - settings.wakeUpMode.set(static_cast<size_t>(wakeUp), enabled); - // Handle special behavior - if (enabled) { - switch (wakeUp) { - case WakeUpMode::SingleTap: - settings.wakeUpMode.set(static_cast<size_t>(WakeUpMode::DoubleTap), false); - break; - case WakeUpMode::DoubleTap: - settings.wakeUpMode.set(static_cast<size_t>(WakeUpMode::SingleTap), false); - break; - default: - break; - } - } - }; - - std::bitset<4> getWakeUpModes() const { - return settings.wakeUpMode; - } - - bool isWakeUpModeOn(const WakeUpMode mode) const { - return getWakeUpModes()[static_cast<size_t>(mode)]; - } - - void SetBrightness(Controllers::BrightnessController::Levels level) { - if (level != settings.brightLevel) { - settingsChanged = true; - } - settings.brightLevel = level; - }; - - Controllers::BrightnessController::Levels GetBrightness() const { - return settings.brightLevel; - }; - private: - static constexpr uint32_t settingsVersion = 0x4021; // infinitime redux settings + static constexpr uint32_t settingsVersion = 0x4121; // infinitime redux settings struct SettingsData { uint32_t version = settingsVersion; uint32_t screenTimeOut = 15000; @@ -146,7 +101,6 @@ namespace Pinetime { uint8_t clockFace = 0; std::bitset<4> wakeUpMode {0}; - Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; }; SettingsData settings; diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index c308c75..663d9f4 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -14,7 +14,6 @@ namespace Pinetime { Settings, SettingTimeFormat, SettingDisplay, - SettingWakeUp, Error }; } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 574f964..a03f4cf 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -7,7 +7,6 @@ #include "components/motion/MotionController.h" #include "components/motor/MotorController.h" #include "displayapp/screens/ApplicationList.h" -#include "displayapp/screens/Brightness.h" #include "displayapp/screens/Clock.h" #include "displayapp/screens/FirmwareUpdate.h" #include "displayapp/screens/FirmwareValidation.h" @@ -24,7 +23,6 @@ #include "displayapp/screens/settings/QuickSettings.h" #include "displayapp/screens/settings/Settings.h" #include "displayapp/screens/settings/SettingTimeFormat.h" -#include "displayapp/screens/settings/SettingWakeUp.h" #include "displayapp/screens/settings/SettingDisplay.h" #include "libs/lv_conf.h" @@ -119,7 +117,6 @@ void DisplayApp::Process(void* instance) { void DisplayApp::InitHw() { brightnessController.Init(); - brightnessController.Set(settingsController.GetBrightness()); } void DisplayApp::Refresh() { @@ -142,28 +139,6 @@ void DisplayApp::Refresh() { Messages msg; if (xQueueReceive(msgQueue, &msg, queueTimeout)) { switch (msg) { - case Messages::DimScreen: - // Backup brightness is the brightness to return to after dimming or sleeping - brightnessController.Backup(); - brightnessController.Set(Controllers::BrightnessController::Levels::Low); - break; - case Messages::RestoreBrightness: - brightnessController.Restore(); - break; - case Messages::GoToSleep: - while (brightnessController.Level() != Controllers::BrightnessController::Levels::Off) { - brightnessController.Lower(); - vTaskDelay(100); - } - lcd.DisplayOff(); - PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping); - state = States::Idle; - break; - case Messages::GoToRunning: - lcd.DisplayOn(); - brightnessController.Restore(); - state = States::Running; - break; case Messages::UpdateTimeOut: PushMessageToSystemTask(System::Messages::UpdateTimeOut); break; @@ -194,16 +169,11 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeRight: LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); break; - case TouchEvents::DoubleTap: - PushMessageToSystemTask(System::Messages::GoToSleep); - break; default: break; } } else if (returnTouchEvent == gesture) { LoadApp(returnToApp, returnDirection); - brightnessController.Set(settingsController.GetBrightness()); - brightnessController.Backup(); } } else { touchHandler.CancelTap(); @@ -211,12 +181,8 @@ void DisplayApp::Refresh() { } break; case Messages::ButtonPushed: if (!currentScreen->OnButtonPushed()) { - if (currentApp == Apps::Clock) { - PushMessageToSystemTask(System::Messages::GoToSleep); - } else { + if (currentApp != Apps::Clock) { LoadApp(returnToApp, returnDirection); - brightnessController.Set(settingsController.GetBrightness()); - brightnessController.Backup(); } } break; @@ -325,7 +291,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) // Settings case Apps::QuickSettings: currentScreen = std::make_unique<Screens::QuickSettings>( - this, batteryController, dateTimeController, brightnessController, motorController, settingsController); + this, batteryController, dateTimeController, motorController, settingsController); ReturnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); break; case Apps::Settings: @@ -336,10 +302,6 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique<Screens::SettingTimeFormat>(this, settingsController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; - case Apps::SettingWakeUp: - currentScreen = std::make_unique<Screens::SettingWakeUp>(this, settingsController); - ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); - break; case Apps::SettingDisplay: currentScreen = std::make_unique<Screens::SettingDisplay>(this, settingsController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index c27c5e5..c6d9dd6 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -4,8 +4,6 @@ namespace Pinetime { namespace Applications { namespace Display { enum class Messages : uint8_t { - GoToSleep, - GoToRunning, UpdateDateTime, UpdateBleConnection, TouchEvent, @@ -16,8 +14,6 @@ namespace Pinetime { NewNotification, BleFirmwareUpdateStarted, UpdateTimeOut, - DimScreen, - RestoreBrightness, Clock, }; } diff --git a/src/displayapp/screens/Brightness.cpp b/src/displayapp/screens/Brightness.cpp deleted file mode 100644 index d9901ae..0000000 --- a/src/displayapp/screens/Brightness.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "displayapp/screens/Brightness.h" -#include <lvgl/lvgl.h> - -using namespace Pinetime::Applications::Screens; - -void slider_event_cb(lv_obj_t* slider, lv_event_t event) { - if (event == LV_EVENT_VALUE_CHANGED) { - auto* brightnessSlider = static_cast<Brightness*>(slider->user_data); - brightnessSlider->OnValueChanged(); - } -} - -Brightness::Brightness(Pinetime::Applications::DisplayApp* app, Controllers::BrightnessController& brightness) - : Screen(app), brightness {brightness} { - slider = lv_slider_create(lv_scr_act(), nullptr); - lv_obj_set_user_data(slider, this); - lv_obj_set_width(slider, LV_DPI * 2); - lv_obj_align(slider, nullptr, LV_ALIGN_CENTER, 0, 0); - lv_obj_set_event_cb(slider, slider_event_cb); - lv_slider_set_range(slider, 0, 2); - lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF); - - slider_label = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(slider_label, LevelToString(brightness.Level())); - lv_obj_set_auto_realign(slider_label, true); - lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 30); -} - -Brightness::~Brightness() { - lv_obj_clean(lv_scr_act()); -} - -const char* Brightness::LevelToString(Pinetime::Controllers::BrightnessController::Levels level) { - switch (level) { - case Pinetime::Controllers::BrightnessController::Levels::Off: - return "Off"; - case Pinetime::Controllers::BrightnessController::Levels::Low: - return "Low"; - case Pinetime::Controllers::BrightnessController::Levels::Medium: - return "Medium"; - case Pinetime::Controllers::BrightnessController::Levels::High: - return "High"; - default: - return "???"; - } -} - -void Brightness::OnValueChanged() { - SetValue(lv_slider_get_value(slider)); -} - -void Brightness::SetValue(uint8_t value) { - switch (value) { - case 0: - brightness.Set(Controllers::BrightnessController::Levels::Low); - break; - case 1: - brightness.Set(Controllers::BrightnessController::Levels::Medium); - break; - case 2: - brightness.Set(Controllers::BrightnessController::Levels::High); - break; - } - lv_label_set_text(slider_label, LevelToString(brightness.Level())); -} - -uint8_t Brightness::LevelToInt(Pinetime::Controllers::BrightnessController::Levels level) { - switch (level) { - case Pinetime::Controllers::BrightnessController::Levels::Off: - return 0; - case Pinetime::Controllers::BrightnessController::Levels::Low: - return 0; - case Pinetime::Controllers::BrightnessController::Levels::Medium: - return 1; - case Pinetime::Controllers::BrightnessController::Levels::High: - return 2; - default: - return 0; - } -} - -bool Brightness::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - switch (event) { - case TouchEvents::SwipeLeft: - brightness.Lower(); - if (brightness.Level() == Pinetime::Controllers::BrightnessController::Levels::Off) { - brightness.Set(Controllers::BrightnessController::Levels::Low); - } - SetValue(); - return true; - case TouchEvents::SwipeRight: - brightness.Higher(); - SetValue(); - return true; - default: - return false; - } -} - -void Brightness::SetValue() { - lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF); - lv_label_set_text(slider_label, LevelToString(brightness.Level())); -} diff --git a/src/displayapp/screens/Brightness.h b/src/displayapp/screens/Brightness.h deleted file mode 100644 index 693570c..0000000 --- a/src/displayapp/screens/Brightness.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include <lvgl/src/lv_core/lv_obj.h> -#include <cstdint> -#include "displayapp/screens/Screen.h" -#include "components/brightness/BrightnessController.h" - -namespace Pinetime { - namespace Applications { - namespace Screens { - class Brightness : public Screen { - public: - Brightness(DisplayApp* app, Controllers::BrightnessController& brightness); - ~Brightness() override; - - bool OnTouchEvent(TouchEvents event) override; - - void OnValueChanged(); - - private: - Controllers::BrightnessController& brightness; - - lv_obj_t* slider_label; - lv_obj_t* slider; - - const char* LevelToString(Controllers::BrightnessController::Levels level); - uint8_t LevelToInt(Controllers::BrightnessController::Levels level); - void SetValue(uint8_t value); - void SetValue(); - }; - } - } -} diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 7cbfec8..81ee234 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -42,7 +42,6 @@ Notifications::Notifications(DisplayApp* app, } if (mode == Modes::Preview) { - systemTask.PushMessage(System::Messages::DisableSleeping); if (notification.category == Controllers::NotificationManager::Categories::IncomingCall) { motorController.StartRinging(); } else { @@ -67,7 +66,6 @@ Notifications::~Notifications() { lv_task_del(taskRefresh); // make sure we stop any vibrations before exiting motorController.StopRinging(); - systemTask.PushMessage(System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); } @@ -86,7 +84,6 @@ void Notifications::Refresh() { } void Notifications::OnPreviewInteraction() { - systemTask.PushMessage(System::Messages::EnableSleeping); motorController.StopRinging(); if (timeoutLine != nullptr) { lv_obj_del(timeoutLine); diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 47f4ca5..9919aec 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -20,13 +20,11 @@ namespace { QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController, - Controllers::BrightnessController& brightness, Controllers::MotorController& motorController, Pinetime::Controllers::Settings& settingsController) : Screen(app), batteryController {batteryController}, dateTimeController {dateTimeController}, - brightness {brightness}, motorController {motorController}, settingsController {settingsController} { @@ -61,7 +59,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_align(btn1, nullptr, LV_ALIGN_IN_TOP_LEFT, buttonXOffset, barHeight); btn1_lvl = lv_label_create(btn1, nullptr); - lv_label_set_text_static(btn1_lvl, brightness.GetIcon()); + lv_label_set_text_static(btn1_lvl, "-"); btn2 = lv_btn_create(lv_scr_act(), nullptr); btn2->user_data = this; @@ -127,10 +125,6 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { if (object == btn2 && event == LV_EVENT_CLICKED) { } else if (object == btn1 && event == LV_EVENT_CLICKED) { - brightness.Step(); - lv_label_set_text_static(btn1_lvl, brightness.GetIcon()); - settingsController.SetBrightness(brightness.Level()); - } else if (object == btn3 && event == LV_EVENT_VALUE_CHANGED) { if (lv_obj_get_state(btn3, LV_BTN_PART_MAIN) & LV_STATE_CHECKED) { diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index 7913898..8b47648 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -4,7 +4,6 @@ #include "displayapp/screens/Screen.h" #include <lvgl/lvgl.h> #include "components/datetime/DateTimeController.h" -#include "components/brightness/BrightnessController.h" #include "components/motor/MotorController.h" #include "components/settings/Settings.h" #include "components/battery/BatteryController.h" @@ -19,7 +18,6 @@ namespace Pinetime { QuickSettings(DisplayApp* app, Pinetime::Controllers::Battery& batteryController, Controllers::DateTime& dateTimeController, - Controllers::BrightnessController& brightness, Controllers::MotorController& motorController, Pinetime::Controllers::Settings& settingsController); @@ -32,7 +30,6 @@ namespace Pinetime { private: Pinetime::Controllers::Battery& batteryController; Controllers::DateTime& dateTimeController; - Controllers::BrightnessController& brightness; Controllers::MotorController& motorController; Controllers::Settings& settingsController; diff --git a/src/displayapp/screens/settings/SettingWakeUp.cpp b/src/displayapp/screens/settings/SettingWakeUp.cpp deleted file mode 100644 index 8339d9a..0000000 --- a/src/displayapp/screens/settings/SettingWakeUp.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "displayapp/screens/settings/SettingWakeUp.h" -#include <lvgl/lvgl.h> -#include "displayapp/DisplayApp.h" -#include "displayapp/screens/Screen.h" -#include "displayapp/screens/Symbols.h" -#include "components/settings/Settings.h" - -using namespace Pinetime::Applications::Screens; - -namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingWakeUp* screen = static_cast<SettingWakeUp*>(obj->user_data); - screen->UpdateSelected(obj, event); - } -} - -SettingWakeUp::SettingWakeUp(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) - : Screen(app), settingsController {settingsController} { - ignoringEvents = false; - lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); - - lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); - lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); - lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); - - lv_obj_set_pos(container1, 10, 60); - lv_obj_set_width(container1, LV_HOR_RES - 20); - lv_obj_set_height(container1, LV_VER_RES - 50); - lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); - - lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(title, "Wake Up"); - lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); - lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); - - lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - lv_label_set_text_static(icon, Symbols::eye); - lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); - lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); - - optionsTotal = 0; - cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); - lv_checkbox_set_text_static(cbOption[optionsTotal], " Single Tap"); - cbOption[optionsTotal]->user_data = this; - lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)) { - lv_checkbox_set_checked(cbOption[optionsTotal], true); - } - optionsTotal++; - cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); - lv_checkbox_set_text_static(cbOption[optionsTotal], " Double Tap"); - cbOption[optionsTotal]->user_data = this; - lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { - lv_checkbox_set_checked(cbOption[optionsTotal], true); - } - optionsTotal++; - cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); - lv_checkbox_set_text_static(cbOption[optionsTotal], " Raise Wrist"); - cbOption[optionsTotal]->user_data = this; - lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); - if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist)) { - lv_checkbox_set_checked(cbOption[optionsTotal], true); - } - optionsTotal++; -} - -SettingWakeUp::~SettingWakeUp() { - lv_obj_clean(lv_scr_act()); - settingsController.SaveSettings(); -} - -void SettingWakeUp::UpdateSelected(lv_obj_t* object, lv_event_t event) { - using WakeUpMode = Pinetime::Controllers::Settings::WakeUpMode; - if (event == LV_EVENT_VALUE_CHANGED && !ignoringEvents) { - ignoringEvents = true; - - // Find the index of the checkbox that triggered the event - int index = 0; - for (; index < optionsTotal; ++index) { - if (cbOption[index] == object) { - break; - } - } - - // Toggle needed wakeup mode - auto mode = static_cast<WakeUpMode>(index); - auto currentState = settingsController.isWakeUpModeOn(mode); - settingsController.setWakeUpMode(mode, !currentState); - - // Update checkbox according to current wakeup modes. - // This is needed because we can have extra logic when setting or unsetting wakeup modes, - // for example, when setting SingleTap, DoubleTap is unset and vice versa. - auto modes = settingsController.getWakeUpModes(); - for (int i = 0; i < optionsTotal; ++i) { - lv_checkbox_set_checked(cbOption[i], modes[i]); - } - - ignoringEvents = false; - } -} diff --git a/src/displayapp/screens/settings/SettingWakeUp.h b/src/displayapp/screens/settings/SettingWakeUp.h deleted file mode 100644 index cd244ae..0000000 --- a/src/displayapp/screens/settings/SettingWakeUp.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include <cstdint> -#include <lvgl/lvgl.h> -#include "components/settings/Settings.h" -#include "displayapp/screens/Screen.h" - -namespace Pinetime { - - namespace Applications { - namespace Screens { - - class SettingWakeUp : public Screen { - public: - SettingWakeUp(DisplayApp* app, Pinetime::Controllers::Settings& settingsController); - ~SettingWakeUp() override; - - void UpdateSelected(lv_obj_t* object, lv_event_t event); - - private: - Controllers::Settings& settingsController; - uint8_t optionsTotal; - lv_obj_t* cbOption[5]; - // When UpdateSelected is called, it uses lv_checkbox_set_checked, - // which can cause extra events to be fired, - // which might trigger UpdateSelected again, causing a loop. - // This variable is used as a mutex to prevent that. - bool ignoringEvents; - }; - } - } -} diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index 3d257ae..22666a8 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -35,8 +35,8 @@ bool Settings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { std::unique_ptr<Screen> Settings::CreateScreen1() { std::array<Screens::List::Applications, 4> applications {{ {Symbols::sun, "Display", Apps::SettingDisplay}, - {Symbols::eye, "Wake Up", Apps::SettingWakeUp}, {Symbols::clock, "Time format", Apps::SettingTimeFormat}, + {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None} }}; diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 0792089..38a9c8e 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -3,9 +3,6 @@ namespace Pinetime { namespace System { enum class Messages { - GoToSleep, - GoToRunning, - TouchWakeUp, OnNewTime, OnNewNotification, OnNewCall, @@ -16,9 +13,6 @@ namespace Pinetime { OnTouchEvent, HandleButtonEvent, HandleButtonTimerEvent, - OnDisplayTaskSleeping, - EnableSleeping, - DisableSleeping, OnNewDay, OnChargingEvent, StopRinging, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index c121808..c333aad 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -28,20 +28,6 @@ namespace { } } -void DimTimerCallback(TimerHandle_t xTimer) { - - NRF_LOG_INFO("DimTimerCallback"); - auto sysTask = static_cast<SystemTask*>(pvTimerGetTimerID(xTimer)); - sysTask->OnDim(); -} - -void IdleTimerCallback(TimerHandle_t xTimer) { - - NRF_LOG_INFO("IdleTimerCallback"); - auto sysTask = static_cast<SystemTask*>(pvTimerGetTimerID(xTimer)); - sysTask->OnIdle(); -} - void MeasureBatteryTimerCallback(TimerHandle_t xTimer) { auto* sysTask = static_cast<SystemTask*>(pvTimerGetTimerID(xTimer)); sysTask->PushMessage(Pinetime::System::Messages::MeasureBatteryTimerExpired); @@ -185,10 +171,7 @@ void SystemTask::Work() { batteryController.MeasureVoltage(); - idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(2000), pdFALSE, this, IdleTimerCallback); - dimTimer = xTimerCreate("dimTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000), pdFALSE, this, DimTimerCallback); measureBatteryTimer = xTimerCreate("measureBattery", batteryMeasurementPeriod, pdTRUE, this, MeasureBatteryTimerCallback); - xTimerStart(dimTimer, 0); xTimerStart(measureBatteryTimer, portMAX_DELAY); #pragma clang diagnostic push @@ -200,75 +183,13 @@ void SystemTask::Work() { if (xQueueReceive(systemTasksMsgQueue, &msg, 100)) { Messages message = static_cast<Messages>(msg); switch (message) { - case Messages::EnableSleeping: - // Make sure that exiting an app doesn't enable sleeping, - // if the exiting was caused by a firmware update - if (!bleController.IsFirmwareUpdating()) { - doNotGoToSleep = false; - } - ReloadIdleTimer(); - break; - case Messages::DisableSleeping: - doNotGoToSleep = true; - break; case Messages::UpdateTimeOut: - xTimerChangePeriod(dimTimer, pdMS_TO_TICKS(settingsController.GetScreenTimeOut() - 2000), 0); - break; - case Messages::GoToRunning: - spi.Wakeup(); - - // Double Tap needs the touch screen to be in normal mode - if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { - touchPanel.Wakeup(); - } - - xTimerStart(dimTimer, 0); - spiNorFlash.Wakeup(); - lcd.Wakeup(); - - displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); - - if (!bleController.IsConnected()) { - nimbleController.RestartFastAdv(); - } - - isSleeping = false; - isWakingUp = false; - isDimmed = false; - break; - case Messages::TouchWakeUp: { - if (touchHandler.GetNewTouchInfo()) { - auto gesture = touchHandler.GestureGet(); - if (gesture != Pinetime::Drivers::Cst816S::Gestures::None and - ((gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or - (gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { - GoToRunning(); - } - } - } break; - case Messages::GoToSleep: - if (doNotGoToSleep) { - break; - } - isGoingToSleep = true; - NRF_LOG_INFO("[systemtask] Going to sleep"); - xTimerStop(idleTimer, 0); - xTimerStop(dimTimer, 0); - displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); break; case Messages::OnNewTime: - ReloadIdleTimer(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); break; case Messages::OnNewNotification: if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { - if (isSleeping && !isWakingUp) { - GoToRunning(); - } else { - ReloadIdleTimer(); - } displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification); } break; @@ -276,29 +197,21 @@ void SystemTask::Work() { motorController.StopRinging(); break; case Messages::BleConnected: - ReloadIdleTimer(); isBleDiscoveryTimerRunning = true; bleDiscoveryTimer = 5; break; case Messages::BleFirmwareUpdateStarted: - doNotGoToSleep = true; - if (isSleeping && !isWakingUp) { - GoToRunning(); - } displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); break; case Messages::BleFirmwareUpdateFinished: if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) { NVIC_SystemReset(); } - doNotGoToSleep = false; - xTimerStart(dimTimer, 0); break; case Messages::OnTouchEvent: if (touchHandler.GetNewTouchInfo()) { touchHandler.UpdateLvglTouchPoint(); } - ReloadIdleTimer(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); break; case Messages::HandleButtonEvent: { @@ -307,12 +220,6 @@ void SystemTask::Work() { action = buttonHandler.HandleEvent(Controllers::ButtonHandler::Events::Release); } else { action = buttonHandler.HandleEvent(Controllers::ButtonHandler::Events::Press); - // This is for faster wakeup, sacrificing special longpress and doubleclick handling while sleeping - if (IsSleeping()) { - fastWakeUpDone = true; - GoToRunning(); - break; - } } HandleButtonAction(action); } break; @@ -320,23 +227,6 @@ void SystemTask::Work() { auto action = buttonHandler.HandleEvent(Controllers::ButtonHandler::Events::Timer); HandleButtonAction(action); } break; - case Messages::OnDisplayTaskSleeping: - if (BootloaderVersion::IsValid()) { - // First versions of the bootloader do not expose their version and cannot initialize the SPI NOR FLASH - // if it's in sleep mode. Avoid bricked device by disabling sleep mode on these versions. - spiNorFlash.Sleep(); - } - lcd.Sleep(); - spi.Sleep(); - - // Double Tap needs the touch screen to be in normal mode - if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { - touchPanel.Sleep(); - } - - isSleeping = true; - isGoingToSleep = false; - break; case Messages::OnNewDay: // We might be sleeping (with TWI device disabled. // Remember we'll have to reset the counter next time we're awake @@ -345,10 +235,6 @@ void SystemTask::Work() { case Messages::OnChargingEvent: batteryController.ReadPowerState(); motorController.RunForDuration(15); - ReloadIdleTimer(); - if (isSleeping && !isWakingUp) { - GoToRunning(); - } break; case Messages::MeasureBatteryTimerExpired: batteryController.MeasureVoltage(); @@ -383,14 +269,6 @@ void SystemTask::Work() { } void SystemTask::UpdateMotion() { - if (isGoingToSleep or isWakingUp) { - return; - } - - if (isSleeping && !settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist)) { - // Could we use here the accelerometer's low energy tilt-to-wake function? - return; - } if (stepCounterMustBeReset) { motionSensor.ResetStepCounter(); stepCounterMustBeReset = false; @@ -401,27 +279,14 @@ void SystemTask::UpdateMotion() { motionController.IsSensorOk(motionSensor.IsOk()); motionController.Update(motionValues.x, motionValues.y, motionValues.z); - if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) && - motionController.Should_RaiseWake(isSleeping)) { - GoToRunning(); - } } void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { - if (IsSleeping()) { - return; - } - - ReloadIdleTimer(); - using Actions = Controllers::ButtonActions; switch (action) { case Actions::Click: - // If the first action after fast wakeup is a click, it should be ignored. - if (!fastWakeUpDone && !isGoingToSleep) { - displayApp.PushMessage(Applications::Display::Messages::ButtonPushed); - } + displayApp.PushMessage(Applications::Display::Messages::ButtonPushed); break; case Actions::DoubleClick: displayApp.PushMessage(Applications::Display::Messages::ButtonDoubleClicked); @@ -435,37 +300,13 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { default: return; } - - fastWakeUpDone = false; -} - -void SystemTask::GoToRunning() { - if (isGoingToSleep or (not isSleeping) or isWakingUp) { - return; - } - isWakingUp = true; - PushMessage(Messages::GoToRunning); } void SystemTask::OnTouchEvent() { - if (isGoingToSleep) { - return; - } - if (!isSleeping) { - PushMessage(Messages::OnTouchEvent); - } else if (!isWakingUp) { - if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { - PushMessage(Messages::TouchWakeUp); - } - } + PushMessage(Messages::OnTouchEvent); } void SystemTask::PushMessage(System::Messages msg) { - if (msg == Messages::GoToSleep && !doNotGoToSleep) { - isGoingToSleep = true; - } - if (in_isr()) { BaseType_t xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE; @@ -478,33 +319,3 @@ void SystemTask::PushMessage(System::Messages msg) { xQueueSend(systemTasksMsgQueue, &msg, portMAX_DELAY); } } - -void SystemTask::OnDim() { - if (doNotGoToSleep) { - return; - } - NRF_LOG_INFO("Dim timeout -> Dim screen") - displayApp.PushMessage(Pinetime::Applications::Display::Messages::DimScreen); - xTimerStart(idleTimer, 0); - isDimmed = true; -} - -void SystemTask::OnIdle() { - if (doNotGoToSleep) { - return; - } - NRF_LOG_INFO("Idle timeout -> Going to sleep") - PushMessage(Messages::GoToSleep); -} - -void SystemTask::ReloadIdleTimer() { - if (isSleeping || isGoingToSleep) { - return; - } - if (isDimmed) { - displayApp.PushMessage(Pinetime::Applications::Display::Messages::RestoreBrightness); - isDimmed = false; - } - xTimerReset(dimTimer, 0); - xTimerStop(idleTimer, 0); -} diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 600d13e..a632469 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -72,17 +72,10 @@ namespace Pinetime { void OnTouchEvent(); - void OnIdle(); - void OnDim(); - Pinetime::Controllers::NimbleController& nimble() { return nimbleController; }; - bool IsSleeping() const { - return isSleeping; - } - private: TaskHandle_t taskHandle; @@ -97,10 +90,6 @@ namespace Pinetime { Pinetime::Controllers::Ble& bleController; Pinetime::Controllers::DateTime& dateTimeController; QueueHandle_t systemTasksMsgQueue; - std::atomic<bool> isSleeping {false}; - std::atomic<bool> isGoingToSleep {false}; - std::atomic<bool> isWakingUp {false}; - std::atomic<bool> isDimmed {false}; Pinetime::Drivers::Watchdog& watchdog; Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::MotorController& motorController; @@ -115,18 +104,12 @@ namespace Pinetime { static void Process(void* instance); void Work(); - void ReloadIdleTimer(); bool isBleDiscoveryTimerRunning = false; uint8_t bleDiscoveryTimer = 0; - TimerHandle_t dimTimer; - TimerHandle_t idleTimer; TimerHandle_t measureBatteryTimer; - bool doNotGoToSleep = false; void HandleButtonAction(Controllers::ButtonActions action); - bool fastWakeUpDone = false; - void GoToRunning(); void UpdateMotion(); bool stepCounterMustBeReset = false; static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); |
