summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2014-09-26 23:57:41 +0200
committerStanislaw Halik <sthalik@misaki.pl>2014-09-27 00:31:33 +0200
commit2229536858acf1b995ee23bb85196a870473d573 (patch)
treebb9682996ba17cb24e3daaa6a34cc66fa5b6124a
parentd20dde371d1ddac288267d7d051735b685a24697 (diff)
freepie: try fix apk interop
Maybe @KyokushinPL gets it to work now Issue: #48
-rw-r--r--ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.cpp28
-rw-r--r--ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.h3
2 files changed, 25 insertions, 6 deletions
diff --git a/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.cpp b/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.cpp
index ea44133c..9fd9b08f 100644
--- a/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.cpp
+++ b/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.cpp
@@ -1,7 +1,6 @@
#include "ftnoir_tracker_freepie-udp.h"
#include "facetracknoir/plugin-support.h"
-#include <cstddef>
#include <cinttypes>
TrackerImpl::TrackerImpl() : pose { 0,0,0, 0,0,0 }, should_quit(false)
@@ -34,6 +33,15 @@ void TrackerImpl::run() {
};
while (1) {
+ struct check {
+ union {
+ std::uint16_t half;
+ unsigned char bytes[2];
+ };
+ bool convertp;
+ check() : bytes { 255, 0 }, convertp(half > 255) {}
+ } crapola;
+
if (should_quit)
break;
{
@@ -45,13 +53,14 @@ void TrackerImpl::run() {
int sz = sock.readDatagram(reinterpret_cast<char*>(&data), sizeof(data));
int flags = data.flags & F::Mask;
-
- static constexpr int minsz = offsetof(decltype(data), raw_rot) + sizeof(decltype(data)::raw_rot);
+
+ using t = decltype(data);
+ static constexpr int minsz = offsetof(t, raw_rot) + sizeof(t::raw_rot);
const bool flags_came_out_wrong = minsz > sz;
-
+
if (flags_came_out_wrong)
flags &= ~F::flag_Raw;
-
+
switch (flags)
{
case flag_Raw:
@@ -66,6 +75,15 @@ void TrackerImpl::run() {
}
if (orient)
{
+ if (crapola.convertp)
+ {
+ constexpr int sz = sizeof(float[6]);
+ const int len = sz / 2;
+ unsigned char* alias = reinterpret_cast<unsigned char*>(orient);
+ for (int i = 0; i < sz; i++)
+ alias[i] = alias[sz-i];
+ }
+
QMutexLocker foo(&mtx);
for (int i = 0; i < 3; i++)
pose[Yaw + i] = orient[i];
diff --git a/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.h b/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.h
index 23f3ace9..de32e64b 100644
--- a/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.h
+++ b/ftnoir_tracker_freepie-udp/ftnoir_tracker_freepie-udp.h
@@ -5,9 +5,10 @@
* copyright notice and this permission notice appear in all copies.
*/
-#include "ui_freepie-udp-controls.h"
+#include <cinttypes>
#include <QUdpSocket>
#include <QThread>
+#include "ui_freepie-udp-controls.h"
#include "facetracknoir/plugin-api.hpp"
#include "facetracknoir/options.h"
using namespace options;