summaryrefslogtreecommitdiffstats
path: root/src/core/hid/motion_input.h
diff options
context:
space:
mode:
authorNarr the Reg <juangerman-13@hotmail.com>2023-05-08 19:17:27 +0200
committerNarr the Reg <juangerman-13@hotmail.com>2023-05-08 20:06:38 +0200
commit97bd6d641811cafc3ec99879fa53beda1a2334b5 (patch)
treeec3946ddaa935829006ceb2b46995fe493621dba /src/core/hid/motion_input.h
parentMerge pull request #10075 from Kelebek1/silence_nifm_spam (diff)
downloadyuzu-97bd6d641811cafc3ec99879fa53beda1a2334b5.tar
yuzu-97bd6d641811cafc3ec99879fa53beda1a2334b5.tar.gz
yuzu-97bd6d641811cafc3ec99879fa53beda1a2334b5.tar.bz2
yuzu-97bd6d641811cafc3ec99879fa53beda1a2334b5.tar.lz
yuzu-97bd6d641811cafc3ec99879fa53beda1a2334b5.tar.xz
yuzu-97bd6d641811cafc3ec99879fa53beda1a2334b5.tar.zst
yuzu-97bd6d641811cafc3ec99879fa53beda1a2334b5.zip
Diffstat (limited to 'src/core/hid/motion_input.h')
-rw-r--r--src/core/hid/motion_input.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/hid/motion_input.h b/src/core/hid/motion_input.h
index 482719359..11678983d 100644
--- a/src/core/hid/motion_input.h
+++ b/src/core/hid/motion_input.h
@@ -23,6 +23,8 @@ public:
static constexpr float GyroMaxValue = 5.0f;
static constexpr float AccelMaxValue = 7.0f;
+ static constexpr std::size_t CalibrationSamples = 300;
+
explicit MotionInput();
MotionInput(const MotionInput&) = default;
@@ -49,6 +51,8 @@ public:
void UpdateRotation(u64 elapsed_time);
void UpdateOrientation(u64 elapsed_time);
+ void Calibrate();
+
[[nodiscard]] std::array<Common::Vec3f, 3> GetOrientation() const;
[[nodiscard]] Common::Vec3f GetAcceleration() const;
[[nodiscard]] Common::Vec3f GetGyroscope() const;
@@ -61,6 +65,7 @@ public:
[[nodiscard]] bool IsCalibrated(f32 sensitivity) const;
private:
+ void StopCalibration();
void ResetOrientation();
void SetOrientationFromAccelerometer();
@@ -103,6 +108,12 @@ private:
// Use accelerometer values to calculate position
bool only_accelerometer = true;
+
+ // When enabled it will aggressively adjust for gyro drift
+ bool calibration_mode = false;
+
+ // Used to auto disable calibration mode
+ std::size_t calibration_counter = 0;
};
} // namespace Core::HID