summaryrefslogtreecommitdiffhomepage
path: root/tracker-rift-140/rift-140.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tracker-rift-140/rift-140.cpp')
-rw-r--r--tracker-rift-140/rift-140.cpp60
1 files changed, 26 insertions, 34 deletions
diff --git a/tracker-rift-140/rift-140.cpp b/tracker-rift-140/rift-140.cpp
index 45bfcc97..164b47f7 100644
--- a/tracker-rift-140/rift-140.cpp
+++ b/tracker-rift-140/rift-140.cpp
@@ -15,16 +15,13 @@
#include "rift-140.hpp"
#include "api/plugin-api.hpp"
-#include "compat/util.hpp"
#include <Extras/OVR_Math.h>
#include <QString>
using namespace OVR;
-rift_tracker_140::rift_tracker_140() : old_yaw(0), hmd(nullptr)
-{
-}
+rift_tracker_140::rift_tracker_140() = default;
rift_tracker_140::~rift_tracker_140()
{
@@ -35,32 +32,31 @@ rift_tracker_140::~rift_tracker_140()
}
}
-void rift_tracker_140::start_tracker(QFrame*)
+module_status rift_tracker_140::start_tracker(QFrame*)
{
if (OVR_FAILURE(ovr_Initialize(nullptr)))
goto error;
- if(OVR_FAILURE(ovr_Create(&hmd, &luid)))
+ if (OVR_FAILURE(ovr_Create(&hmd, &luid)))
+ goto error;
+
+ if (OVR_FAILURE(ovr_SetTrackingOriginType(hmd, ovrTrackingOrigin_EyeLevel)))
goto error;
- return;
+ return status_ok();
error:
hmd = nullptr;
ovrErrorInfo err;
ovr_GetLastErrorInfo(&err);
- QString strerror(err.ErrorString);
- if (strerror.size() == 0)
- strerror = QStringLiteral("Unknown reason #%1").arg(err.Result);
+ QString error_string(err.ErrorString);
+ if (error_string.size() == 0)
+ error_string = QStringLiteral("Unknown reason #%1").arg(err.Result);
ovr_Shutdown();
- QMessageBox::warning(nullptr,
- "Error",
- QCoreApplication::translate("rift_tracker_140", "Unable to start Rift tracker: %1").arg(strerror),
- QMessageBox::Ok,
- QMessageBox::NoButton);
+ return error(error_string);
}
void rift_tracker_140::data(double *data)
@@ -70,8 +66,8 @@ void rift_tracker_140::data(double *data)
ovrTrackingState ss = ovr_GetTrackingState(hmd, 0, false);
if (ss.StatusFlags & ovrStatus_OrientationTracked)
{
- static constexpr float c_mult = 8;
- static constexpr float c_div = 1/c_mult;
+ constexpr float c_mult = 8;
+ constexpr float c_div = 1/c_mult;
Vector3f axis;
float angle;
@@ -87,25 +83,21 @@ void rift_tracker_140::data(double *data)
pitch *= c_mult;
roll *= c_mult;
- double yaw_ = double(yaw);
- if (s.useYawSpring)
- {
- yaw_ = old_yaw*s.persistence + (yaw_-old_yaw);
- if(yaw_ > s.deadzone)
- yaw_ -= s.constant_drift;
- if(yaw_ < -s.deadzone)
- yaw_ += s.constant_drift;
- old_yaw = yaw_;
- }
- static constexpr double d2r = 180 / M_PI;
- data[Yaw] = yaw_ * -d2r;
- data[Pitch] = double(pitch) * d2r;
- data[Roll] = double(roll) * d2r;
- data[TX] = double(pose.Translation.x) * -1e2;
- data[TY] = double(pose.Translation.y) * 1e2;
- data[TZ] = double(pose.Translation.z) * 1e2;
+ constexpr double d2r = 180 / M_PI;
+ data[Yaw] = double(yaw) * -d2r;
+ data[Pitch] = double(pitch) * d2r;
+ data[Roll] = double(roll) * d2r;
+ data[TX] = double(pose.Translation.x) * -1e2;
+ data[TY] = double(pose.Translation.y) * 1e2;
+ data[TZ] = double(pose.Translation.z) * 1e2;
}
}
}
+bool rift_tracker_140::center()
+{
+ (void)ovr_RecenterTrackingOrigin(hmd);
+ return false;
+}
+
OPENTRACK_DECLARE_TRACKER(rift_tracker_140, dialog_rift_140, rift_140Dll)