summaryrefslogtreecommitdiffhomepage
path: root/tracker-udp/ftnoir_tracker_udp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tracker-udp/ftnoir_tracker_udp.cpp')
-rw-r--r--tracker-udp/ftnoir_tracker_udp.cpp51
1 files changed, 29 insertions, 22 deletions
diff --git a/tracker-udp/ftnoir_tracker_udp.cpp b/tracker-udp/ftnoir_tracker_udp.cpp
index 5f95ab5a..f1f9f033 100644
--- a/tracker-udp/ftnoir_tracker_udp.cpp
+++ b/tracker-udp/ftnoir_tracker_udp.cpp
@@ -8,18 +8,18 @@
#include "ftnoir_tracker_udp.h"
#include "api/plugin-api.hpp"
-#include "compat/nan.hpp"
-#include "compat/util.hpp"
+
+#include <cmath>
+#include <iterator>
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 +28,7 @@ void udp::run()
QByteArray datagram;
datagram.resize(sizeof(last_recv_pose));
- should_quit = !sock.bind(QHostAddress::Any, quint16(s.port), QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
-
- while (!should_quit)
+ while (!isInterruptionRequested())
{
if (sock.hasPendingDatagrams())
{
@@ -46,17 +44,20 @@ void udp::run()
}
while (sock.hasPendingDatagrams());
- if (ok &&
- progn(
- for (unsigned i = 0; i < 6; i++)
+ if (ok)
+ {
+ for (unsigned i = 0; i < 6; i++)
+ {
+ int val = std::fpclassify(last_recv_pose2[i]);
+ if (val == FP_NAN || val == FP_INFINITE)
{
- if (nanp(last_recv_pose2[i]))
- {
- return false;
- }
+ ok = false;
+ break;
}
- return true;
- ))
+ }
+ }
+
+ if (ok)
{
for (unsigned i = 0; i < 6; i++)
last_recv_pose[i] = last_recv_pose2[i];
@@ -67,10 +68,15 @@ void udp::run()
}
}
-void udp::start_tracker(QFrame*)
+module_status udp::start_tracker(QFrame*)
{
- start();
+ if (!sock.bind(QHostAddress::Any, quint16(s.port), QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint))
+ return error(tr("Can't bind socket -- %1").arg(sock.errorString()));
+
sock.moveToThread(this);
+ start();
+
+ return status_ok();
}
void udp::data(double *data)
@@ -94,10 +100,11 @@ void udp::data(double *data)
for (int i = 0; i < 3; i++)
{
- const unsigned k = clamp(unsigned(indices[i]), 0u, sizeof(values)/sizeof(*values) - 1u);
- data[Yaw + i] += values[k];
+ const int k = indices[i];
+ if (k >= 0 && k < std::distance(std::begin(values), std::end(values)))
+ data[Yaw + i] += values[k];
}
}
-OPENTRACK_DECLARE_TRACKER(udp, dialog_udp, udpDll)
+OPENTRACK_DECLARE_TRACKER(udp, dialog_udp, udp_receiver_dll)