summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dinput/keybinding-worker.cpp11
-rw-r--r--dinput/keybinding-worker.hpp1
-rw-r--r--freetrackclient/fttypes.h63
-rw-r--r--logic/tracker.cpp5
-rw-r--r--logic/tracker.h1
-rw-r--r--proto-simconnect/ftnoir_protocol_sc.cpp13
-rw-r--r--proto-simconnect/ftnoir_protocol_sc.h18
-rw-r--r--tracker-aruco/ftnoir_tracker_aruco.cpp5
-rw-r--r--tracker-aruco/ftnoir_tracker_aruco.h1
-rw-r--r--tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp7
-rw-r--r--tracker-freepie-udp/ftnoir_tracker_freepie-udp.h1
-rw-r--r--tracker-hatire/ftnoir_tracker_hat.h4
-rw-r--r--tracker-hydra/ftnoir_tracker_hydra.cpp2
-rw-r--r--tracker-hydra/ftnoir_tracker_hydra.h1
-rw-r--r--tracker-pt/ftnoir_tracker_pt.h8
-rw-r--r--tracker-pt/point_tracker.cpp2
-rw-r--r--tracker-tobii-eyex/tobii-eyex.hpp3
-rw-r--r--tracker-udp/ftnoir_tracker_udp.cpp10
-rw-r--r--tracker-udp/ftnoir_tracker_udp.h1
19 files changed, 76 insertions, 81 deletions
diff --git a/dinput/keybinding-worker.cpp b/dinput/keybinding-worker.cpp
index 0357752c..41fa3486 100644
--- a/dinput/keybinding-worker.cpp
+++ b/dinput/keybinding-worker.cpp
@@ -28,7 +28,7 @@ KeybindingWorker::~KeybindingWorker()
{
qDebug() << "exit: keybinding worker";
- should_quit = true;
+ requestInterruption();
wait();
if (dinkeyboard) {
dinkeyboard->Unacquire();
@@ -74,11 +74,10 @@ bool KeybindingWorker::init()
return true;
}
-KeybindingWorker::KeybindingWorker() : dinkeyboard(nullptr), din(dinput_handle::make_di()), should_quit(false)
+KeybindingWorker::KeybindingWorker() : dinkeyboard(nullptr), din(dinput_handle::make_di())
{
- should_quit = !init();
-
- start();
+ if (init())
+ start();
}
KeybindingWorker& KeybindingWorker::make()
@@ -92,7 +91,7 @@ void KeybindingWorker::run()
unsigned char keystate[256] = {0};
unsigned char old_keystate[256] = {0};
- while (!should_quit)
+ while (!isInterruptionRequested())
{
{
QMutexLocker l(&mtx);
diff --git a/dinput/keybinding-worker.hpp b/dinput/keybinding-worker.hpp
index 553a314c..6ed277cd 100644
--- a/dinput/keybinding-worker.hpp
+++ b/dinput/keybinding-worker.hpp
@@ -48,7 +48,6 @@ private:
QMutex mtx;
QMainWindow fake_main_window;
dinput_handle::di_t din;
- volatile bool should_quit;
void run() override;
bool init();
diff --git a/freetrackclient/fttypes.h b/freetrackclient/fttypes.h
index 050ffc02..4989a570 100644
--- a/freetrackclient/fttypes.h
+++ b/freetrackclient/fttypes.h
@@ -19,51 +19,46 @@
#pragma once
-#ifndef _MSC_VER
-# include <inttypes.h>
-#else
-typedef unsigned __int32 uint32_t;
-typedef __int32 int32_t;
-#endif
+#include <inttypes.h>
#define FREETRACK_HEAP "FT_SharedMem"
#define FREETRACK_MUTEX "FT_Mutext"
/* only 6 headpose floats and the data id are filled -sh */
-typedef struct __FTData {
- volatile unsigned int DataID;
- volatile int CamWidth;
- volatile int CamHeight;
+typedef struct FTData__ {
+ int32_t DataID;
+ int32_t CamWidth;
+ int32_t CamHeight;
/* virtual pose */
- volatile float Yaw; /* positive yaw to the left */
- volatile float Pitch; /* positive pitch up */
- volatile float Roll; /* positive roll to the left */
- volatile float X;
- volatile float Y;
- volatile float Z;
+ float Yaw; /* positive yaw to the left */
+ float Pitch; /* positive pitch up */
+ float Roll; /* positive roll to the left */
+ float X;
+ float Y;
+ float Z;
/* raw pose with no smoothing, sensitivity, response curve etc. */
- volatile float RawYaw;
- volatile float RawPitch;
- volatile float RawRoll;
- volatile float RawX;
- volatile float RawY;
- volatile float RawZ;
+ float RawYaw;
+ float RawPitch;
+ float RawRoll;
+ float RawX;
+ float RawY;
+ float RawZ;
/* raw points, sorted by Y, origin top left corner */
- volatile float X1;
- volatile float Y1;
- volatile float X2;
- volatile float Y2;
- volatile float X3;
- volatile float Y3;
- volatile float X4;
- volatile float Y4;
+ float X1;
+ float Y1;
+ float X2;
+ float Y2;
+ float X3;
+ float Y3;
+ float X4;
+ float Y4;
} FTData;
/* we add some shit at the end for other legacy proto, sadly */
-typedef struct __FTHeap {
+typedef struct FTHeap__ {
FTData data;
- volatile int32_t GameID;
- volatile unsigned char table[8];
- volatile int32_t GameID2;
+ int32_t GameID;
+ unsigned char table[8];
+ int32_t GameID2;
} FTHeap;
diff --git a/logic/tracker.cpp b/logic/tracker.cpp
index a5d4b86f..533a6f54 100644
--- a/logic/tracker.cpp
+++ b/logic/tracker.cpp
@@ -44,7 +44,7 @@ Tracker::Tracker(Mappings& m, SelectedLibraries& libs, TrackLogger& logger) :
Tracker::~Tracker()
{
- set(f_should_quit, true);
+ requestInterruption();
wait();
}
@@ -384,7 +384,7 @@ void Tracker::run()
t.start();
- while (!get(f_should_quit))
+ while (!isInterruptionRequested())
{
logic();
@@ -491,5 +491,4 @@ bits::bits() : b(0u)
set(f_enabled_p, true);
set(f_enabled_h, true);
set(f_zero, false);
- set(f_should_quit, false);
}
diff --git a/logic/tracker.h b/logic/tracker.h
index 2c4c5610..b1ed4042 100644
--- a/logic/tracker.h
+++ b/logic/tracker.h
@@ -40,7 +40,6 @@ struct bits
f_enabled_h = 1 << 1,
f_enabled_p = 1 << 2,
f_zero = 1 << 3,
- f_should_quit = 1 << 4,
};
std::atomic<unsigned> b;
diff --git a/proto-simconnect/ftnoir_protocol_sc.cpp b/proto-simconnect/ftnoir_protocol_sc.cpp
index 9c0f1a5b..be0c23c4 100644
--- a/proto-simconnect/ftnoir_protocol_sc.cpp
+++ b/proto-simconnect/ftnoir_protocol_sc.cpp
@@ -14,13 +14,13 @@
#include "opentrack-library-path.h"
#include "compat/timer.hpp"
-simconnect::simconnect() : hSimConnect(nullptr), should_stop(false), should_reconnect(false)
+simconnect::simconnect() : hSimConnect(nullptr), should_reconnect(false)
{
}
simconnect::~simconnect()
{
- should_stop = true;
+ requestInterruption();
wait();
}
@@ -34,7 +34,7 @@ void simconnect::run()
return;
}
- while (!should_stop)
+ while (!isInterruptionRequested())
{
HRESULT hr;
@@ -52,7 +52,7 @@ void simconnect::run()
Timer tm;
int idle_seconds = 0;
- while (!should_stop)
+ while (!isInterruptionRequested())
{
if (should_reconnect)
{
@@ -88,14 +88,15 @@ void simconnect::run()
qDebug() << "simconnect: can't open handle:" << hr;
}
- if (!should_stop)
+ if (!isInterruptionRequested())
Sleep(100);
}
CloseHandle(event);
}
-void simconnect::pose( const double *headpose ) {
+void simconnect::pose( const double *headpose )
+{
// euler degrees
virtSCRotX = float(-headpose[Pitch]);
virtSCRotY = float(headpose[Yaw]);
diff --git a/proto-simconnect/ftnoir_protocol_sc.h b/proto-simconnect/ftnoir_protocol_sc.h
index 270d922d..93376885 100644
--- a/proto-simconnect/ftnoir_protocol_sc.h
+++ b/proto-simconnect/ftnoir_protocol_sc.h
@@ -11,8 +11,10 @@
*/
#pragma once
#include "api/plugin-api.hpp"
-
#include "ui_ftnoir_sccontrols.h"
+
+#include <atomic>
+
#include <QThread>
#include <QMessageBox>
#include <QSettings>
@@ -70,12 +72,12 @@ private:
void run() override;
- volatile float virtSCPosX;
- volatile float virtSCPosY;
- volatile float virtSCPosZ;
- volatile float virtSCRotX;
- volatile float virtSCRotY;
- volatile float virtSCRotZ;
+ std::atomic<float> virtSCPosX;
+ std::atomic<float> virtSCPosY;
+ std::atomic<float> virtSCPosZ;
+ std::atomic<float> virtSCRotX;
+ std::atomic<float> virtSCRotY;
+ std::atomic<float> virtSCRotZ;
importSimConnect_Open simconnect_open;
importSimConnect_Close simconnect_close;
@@ -84,7 +86,7 @@ private:
importSimConnect_SubscribeToSystemEvent simconnect_subscribetosystemevent;
HANDLE hSimConnect;
- volatile bool should_stop, should_reconnect;
+ std::atomic<bool> should_reconnect;
static void CALLBACK processNextSimconnectEvent(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext);
settings s;
QLibrary SCClientLib;
diff --git a/tracker-aruco/ftnoir_tracker_aruco.cpp b/tracker-aruco/ftnoir_tracker_aruco.cpp
index 7a19b0d3..745ce50d 100644
--- a/tracker-aruco/ftnoir_tracker_aruco.cpp
+++ b/tracker-aruco/ftnoir_tracker_aruco.cpp
@@ -52,7 +52,6 @@ aruco_tracker::aruco_tracker() :
roi_points(4),
last_roi(65535, 65535, 0, 0),
adaptive_size_pos(0),
- stop(false),
use_otsu(false)
{
// param 2 ignored for Otsu thresholding. it's required to use our fork of Aruco.
@@ -61,7 +60,7 @@ aruco_tracker::aruco_tracker() :
aruco_tracker::~aruco_tracker()
{
- stop = true;
+ requestInterruption();
wait();
// fast start/stop causes breakage
portable::sleep(1000);
@@ -368,7 +367,7 @@ void aruco_tracker::run()
fps_timer.start();
last_detection_timer.start();
- while (!stop)
+ while (!isInterruptionRequested())
{
{
QMutexLocker l(&camera_mtx);
diff --git a/tracker-aruco/ftnoir_tracker_aruco.h b/tracker-aruco/ftnoir_tracker_aruco.h
index 02b7e0a7..8531bef9 100644
--- a/tracker-aruco/ftnoir_tracker_aruco.h
+++ b/tracker-aruco/ftnoir_tracker_aruco.h
@@ -117,7 +117,6 @@ private:
cv::Rect last_roi;
Timer fps_timer, last_detection_timer;
unsigned adaptive_size_pos;
- volatile bool stop;
bool use_otsu;
struct resolution_tuple
diff --git a/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp b/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp
index 4c5d14ef..e5667ebb 100644
--- a/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp
+++ b/tracker-freepie-udp/ftnoir_tracker_freepie-udp.cpp
@@ -6,13 +6,13 @@
#include <cmath>
-tracker_freepie::tracker_freepie() : pose { 0,0,0, 0,0,0 }, should_quit(false)
+tracker_freepie::tracker_freepie() : pose { 0,0,0, 0,0,0 }
{
}
tracker_freepie::~tracker_freepie()
{
- should_quit = true;
+ requestInterruption();
wait();
}
@@ -42,7 +42,8 @@ void tracker_freepie::run() {
sock.bind(QHostAddress::Any, (unsigned short) s.port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
- while (!should_quit) {
+ while (!isInterruptionRequested())
+ {
int order[] = {
bound<int>(s.idx_x, 0, 2),
bound<int>(s.idx_y, 0, 2),
diff --git a/tracker-freepie-udp/ftnoir_tracker_freepie-udp.h b/tracker-freepie-udp/ftnoir_tracker_freepie-udp.h
index 5a98e194..51a710f8 100644
--- a/tracker-freepie-udp/ftnoir_tracker_freepie-udp.h
+++ b/tracker-freepie-udp/ftnoir_tracker_freepie-udp.h
@@ -42,7 +42,6 @@ private:
QUdpSocket sock;
settings s;
QMutex mtx;
- volatile bool should_quit;
};
class dialog_freepie : public ITrackerDialog
diff --git a/tracker-hatire/ftnoir_tracker_hat.h b/tracker-hatire/ftnoir_tracker_hat.h
index 01b2afff..47f66812 100644
--- a/tracker-hatire/ftnoir_tracker_hat.h
+++ b/tracker-hatire/ftnoir_tracker_hat.h
@@ -5,6 +5,8 @@
#include "ftnoir_tracker_hat_settings.h"
#include "ftnoir_arduino_type.h"
+#include <atomic>
+
#include <QObject>
#include <QPalette>
#include <QtGui>
@@ -41,7 +43,7 @@ private:
int frame_cnt;
- volatile int CptError;
+ std::atomic<int> CptError;
static inline QByteArray to_latin1(const QString& str) { return str.toLatin1(); }
};
diff --git a/tracker-hydra/ftnoir_tracker_hydra.cpp b/tracker-hydra/ftnoir_tracker_hydra.cpp
index 77e62243..9c0d85f8 100644
--- a/tracker-hydra/ftnoir_tracker_hydra.cpp
+++ b/tracker-hydra/ftnoir_tracker_hydra.cpp
@@ -23,7 +23,7 @@
#endif
#include <sixense.h>
-Hydra_Tracker::Hydra_Tracker() : should_quit(false) {}
+Hydra_Tracker::Hydra_Tracker() {}
#include <sixense_math.hpp>
diff --git a/tracker-hydra/ftnoir_tracker_hydra.h b/tracker-hydra/ftnoir_tracker_hydra.h
index 31a994d5..15016e4e 100644
--- a/tracker-hydra/ftnoir_tracker_hydra.h
+++ b/tracker-hydra/ftnoir_tracker_hydra.h
@@ -18,7 +18,6 @@ public:
~Hydra_Tracker();
void start_tracker(QFrame *) override;
void data(double *data) override;
- volatile bool should_quit;
private:
settings s;
QMutex mutex;
diff --git a/tracker-pt/ftnoir_tracker_pt.h b/tracker-pt/ftnoir_tracker_pt.h
index b7b0019a..65e367f5 100644
--- a/tracker-pt/ftnoir_tracker_pt.h
+++ b/tracker-pt/ftnoir_tracker_pt.h
@@ -11,6 +11,8 @@
#include "api/plugin-api.hpp"
#include "ftnoir_tracker_pt_settings.h"
+#include <atomic>
+
#include "numeric.hpp"
#include "camera.h"
@@ -79,9 +81,9 @@ private:
QSize preview_size;
- volatile unsigned point_count;
- volatile unsigned char commands;
- volatile bool ever_success;
+ std::atomic<unsigned> point_count;
+ std::atomic<unsigned char> commands;
+ std::atomic<bool> ever_success;
static constexpr f rad2deg = f(180/M_PI);
//static constexpr float deg2rad = float(M_PI/180);
diff --git a/tracker-pt/point_tracker.cpp b/tracker-pt/point_tracker.cpp
index 8e0c28de..4022cbb2 100644
--- a/tracker-pt/point_tracker.cpp
+++ b/tracker-pt/point_tracker.cpp
@@ -37,7 +37,7 @@ PointModel::PointModel(settings_pt& s)
set_model(s);
// calculate u
u = M01.cross(M02);
- u /= norm(u);
+ u = cv::normalize(u);
// calculate projection matrix on M01,M02 plane
f s11 = M01.dot(M01);
diff --git a/tracker-tobii-eyex/tobii-eyex.hpp b/tracker-tobii-eyex/tobii-eyex.hpp
index 23173f22..62b0d733 100644
--- a/tracker-tobii-eyex/tobii-eyex.hpp
+++ b/tracker-tobii-eyex/tobii-eyex.hpp
@@ -19,6 +19,7 @@ using namespace options;
#include <functional>
#include <atomic>
+
#include <QObject>
#include <QMutex>
@@ -77,7 +78,7 @@ private:
} dev_state;
double yaw, pitch;
- volatile bool do_center;
+ std::atomic<bool> do_center;
};
class tobii_eyex_metadata : public Metadata
diff --git a/tracker-udp/ftnoir_tracker_udp.cpp b/tracker-udp/ftnoir_tracker_udp.cpp
index 5f95ab5a..e2d6fc93 100644
--- a/tracker-udp/ftnoir_tracker_udp.cpp
+++ b/tracker-udp/ftnoir_tracker_udp.cpp
@@ -13,13 +13,12 @@
udp::udp() :
last_recv_pose { 0,0,0, 0,0,0 },
- last_recv_pose2 { 0,0,0, 0,0,0 },
- should_quit(false)
+ last_recv_pose2 { 0,0,0, 0,0,0 }
{}
udp::~udp()
{
- should_quit = true;
+ requestInterruption();
wait();
}
@@ -28,9 +27,10 @@ void udp::run()
QByteArray datagram;
datagram.resize(sizeof(last_recv_pose));
- should_quit = !sock.bind(QHostAddress::Any, quint16(s.port), QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
+ if (!sock.bind(QHostAddress::Any, quint16(s.port), QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint))
+ return;
- while (!should_quit)
+ while (!isInterruptionRequested())
{
if (sock.hasPendingDatagrams())
{
diff --git a/tracker-udp/ftnoir_tracker_udp.h b/tracker-udp/ftnoir_tracker_udp.h
index b6e0aefd..0167a005 100644
--- a/tracker-udp/ftnoir_tracker_udp.h
+++ b/tracker-udp/ftnoir_tracker_udp.h
@@ -33,7 +33,6 @@ private:
double last_recv_pose[6], last_recv_pose2[6];
QMutex mutex;
settings s;
- volatile bool should_quit;
};
class dialog_udp: public ITrackerDialog