summaryrefslogtreecommitdiffhomepage
path: root/protocol-vjoy/ftnoir_protocol_vjoy.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-10-30 09:01:32 +0100
committerStanislaw Halik <sthalik@misaki.pl>2015-10-30 09:01:32 +0100
commitd785d3616500d5846ac8c5f5a6347da832a593b4 (patch)
treeac670a125c5b880ad7e4b4f24a8635da4e66f0da /protocol-vjoy/ftnoir_protocol_vjoy.cpp
parent232c2ba8aca7900eaa950c48813ddfaca8a749a8 (diff)
parent9b736d361bcde7a2ddaf3fe54b471c0e658e94f4 (diff)
Merge branch 'unstable' into trackhat
* unstable: cmake: cleanup hydra rename gui directory move to subdirectory-based build system cmake: switch to GNU CC 5.2.0 in mingw-w64 toolchain file rift-080: forgot ovr_Initialize() rift 025: fix name
Diffstat (limited to 'protocol-vjoy/ftnoir_protocol_vjoy.cpp')
-rw-r--r--protocol-vjoy/ftnoir_protocol_vjoy.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/protocol-vjoy/ftnoir_protocol_vjoy.cpp b/protocol-vjoy/ftnoir_protocol_vjoy.cpp
new file mode 100644
index 00000000..24148c63
--- /dev/null
+++ b/protocol-vjoy/ftnoir_protocol_vjoy.cpp
@@ -0,0 +1,33 @@
+#include "ftnoir_protocol_vjoy.h"
+#include "opentrack/plugin-api.hpp"
+
+FTNoIR_Protocol::FTNoIR_Protocol()
+{
+ static char meh[1] = {0};
+ VJoy_Initialize(meh, meh);
+}
+
+FTNoIR_Protocol::~FTNoIR_Protocol()
+{
+ VJoy_Shutdown();
+}
+
+void FTNoIR_Protocol::pose( const double *headpose ) {
+#ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
+ JOYSTICK_STATE state[2] = { 0 };
+
+ state[0].POV = (4 << 12) | (4 << 8) | (4 << 4) | 4;
+
+ state[0].XAxis = std::min<int>(VJOY_AXIS_MAX, std::max<int>(VJOY_AXIS_MIN, headpose[Yaw] * VJOY_AXIS_MAX / 180.0));
+ state[0].YAxis = std::min<int>(VJOY_AXIS_MAX, std::max<int>(VJOY_AXIS_MIN, headpose[Pitch] * VJOY_AXIS_MAX / 180.0));
+ state[0].ZAxis = std::min<int>(VJOY_AXIS_MAX, std::max<int>(VJOY_AXIS_MIN, headpose[Roll] * VJOY_AXIS_MAX / 180.0));
+ state[0].XRotation = std::min<int>(VJOY_AXIS_MAX, std::max<int>(VJOY_AXIS_MIN, headpose[TX] * VJOY_AXIS_MAX / 100.0));
+ state[0].YRotation = std::min<int>(VJOY_AXIS_MAX, std::max<int>(VJOY_AXIS_MIN, headpose[TY] * VJOY_AXIS_MAX / 100.0));
+ state[0].ZRotation = std::min<int>(VJOY_AXIS_MAX, std::max<int>(VJOY_AXIS_MIN, headpose[TZ] * VJOY_AXIS_MAX / 100.0));
+
+ VJoy_UpdateJoyState(0, state);
+}
+
+OPENTRACK_DECLARE_PROTOCOL(FTNoIR_Protocol, VJoyControls, FTNoIR_ProtocolDll)