summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_tracker_joystick
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-09-30 16:21:41 +0200
committerStanislaw Halik <sthalik@misaki.pl>2015-09-30 16:22:00 +0200
commitac4dc94acc5d1e1d8fd4867730b835e2aa1fcc89 (patch)
tree8ca3dc84958e572e3f890ac3f56dfda670c63f60 /ftnoir_tracker_joystick
parent03a164ed74d616e8d5203142ec7e9738c8aae547 (diff)
parenteb7703b4ecea5540a4c4a65faa1ff4c53fe97631 (diff)
Merge branch 'unstable' into trackhat-ui
Sponsored-by: TrackHat * unstable: (112 commits) Revert "accela: try more complex deadzone algorithm" pt: add wiki link for calibration instructions qfc: more gray colors when graph is disabled qfc, mapping: disallow editing and change color when checkbox disabled qfc: don't allow editing when disabled plugin-support: workaround multiple copies of modules accela: change translation gain accela: change rotation gain pt: change extraction code freepie-udp: add license freepie-udp: update accela: try more complex deadzone algorithm accela: add helpful comment accela: revert to more quadratic spline at start also save if save pending when start tracking ui: force saving if saving timer is pending accela: slightly more linear function pose-widget: simplify freepie-udp: nix harmless warning pose-widget: add comment simple-mat: add __restrict for GNU ui: save settings on a timer ui: show a warning if configuration directory can't be used aruco: tune min/max marker size win32-joystick: fix duplicate device name selection logic ui: no need to reset settings on tracking start ui: save profile when combobox text changes, not merely index ui: save current tracker/filter/proto, not last win32-joystick: fix COM failure path win32-joystick: nix unused variable win32-joystick: allow for unique selection of joysticks qfc: also draw line from function start while moving no need to save on tracking start anymore save axis opts, not just spline control points tracker: change centering order again fix typo cmake: don't say "opentrack" twice for osx build ui: really don't switch profiles while refreshing combobox pt: fix type mismatch ui: save prior to switching configs tracker_rs: adjusted tracker's name ui: don't reload settings if config wasn't changed ui: save everything before switching profiles options: return .ini basename easier tracker_rs: more readable icon tracker_rs: prevent potential thread starvation ui: switch to newly-created config ui: decruft ui: also bail on new config if its name is ".ini" ui: auto-refresh config list ui: display up to 20 profiles w/o scrolling ui: create an empty config properly in another code branch udp-tracker: silence harmless warning plugin-support: fix typo plugin-support: set more sane RTLD flags plugin-support: free modules from address space when needed ui: rename symbol to reflect current usage ui: move some slots to private ui, shortcuts: these are slots, actually ui: no need to write anything to new empty config ui: avoid potential memory leak ft: new game support game-data: chomp newlines in extractor ui: append extension in the right place simple-mat: fix arglist SFINAE simple-mat: can use static_cast here nix default empty config. it gets created on its own. ui: these aren't qt slots ui: nix wrong headers ui: remove GNU GPL ui: simplify condition props changed only main, ui: store config files in a predefined directory pt: show extracted points' areas and success count close dialogs on switch to new module ...
Diffstat (limited to 'ftnoir_tracker_joystick')
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp29
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick.h23
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui38
-rw-r--r--ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp14
4 files changed, 96 insertions, 8 deletions
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp
index 45cf2f10..77fd7241 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.cpp
@@ -82,6 +82,17 @@ static BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance
if (stop)
{
+ if (self->guid_to_check.size())
+ {
+ QString guid = guid_to_string(pdidInstance->guidInstance);
+ if (guid != self->guid_to_check)
+ {
+ return DIENUM_CONTINUE;
+ }
+ else
+ qDebug() << "guid ok" << self->guid_to_check;
+ }
+
(void) self->g_pDI->CreateDevice( pdidInstance->guidInstance, &self->g_pJoystick, NULL);
qDebug() << "device" << static_cast<QString>(self->s.joyid);
}
@@ -103,15 +114,31 @@ void FTNoIR_Tracker::start_tracker(QFrame* frame)
goto fail;
}
+ guid_to_check = s.guid;
+
if( FAILED( hr = g_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL,
EnumJoysticksCallback,
this,
DIEDFL_ATTACHEDONLY)))
{
- qDebug() << "enum2";
+ qDebug() << "enum1";
goto fail;
}
+ if (!g_pJoystick && guid_to_check.size())
+ {
+ guid_to_check = "";
+
+ if( FAILED( hr = g_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL,
+ EnumJoysticksCallback,
+ this,
+ DIEDFL_ATTACHEDONLY)))
+ {
+ qDebug() << "enum2";
+ goto fail;
+ }
+ }
+
if (!g_pJoystick)
{
qDebug() << "ENODEV";
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h
index 0958246a..75305f07 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick.h
@@ -14,6 +14,7 @@
#include <QList>
#include <QMutex>
#include <QFrame>
+#include <QStringList>
#include <cmath>
#include "opentrack/plugin-api.hpp"
#ifndef DIRECTINPUT_VERSION
@@ -30,11 +31,12 @@
using namespace options;
struct settings : opts {
- value<QString> joyid;
+ value<QString> joyid, guid;
value<int> joy_1, joy_2, joy_3, joy_4, joy_5, joy_6;
settings() :
opts("tracker-joystick"),
joyid(b, "joy-id", ""),
+ guid(b, "joy-guid", ""),
joy_1(b, "axis-map-1", 1),
joy_2(b, "axis-map-2", 2),
joy_3(b, "axis-map-3", 3),
@@ -44,6 +46,18 @@ struct settings : opts {
{}
};
+template<typename = void>
+QString guid_to_string(const GUID guid)
+{
+ char buf[40] = {0};
+ wchar_t szGuidW[40] = {0};
+
+ StringFromGUID2(guid, szGuidW, 40);
+ WideCharToMultiByte(0, 0, szGuidW, -1, buf, 40, NULL, NULL);
+
+ return QString(buf);
+}
+
class FTNoIR_Tracker : public ITracker
{
public:
@@ -59,6 +73,7 @@ public:
DIDEVICEINSTANCE def;
int iter; // XXX bad style
settings s;
+ QString guid_to_check;
static constexpr int AXIS_MAX = 65535;
};
@@ -69,10 +84,14 @@ public:
TrackerControls();
void register_tracker(ITracker *) {}
void unregister_tracker() {}
- QList<GUID> guids;
Ui::UIJoystickControls ui;
FTNoIR_Tracker* tracker;
settings s;
+ struct joys {
+ QString name;
+ QString guid;
+ };
+ QList<joys> _joys;
private slots:
void doOK();
void doCancel();
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui
index 3533f93d..88737023 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_controls.ui
@@ -9,7 +9,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>251</width>
+ <width>498</width>
<height>303</height>
</rect>
</property>
@@ -79,6 +79,12 @@
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QComboBox" name="joy_1">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="currentIndex">
<number>1</number>
</property>
@@ -131,6 +137,12 @@
</item>
<item row="1" column="1">
<widget class="QComboBox" name="joy_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="currentIndex">
<number>2</number>
</property>
@@ -183,6 +195,12 @@
</item>
<item row="2" column="1">
<widget class="QComboBox" name="joy_3">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="currentIndex">
<number>3</number>
</property>
@@ -235,6 +253,12 @@
</item>
<item row="3" column="1">
<widget class="QComboBox" name="joy_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="currentIndex">
<number>4</number>
</property>
@@ -287,6 +311,12 @@
</item>
<item row="4" column="1">
<widget class="QComboBox" name="joy_5">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="currentIndex">
<number>5</number>
</property>
@@ -339,6 +369,12 @@
</item>
<item row="5" column="1">
<widget class="QComboBox" name="joy_6">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="currentIndex">
<number>6</number>
</property>
diff --git a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp
index 7200003c..0463933f 100644
--- a/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp
+++ b/ftnoir_tracker_joystick/ftnoir_tracker_joystick_dialog.cpp
@@ -4,9 +4,12 @@
static BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance, VOID* pContext )
{
auto self = ( TrackerControls* )pContext;
+ auto name = QString(pdidInstance->tszInstanceName);
+ auto guid = guid_to_string(pdidInstance->guidInstance);
+ TrackerControls::joys cur { name, guid };
+ self->_joys.append(cur);
- self->guids.push_back(pdidInstance->guidInstance);
- self->ui.joylist->addItem(QString(pdidInstance->tszInstanceName));
+ self->ui.joylist->addItem(name + " " + guid);
return DIENUM_CONTINUE;
}
@@ -38,8 +41,6 @@ fin:
g_pDI->Release();
}
- tie_setting(s.joyid, ui.joylist);
-
tie_setting(s.joy_1, ui.joy_1);
tie_setting(s.joy_2, ui.joy_2);
tie_setting(s.joy_3, ui.joy_3);
@@ -49,6 +50,11 @@ fin:
}
void TrackerControls::doOK() {
+ int idx = ui.joylist->currentIndex();
+ joys def { "", "" };
+ auto val = _joys.value(idx, def);
+ s.guid = val.guid;
+ s.joyid = val.name;
s.b->save();
if (tracker)
tracker->reload();