diff options
Diffstat (limited to 'src/tangara/input/feedback_haptics.cpp')
| -rw-r--r-- | src/tangara/input/feedback_haptics.cpp | 53 |
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; |
