summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_protocol_ft
diff options
context:
space:
mode:
Diffstat (limited to 'ftnoir_protocol_ft')
-rw-r--r--ftnoir_protocol_ft/ftnoir_ftcontrols.ui405
-rw-r--r--ftnoir_protocol_ft/ftnoir_protocol_ft.cpp86
-rw-r--r--ftnoir_protocol_ft/ftnoir_protocol_ft.h25
-rw-r--r--ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp38
-rw-r--r--ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp29
-rw-r--r--ftnoir_protocol_ft/fttypes.h60
6 files changed, 252 insertions, 391 deletions
diff --git a/ftnoir_protocol_ft/ftnoir_ftcontrols.ui b/ftnoir_protocol_ft/ftnoir_ftcontrols.ui
index 941aaff0..5356d2e5 100644
--- a/ftnoir_protocol_ft/ftnoir_ftcontrols.ui
+++ b/ftnoir_protocol_ft/ftnoir_ftcontrols.ui
@@ -1,223 +1,182 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>UICFTControls</class>
- <widget class="QWidget" name="UICFTControls">
- <property name="windowModality">
- <enum>Qt::NonModal</enum>
- </property>
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>489</width>
- <height>402</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="windowTitle">
- <string>freetrack protocol settings</string>
- </property>
- <property name="windowIcon">
- <iconset resource="ft-protocol.qrc">
- <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="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QGroupBox" name="groupBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>TIRViews</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignJustify|Qt::AlignTop</set>
- </property>
- <property name="flat">
- <bool>false</bool>
- </property>
- <layout class="QFormLayout" name="formLayout_2">
- <item row="0" column="0">
- <widget class="QCheckBox" name="chkTIRViews">
- <property name="layoutDirection">
- <enum>Qt::RightToLeft</enum>
- </property>
- <property name="text">
- <string>Memory hacks</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Only for very old and buggy old games such as CFS3.</string>
- </property>
- <property name="scaledContents">
- <bool>false</bool>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QGroupBox" name="groupBox_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>TrackIR.exe</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignJustify|Qt::AlignTop</set>
- </property>
- <property name="flat">
- <bool>false</bool>
- </property>
- <layout class="QFormLayout" name="formLayout_3">
- <item row="0" column="0">
- <widget class="QCheckBox" name="chkStartDummy">
- <property name="layoutDirection">
- <enum>Qt::RightToLeft</enum>
- </property>
- <property name="text">
- <string>Using EZCA</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>FSX-specific EZCA protocol hacks</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QGroupBox" name="groupBox_3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Select interface</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignJustify|Qt::AlignTop</set>
- </property>
- <property name="flat">
- <bool>false</bool>
- </property>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0">
- <widget class="QComboBox" name="cbxSelectInterface"/>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Disable one of the protocols if game is confused by presence of both at the same time.</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QGroupBox" name="groupBox_4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Repair NPClient location</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignJustify|Qt::AlignTop</set>
- </property>
- <property name="flat">
- <bool>false</bool>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QPushButton" name="bntLocateNPClient">
- <property name="text">
- <string>Locate DLL</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_10">
- <property name="text">
- <string>Replace the registry entry if you want to use other software with the NPClient protocol and it doesn't work automatically.</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources>
- <include location="ft-protocol.qrc"/>
- </resources>
- <connections/>
- <slots>
- <slot>startEngineClicked()</slot>
- <slot>stopEngineClicked()</slot>
- <slot>cameraSettingsClicked()</slot>
- </slots>
-</ui>
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UICFTControls</class>
+ <widget class="QWidget" name="UICFTControls">
+ <property name="windowModality">
+ <enum>Qt::NonModal</enum>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>422</width>
+ <height>305</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>freetrack protocol settings</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="ft-protocol.qrc">
+ <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="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>TIRViews</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignJustify|Qt::AlignTop</set>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="chkTIRViews">
+ <property name="layoutDirection">
+ <enum>Qt::RightToLeft</enum>
+ </property>
+ <property name="text">
+ <string>Memory hacks</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Only for very old and buggy old games such as CFS3.</string>
+ </property>
+ <property name="scaledContents">
+ <bool>false</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QGroupBox" name="groupBox_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Repair NPClient location</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignJustify|Qt::AlignTop</set>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QPushButton" name="bntLocateNPClient">
+ <property name="text">
+ <string>Locate DLL</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_10">
+ <property name="text">
+ <string>Replace the registry entry if you want to use other software with the NPClient protocol and it doesn't work automatically.</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Select interface</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignJustify|Qt::AlignTop</set>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QComboBox" name="cbxSelectInterface"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Disable one of the protocols if game is confused by presence of both at the same time.</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="ft-protocol.qrc"/>
+ </resources>
+ <connections/>
+ <slots>
+ <slot>startEngineClicked()</slot>
+ <slot>stopEngineClicked()</slot>
+ <slot>cameraSettingsClicked()</slot>
+ </slots>
+</ui>
diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp b/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp
index 281af6a0..ae23be3c 100644
--- a/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp
+++ b/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp
@@ -28,9 +28,9 @@
#include "ftnoir_csv/csv.h"
FTNoIR_Protocol::FTNoIR_Protocol() :
- shm(FT_MM_DATA, FREETRACK_MUTEX, sizeof(FTMemMap))
+ shm(FREETRACK_HEAP, FREETRACK_MUTEX, sizeof(FTHeap))
{
- pMemData = (FTMemMap*) shm.mem;
+ pMemData = (FTHeap*) shm.ptr();
ProgramName = "";
intGameID = 0;
viewsStart = 0;
@@ -49,50 +49,30 @@ FTNoIR_Protocol::~FTNoIR_Protocol()
}
void FTNoIR_Protocol::sendHeadposeToGame(const double* headpose) {
- float virtPosX;
- float virtPosY;
- float virtPosZ;
-
- float virtRotX;
- float virtRotY;
- float virtRotZ;
-
- float headPosX;
- float headPosY;
- float headPosZ;
-
- float headRotX;
- float headRotY;
- float headRotZ;
- headRotX = virtRotX = getRadsFromDegrees(headpose[Pitch]) * (s.useDummyExe ? 2.0 : 1.0);
- headRotY = virtRotY = getRadsFromDegrees(headpose[Yaw]);
- headRotZ = virtRotZ = getRadsFromDegrees(headpose[Roll]);
- headPosX = virtPosX = headpose[TX] * 10;
- headPosY = virtPosY = headpose[TY] * 10;
- headPosZ = virtPosZ = headpose[TZ] * 10;
+ float yaw = getRadsFromDegrees(headpose[Yaw]);
+ float pitch = getRadsFromDegrees(headpose[Pitch]);
+ float roll = getRadsFromDegrees(headpose[Roll]);
+ float tx = headpose[TX] * 10.f;
+ float ty = headpose[TY] * 10.f;
+ float tz = headpose[TZ] * 10.f;
shm.lock();
- pMemData->data.RawX = headPosX;
- pMemData->data.RawY = headPosY;
- pMemData->data.RawZ = headPosZ;
- pMemData->data.RawPitch = headRotX;
- pMemData->data.RawYaw = headRotY;
- pMemData->data.RawRoll = headRotZ;
-
- //
- //
- pMemData->data.X = virtPosX;
- pMemData->data.Y = virtPosY;
- pMemData->data.Z = virtPosZ;
- pMemData->data.Pitch = virtRotX;
- pMemData->data.Yaw = virtRotY;
- pMemData->data.Roll = virtRotZ;
-
- //
- // Leave some values 0 yet...
- //
- pMemData->data.X1 = pMemData->data.DataID + 10;
+ pMemData->data.RawX = 0;
+ pMemData->data.RawY = 0;
+ pMemData->data.RawZ = 0;
+ pMemData->data.RawPitch = 0;
+ pMemData->data.RawYaw = 0;
+ pMemData->data.RawRoll = 0;
+
+ pMemData->data.X = tx;
+ pMemData->data.Y = ty;
+ pMemData->data.Z = tz;
+ pMemData->data.Yaw = yaw;
+ pMemData->data.Pitch = pitch;
+ pMemData->data.Roll = roll;
+
+ pMemData->data.X1 = ++pMemData->data.DataID;
pMemData->data.X2 = 0;
pMemData->data.X3 = 0;
pMemData->data.X4 = 0;
@@ -146,28 +126,18 @@ void FTNoIR_Protocol::start_dummy() {
QString program = QCoreApplication::applicationDirPath() + "/TrackIR.exe";
dummyTrackIR.setProgram("\"" + program + "\"");
dummyTrackIR.start();
-
- qDebug() << "FTServer::run() says: TrackIR.exe executed!" << program;
}
bool FTNoIR_Protocol::checkServerInstallationOK()
{
QSettings settings("Freetrack", "FreetrackClient"); // Registry settings (in HK_USER)
QSettings settingsTIR("NaturalPoint", "NATURALPOINT\\NPClient Location"); // Registry settings (in HK_USER)
- QString aLocation; // Location of Client DLL
-
if (!shm.success())
return false;
- qDebug() << "checkServerInstallationOK says: Starting Function";
+ QString aLocation = QCoreApplication::applicationDirPath() + "/";
- //
- // Write the path in the registry (for FreeTrack and FreeTrack20), for the game(s).
- //
- aLocation = QCoreApplication::applicationDirPath() + "/";
-
- qDebug() << "checkServerInstallationOK says: used interface = " << s.intUsedInterface;
switch (s.intUsedInterface) {
case 0: // Use both interfaces
settings.setValue( "Path" , aLocation );
@@ -182,13 +152,9 @@ bool FTNoIR_Protocol::checkServerInstallationOK()
settingsTIR.setValue( "Path" , aLocation );
break;
default:
- // should never be reached
- break;
+ break;
}
- //
- // TIRViews must be started first, or the NPClient DLL will never be loaded.
- //
if (s.useTIRViews) {
start_tirviews();
}
@@ -205,7 +171,7 @@ bool FTNoIR_Protocol::checkServerInstallationOK()
return true;
}
-extern "C" FTNOIR_PROTOCOL_BASE_EXPORT IProtocol* CALLING_CONVENTION GetConstructor()
+extern "C" OPENTRACK_EXPORT IProtocol* GetConstructor()
{
return new FTNoIR_Protocol;
}
diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft.h b/ftnoir_protocol_ft/ftnoir_protocol_ft.h
index 0af9ff07..5a9e5cdd 100644
--- a/ftnoir_protocol_ft/ftnoir_protocol_ft.h
+++ b/ftnoir_protocol_ft/ftnoir_protocol_ft.h
@@ -25,10 +25,8 @@
* to games, using the FreeTrackClient.dll. *
********************************************************************************/
#pragma once
-#include "ftnoir_protocol_base/ftnoir_protocol_base.h"
#include "ui_ftnoir_ftcontrols.h"
-#include "facetracknoir/global-settings.h"
-#include "fttypes.h"
+#include "facetracknoir/plugin-api.hpp"
#include <QMessageBox>
#include <QSettings>
#include <QLibrary>
@@ -36,34 +34,32 @@
#include <QDebug>
#include <QFile>
#include <QString>
-#include <windows.h>
#include <QMutex>
#include <QMutexLocker>
#include "compat/compat.h"
#include "facetracknoir/options.h"
+#include "fttypes.h"
using namespace options;
struct settings {
pbundle b;
value<int> intUsedInterface;
- value<bool> useTIRViews, useDummyExe;
+ value<bool> useTIRViews;
settings() :
b(bundle("proto-freetrack")),
intUsedInterface(b, "used-interfaces", 0),
- useTIRViews(b, "use-memory-hacks", false),
- useDummyExe(b, "ezca-mode", false)
+ useTIRViews(b, "use-memory-hacks", false)
{}
};
-//typedef char *(WINAPI *importProvider)(void);
-typedef void (WINAPI *importTIRViewsStart)(void);
-typedef void (WINAPI *importTIRViewsStop)(void);
+typedef void (__stdcall *importTIRViewsStart)(void);
+typedef void (__stdcall *importTIRViewsStop)(void);
class FTNoIR_Protocol : public IProtocol
{
public:
FTNoIR_Protocol();
- virtual ~FTNoIR_Protocol();
+ ~FTNoIR_Protocol() override;
bool checkServerInstallationOK( );
void sendHeadposeToGame( const double *headpose );
QString getGameName() {
@@ -71,14 +67,13 @@ public:
return connected_game;
}
private:
- importTIRViewsStart viewsStart; // Functions inside TIRViews.dll
+ importTIRViewsStart viewsStart;
importTIRViewsStop viewsStop;
-
- FTMemMap *pMemData;
+
+ FTHeap *pMemData;
QString game_name;
PortableLockedShm shm;
- // Private properties
QString ProgramName;
QLibrary FTIRViewsLib;
QProcess dummyTrackIR;
diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp b/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp
index 5ce903b7..3e440607 100644
--- a/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp
+++ b/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp
@@ -26,26 +26,14 @@
#include <QDebug>
#include <QFileDialog>
-//*******************************************************************************************************
-// FaceTrackNoIR Client Settings-dialog.
-//*******************************************************************************************************
-
-//
-// Constructor for server-settings-dialog
-//
-FTControls::FTControls() :
- QWidget()
+FTControls::FTControls()
{
- QString aFileName; // File Path and Name
-
ui.setupUi( this );
- // Connect Qt signals to member-functions
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK()));
connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel()));
connect(ui.bntLocateNPClient, SIGNAL(clicked()), this, SLOT(selectDLL()));
- tie_setting(s.useDummyExe, ui.chkStartDummy);
tie_setting(s.useTIRViews, ui.chkTIRViews);
ui.cbxSelectInterface->addItem("Enable both");
@@ -54,8 +42,8 @@ FTControls::FTControls() :
tie_setting(s.intUsedInterface, ui.cbxSelectInterface);
- aFileName = QCoreApplication::applicationDirPath() + "/TIRViews.dll";
- if ( !QFile::exists( aFileName ) ) {
+ QFile memhacks_pathname(QCoreApplication::applicationDirPath() + "/TIRViews.dll");
+ if (!memhacks_pathname.exists()) {
ui.chkTIRViews->setChecked( false );
ui.chkTIRViews->setEnabled ( false );
}
@@ -70,27 +58,21 @@ void FTControls::doOK() {
}
void FTControls::doCancel() {
- s.b->revert();
+ s.b->reload();
this->close();
}
void FTControls::selectDLL() {
- QString fileName = QFileDialog::getOpenFileName( this, tr("Select the desired NPClient DLL"), QCoreApplication::applicationDirPath() + "/NPClient.dll", tr("Dll file (*.dll);;All Files (*)"));
-
- //
- // Write the location of the file in the required Registry-key.
- //
- if (! fileName.isEmpty() ) {
- if (fileName.endsWith("NPClient.dll", Qt::CaseInsensitive) ) {
- QSettings settingsTIR("NaturalPoint", "NATURALPOINT\\NPClient Location"); // Registry settings (in HK_USER)
- QString aLocation = fileName.left(fileName.length() - 12); // Location of Client DLL
+ QString filename = QFileDialog::getOpenFileName( this, tr("Select the desired NPClient DLL"), QCoreApplication::applicationDirPath() + "/NPClient.dll", tr("Dll file (*.dll);;All Files (*)"));
- settingsTIR.setValue( "Path" , aLocation );
- }
+ if (! filename.isEmpty() ) {
+ QSettings node("NaturalPoint", "NATURALPOINT\\NPClient Location");
+ QFileInfo dllname(filename);
+ node.setValue( "Path" , dllname.dir().path() );
}
}
-extern "C" FTNOIR_PROTOCOL_BASE_EXPORT IProtocolDialog* CALLING_CONVENTION GetDialog( )
+extern "C" OPENTRACK_EXPORT IProtocolDialog* GetDialog()
{
return new FTControls;
}
diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp b/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp
index 38f11211..d7a13fa5 100644
--- a/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp
+++ b/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp
@@ -1,30 +1,7 @@
-/********************************************************************************
-* 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/>. *
-* *
-********************************************************************************/
-#include "ftnoir_protocol_ft.h"
+#include "facetracknoir/plugin-support.h"
+#include "ftnoir_protocol_ft/ftnoir_protocol_ft.h"
-extern "C" FTNOIR_PROTOCOL_BASE_EXPORT Metadata* CALLING_CONVENTION GetMetadata()
+extern "C" OPENTRACK_EXPORT Metadata* GetMetadata()
{
return new FTNoIR_ProtocolDll;
}
diff --git a/ftnoir_protocol_ft/fttypes.h b/ftnoir_protocol_ft/fttypes.h
index ced844dc..f41350c8 100644
--- a/ftnoir_protocol_ft/fttypes.h
+++ b/ftnoir_protocol_ft/fttypes.h
@@ -16,45 +16,38 @@
* * The FTTypes sources were translated from the original Delphi sources *
* * created by the FreeTrack developers. *
*/
-#ifndef INCLUDED_FTTYPES_H
-#define INCLUDED_FTTYPES_H
-#if !defined(_WIN32)
+#pragma once
+
+#ifndef _MSC_VER
# include <inttypes.h>
-typedef int32_t my_32bit_int;
-# define WINAPI
#else
-# include <windows.h>
-typedef __int32 my_32bit_int;
+typedef unsigned __int32 uint32_t;
#endif
-//#include "Registry.h"
-
-// static const char* FT_CLIENT_LOCATION = "Software\\Freetrack\\FreetrackClient";
-//#define FT_CLIENT_FILENAME "FreeTrackClient.Dll"
-#define FT_MM_DATA "FT_SharedMem"
-//#define FREETRACK "Freetrack"
+#define FREETRACK_HEAP "FT_SharedMem"
#define FREETRACK_MUTEX "FT_Mutext"
-struct TFreeTrackData {
+/* only 6 headpose floats and the data id are filled -sh */
+typedef struct __FTData {
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
+ /* 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.
+ /* 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
+ /* raw points, sorted by Y, origin top left corner */
float X1;
float Y1;
float X2;
@@ -63,24 +56,13 @@ struct TFreeTrackData {
float Y3;
float X4;
float Y4;
-};
-typedef TFreeTrackData * PFreetrackData;
+} FTData;
-struct FTMemMap {
- TFreeTrackData data;
- my_32bit_int GameID;
- unsigned char table[8];
- my_32bit_int GameID2;
-};
-typedef FTMemMap * PFTMemMap;
+/* we add some shit at the end for other legacy proto, sadly */
-//extern bool (*FTGetData) (PFreetrackData data);
-// DLL function signatures
-// These match those given in FTTypes.pas
-// WINAPI is macro for __stdcall defined somewhere in the depths of windows.h
-typedef bool (WINAPI *importGetData)(TFreeTrackData * data);
-typedef char *(WINAPI *importGetDllVersion)(void);
-typedef void (WINAPI *importReportID)(int name);
-typedef char *(WINAPI *importProvider)(void);
-
-#endif//INCLUDED_FTTYPES_H
+typedef struct __FTHeap {
+ FTData data;
+ int32_t GameID;
+ unsigned char table[8];
+ int32_t GameID2;
+} FTHeap;