From 2a568846bd8f1c9e23e86e7570557eed6f18cf9f Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 7 Jun 2023 10:30:33 +1000 Subject: Cute brightness fade to avoid ugly startup :) --- src/ui/ui_fsm.cpp | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) (limited to 'src/ui/ui_fsm.cpp') diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index 5c59cf22..bdc1f89f 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -5,6 +5,8 @@ */ #include "ui_fsm.hpp" +#include +#include "core/lv_obj.h" #include "display.hpp" #include "lvgl_task.hpp" #include "relative_wheel.hpp" @@ -17,33 +19,47 @@ namespace ui { drivers::GpioExpander* UiState::sGpioExpander; -std::weak_ptr UiState::sTouchWheel; -std::weak_ptr UiState::sDisplay; +std::shared_ptr UiState::sTouchWheel; +std::shared_ptr UiState::sRelativeWheel; +std::shared_ptr UiState::sDisplay; std::shared_ptr UiState::sCurrentScreen; -auto UiState::Init(drivers::GpioExpander* gpio_expander, - const std::weak_ptr& touchwheel, - const std::weak_ptr& display) -> void { - assert(!touchwheel.expired()); - assert(!display.expired()); +auto UiState::Init(drivers::GpioExpander* gpio_expander) -> bool { sGpioExpander = gpio_expander; - sTouchWheel = touchwheel; - sDisplay = display; + + lv_init(); + sDisplay.reset( + drivers::Display::Create(gpio_expander, drivers::displays::kST7735R)); + if (sDisplay == nullptr) { + return false; + } + + sTouchWheel.reset(drivers::TouchWheel::Create()); + if (sTouchWheel != nullptr) { + sRelativeWheel.reset(new drivers::RelativeWheel(sTouchWheel.get())); + } sCurrentScreen.reset(new screens::Splash()); - StartLvgl(sTouchWheel, sDisplay); + // Start the UI task even if init ultimately failed, so that we can show some + // kind of error screen to the user. + StartLvgl(sRelativeWheel, sDisplay); + + if (sTouchWheel == nullptr) { + return false; + } + return true; } namespace states { -void PreBoot::react(const system_fsm::DisplayReady& ev) { - transit(); +void Splash::exit() { + if (sDisplay != nullptr) { + sDisplay->SetDisplayOn(true); + } } -void Splash::entry() {} - void Splash::react(const system_fsm::BootComplete& ev) { transit(); } @@ -55,4 +71,4 @@ void Interactive::entry() { } // namespace states } // namespace ui -FSM_INITIAL_STATE(ui::UiState, ui::states::PreBoot) +FSM_INITIAL_STATE(ui::UiState, ui::states::Splash) -- cgit v1.2.3