summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_protocol_wine
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2013-04-02 18:31:34 +0200
committerStanislaw Halik <sthalik@misaki.pl>2013-04-02 18:31:34 +0200
commitcf80e5b7471cfd5506319aa32e697c9688b1b4be (patch)
tree8bc703091652d2d53f07a6eb7b9a29d319071957 /ftnoir_protocol_wine
parent4f05cb2af239ca8471b77c9f1d1c32e8c4cd3abc (diff)
merge continues
Diffstat (limited to 'ftnoir_protocol_wine')
-rw-r--r--ftnoir_protocol_wine/ftnoir-wrapper-wine-main.cxx61
-rw-r--r--ftnoir_protocol_wine/ftnoir-wrapper-wine-posix.cxx9
-rw-r--r--ftnoir_protocol_wine/ftnoir-wrapper-wine-windows.cxx7
-rw-r--r--ftnoir_protocol_wine/ftnoir_protocol_wine.cpp115
-rw-r--r--ftnoir_protocol_wine/ftnoir_protocol_wine.h99
-rw-r--r--ftnoir_protocol_wine/ftnoir_protocol_wine_dialog.cpp71
-rw-r--r--ftnoir_protocol_wine/ftnoir_protocol_wine_dll.cpp57
-rw-r--r--ftnoir_protocol_wine/ftnoir_winecontrols.ui167
-rw-r--r--ftnoir_protocol_wine/fttypes.h68
-rw-r--r--ftnoir_protocol_wine/images/wine.pngbin0 -> 376 bytes
-rw-r--r--ftnoir_protocol_wine/wine-protocol.qrc5
11 files changed, 659 insertions, 0 deletions
diff --git a/ftnoir_protocol_wine/ftnoir-wrapper-wine-main.cxx b/ftnoir_protocol_wine/ftnoir-wrapper-wine-main.cxx
new file mode 100644
index 00000000..b64b8254
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir-wrapper-wine-main.cxx
@@ -0,0 +1,61 @@
+#include <errno.h>
+#include <stdio.h>
+#include "ftnoir_protocol_wine/fttypes.h"
+class ShmPosix {
+public:
+ ShmPosix(const char *shmName, const char *mutexName, int mapSize);
+ ~ShmPosix();
+ void lock();
+ void unlock();
+ void* mem;
+private:
+ int fd, size;
+};
+
+class ShmWine {
+public:
+ ShmWine(const char *shmName, const char *mutexName, int mapSize);
+ ~ShmWine();
+ void lock();
+ void unlock();
+ void* mem;
+private:
+ void *hMutex, *hMapFile;
+};
+#include <windows.h>
+
+int main(void)
+{
+ ShmPosix lck_posix(WINE_SHM_NAME, WINE_MTX_NAME, sizeof(WineSHM));
+ ShmWine lck_wine("FT_SharedMem", "FT_Mutext", sizeof(TFreeTrackData));
+ if(lck_posix.mem == (void*)-1) {
+ printf("Can't open posix map: %d\n", errno);
+ return 1;
+ }
+ if(lck_wine.mem == NULL) {
+ printf("Can't open Wine map\n");
+ return 1;
+ }
+ WineSHM* shm_posix = (WineSHM*) lck_posix.mem;
+ TFreeTrackData* shm_wine = (TFreeTrackData*) lck_wine.mem;
+ while (!shm_posix->stop) {
+ (void) Sleep(10);
+ lck_posix.lock();
+ if (shm_posix->stop) {
+ lck_posix.unlock();
+ break;
+ }
+ lck_wine.lock();
+ shm_wine->Yaw = shm_posix->rx;
+ shm_wine->Pitch = shm_posix->ry;
+ shm_wine->Roll = shm_posix->rz;
+ shm_wine->X = shm_posix->tx;
+ shm_wine->Y = shm_posix->ty;
+ shm_wine->Z = shm_posix->tz;
+ shm_wine->DataID = 1;
+ shm_wine->CamWidth = 2;
+ shm_wine->CamHeight = 3;
+ lck_wine.unlock();
+ lck_posix.unlock();
+ }
+}
diff --git a/ftnoir_protocol_wine/ftnoir-wrapper-wine-posix.cxx b/ftnoir_protocol_wine/ftnoir-wrapper-wine-posix.cxx
new file mode 100644
index 00000000..c88dd332
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir-wrapper-wine-posix.cxx
@@ -0,0 +1,9 @@
+#ifdef _WIN32
+#undef _WIN32
+#endif
+#ifdef __WIN32
+#undef __WIN32
+#endif
+#define PortableLockedShm ShmPosix
+#include "compat/compat.h"
+#include "compat/compat.cpp"
diff --git a/ftnoir_protocol_wine/ftnoir-wrapper-wine-windows.cxx b/ftnoir_protocol_wine/ftnoir-wrapper-wine-windows.cxx
new file mode 100644
index 00000000..f1345263
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir-wrapper-wine-windows.cxx
@@ -0,0 +1,7 @@
+#ifndef __WIN32
+#define __WIN32
+#endif
+#define PortableLockedShm ShmWine
+#include "fttypes.h"
+#include "compat/compat.h"
+#include "compat/compat.cpp"
diff --git a/ftnoir_protocol_wine/ftnoir_protocol_wine.cpp b/ftnoir_protocol_wine/ftnoir_protocol_wine.cpp
new file mode 100644
index 00000000..bc1e862a
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir_protocol_wine.cpp
@@ -0,0 +1,115 @@
+/********************************************************************************
+* FaceTrackNoIR This program is a private project of the some enthusiastic *
+* gamers from Holland, who don't like to pay much for *
+* head-tracking. *
+* *
+* Copyright (C) 2010 Wim Vriend (Developing) *
+* Ron Hendriks (Researching and Testing) *
+* *
+* Homepage *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU General Public License as published by the *
+* Free Software Foundation; either version 3 of the License, or (at your *
+* option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but *
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
+* more details. *
+* *
+* You should have received a copy of the GNU General Public License along *
+* with this program; if not, see <http://www.gnu.org/licenses/>. *
+* *
+* FTServer FTServer is the Class, that communicates headpose-data *
+* to games, using the FreeTrackClient.dll. *
+********************************************************************************/
+/*
+ Modifications (last one on top):
+ 20110401 - WVR: Moved protocol to a DLL, convenient for installation etc.
+ 20101224 - WVR: Base class is no longer inheriting QThread. sendHeadposeToGame
+ is called from run() of Tracker.cpp
+ 20100601 - WVR: Added Mutex-bit in run(). Thought it wasn't so important (still do...).
+ 20100523 - WVR: Implemented the Freetrack-protocol just like Freetrack does. Earlier
+ FaceTrackNoIR only worked with an adapted DLL, with a putdata function.
+ Now it works direcly in shared memory!
+*/
+#include "ftnoir_protocol_wine.h"
+#include "facetracknoir/global-settings.h"
+#include "fttypes.h"
+
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h> /* For mode constants */
+#include <fcntl.h> /* For O_* constants */
+
+/** constructor **/
+FTNoIR_Protocol::FTNoIR_Protocol() : lck_shm(WINE_SHM_NAME, WINE_MTX_NAME, sizeof(WineSHM)), shm(NULL)
+{
+ if (lck_shm.mem != (void*) -1) {
+ shm = (WineSHM*) lck_shm.mem;
+ memset(shm, 0, sizeof(*shm));
+ }
+}
+
+/** destructor **/
+FTNoIR_Protocol::~FTNoIR_Protocol()
+{
+ if (shm) {
+ shm->stop = true;
+ wrapper.waitForFinished(2000);
+ }
+ wrapper.kill();
+ shm_unlink("/" WINE_SHM_NAME);
+}
+
+void FTNoIR_Protocol::Initialize()
+{
+ wrapper.start("wine", QStringList() << (QCoreApplication::applicationDirPath() + "/ftnoir-wrapper-wine.exe.so"));
+}
+
+void FTNoIR_Protocol::sendHeadposeToGame( THeadPoseData *headpose, THeadPoseData *rawheadpose ) {
+ if (shm)
+ {
+ lck_shm.lock();
+ shm->rx = headpose->yaw / 57.295781;
+ shm->ry = headpose->pitch / 57.295781;
+ shm->rz = headpose->roll / 57.295781;
+ shm->tx = headpose->x * 10;
+ shm->ty = headpose->y * 10;
+ shm->tz = headpose->z * 10;
+ lck_shm.unlock();
+ }
+}
+
+//
+// Check if the Client DLL exists and load it (to test it), if so.
+// Returns 'true' if all seems OK.
+//
+bool FTNoIR_Protocol::checkServerInstallationOK()
+{
+ return lck_shm.mem != (void*)-1;
+}
+
+//
+// Return a name, if present the name from the Game, that is connected...
+//
+void FTNoIR_Protocol::getNameFromGame( char *dest )
+{
+ sprintf(dest, "Wine glue");
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Factory function that creates instances if the Protocol object.
+
+// Export both decorated and undecorated names.
+// GetProtocol - Undecorated name, which can be easily used with GetProcAddress
+// Win32 API function.
+// _GetProtocol@0 - Common name decoration for __stdcall functions in C language.
+//#pragma comment(linker, "/export:GetProtocol=_GetProtocol@0")
+
+extern "C" FTNOIR_PROTOCOL_BASE_EXPORT void* CALLING_CONVENTION GetConstructor()
+{
+ return (IProtocol*) new FTNoIR_Protocol;
+}
diff --git a/ftnoir_protocol_wine/ftnoir_protocol_wine.h b/ftnoir_protocol_wine/ftnoir_protocol_wine.h
new file mode 100644
index 00000000..efc23cd6
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir_protocol_wine.h
@@ -0,0 +1,99 @@
+/********************************************************************************
+* FaceTrackNoIR This program is a private project of some enthusiastic *
+* gamers from Holland, who don't like to pay much for *
+* head-tracking. *
+* *
+* Copyright (C) 2010 Wim Vriend (Developing) *
+* Ron Hendriks (Researching and Testing) *
+* *
+* Homepage *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU General Public License as published by the *
+* Free Software Foundation; either version 3 of the License, or (at your *
+* option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but *
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
+* more details. *
+* *
+* You should have received a copy of the GNU General Public License along *
+* with this program; if not, see <http://www.gnu.org/licenses/>. *
+* *
+* FTServer FTServer is the Class, that communicates headpose-data *
+* to games, using the FreeTrackClient.dll. *
+********************************************************************************/
+#pragma once
+#ifndef INCLUDED_FTSERVER_H
+#define INCLUDED_FTSERVER_H
+
+#include "ftnoir_protocol_base/ftnoir_protocol_base.h"
+#include "ui_ftnoir_winecontrols.h"
+#include "fttypes.h"
+#include <QMessageBox>
+#include <QSettings>
+#include <QLibrary>
+#include <QProcess>
+#include <QDebug>
+#include <QFile>
+#include "facetracknoir/global-settings.h"
+#include "compat/compat.h"
+
+class FTNoIR_Protocol : public IProtocol
+{
+public:
+ FTNoIR_Protocol();
+ ~FTNoIR_Protocol();
+
+ void Initialize();
+
+ bool checkServerInstallationOK();
+ void sendHeadposeToGame( THeadPoseData *headpose, THeadPoseData *rawheadpose );
+ void getNameFromGame( char *dest ); // Take care dest can handle up to 100 chars...
+
+private:
+ PortableLockedShm lck_shm;
+ WineSHM* shm;
+ QProcess wrapper;
+};
+
+// Widget that has controls for FTNoIR protocol client-settings.
+class FTControls: public QWidget, public IProtocolDialog
+{
+ Q_OBJECT
+public:
+
+ FTControls();
+ void showEvent ( QShowEvent * event ) {show();}
+ void Initialize(QWidget *parent) {show();}
+ void registerProtocol(IProtocol *protocol) {}
+ void unRegisterProtocol() {}
+
+private:
+ Ui::UICFTControls ui;
+
+private slots:
+ void doOK();
+ void doCancel();
+};
+
+//*******************************************************************************************************
+// FaceTrackNoIR Protocol DLL. Functions used to get general info on the Protocol
+//*******************************************************************************************************
+class FTNoIR_ProtocolDll : public Metadata
+{
+public:
+ FTNoIR_ProtocolDll();
+ ~FTNoIR_ProtocolDll();
+
+ void getFullName(QString *strToBeFilled) { *strToBeFilled = QString("Wine"); }
+ void getShortName(QString *strToBeFilled) { *strToBeFilled = QString("Wine"); }
+ void getDescription(QString *strToBeFilled) { *strToBeFilled = QString("Wine glue wrapper"); }
+
+ void getIcon(QIcon *icon) { *icon = QIcon(":/images/wine.png"); }
+};
+
+
+#endif//INCLUDED_FTSERVER_H
+//END
diff --git a/ftnoir_protocol_wine/ftnoir_protocol_wine_dialog.cpp b/ftnoir_protocol_wine/ftnoir_protocol_wine_dialog.cpp
new file mode 100644
index 00000000..4021a8e5
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir_protocol_wine_dialog.cpp
@@ -0,0 +1,71 @@
+/********************************************************************************
+* FaceTrackNoIR This program is a private project of some enthusiastic *
+* gamers from Holland, who don't like to pay much for *
+* head-tracking. *
+* *
+* Copyright (C) 2012 Wim Vriend (Developing) *
+* Ron Hendriks (Researching and Testing) *
+* *
+* Homepage *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU General Public License as published by the *
+* Free Software Foundation; either version 3 of the License, or (at your *
+* option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but *
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
+* more details. *
+* *
+* You should have received a copy of the GNU General Public License along *
+* with this program; if not, see <http://www.gnu.org/licenses/>. *
+* *
+********************************************************************************/
+/*
+ Modifications (last one on top):
+ 20120830 - WVR: The Dialog class was used to get general info on the DLL. This
+ had a big disadvantage: the complete dialog was loaded, just to get
+ some data and then it was deleted again (without ever showing the dialog).
+ The ProtocolDll class solves this.
+ The functions to get the name(s) and icon were removed from the two other classes.
+*/
+#include "ftnoir_protocol_wine.h"
+#include <QDebug>
+#include "facetracknoir/global-settings.h"
+
+//*******************************************************************************************************
+// FaceTrackNoIR Client Settings-dialog.
+//*******************************************************************************************************
+
+//
+// Constructor for server-settings-dialog
+//
+FTControls::FTControls() : QWidget()
+{
+ ui.setupUi( this );
+ connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK()));
+ connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));
+}
+
+//
+// Destructor for server-dialog
+
+//
+// OK clicked on server-dialog
+//
+void FTControls::doOK() {
+ this->close();
+}
+
+//
+// Cancel clicked on server-dialog
+//
+void FTControls::doCancel() {
+ this->close();
+}
+
+extern "C" FTNOIR_PROTOCOL_BASE_EXPORT void* CALLING_CONVENTION GetDialog( )
+{
+ return (IProtocolDialog*) new FTControls;
+}
diff --git a/ftnoir_protocol_wine/ftnoir_protocol_wine_dll.cpp b/ftnoir_protocol_wine/ftnoir_protocol_wine_dll.cpp
new file mode 100644
index 00000000..1e9298b0
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir_protocol_wine_dll.cpp
@@ -0,0 +1,57 @@
+/********************************************************************************
+* FaceTrackNoIR This program is a private project of some enthusiastic *
+* gamers from Holland, who don't like to pay much for *
+* head-tracking. *
+* *
+* Copyright (C) 2012 Wim Vriend (Developing) *
+* Ron Hendriks (Researching and Testing) *
+* *
+* Homepage *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU General Public License as published by the *
+* Free Software Foundation; either version 3 of the License, or (at your *
+* option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but *
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
+* more details. *
+* *
+* You should have received a copy of the GNU General Public License along *
+* with this program; if not, see <http://www.gnu.org/licenses/>. *
+* *
+********************************************************************************/
+/*
+ Modifications (last one on top):
+ 20120830 - WVR: The Dialog class was used to get general info on the DLL. This
+ had a big disadvantage: the complete dialog was loaded, just to get
+ some data and then it was deleted again (without ever showing the dialog).
+ The ProtocolDll class solves this.
+ The functions to get the name(s) and icon were removed from the two other classes.
+*/
+#include "ftnoir_protocol_wine.h"
+#include <QDebug>
+#include "facetracknoir/global-settings.h"
+
+FTNoIR_ProtocolDll::FTNoIR_ProtocolDll() {
+}
+
+FTNoIR_ProtocolDll::~FTNoIR_ProtocolDll()
+{
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Factory function that creates instances if the Protocol object.
+
+// Export both decorated and undecorated names.
+// GetProtocolDll - Undecorated name, which can be easily used with GetProcAddress
+// Win32 API function.
+// _GetProtocolDll@0 - Common name decoration for __stdcall functions in C language.
+//#pragma comment(linker, "/export:GetProtocolDll=_GetProtocolDll@0")
+
+extern "C" FTNOIR_PROTOCOL_BASE_EXPORT Metadata* CALLING_CONVENTION GetMetadata()
+{
+ return new FTNoIR_ProtocolDll;
+}
diff --git a/ftnoir_protocol_wine/ftnoir_winecontrols.ui b/ftnoir_protocol_wine/ftnoir_winecontrols.ui
new file mode 100644
index 00000000..71e99d88
--- /dev/null
+++ b/ftnoir_protocol_wine/ftnoir_winecontrols.ui
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UICFTControls</class>
+ <widget class="QWidget" name="UICFTControls">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>411</width>
+ <height>112</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>FreeTrack settings FaceTrackNoIR</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>images/freetrack.png</normaloff>images/freetrack.png</iconset>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <layout class="QVBoxLayout" name="_vertical_layout">
+ <item>
+ <layout class="QHBoxLayout">
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>There are no settings necessary for the Wine protocol.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetDefaultConstraint</enum>
+ </property>
+ <item>
+ <widget class="QPushButton" name="btnOK">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>100</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnCancel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>100</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>10</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+ <slots>
+ <slot>startEngineClicked()</slot>
+ <slot>stopEngineClicked()</slot>
+ <slot>cameraSettingsClicked()</slot>
+ </slots>
+</ui>
diff --git a/ftnoir_protocol_wine/fttypes.h b/ftnoir_protocol_wine/fttypes.h
new file mode 100644
index 00000000..73cbae0e
--- /dev/null
+++ b/ftnoir_protocol_wine/fttypes.h
@@ -0,0 +1,68 @@
+/********************************************************************************
+* FTTypes FTTypes contains th specific type definitions for the *
+* FreeTrack protocol. *
+* It was loosely translated from FTTypes.pas *
+* which was created by the FreeTrack-team. *
+* *
+* Copyright (C) 2010 Wim Vriend (Developing) *
+* Ron Hendriks (Testing and Research) *
+* *
+* Homepage <http://www.free-track.net> *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU General Public License as published by the *
+* Free Software Foundation; either version 3 of the License, or (at your *
+* option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but *
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
+* more details. *
+* *
+* You should have received a copy of the GNU General Public License along *
+* with this program; if not, see <http://www.gnu.org/licenses/>. *
+* *
+* We would like to extend our grattitude to the creators of SweetSpotter, *
+* which has become the basis of this program: "Great work guys!" *
+********************************************************************************/
+#ifndef INCLUDED_FTTYPES_H
+#define INCLUDED_FTTYPES_H
+
+#define WINE_SHM_NAME "facetracknoir-wine-shm"
+#define WINE_MTX_NAME "facetracknoir-wine-mtx"
+
+struct WineSHM {
+ float rx, ry, rz, tx, ty, tz;
+ bool stop;
+};
+
+struct TFreeTrackData {
+ int DataID;
+ int CamWidth;
+ int CamHeight;
+ // virtual pose
+ 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.
+ float RawYaw;
+ float RawPitch;
+ float RawRoll;
+ float RawX;
+ float RawY;
+ float RawZ;
+ // raw points, sorted by Y, origin top left corner
+ float X1;
+ float Y1;
+ float X2;
+ float Y2;
+ float X3;
+ float Y3;
+ float X4;
+ float Y4;
+};
+
+#endif//INCLUDED_FTTYPES_H
diff --git a/ftnoir_protocol_wine/images/wine.png b/ftnoir_protocol_wine/images/wine.png
new file mode 100644
index 00000000..bcf3a012
--- /dev/null
+++ b/ftnoir_protocol_wine/images/wine.png
Binary files differ
diff --git a/ftnoir_protocol_wine/wine-protocol.qrc b/ftnoir_protocol_wine/wine-protocol.qrc
new file mode 100644
index 00000000..af81caea
--- /dev/null
+++ b/ftnoir_protocol_wine/wine-protocol.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>images/wine.png</file>
+ </qresource>
+</RCC>