diff options
Diffstat (limited to 'tracker-udp/ftnoir_tracker_udp.cpp')
| -rw-r--r-- | tracker-udp/ftnoir_tracker_udp.cpp | 51 |
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) |
