diff options
author | Donovan Baarda <abo@minkirri.apana.org.au> | 2014-10-15 14:07:20 +1100 |
---|---|---|
committer | Donovan Baarda <abo@minkirri.apana.org.au> | 2014-10-15 14:07:20 +1100 |
commit | dbd04e283082ab869a22abf03c4c6280b03935bb (patch) | |
tree | 3951c6f91f76047e655f35e04db4eecd576c49df /ftnoir_tracker_joystick | |
parent | d880464fbe9180aefde94594330126e115066dc3 (diff) | |
parent | 051a2e4392bc75b246cc5cb897ae0bbb1f92042e (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')
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 "output remap" 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; } |