summaryrefslogtreecommitdiff
path: root/src/tangara/input/feedback_haptics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tangara/input/feedback_haptics.cpp')
-rw-r--r--src/tangara/input/feedback_haptics.cpp53
1 files changed, 48 insertions, 5 deletions
diff --git a/src/tangara/input/feedback_haptics.cpp b/src/tangara/input/feedback_haptics.cpp
index a447a69d..fb203915 100644
--- a/src/tangara/input/feedback_haptics.cpp
+++ b/src/tangara/input/feedback_haptics.cpp
@@ -18,21 +18,64 @@ namespace input {
using Effect = drivers::Haptics::Effect;
-Haptics::Haptics(drivers::Haptics& haptics_) : haptics_(haptics_) {}
+Haptics::Haptics(drivers::Haptics& haptics_,
+ std::shared_ptr<system_fsm::ServiceLocator> services)
+ : haptics_(haptics_), services_(services) {}
auto Haptics::feedback(lv_group_t* group, uint8_t event_type) -> void {
lv_obj_t* obj = lv_group_get_focused(group);
- if (obj == last_selection_) {
+
+ auto haptics_mode = services_->nvs().HapticsMode();
+ if (haptics_mode == drivers::NvsStorage::HapticsModes::kDisabled ) {
return;
}
- last_selection_ = obj;
switch (event_type) {
case LV_EVENT_FOCUSED:
- haptics_.PlayWaveformEffect(Effect::kMediumClick1_100Pct);
+ if (obj == last_selection_) {
+ return;
+ }
+ last_selection_ = obj;
+ if (haptics_mode == drivers::NvsStorage::HapticsModes::kMinimal) {
+ haptics_.PlayWaveformEffect(Effect::kStrongClick_30Pct);
+ } else {
+ haptics_.PlayWaveformEffect(Effect::kMediumClick1_100Pct);
+ }
break;
case LV_EVENT_CLICKED:
- haptics_.PlayWaveformEffect(Effect::kSharpClick_100Pct);
+ if (haptics_mode == drivers::NvsStorage::HapticsModes::kMinimal) {
+ haptics_.PlayWaveformEffect(Effect::kSharpClick_30Pct);
+ } else {
+ haptics_.PlayWaveformEffect(Effect::kSharpClick_100Pct);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+auto Haptics::feedback(lv_group_t* group, InputEvent event) -> void {
+ lv_obj_t* obj = lv_group_get_focused(group);
+
+ auto haptics_mode = services_->nvs().HapticsMode();
+ if (haptics_mode == drivers::NvsStorage::HapticsModes::kDisabled) {
+ return;
+ }
+
+ switch (event) {
+ case InputEvent::kOnPress:
+ if (haptics_mode == drivers::NvsStorage::HapticsModes::kMinimal) {
+ haptics_.PlayWaveformEffect(Effect::kSoftBump_30Pct);
+ } else {
+ haptics_.PlayWaveformEffect(Effect::kSharpTick2_80Pct);
+ }
+ break;
+ case InputEvent::kOnLongPress:
+ if (haptics_mode == drivers::NvsStorage::HapticsModes::kMinimal) {
+ haptics_.PlayWaveformEffect(Effect::kShortDoubleClickStrong4_30Pct);
+ } else {
+ haptics_.PlayWaveformEffect(Effect::kShortDoubleSharpTick3_60Pct);
+ }
break;
default:
break;