diff --git a/src/ui/lvgl_task.cpp b/src/ui/lvgl_task.cpp index 2c4f01ca..817ed185 100644 --- a/src/ui/lvgl_task.cpp +++ b/src/ui/lvgl_task.cpp @@ -49,6 +49,8 @@ namespace ui { [[maybe_unused]] static const char* kTag = "ui_task"; +static auto group_focus_cb(lv_group_t *group) -> void; + UiTask::UiTask() {} UiTask::~UiTask() { @@ -75,6 +77,7 @@ auto UiTask::Main() -> void { if (input_ && current_screen_->group() != current_group) { current_group = current_screen_->group(); lv_indev_set_group(input_->registration(), current_group); + lv_group_set_focus_cb(current_group, &group_focus_cb); } if (current_screen_) { @@ -98,4 +101,11 @@ auto UiTask::Start() -> UiTask* { return ret; } +static auto group_focus_cb(lv_group_t *group) -> void { + // TODO(robin): we probably want to vary this, configure this, etc + events::System().Dispatch(system_fsm::HapticTrigger{ + .effect = drivers::Haptics::Effect::kMediumClick1_100Pct, + }); +} + } // namespace ui diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index becb7af5..ee915779 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -12,6 +12,7 @@ #include "battery.hpp" #include "core/lv_obj.h" #include "database.hpp" +#include "haptics.hpp" #include "misc/lv_gc.h" #include "audio_events.hpp" @@ -135,6 +136,11 @@ void Splash::exit() { sDisplay->SetDisplayOn( sServices->gpios().Get(drivers::IGpios::Pin::kKeyLock)); } + + // buzz a bit to tell the user we're done booting + events::System().Dispatch(system_fsm::HapticTrigger{ + .effect = drivers::Haptics::Effect::kLongDoubleSharpTick1_100Pct, + }); } void Splash::react(const system_fsm::BootComplete& ev) {