summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_tracker_joystick
diff options
context:
space:
mode:
authorDonovan Baarda <abo@minkirri.apana.org.au>2014-10-15 14:07:20 +1100
committerDonovan Baarda <abo@minkirri.apana.org.au>2014-10-15 14:07:20 +1100
commitdbd04e283082ab869a22abf03c4c6280b03935bb (patch)
tree3951c6f91f76047e655f35e04db4eecd576c49df /ftnoir_tracker_joystick
parentd880464fbe9180aefde94594330126e115066dc3 (diff)
parent051a2e4392bc75b246cc5cb897ae0bbb1f92042e (diff)
Merge branch 'unstable' of https://github.com/opentrack/opentrack into dev/kalman
Conflicts: ftnoir_filter_kalman/ftnoir_filter_kalman.h
Diffstat (limited to 'ftnoir_tracker_joystick')
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp82
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick.h17
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui422
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp13
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick_dll.cpp4
5 files changed, 77 insertions, 461 deletions
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp
index f9789dce..bb1076dd 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp
@@ -1,17 +1,13 @@
#include "ftnoir_tracker_joystick.h"
-#include "facetracknoir/global-settings.h"
-#undef NDEBUG
+#include "facetracknoir/plugin-support.h"
#include <QMutexLocker>
FTNoIR_Tracker::FTNoIR_Tracker() :
g_pDI(nullptr),
g_pJoystick(nullptr),
- iter(-1),
- mtx(QMutex::Recursive)
+ mtx(QMutex::Recursive),
+ iter(-1)
{
- for (int i = 0; i < 6; i++)
- min_[i] = max_[i] = 0;
- GUID bar = {0};
}
void FTNoIR_Tracker::reload()
@@ -45,13 +41,13 @@ FTNoIR_Tracker::~FTNoIR_Tracker()
}
}
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
static BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
VOID* pContext )
{
auto self = (FTNoIR_Tracker*) pContext;
- // For axes that are returned, set the DIPROP_RANGE property for the
- // enumerated axis in order to scale min/max values.
if( pdidoi->dwType & DIDFT_AXIS )
{
DIPROPRANGE diprg = {0};
@@ -59,15 +55,12 @@ static BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,
diprg.diph.dwHeaderSize = sizeof( DIPROPHEADER );
diprg.diph.dwHow = DIPH_BYID;
diprg.diph.dwObj = pdidoi->dwType;
+ diprg.lMax = FTNoIR_Tracker::AXIS_MAX;
+ diprg.lMin = -FTNoIR_Tracker::AXIS_MAX;
- // Set the range for the axis
-
- if( FAILED( self->g_pJoystick->GetProperty( DIPROP_RANGE, &diprg.diph ) ) )
+ if( FAILED( self->g_pJoystick->SetProperty( DIPROP_RANGE, &diprg.diph ) ) )
return DIENUM_STOP;
- self->min_[self->iter] = diprg.lMin;
- self->max_[self->iter] = diprg.lMax;
- qDebug() << "axis" << self->iter << diprg.lMin << diprg.lMax;
self->iter++;
}
@@ -138,8 +131,6 @@ void FTNoIR_Tracker::StartTracker(QFrame* frame)
goto fail;
}
- qDebug() << "joy init success";
-
return;
fail:
@@ -161,18 +152,26 @@ void FTNoIR_Tracker::GetHeadPoseData(double *data)
if( !g_pDI || !g_pJoystick)
return;
- auto hr = g_pJoystick->Poll();
- if( FAILED( hr ))
- {
- hr = g_pJoystick->Acquire();
- for (int i = 0; hr == DIERR_INPUTLOST && i < 200; i++)
- hr = g_pJoystick->Acquire();
- if (hr != DI_OK)
+ bool ok = false;
+
+ for (int i = 0; i < 100; i++)
+ {
+ if (!FAILED(g_pJoystick->Poll()))
{
- qDebug() << "joy read failure" << hr;
- return;
+ ok = true;
+ break;
}
- }
+ if (g_pJoystick->Acquire() != DI_OK)
+ continue;
+ else
+ ok = true;
+ break;
+ }
+
+ if (!ok)
+ return;
+
+ HRESULT hr = 0;
if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof( js ), &js ) ) )
return;
@@ -196,35 +195,12 @@ void FTNoIR_Tracker::GetHeadPoseData(double *data)
90,
180
};
-
- int axes[] = {
- s.axis_0,
- s.axis_1,
- s.axis_2,
- s.axis_3,
- s.axis_4,
- s.axis_5
- };
-
+
for (int i = 0; i < 6; i++)
- {
- auto idx = axes[i] - 1;
- if (idx < 0 || idx > 7)
- {
- data[i] = 0;
- }
- else {
- auto mid = (min_[idx] + max_[idx]) / 2;
- auto val = values[idx] - mid;
-
- auto max = (max_[idx] - min_[idx]) / 2;
- auto min = (min_[idx] - max_[idx]) / -2;
- data[i] = val * limits[i] / (double) (val >= 0 ? max : min);
- }
- }
+ data[i] = values[i] * limits[i] / AXIS_MAX;
}
-extern "C" FTNOIR_TRACKER_BASE_EXPORT ITracker* CALLING_CONVENTION GetConstructor()
+extern "C" OPENTRACK_EXPORT ITracker* GetConstructor()
{
return new FTNoIR_Tracker;
}
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h
index 06d06186..04a933db 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h
@@ -5,7 +5,6 @@
* copyright notice and this permission notice appear in all copies.
*/
#pragma once
-#include "ftnoir_tracker_base/ftnoir_tracker_base.h"
#include "ui_ftnoir_tracker_joystick_controls.h"
#include <QComboBox>
#include <QCheckBox>
@@ -16,7 +15,7 @@
#include <QMutex>
#include <QFrame>
#include <cmath>
-#include "facetracknoir/global-settings.h"
+#include "facetracknoir/plugin-api.hpp"
#ifndef DIRECTINPUT_VERSION
# define DIRECTINPUT_VERSION 0x800
#endif
@@ -32,21 +31,9 @@ using namespace options;
struct settings {
pbundle b;
- value<int> axis_0;
- value<int> axis_1;
- value<int> axis_2;
- value<int> axis_3;
- value<int> axis_4;
- value<int> axis_5;
value<QString> joyid;
settings() :
b(bundle("tracker-joystick")),
- axis_0(b, "axis-0", 0),
- axis_1(b, "axis-1", 0),
- axis_2(b, "axis-2", 0),
- axis_3(b, "axis-3", 0),
- axis_4(b, "axis-4", 0),
- axis_5(b, "axis-5", 0),
joyid(b, "joy-id", "")
{}
};
@@ -61,12 +48,12 @@ public:
void reload();
LPDIRECTINPUT8 g_pDI;
LPDIRECTINPUTDEVICE8 g_pJoystick;
- int min_[8], max_[8];
QMutex mtx;
QFrame* frame;
DIDEVICEINSTANCE def;
int iter; // XXX bad style
settings s;
+ static constexpr int AXIS_MAX = 65535;
};
class TrackerControls: public QWidget, public ITrackerDialog
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui
index 5d349169..424d1c44 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui
@@ -9,12 +9,12 @@
<rect>
<x>0</x>
<y>0</y>
- <width>216</width>
- <height>259</height>
+ <width>458</width>
+ <height>134</height>
</rect>
</property>
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -32,401 +32,61 @@
<property name="autoFillBackground">
<bool>false</bool>
</property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QGroupBox" name="groupBox_3">
+ <layout class="QFormLayout" name="formLayout">
+ <property name="horizontalSpacing">
+ <number>6</number>
+ </property>
+ <property name="verticalSpacing">
+ <number>6</number>
+ </property>
+ <property name="leftMargin">
+ <number>12</number>
+ </property>
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>12</number>
+ </property>
+ <property name="bottomMargin">
+ <number>6</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Joystick</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="joylist">
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>85</height>
- </size>
- </property>
- <property name="title">
- <string>Axis enablement</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="1" column="0">
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>X</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>Y</string>
- </property>
- </widget>
- </item>
- <item row="7" column="0">
- <widget class="QLabel" name="label_16">
- <property name="text">
- <string>Roll</string>
- </property>
- </widget>
- </item>
- <item row="6" column="1">
- <widget class="QComboBox" name="comboBox_5">
- <item>
- <property name="text">
- <string/>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#2</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#3</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#4</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#5</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#6</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#7</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#8</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="7" column="1">
- <widget class="QComboBox" name="comboBox_6">
- <item>
- <property name="text">
- <string/>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#2</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#3</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#4</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#5</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#6</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#7</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#8</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="5" column="1">
- <widget class="QComboBox" name="comboBox_4">
- <item>
- <property name="text">
- <string/>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#2</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#3</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#4</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#5</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#6</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#7</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#8</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QComboBox" name="comboBox_2">
- <item>
- <property name="text">
- <string/>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#2</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#3</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#4</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#5</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#6</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#7</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#8</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="comboBox">
- <item>
- <property name="text">
- <string/>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#2</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#3</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#4</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#5</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#6</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#7</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#8</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_14">
- <property name="text">
- <string>Yaw</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QComboBox" name="comboBox_3">
- <item>
- <property name="text">
- <string/>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#1</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#2</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#3</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#4</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#5</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#6</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#7</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>#8</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>Z</string>
- </property>
- </widget>
- </item>
- <item row="6" column="0">
- <widget class="QLabel" name="label_15">
- <property name="text">
- <string>Pitch</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Joy Id</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="joylist">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- </layout>
</widget>
</item>
- <item>
+ <item row="2" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Only first 6 axes available.
+Adjust order in mapping window &quot;output remap&quot; option.</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<tabstops>
<tabstop>joylist</tabstop>
- <tabstop>comboBox</tabstop>
- <tabstop>comboBox_2</tabstop>
- <tabstop>comboBox_3</tabstop>
- <tabstop>comboBox_4</tabstop>
- <tabstop>comboBox_5</tabstop>
- <tabstop>comboBox_6</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp
index b0766634..84e02fb0 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp
@@ -1,5 +1,5 @@
#include "ftnoir_tracker_joystick.h"
-#include "facetracknoir/global-settings.h"
+#include "facetracknoir/plugin-support.h"
static BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance, VOID* pContext )
{
@@ -19,13 +19,6 @@ TrackerControls::TrackerControls() : tracker(nullptr)
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK()));
connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel()));
- tie_setting(s.axis_0, ui.comboBox);
- tie_setting(s.axis_1, ui.comboBox_2);
- tie_setting(s.axis_2, ui.comboBox_3);
- tie_setting(s.axis_3, ui.comboBox_4);
- tie_setting(s.axis_4, ui.comboBox_5);
- tie_setting(s.axis_5, ui.comboBox_6);
-
{
auto hr = CoInitialize( nullptr );
LPDIRECTINPUT8 g_pDI = nullptr;
@@ -56,11 +49,11 @@ void TrackerControls::doOK() {
}
void TrackerControls::doCancel() {
- s.b->revert();
+ s.b->reload();
this->close();
}
-extern "C" FTNOIR_TRACKER_BASE_EXPORT ITrackerDialog* CALLING_CONVENTION GetDialog( )
+extern "C" OPENTRACK_EXPORT ITrackerDialog* GetDialog( )
{
return new TrackerControls;
}
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dll.cpp b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dll.cpp
index 325d24a4..af1a9679 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dll.cpp
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dll.cpp
@@ -1,6 +1,6 @@
#include "ftnoir_tracker_joystick.h"
#include <QDebug>
-#include "facetracknoir/global-settings.h"
+#include "facetracknoir/plugin-support.h"
void FTNoIR_TrackerDll::getFullName(QString *strToBeFilled)
{
@@ -22,7 +22,7 @@ void FTNoIR_TrackerDll::getIcon(QIcon *icon)
*icon = QIcon(":/images/facetracknoir.png");
}
-extern "C" FTNOIR_TRACKER_BASE_EXPORT Metadata* CALLING_CONVENTION GetMetadata()
+extern "C" OPENTRACK_EXPORT Metadata* GetMetadata()
{
return new FTNoIR_TrackerDll;
}