summaryrefslogtreecommitdiffhomepage
path: root/FaceTrackNoIR
diff options
context:
space:
mode:
authorWim Vriend <facetracknoir@gmail.com>2011-04-04 19:58:09 +0000
committerWim Vriend <facetracknoir@gmail.com>2011-04-04 19:58:09 +0000
commitd3456cb84b428b2f5070517d6e571f6b2724dd24 (patch)
treeb4885f52965952f8a4a529bce3edadc6dc425867 /FaceTrackNoIR
parent28c091a886e6c98f41d3f5f8b153768b4a589fcd (diff)
Move protocols to DLL: TrackIR
git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@61 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb
Diffstat (limited to 'FaceTrackNoIR')
-rw-r--r--FaceTrackNoIR/FGServer.cpp336
-rw-r--r--FaceTrackNoIR/FGServer.h106
-rw-r--r--FaceTrackNoIR/FGTypes.h28
-rw-r--r--FaceTrackNoIR/FTIRServer.cpp481
-rw-r--r--FaceTrackNoIR/FTIRServer.h121
-rw-r--r--FaceTrackNoIR/FTIRTypes.h183
-rw-r--r--FaceTrackNoIR/FTNoIR_FGcontrols.ui279
-rw-r--r--FaceTrackNoIR/FTNoIR_FTIRcontrols.ui194
-rw-r--r--FaceTrackNoIR/FaceApp.cpp2
-rw-r--r--FaceTrackNoIR/FaceTrackNoIR.cpp47
-rw-r--r--FaceTrackNoIR/FaceTrackNoIR.h11
-rw-r--r--FaceTrackNoIR/FaceTrackNoIR.vcproj176
-rw-r--r--FaceTrackNoIR/tracker.cpp25
-rw-r--r--FaceTrackNoIR/tracker.h4
14 files changed, 74 insertions, 1919 deletions
diff --git a/FaceTrackNoIR/FGServer.cpp b/FaceTrackNoIR/FGServer.cpp
deleted file mode 100644
index 66cc1d5d..00000000
--- a/FaceTrackNoIR/FGServer.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/********************************************************************************
-* 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/>. *
-* *
-* FGServer FGServer is the Class, that communicates headpose-data *
-* to FlightGear, using UDP. *
-* It is based on the (Linux) example made by Melchior FRANZ. *
-********************************************************************************/
-/*
- Modifications (last one on top):
- 20101224 - WVR: Base class is no longer inheriting QThread. sendHeadposeToGame
- is called from run() of Tracker.cpp
-*/
-#include <QtGui>
-#include <QtNetwork>
-#include "FGServer.h"
-#include "Tracker.h"
-#include <Winsock.h>
-
-/** constructor **/
-FGServer::FGServer( Tracker *parent ) {
-
- // Save the parent
- headTracker = parent;
- loadSettings();
-}
-
-/** destructor **/
-FGServer::~FGServer() {
- if (inSocket != 0) {
- inSocket->close();
- delete inSocket;
- }
-
- if (outSocket != 0) {
- outSocket->close();
- delete outSocket;
- }
-}
-
-//
-// Update Headpose in Game.
-//
-void FGServer::sendHeadposeToGame() {
-int no_bytes;
-QHostAddress sender;
-quint16 senderPort;
-
- //
- // Copy the Raw measurements directly to the client.
- //
- TestData.x = virtPosX;
- TestData.y = virtPosY;
- TestData.z = virtPosZ;
- TestData.p = virtRotX;
- TestData.h = virtRotY;
- TestData.r = virtRotZ;
- TestData.status = fg_cmd;
-
- //
- // Try to send an UDP-message to the FlightGear
- //
-
- //! [1]
-// no_bytes = outSocket->writeDatagram((const char *) &TestData, sizeof( TestData ), QHostAddress::LocalHost, 5550);
- if (outSocket != 0) {
- no_bytes = outSocket->writeDatagram((const char *) &TestData, sizeof( TestData ), destIP, destPort);
- if ( no_bytes > 0) {
- // qDebug() << "FGServer::writePendingDatagrams says: bytes send =" << no_bytes << sizeof( double );
- }
- else {
- qDebug() << "FGServer::writePendingDatagrams says: nothing sent!";
- }
- }
-
- //
- // FlightGear keeps sending data, so we must read that here.
- //
- if (inSocket != 0) {
- while (inSocket->hasPendingDatagrams()) {
-
- QByteArray datagram;
- datagram.resize(inSocket->pendingDatagramSize());
-
- inSocket->readDatagram( (char * ) &cmd, sizeof(cmd), &sender, &senderPort);
-
- fg_cmd = cmd; // Let's just accept that command for now...
- if ( cmd > 0 ) {
- qDebug() << "FGServer::sendHeadposeToGame hasPendingDatagrams, cmd = " << cmd;
- headTracker->handleGameCommand ( cmd ); // Send it upstream, for the Tracker to handle
- }
- }
- }
-}
-
-//
-// Check if the Client DLL exists and load it (to test it), if so.
-// Returns 'true' if all seems OK.
-//
-bool FGServer::checkServerInstallationOK( HANDLE handle )
-{
- // Init. the data
- TestData.x = 0.0f;
- TestData.y = 0.0f;
- TestData.z = 0.0f;
- TestData.h = 0.0f;
- TestData.p = 0.0f;
- TestData.r = 0.0f;
- TestData.status = 0;
- fg_cmd = 1;
-
- inSocket = 0;
- outSocket = 0;
-
- //
- // Create UDP-sockets.
- //
- if (inSocket == 0) {
- qDebug() << "FGServer::sendHeadposeToGame creating insocket";
- inSocket = new QUdpSocket();
-
- // Connect the inSocket to the port, to receive messages
- if (!inSocket->bind(QHostAddress::Any, destPort+1)) {
- QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to bind UDP-port",QMessageBox::Ok,QMessageBox::NoButton);
- delete inSocket;
- inSocket = 0;
- return false;
- }
- }
-
- if (outSocket == 0) {
- outSocket = new QUdpSocket();
- }
-
- return true;
-}
-
-//
-// Load the current Settings from the currently 'active' INI-file.
-//
-void FGServer::loadSettings() {
-
- QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
-
- QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
- QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file)
-
- iniFile.beginGroup ( "FG" );
-
- bool blnLocalPC = iniFile.value ( "LocalPCOnly", 1 ).toBool();
- if (blnLocalPC) {
- destIP = QHostAddress::LocalHost;
- }
- else {
- QString destAddr = iniFile.value ( "IP-1", 192 ).toString() + "." + iniFile.value ( "IP-2", 168 ).toString() + "." + iniFile.value ( "IP-3", 2 ).toString() + "." + iniFile.value ( "IP-4", 1 ).toString();
- destIP = QHostAddress( destAddr );
- }
- destPort = iniFile.value ( "PortNumber", 5550 ).toInt();
-
- iniFile.endGroup ();
-}
-
-//
-// Constructor for server-settings-dialog
-//
-FGControls::FGControls( QWidget *parent, Qt::WindowFlags f ) :
-QWidget( parent , f)
-{
- ui.setupUi( this );
-
- QPoint offsetpos(100, 100);
- this->move(parent->pos() + offsetpos);
-
- // Connect Qt signals to member-functions
- connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK()));
- connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));
- connect(ui.chkLocalPC, SIGNAL(stateChanged(int)), this, SLOT(chkLocalPCOnlyChanged()));
- connect(ui.spinIPFirstNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged()));
- connect(ui.spinIPSecondNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged()));
- connect(ui.spinIPThirdNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged()));
- connect(ui.spinIPFourthNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged()));
- connect(ui.spinPortNumber, SIGNAL(valueChanged(int)), this, SLOT(settingChanged()));
-
- // Load the settings from the current .INI-file
- loadSettings();
-}
-
-//
-// Destructor for server-dialog
-//
-FGControls::~FGControls() {
- qDebug() << "~FGControls() says: started";
-}
-
-//
-// OK clicked on server-dialog
-//
-void FGControls::doOK() {
- save();
- this->close();
-}
-
-// override show event
-void FGControls::showEvent ( QShowEvent * event ) {
- loadSettings();
-}
-
-//
-// Cancel clicked on server-dialog
-//
-void FGControls::doCancel() {
- //
- // Ask if changed Settings should be saved
- //
- if (settingsDirty) {
- int ret = QMessageBox::question ( this, "Settings have changed", "Do you want to save the settings?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard );
-
- qDebug() << "doCancel says: answer =" << ret;
-
- switch (ret) {
- case QMessageBox::Save:
- save();
- this->close();
- break;
- case QMessageBox::Discard:
- this->close();
- break;
- case QMessageBox::Cancel:
- // Cancel was clicked
- break;
- default:
- // should never be reached
- break;
- }
- }
- else {
- this->close();
- }
-}
-
-//
-// Load the current Settings from the currently 'active' INI-file.
-//
-void FGControls::loadSettings() {
-
-// qDebug() << "loadSettings says: Starting ";
- QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
-
- QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
- QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file)
-
-// qDebug() << "loadSettings says: iniFile = " << currentFile;
-
- iniFile.beginGroup ( "FG" );
- ui.chkLocalPC->setChecked (iniFile.value ( "LocalPCOnly", 1 ).toBool());
-
- ui.spinIPFirstNibble->setValue( iniFile.value ( "IP-1", 192 ).toInt() );
- ui.spinIPSecondNibble->setValue( iniFile.value ( "IP-2", 168 ).toInt() );
- ui.spinIPThirdNibble->setValue( iniFile.value ( "IP-3", 2 ).toInt() );
- ui.spinIPFourthNibble->setValue( iniFile.value ( "IP-4", 1 ).toInt() );
-
- ui.spinPortNumber->setValue( iniFile.value ( "PortNumber", 5550 ).toInt() );
- iniFile.endGroup ();
-
- chkLocalPCOnlyChanged();
- settingsDirty = false;
-
-}
-
-//
-// Save the current Settings to the currently 'active' INI-file.
-//
-void FGControls::save() {
-
- QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
-
- QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
- QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file)
-
- iniFile.beginGroup ( "FG" );
- iniFile.setValue ( "LocalPCOnly", ui.chkLocalPC->isChecked() );
- iniFile.setValue ( "IP-1", ui.spinIPFirstNibble->value() );
- iniFile.setValue ( "IP-2", ui.spinIPSecondNibble->value() );
- iniFile.setValue ( "IP-3", ui.spinIPThirdNibble->value() );
- iniFile.setValue ( "IP-4", ui.spinIPFourthNibble->value() );
- iniFile.setValue ( "PortNumber", ui.spinPortNumber->value() );
- iniFile.endGroup ();
-
- settingsDirty = false;
-}
-
-//
-// Handle change of the checkbox.
-//
-void FGControls::chkLocalPCOnlyChanged() {
-
- if ( ui.chkLocalPC->isChecked() ) {
- ui.spinIPFirstNibble->setValue( 127 );
- ui.spinIPFirstNibble->setEnabled ( false );
- ui.spinIPSecondNibble->setValue( 0 );
- ui.spinIPSecondNibble->setEnabled ( false );
- ui.spinIPThirdNibble->setValue( 0 );
- ui.spinIPThirdNibble->setEnabled ( false );
- ui.spinIPFourthNibble->setValue( 1 );
- ui.spinIPFourthNibble->setEnabled ( false );
- }
- else {
- ui.spinIPFirstNibble->setEnabled ( true );
- ui.spinIPSecondNibble->setEnabled ( true );
- ui.spinIPThirdNibble->setEnabled ( true );
- ui.spinIPFourthNibble->setEnabled ( true );
- }
-
- settingsDirty = true;
-}
-
-//END
diff --git a/FaceTrackNoIR/FGServer.h b/FaceTrackNoIR/FGServer.h
deleted file mode 100644
index 6efe2ba3..00000000
--- a/FaceTrackNoIR/FGServer.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/********************************************************************************
-* 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/>. *
-* *
-* FGServer FGServer is the Class, that communicates headpose-data *
-* to FlightGear, using UDP. *
-* It is based on the (Linux) example made by Melchior FRANZ. *
-********************************************************************************/
-#pragma once
-#ifndef INCLUDED_FGSERVER_H
-#define INCLUDED_FGSERVER_H
-
-#include "FTNoIR_cxx_protocolserver.h"
-#include "FGTypes.h"
-#include <QString>
-#include <QMessageBox>
-#include <QSettings>
-#include <QFile>
-#include <QApplication>
-#include <QDebug>
-//#include <QThread>
-#include <QMutex>
-#include <QLibrary>
-#include <QUdpSocket>
-
-using namespace std;
-using namespace v4friend::ftnoir;
-
-#include "ui_FTNoIR_FGcontrols.h"
-
-class Tracker; // pre-define parent-class to avoid circular includes
-
-class FGServer : public ProtocolServerBase {
- Q_OBJECT
-
-public:
-
- // public member methods
- FGServer( Tracker *parent );
- ~FGServer();
-
- // protected member methods
-protected:
- bool checkServerInstallationOK( HANDLE handle );
- void sendHeadposeToGame();
-
-private:
- Tracker *headTracker; // For upstream messages...
- TFlightGearData TestData;
- QUdpSocket *inSocket; // Receive from FligthGear
- QUdpSocket *outSocket; // Send to FligthGear
- qint32 cmd;
- qint32 fg_cmd; // Command from FlightGear
- QHostAddress destIP; // Destination IP-address
- int destPort; // Destination port-number
- void loadSettings();
-};
-
-// Widget that has controls for FG server-settings.
-class FGControls: public QWidget, public Ui::UICFGControls
-{
- Q_OBJECT
-public:
-
- explicit FGControls( QWidget *parent=0, Qt::WindowFlags f=0 );
- virtual ~FGControls();
- void showEvent ( QShowEvent * event );
-
-private:
- Ui::UICFGControls ui;
- void loadSettings();
- void save();
-
- /** helper **/
- bool settingsDirty;
-
-private slots:
- void doOK();
- void doCancel();
- void chkLocalPCOnlyChanged();
- void settingChanged() { settingsDirty = true; };
-};
-
-
-
-#endif//INCLUDED_FGSERVER_H
-//END
diff --git a/FaceTrackNoIR/FGTypes.h b/FaceTrackNoIR/FGTypes.h
deleted file mode 100644
index 949dc213..00000000
--- a/FaceTrackNoIR/FGTypes.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/********************************************************************************
-* 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 *
-* *
-* Type definitions for the FlightGear server. *
-********************************************************************************/
-#pragma once
-#ifndef INCLUDED_FGTYPES_H
-#define INCLUDED_FGTYPES_H
-
-#include "Windows.h"
-
-//
-// x,y,z position in metres, heading, pitch and roll in degrees...
-//
-#pragma pack(2)
-struct TFlightGearData {
- double x, y, z, h, p, r;
- int status;
-};
-
-#endif//INCLUDED_FGTYPES_H
diff --git a/FaceTrackNoIR/FTIRServer.cpp b/FaceTrackNoIR/FTIRServer.cpp
deleted file mode 100644
index 7268d1dc..00000000
--- a/FaceTrackNoIR/FTIRServer.cpp
+++ /dev/null
@@ -1,481 +0,0 @@
-/********************************************************************************
-* FTIRServer FTIRServer is the Class, that communicates headpose-data *
-* to games, using the NPClient.dll. *
-* *
-* Copyright (C) 2010 Wim Vriend (Developing) *
-* Ron Hendriks (Testing and Research) *
-* *
-* 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):
- 20101224 - WVR: Base class is no longer inheriting QThread. sendHeadposeToGame
- is called from run() of Tracker.cpp
- 20101127 - WVR: Added TrackIR.exe process for EZCA etc...
- 20101023 - WVR: Added TIRViews for FS2004, Combat FS3, etc...
-*/
-#include "FTIRServer.h"
-
-/** constructor **/
-FTIRServer::FTIRServer() {
- loadSettings();
- ProgramName = "";
- dummyTrackIR = 0;
- viewsStart = 0;
- viewsStop = 0;
-}
-
-/** destructor **/
-FTIRServer::~FTIRServer() {
-
- //
- // Destroy the File-mapping
- //
- FTIRDestroyMapping();
-
- //
- // Free the DLL's
- //
- FTIRClientLib.unload();
- if (viewsStop != NULL) {
- viewsStop();
- FTIRViewsLib.unload();
- }
-
- //
- // Kill the dummy TrackIR process.
- //
- qDebug() << "FTIRServer::~FTIRServer() about to kill TrackIR.exe process";
- try {
- if (dummyTrackIR) {
- dummyTrackIR->kill();
- }
- }
- catch (...)
- {
- qDebug() << "~FTIRServer says: some error occurred";
- }
-
-}
-
-/** destructor **/
-void FTIRServer::stopServer() {
-
- ////
- //// Destroy the File-mapping
- ////
- //FTIRDestroyMapping();
-
- ////
- //// Free the DLL's
- ////
- //try {
- // FTIRClientLib.unload();
- // if (useTIRViews && FTIRViewsLib.isLoaded()) {
- // FTIRViewsLib.unload();
- // }
- //}
- //catch (...)
- //{
- // qDebug() << "~FTIRServer says: some error occurred";
- //}
-
- ////
- //// Kill the dummy TrackIR process.
- ////
- //qDebug() << "FTIRServer::~FTIRServer() about to kill TrackIR.exe process";
- //try {
- // if (dummyTrackIR) {
- // dummyTrackIR->kill();
- // }
- //}
- //catch (...)
- // {
- // qDebug() << "~FTIRServer says: some error occurred";
- //}
-
-}
-
-//
-// Update Headpose in Game.
-//
-void FTIRServer::sendHeadposeToGame() {
-
- //
- // Check if the pointer is OK and wait for the Mutex.
- // Use the setposition in the (special) DLL, to write the headpose-data.
- //
- if ( (pMemData != NULL) && (WaitForSingleObject(hFTIRMutex, 100) == WAIT_OBJECT_0) ) {
- setposition (virtPosX, virtPosY, virtPosZ, virtRotZ, virtRotX, virtRotY );
- ReleaseMutex(hFTIRMutex);
- }
-}
-
-//
-// Create a memory-mapping to the TrackIR data.
-// It contains the tracking data, a handle to the main-window and the program-name of the Game!
-//
-//
-bool FTIRServer::FTIRCreateMapping( HANDLE handle )
-{
- qDebug() << "FTIRCreateMapping says: Starting Function";
-
- //
- // A FileMapping is used to create 'shared memory' between the FTIRServer and the FTClient.
- //
- // Try to create a FileMapping to the Shared Memory.
- // If one already exists: close it.
- //
- hFTIRMemMap = CreateFileMappingA( INVALID_HANDLE_VALUE , 00 , PAGE_READWRITE , 0 ,
- sizeof( TRACKIRDATA ) + sizeof( HANDLE ) + 100,
- (LPCSTR) FTIR_MM_DATA );
-
- if ( hFTIRMemMap != 0 ) {
- qDebug() << "FTIRCreateMapping says: FileMapping Created!" << hFTIRMemMap;
- }
-
- if ( ( hFTIRMemMap != 0 ) && ( (long) GetLastError == ERROR_ALREADY_EXISTS ) ) {
- CloseHandle( hFTIRMemMap );
- hFTIRMemMap = 0;
- }
-
- //
- // Create a new FileMapping, Read/Write access
- //
- hFTIRMemMap = OpenFileMappingA( FILE_MAP_ALL_ACCESS , false , (LPCSTR) FTIR_MM_DATA );
- if ( ( hFTIRMemMap != 0 ) ) {
- qDebug() << "FTIRCreateMapping says: FileMapping Created again:" << hFTIRMemMap;
- pMemData = (FTIRMemMap *) MapViewOfFile(hFTIRMemMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(TRACKIRDATA) + sizeof(hFTIRMemMap) + 100);
- if (pMemData != NULL) {
- pMemData->RegisteredHandle = handle; // The game uses the handle, to send a message that the Program-Name was set!
- }
- hFTIRMutex = CreateMutexA(NULL, false, FTIR_MUTEX);
- }
- else {
- QMessageBox::information(0, "FaceTrackNoIR error", QString("FTIRServer Error! \n"));
- return false;
- }
-
- return true;
-}
-
-//
-// Destory the FileMapping to the shared memory
-//
-void FTIRServer::FTIRDestroyMapping()
-{
- if ( pMemData != NULL ) {
- UnmapViewOfFile ( pMemData );
- }
-
- if (hFTIRMutex != 0) {
- CloseHandle( hFTIRMutex );
- }
- hFTIRMutex = 0;
-
- if (hFTIRMemMap != 0) {
- CloseHandle( hFTIRMemMap );
- }
- hFTIRMemMap = 0;
-
-}
-
-//
-// Get the program-name from the client (Game!).
-//
-QString FTIRServer::GetProgramName() {
-QString *str;
-
- str = new QString("Test");
- return *str;
-}
-
-//
-// Check if the Client DLL exists and load it (to test it), if so.
-// Returns 'true' if all seems OK.
-//
-bool FTIRServer::checkServerInstallationOK( HANDLE handle )
-{
- QSettings settings("NaturalPoint", "NATURALPOINT\\NPClient Location"); // Registry settings (in HK_USER)
- QString aLocation; // Location of Client DLL
- QString aFileName; // File Path and Name
-
- //importProvider provider;
- //char *pProvider;
-
- qDebug() << "FTCheckClientDLL says: Starting Function";
-
- try {
-
- //
- // Load the NPClient.dll from the current path of FaceTrackNoIR, because there is no
- // guarantee TrackIR or GlovePIE is also installed.
- //
- // Write this path in the registry (under NaturalPoint/NATURALPOINT, for the game(s).
- //
- aLocation = QCoreApplication::applicationDirPath() + "/";
- qDebug() << "FTCheckClientDLL says: Location of DLL =" << aLocation;
-
- //
- // Append a '/' to the Path and then the name of the dll.
- //
- aFileName = aLocation;
- aFileName.append(FTIR_CLIENT_FILENAME);
- qDebug() << "FTCheckClientDLL says: Full path of DLL =" << aFileName;
-
- if ( QFile::exists( aFileName ) ) {
- qDebug() << "FTCheckClientDLL says: DLL exists!";
- //
- // Write the path to the key in the Registry, so the game(s) can find it too...
- //
- settings.setValue( "Path" , aLocation );
-
- //
- // Load the DLL and map to the functions in it.
- //
- FTIRClientLib.setFileName(aFileName);
- FTIRClientLib.load();
- }
- else {
- QMessageBox::information(0, "FaceTrackNoIR error", QString("Necessary file (NPClient.dll) was NOT found!\n"));
- return false;
- }
-
- //
- // Also load TIRViews.dll, to support some older games
- //
- if (useTIRViews) {
- aFileName = aLocation;
- aFileName.append(FTIR_VIEWS_FILENAME);
- FTIRViewsLib.setFileName(aFileName);
- FTIRViewsLib.load();
- }
-
- //
- // Start TrackIR.exe, also to support some older games and EZCA
- // Some TrackIR clients check if a process called TrackIR.exe is running.
- // This should do the trick
- //
- QString program = "TrackIR.exe";
- dummyTrackIR = new QProcess(this);
- dummyTrackIR->start(program);
-
- } catch(...) {
- settings.~QSettings();
- }
-
- //
- // Create the File-mapping for Inter Process Communication
- //
- if (!FTIRCreateMapping( handle )){
- return false;
- }
-
- //
- // Find the functions in the DLL's
- //
- // Get the setposition function from the DLL and use it!
- //
- setposition = (importSetPosition) FTIRClientLib.resolve("SetPosition");
- if (setposition == NULL) {
- qDebug() << "FTIRServer::run() says: SetPosition function not found in DLL!";
- return false;
- }
- else {
- setposition (7.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f);
- }
-
- //
- // Load the Start function from TIRViews.dll and call it, to start compatibility with older games
- //
- if (useTIRViews) {
- viewsStart = (importTIRViewsStart) FTIRViewsLib.resolve("TIRViewsStart");
- if (viewsStart == NULL) {
- qDebug() << "FTIRServer::run() says: TIRViewsStart function not found in DLL!";
- }
- else {
- qDebug() << "FTIRServer::run() says: TIRViewsStart executed!";
- viewsStart();
- }
-
- //
- // Load the Stop function from TIRViews.dll. Call it when terminating the thread.
- //
- viewsStop = (importTIRViewsStop) FTIRViewsLib.resolve("TIRViewsStop");
- if (viewsStop == NULL) {
- qDebug() << "FTIRServer::run() says: TIRViewsStop function not found in DLL!";
- }
- }
- return true;
-}
-
-//
-// Scale the measured value to the Joystick values
-//
-float FTIRServer::scale2AnalogLimits( float x, float min_x, float max_x ) {
-double y;
-double local_x;
-
- local_x = x;
- if (local_x > max_x) {
- local_x = max_x;
- }
- if (local_x < min_x) {
- local_x = min_x;
- }
- y = ( NP_AXIS_MAX * local_x ) / max_x;
-
- return (float) y;
-}
-
-//
-// Load the current Settings from the currently 'active' INI-file.
-//
-void FTIRServer::loadSettings() {
-
- QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
-
- QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
- QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file)
-
- iniFile.beginGroup ( "FTIR" );
- useTIRViews = iniFile.value ( "useTIRViews", 0 ).toBool();
- iniFile.endGroup ();
-}
-
-//
-// Constructor for server-settings-dialog
-//
-FTIRControls::FTIRControls( QWidget *parent, Qt::WindowFlags f ) :
-QWidget( parent , f)
-{
- QString aFileName; // File Path and Name
-
- ui.setupUi( this );
-
- QPoint offsetpos(100, 100);
- this->move(parent->pos() + offsetpos);
-
- // Connect Qt signals to member-functions
- connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK()));
- connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel()));
- connect(ui.chkTIRViews, SIGNAL(stateChanged(int)), this, SLOT(chkTIRViewsChanged()));
-
- aFileName = QCoreApplication::applicationDirPath() + "/";
- aFileName.append(FTIR_VIEWS_FILENAME);
- if ( !QFile::exists( aFileName ) ) {
- ui.chkTIRViews->setChecked( false );
- ui.chkTIRViews->setEnabled ( false );
- }
- else {
- ui.chkTIRViews->setEnabled ( true );
- }
-
- // Load the settings from the current .INI-file
- loadSettings();
-}
-
-//
-// Destructor for server-dialog
-//
-FTIRControls::~FTIRControls() {
- qDebug() << "~FTIRControls() says: started";
-}
-
-//
-// OK clicked on server-dialog
-//
-void FTIRControls::doOK() {
- save();
- this->close();
-}
-
-// override show event
-void FTIRControls::showEvent ( QShowEvent * event ) {
- loadSettings();
-}
-
-//
-// Cancel clicked on server-dialog
-//
-void FTIRControls::doCancel() {
- //
- // Ask if changed Settings should be saved
- //
- if (settingsDirty) {
- int ret = QMessageBox::question ( this, "Settings have changed", "Do you want to save the settings?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard );
-
- qDebug() << "doCancel says: answer =" << ret;
-
- switch (ret) {
- case QMessageBox::Save:
- save();
- this->close();
- break;
- case QMessageBox::Discard:
- this->close();
- break;
- case QMessageBox::Cancel:
- // Cancel was clicked
- break;
- default:
- // should never be reached
- break;
- }
- }
- else {
- this->close();
- }
-}
-
-//
-// Load the current Settings from the currently 'active' INI-file.
-//
-void FTIRControls::loadSettings() {
-
- qDebug() << "loadSettings says: Starting ";
- QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
-
- QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
- QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file)
-
- qDebug() << "loadSettings says: iniFile = " << currentFile;
-
- iniFile.beginGroup ( "FTIR" );
- ui.chkTIRViews->setChecked (iniFile.value ( "useTIRViews", 0 ).toBool());
- iniFile.endGroup ();
-
- settingsDirty = false;
-
-}
-
-//
-// Save the current Settings to the currently 'active' INI-file.
-//
-void FTIRControls::save() {
-
- QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER)
-
- QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();
- QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file)
-
- iniFile.beginGroup ( "FTIR" );
- iniFile.setValue ( "useTIRViews", ui.chkTIRViews->isChecked() );
- iniFile.endGroup ();
-
- settingsDirty = false;
-}
-
-//END
diff --git a/FaceTrackNoIR/FTIRServer.h b/FaceTrackNoIR/FTIRServer.h
deleted file mode 100644
index 98bba55c..00000000
--- a/FaceTrackNoIR/FTIRServer.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/********************************************************************************
-* FTIRServer FTIRServer is the Class, that communicates headpose-data *
-* to games, using the NPClient.dll. *
-* *
-* Copyright (C) 2010 Wim Vriend (Developing) *
-* Ron Hendriks (Testing and Research) *
-* *
-* 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/>. *
-* *
-********************************************************************************/
-#pragma once
-#ifndef INCLUDED_FTIRSERVER_H
-#define INCLUDED_FTIRSERVER_H
-
-#include "FTNoIR_cxx_protocolserver.h"
-#include "FTIRTypes.h"
-#include <QString>
-#include <QMessageBox>
-#include <QSettings>
-#include <QFile>
-#include <QApplication>
-#include <QDebug>
-#include <QMutex>
-#include <QLibrary>
-#include <QProcess>
-
-typedef void (WINAPI *importSetPosition)(float x, float y, float z, float xRot, float yRot, float zRot);
-typedef void (WINAPI *importTIRViewsStart)(void);
-typedef void (WINAPI *importTIRViewsStop)(void);
-
-#include "ui_FTNoIR_FTIRcontrols.h"
-
-using namespace std;
-using namespace v4friend::ftnoir;
-
-class FTIRServer : public ProtocolServerBase {
- Q_OBJECT
-
-public:
-
- // public member methods
- FTIRServer();
- ~FTIRServer();
- QString GetProgramName();
-
- // protected member methods
-protected:
- bool checkServerInstallationOK( HANDLE handle );
- void sendHeadposeToGame();
- void stopServer();
-
-private:
- bool FTIRCreateMapping(HANDLE handle);
- void FTIRDestroyMapping();
-
- importSetPosition setposition; // Function inside NPClient.dll
- importTIRViewsStart viewsStart; // Functions inside TIRViews.dll
- importTIRViewsStop viewsStop;
-
- HANDLE hFTIRMemMap;
- FTIRMemMap *pMemData;
- HANDLE hFTIRMutex;
-
- // Private properties
- QString ProgramName;
- QLibrary FTIRClientLib;
- QLibrary FTIRViewsLib;
- QProcess *dummyTrackIR;
- bool useTIRViews;
-
- float scale2AnalogLimits( float x, float min_x, float max_x );
- void loadSettings();
-
-public:
- void setVirtRotX(float rot) { virtRotX = scale2AnalogLimits (rot, -180.0f, 180.0f); }
- void setVirtRotY(float rot) { virtRotY = scale2AnalogLimits (rot, -180.0f, 180.0f); }
- void setVirtRotZ(float rot) { virtRotZ = scale2AnalogLimits (rot, -180.0f, 180.0f); }
-
- void setVirtPosX(float pos) { virtPosX = scale2AnalogLimits (pos * 10.0f, -500.0f, 500.0f); }
- void setVirtPosY(float pos) { virtPosY = scale2AnalogLimits (pos * 10.0f, -500.0f, 500.0f); }
- void setVirtPosZ(float pos) { virtPosZ = scale2AnalogLimits (pos * 10.0f, -500.0f, 500.0f); }
-};
-
-// Widget that has controls for FTIR server-settings.
-class FTIRControls: public QWidget, public Ui::UICFTIRControls
-{
- Q_OBJECT
-public:
-
- explicit FTIRControls( QWidget *parent=0, Qt::WindowFlags f=0 );
- virtual ~FTIRControls();
- void showEvent ( QShowEvent * event );
-
-private:
- Ui::UICFTIRControls ui;
- void loadSettings();
- void save();
-
- /** helper **/
- bool settingsDirty;
-
-private slots:
- void doOK();
- void doCancel();
- void chkTIRViewsChanged() { settingsDirty = true; };
-};
-
-
-#endif//INCLUDED_FTIRSERVER_H
-//END
diff --git a/FaceTrackNoIR/FTIRTypes.h b/FaceTrackNoIR/FTIRTypes.h
deleted file mode 100644
index f238762c..00000000
--- a/FaceTrackNoIR/FTIRTypes.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/********************************************************************************
-* FTIRTypes FTIRTypes contains the specific type definitions for the *
-* Fake TrackIR protocol. *
-* It was modelled after FTTypes.cpp. *
-* *
-* Copyright (C) 2010 Wim Vriend (Developing) *
-* Ron Hendriks (Testing and Research) *
-* *
-* 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/>. *
-* *
-********************************************************************************/
-#pragma once
-#ifndef INCLUDED_FTIRTYPES_H
-#define INCLUDED_FTIRTYPES_H
-
-#include "Windows.h"
-#include <tchar.h>
-#include <stdio.h>
-
-//
-// Versioning hasn't been worked out yet...
-//
-// The following is the previous spec definition of versioning info -- I can probably do
-// something very similar to this -- will keep you posted.
-//
-// request version information using 2 messages, they cannot be expected to arrive in a specific order - so always parse using the High byte
-// the messages have a NPCONTROL byte in the first parameter, and the second parameter has packed bytes.
-// Message 1) (first parameter)NPCONTROL : (second parameter) (High Byte)NPVERSIONMAJOR (Low Byte) major version number data
-// Message 2) (first parameter)NPCONTROL : (second parameter) (High Byte)NPVERSIONMINOR (Low Byte) minor version number data
-
-#define NPQUERYVERSION 1040
-
-// CONTROL DATA SUBFIELDS
-#define NPVERSIONMAJOR 1
-#define NPVERSIONMINOR 2
-
-// DATA FIELDS
-#define NPControl 8 // indicates a control data field
- // the second parameter of a message bearing control data information contains a packed data format.
- // The High byte indicates what the data is, and the Low byte contains the actual data
-// roll, pitch, yaw
-#define NPRoll 1 // +/- 16383 (representing +/- 180) [data = input - 16383]
-#define NPPitch 2 // +/- 16383 (representing +/- 180) [data = input - 16383]
-#define NPYaw 4 // +/- 16383 (representing +/- 180) [data = input - 16383]
-
-// x, y, z - remaining 6dof coordinates
-#define NPX 16 // +/- 16383 [data = input - 16383]
-#define NPY 32 // +/- 16383 [data = input - 16383]
-#define NPZ 64 // +/- 16383 [data = input - 16383]
-
-#define NP_AXIS_MIN -16383
-#define NP_AXIS_MAX 16383
-
-// raw object position from imager
-#define NPRawX 128 // 0..25600 (actual value is multiplied x 100 to pass two decimal places of precision) [data = input / 100]
-#define NPRawY 256 // 0..25600 (actual value is multiplied x 100 to pass two decimal places of precision) [data = input / 100]
-#define NPRawZ 512 // 0..25600 (actual value is multiplied x 100 to pass two decimal places of precision) [data = input / 100]
-
-// x, y, z deltas from raw imager position
-#define NPDeltaX 1024 // +/- 2560 (actual value is multiplied x 10 to pass two decimal places of precision) [data = (input / 10) - 256]
-#define NPDeltaY 2048 // +/- 2560 (actual value is multiplied x 10 to pass two decimal places of precision) [data = (input / 10) - 256]
-#define NPDeltaZ 4096 // +/- 2560 (actual value is multiplied x 10 to pass two decimal places of precision) [data = (input / 10) - 256]
-
-// raw object position from imager
-#define NPSmoothX 8192 // 0..32766 (actual value is multiplied x 10 to pass one decimal place of precision) [data = input / 10]
-#define NPSmoothY 16384 // 0..32766 (actual value is multiplied x 10 to pass one decimal place of precision) [data = input / 10]
-#define NPSmoothZ 32768 // 0..32766 (actual value is multiplied x 10 to pass one decimal place of precision) [data = input / 10]
-
-// NPESULT values are returned from the Game Client API functions.
-//
-typedef enum tagNPResult
-{
- NP_OK = 0,
- NP_ERR_DEVICE_NOT_PRESENT,
- NP_ERR_UNSUPPORTED_OS,
- NP_ERR_INVALID_ARG,
- NP_ERR_DLL_NOT_FOUND,
- NP_ERR_NO_DATA,
- NP_ERR_INTERNAL_DATA
-} NPRESULT;
-
- static const char* FTIR_CLIENT_FILENAME = "NPClient.dll";
- static const char* FTIR_VIEWS_FILENAME = "TIRViews.dll";
- static const char* FTIR_MM_DATA = "{0F98177E-0E5C-4F86-8837-229D19B1701D}";
- static const char* FTIR_MUTEX = "FT_TIR_Mutex";
- static const char* FTIR_REGISTER_PROGRAMHANDLE = "FT_Register_Program_Handle";
- static const char* FTIR_UNREGISTER_PROGRAMHANDLE = "FT_UnRegister_Program_Handle";
-
-typedef struct tagTrackIRData
-{
- unsigned short wNPStatus;
- unsigned short wPFrameSignature;
- unsigned long dwNPIOData;
-
- float fNPRoll;
- float fNPPitch;
- float fNPYaw;
- float fNPX;
- float fNPY;
- float fNPZ;
- float fNPRawX;
- float fNPRawY;
- float fNPRawZ;
- float fNPDeltaX;
- float fNPDeltaY;
- float fNPDeltaZ;
- float fNPSmoothX;
- float fNPSmoothY;
- float fNPSmoothZ;
-} TRACKIRDATA, *LPTRACKIRDATA;
-
-struct FTIRMemMap {
- // Emulators can check this
- int iRecordSize;
- TRACKIRDATA data;
- int Version;
- // Emulators should read these
- HANDLE RegisteredHandle;
- bool Transmission, Cursor;
- long int RequestFormat;
- long int ProgramProfileID;
- // Read/Write
- int LastError;
- int Param[16];
- unsigned short ClientNotify1, ClientNotify2;
- char Signature[400];
-};
-typedef FTIRMemMap * PFTIRMemMap;
-
-//
-// Typedef for pointer to the notify callback function that is implemented within
-// the client -- this function receives head tester reports from the game client API
-//
-typedef NPRESULT (__stdcall *PF_NOTIFYCALLBACK)( unsigned short, unsigned short );
-//
-//// Typedefs for game client API functions (useful for declaring pointers to these
-//// functions within the client for use during GetProcAddress() ops)
-////
-//typedef NPRESULT (__stdcall *PF_NP_REGISTERWINDOWHANDLE)( HWND );
-//typedef NPRESULT (__stdcall *PF_NP_UNREGISTERWINDOWHANDLE)( void );
-//typedef NPRESULT (__stdcall *PF_NP_REGISTERPROGRAMPROFILEID)( unsigned short );
-//typedef NPRESULT (__stdcall *PF_NP_QUERYVERSION)( unsigned short* );
-//typedef NPRESULT (__stdcall *PF_NP_REQUESTDATA)( unsigned short );
-//typedef NPRESULT (__stdcall *PF_NP_GETDATA)( LPTRACKIRDATA );
-//typedef NPRESULT (__stdcall *PF_NP_REGISTERNOTIFY)( PF_NOTIFYCALLBACK );
-//typedef NPRESULT (__stdcall *PF_NP_UNREGISTERNOTIFY)( void );
-//typedef NPRESULT (__stdcall *PF_NP_STARTCURSOR)( void );
-//typedef NPRESULT (__stdcall *PF_NP_STOPCURSOR)( void );
-//typedef NPRESULT (__stdcall *PF_NP_STARTDATATRANSMISSION)( void );
-//typedef NPRESULT (__stdcall *PF_NP_STOPDATATRANSMISSION)( void );
-
-//// Function Prototypes ///////////////////////////////////////////////
-//
-// Functions exported from game client API DLL ( note __stdcall calling convention
-// is used for ease of interface to clients of differing implementations including
-// C, C++, Pascal (Delphi) and VB. )
-//
-//NPRESULT __stdcall NP_RegisterWindowHandle( HWND hWnd );
-//NPRESULT __stdcall NP_RegisterWindowHandle( HWND );
-//NPRESULT __stdcall NP_UnregisterWindowHandle( void );
-//NPRESULT __stdcall NP_RegisterProgramProfileID( unsigned short wPPID );
-//NPRESULT __stdcall NP_QueryVersion( unsigned short* pwVersion );
-//NPRESULT __stdcall NP_RequestData( unsigned short wDataReq );
-//NPRESULT __stdcall NP_GetData( LPTRACKIRDATA pTID );
-//NPRESULT __stdcall NP_RegisterNotify( PF_NOTIFYCALLBACK pfNotify );
-//NPRESULT __stdcall NP_UnregisterNotify( void );
-//NPRESULT __stdcall NP_StartCursor( void );
-//NPRESULT __stdcall NP_StopCursor( void );
-//NPRESULT __stdcall NP_StartDataTransmission( void );
-//NPRESULT __stdcall NP_StopDataTransmission( void );
-
-#endif//INCLUDED_FTIRTYPES_H
diff --git a/FaceTrackNoIR/FTNoIR_FGcontrols.ui b/FaceTrackNoIR/FTNoIR_FGcontrols.ui
deleted file mode 100644
index c5f81c29..00000000
--- a/FaceTrackNoIR/FTNoIR_FGcontrols.ui
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>UICFGControls</class>
- <widget class="QWidget" name="UICFGControls">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>411</width>
- <height>194</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>FlightGear settings FaceTrackNoIR</string>
- </property>
- <property name="windowIcon">
- <iconset>
- <normaloff>images/FaceTrackNoIR.ico</normaloff>images/FaceTrackNoIR.ico</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="QGridLayout" name="gridLayout">
- <item row="2" column="4">
- <widget class="QSpinBox" name="spinIPFourthNibble">
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="maximum">
- <number>255</number>
- </property>
- <property name="singleStep">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QSpinBox" name="spinIPFirstNibble">
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="maximum">
- <number>255</number>
- </property>
- <property name="singleStep">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="QSpinBox" name="spinIPSecondNibble">
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="maximum">
- <number>255</number>
- </property>
- <property name="singleStep">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="2" column="3">
- <widget class="QSpinBox" name="spinIPThirdNibble">
- <property name="maximumSize">
- <size>
- <width>60</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="maximum">
- <number>255</number>
- </property>
- <property name="singleStep">
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>IP-address remote PC</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QCheckBox" name="chkLocalPC">
- <property name="layoutDirection">
- <enum>Qt::RightToLeft</enum>
- </property>
- <property name="text">
- <string>Local PC only</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Port-number</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QSpinBox" name="spinPortNumber">
- <property name="minimum">
- <number>5550</number>
- </property>
- <property name="maximum">
- <number>10000</number>
- </property>
- </widget>
- </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>If FlightGear is on the same PC as FaceTrackNoIR, tick the 'Local PC only' box.</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Otherwise: enter IP-address and port-number for the remote PC.</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Remember: you may have to change firewall-settings too!</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>
- <tabstops>
- <tabstop>spinIPFirstNibble</tabstop>
- <tabstop>spinIPSecondNibble</tabstop>
- <tabstop>spinIPThirdNibble</tabstop>
- <tabstop>spinIPFourthNibble</tabstop>
- <tabstop>spinPortNumber</tabstop>
- <tabstop>btnOK</tabstop>
- <tabstop>btnCancel</tabstop>
- <tabstop>chkLocalPC</tabstop>
- </tabstops>
- <resources/>
- <connections/>
- <slots>
- <slot>startEngineClicked()</slot>
- <slot>stopEngineClicked()</slot>
- <slot>cameraSettingsClicked()</slot>
- </slots>
-</ui>
diff --git a/FaceTrackNoIR/FTNoIR_FTIRcontrols.ui b/FaceTrackNoIR/FTNoIR_FTIRcontrols.ui
deleted file mode 100644
index a2d06d2a..00000000
--- a/FaceTrackNoIR/FTNoIR_FTIRcontrols.ui
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>UICFTIRControls</class>
- <widget class="QWidget" name="UICFTIRControls">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>411</width>
- <height>157</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>FTIR settings FaceTrackNoIR</string>
- </property>
- <property name="windowIcon">
- <iconset>
- <normaloff>images/FaceTrackNoIR.ico</normaloff>images/FaceTrackNoIR.ico</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>
- <item>
- <widget class="QCheckBox" name="chkTIRViews">
- <property name="layoutDirection">
- <enum>Qt::RightToLeft</enum>
- </property>
- <property name="text">
- <string>Use TIRViews</string>
- </property>
- </widget>
- </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>TIRViews is only required for some older games (like CFS3).</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>For it to work, TIRViews.dll must be placed in the FaceTrackNoIR program folder.</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>If the checkbox is disabled, the DLL was not found.</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/FaceTrackNoIR/FaceApp.cpp b/FaceTrackNoIR/FaceApp.cpp
index 231a07c9..5998ebcf 100644
--- a/FaceTrackNoIR/FaceApp.cpp
+++ b/FaceTrackNoIR/FaceApp.cpp
@@ -1,7 +1,7 @@
#include "FaceApp.h"
#include "windows.h"
#include "FTTypes.h"
-#include "FTIRTypes.h"
+#include "..\FTNoIR_Protocol_FTIR\FTIRTypes.h"
#include <QDebug>
//
diff --git a/FaceTrackNoIR/FaceTrackNoIR.cpp b/FaceTrackNoIR/FaceTrackNoIR.cpp
index d2373824..03f819de 100644
--- a/FaceTrackNoIR/FaceTrackNoIR.cpp
+++ b/FaceTrackNoIR/FaceTrackNoIR.cpp
@@ -23,6 +23,7 @@
*********************************************************************************/
/*
Modifications (last one on top):
+ 20110404 - WVR: Migrated the FlightGear protocol to a separate DLL. The rest must follow...
20110401 - WVR: The about-dialog was shown 'misplaced'. It was corrected.
20110328 - WVR: Added the display for output-pose.
20110207 - WVR: RadioButtons for 'Stop engine' added. It is now possible to choose Stop or Keep tracking.
@@ -32,8 +33,8 @@
#include "tracker.h"
#include "PPJoyServer.h"
#include "FSUIPCServer.h"
-#include "FTIRServer.h"
-#include "FGServer.h"
+//#include "FTIRServer.h"
+//#include "FGServer.h"
#include "FTNServer.h"
@@ -813,6 +814,8 @@ QLibrary *trackerLib;
/** toggles Server Controls Dialog **/
void FaceTrackNoIR::showServerControls() {
+importGetProtocolDialog getIT;
+QLibrary *protocolLib;
//
@@ -839,11 +842,47 @@ void FaceTrackNoIR::showServerControls() {
_server_controls = new FSUIPCControls( this, Qt::Dialog );
break;
case TRACKIR:
- _server_controls = new FTIRControls( this, Qt::Dialog );
+ protocolLib = new QLibrary("FTNoIR_Protocol_FTIR.dll");
+
+ getIT = (importGetProtocolDialog) protocolLib->resolve("GetProtocolDialog");
+ if (getIT) {
+ IProtocolDialogPtr ptrXyz(getIT());
+ if (ptrXyz)
+ {
+ pProtocolDialog = ptrXyz;
+ pProtocolDialog->Initialize( this );
+ qDebug() << "FaceTrackNoIR::showServerControls GetProtocolDialog Function Resolved!";
+ }
+ else {
+ qDebug() << "FaceTrackNoIR::showServerControls Function NOT Resolved!";
+ }
+ }
+ else {
+ QMessageBox::warning(0,"FaceTrackNoIR Error", "DLL not loaded",QMessageBox::Ok,QMessageBox::NoButton);
+ }
break;
+
case FLIGHTGEAR:
- _server_controls = new FGControls( this, Qt::Dialog );
+ protocolLib = new QLibrary("FTNoIR_Protocol_FG.dll");
+
+ getIT = (importGetProtocolDialog) protocolLib->resolve("GetProtocolDialog");
+ if (getIT) {
+ IProtocolDialogPtr ptrXyz(getIT());
+ if (ptrXyz)
+ {
+ pProtocolDialog = ptrXyz;
+ pProtocolDialog->Initialize( this );
+ qDebug() << "FaceTrackNoIR::showServerControls GetProtocolDialog Function Resolved!";
+ }
+ else {
+ qDebug() << "FaceTrackNoIR::showServerControls Function NOT Resolved!";
+ }
+ }
+ else {
+ QMessageBox::warning(0,"FaceTrackNoIR Error", "DLL not loaded",QMessageBox::Ok,QMessageBox::NoButton);
+ }
break;
+
case FTNOIR:
_server_controls = new FTNServerControls( this, Qt::Dialog );
break;
diff --git a/FaceTrackNoIR/FaceTrackNoIR.h b/FaceTrackNoIR/FaceTrackNoIR.h
index 68c9a744..cd9c925b 100644
--- a/FaceTrackNoIR/FaceTrackNoIR.h
+++ b/FaceTrackNoIR/FaceTrackNoIR.h
@@ -42,7 +42,9 @@
#include "ui_FTNoIR_Preferences.h"
#include "ui_FTNoIR_Curves.h"
-#include "FTNoIR_Tracker_UDP.h"
+//
+#include "..\ftnoir_protocol_base\FTNoIR_Protocol_base.h"
+#include "..\ftnoir_tracker_base\FTNoIR_Tracker_base.h"
#include "AutoClosePtr.h"
// 1a. COM-Like usage with smart pointer.
@@ -50,14 +52,12 @@
// be released automatically in destructor of the smart pointer.
typedef AutoClosePtr<ITrackerDialog, void, &ITrackerDialog::Release> ITrackerDialogPtr;
typedef ITrackerDialog *(WINAPI *importGetTrackerDialog)(void);
+typedef AutoClosePtr<IProtocolDialog, void, &IProtocolDialog::Release> IProtocolDialogPtr;
+typedef IProtocolDialog *(WINAPI *importGetProtocolDialog)(void);
-//#include <sm_api_qt.h>
#include <Dshow.h>
-//using namespace sm::faceapi;
-//using namespace sm::faceapi::qt;
-
class Tracker; // pre-define class to avoid circular includes
void getCurvePoints(QSettings *iniFile, QString prefix, QPointF *one, QPointF *two, QPointF *three, QPointF *four,
@@ -84,6 +84,7 @@ private:
QStringList iniFileList; // List of INI-files, that are present in the Settings folder
ITrackerDialogPtr pTrackerDialog; // Pointer to Tracker dialog instance (in DLL)
+ IProtocolDialogPtr pProtocolDialog; // Pointer to Protocol dialog instance (in DLL)
/** Widget variables **/
QVBoxLayout *l;
diff --git a/FaceTrackNoIR/FaceTrackNoIR.vcproj b/FaceTrackNoIR/FaceTrackNoIR.vcproj
index 10d2f8c7..c16635b9 100644
--- a/FaceTrackNoIR/FaceTrackNoIR.vcproj
+++ b/FaceTrackNoIR/FaceTrackNoIR.vcproj
@@ -212,18 +212,10 @@
>
</File>
<File
- RelativePath=".\FGServer.cpp"
- >
- </File>
- <File
RelativePath=".\FSUIPCServer.cpp"
>
</File>
<File
- RelativePath=".\FTIRServer.cpp"
- >
- </File>
- <File
RelativePath=".\FTNServer.cpp"
>
</File>
@@ -336,36 +328,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\FGServer.h"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Moc&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\moc.exe&quot; -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_NETWORK_LIB -DQT_DLL -I&quot;.\GeneratedFiles\.&quot; -I&quot;$(QTDIR)\include\.&quot; -I&quot;.\GeneratedFiles\$(ConfigurationName)\.&quot; -I&quot;$(QTDIR)\include\QtCore\.&quot; -I&quot;$(QTDIR)\include\QtNetwork\.&quot; -I&quot;$(QTDIR)\include\QtGui\.&quot; -I&quot;$(QTDIR)\include\QtOpenGL\.&quot; -I&quot;$(QTDIR)\include\QtWebKit\.&quot; -I&quot;$(QTDIR)\include\QtTest\.&quot; -I&quot;$(SolutionDir)\FTNoIR_Tracker_UDP\.&quot; -I&quot;$(SolutionDir)\FTNoIR_Tracker_UDP\GeneratedFiles\.&quot; -I&quot;$(SolutionDir)\FTNoIR_Filter_EWMA2\.&quot; &quot;.\FGServer.h&quot; -o &quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;&#x0D;&#x0A;"
- AdditionalDependencies="&quot;$(QTDIR)\bin\moc.exe&quot;;$(InputPath)"
- Outputs="&quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Moc&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\moc.exe&quot; -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_DLL -I&quot;.\GeneratedFiles\.&quot; -I&quot;$(QTDIR)\include\.&quot; -I&quot;.\GeneratedFiles\$(ConfigurationName)\.&quot; -I&quot;$(QTDIR)\include\QtCore\.&quot; -I&quot;$(QTDIR)\include\QtGui\.&quot; -I&quot;$(QTDIR)\include\QtNetwork\.&quot; -I&quot;$(QTDIR)\include\QtOpenGL\.&quot; -I&quot;$(QTDIR)\include\QtWebKit\.&quot; -I&quot;$(QTDIR)\include\QtTest\.&quot; -I&quot;.\.&quot; &quot;.\FGServer.h&quot; -o &quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;&#x0D;&#x0A;"
- AdditionalDependencies="&quot;$(QTDIR)\bin\moc.exe&quot;;$(InputPath)"
- Outputs="&quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\FGTypes.h"
- >
- </File>
- <File
RelativePath=".\FSUIPCServer.h"
>
<FileConfiguration
@@ -392,36 +354,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\FTIRServer.h"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Moc&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\moc.exe&quot; -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_NETWORK_LIB -DQT_DLL -I&quot;.\GeneratedFiles\.&quot; -I&quot;$(QTDIR)\include\.&quot; -I&quot;.\GeneratedFiles\$(ConfigurationName)\.&quot; -I&quot;$(QTDIR)\include\QtCore\.&quot; -I&quot;$(QTDIR)\include\QtNetwork\.&quot; -I&quot;$(QTDIR)\include\QtGui\.&quot; -I&quot;$(QTDIR)\include\QtOpenGL\.&quot; -I&quot;$(QTDIR)\include\QtWebKit\.&quot; -I&quot;$(QTDIR)\include\QtTest\.&quot; -I&quot;$(SolutionDir)\FTNoIR_Tracker_UDP\.&quot; -I&quot;$(SolutionDir)\FTNoIR_Tracker_UDP\GeneratedFiles\.&quot; -I&quot;$(SolutionDir)\FTNoIR_Filter_EWMA2\.&quot; &quot;.\FTIRServer.h&quot; -o &quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;&#x0D;&#x0A;"
- AdditionalDependencies="&quot;$(QTDIR)\bin\moc.exe&quot;;$(InputPath)"
- Outputs="&quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Moc&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\moc.exe&quot; -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_DLL -I&quot;.\GeneratedFiles\.&quot; -I&quot;$(QTDIR)\include\.&quot; -I&quot;.\GeneratedFiles\$(ConfigurationName)\.&quot; -I&quot;$(QTDIR)\include\QtCore\.&quot; -I&quot;$(QTDIR)\include\QtGui\.&quot; -I&quot;$(QTDIR)\include\QtNetwork\.&quot; -I&quot;$(QTDIR)\include\QtOpenGL\.&quot; -I&quot;$(QTDIR)\include\QtWebKit\.&quot; -I&quot;$(QTDIR)\include\QtTest\.&quot; -I&quot;.\.&quot; &quot;.\FTIRServer.h&quot; -o &quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;&#x0D;&#x0A;"
- AdditionalDependencies="&quot;$(QTDIR)\bin\moc.exe&quot;;$(InputPath)"
- Outputs="&quot;.\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp&quot;"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\FTIRTypes.h"
- >
- </File>
- <File
RelativePath=".\FTNoIR_cxx_protocolserver.h"
>
<FileConfiguration
@@ -674,32 +606,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\FTNoIR_FGcontrols.ui"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Uic&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\uic.exe&quot; -o &quot;.\GeneratedFiles\ui_$(InputName).h&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- AdditionalDependencies="$(QTDIR)\bin\uic.exe"
- Outputs="&quot;.\GeneratedFiles\ui_$(InputName).h&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Uic&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\uic.exe&quot; -o &quot;.\GeneratedFiles\ui_$(InputName).h&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- AdditionalDependencies="$(QTDIR)\bin\uic.exe"
- Outputs="&quot;.\GeneratedFiles\ui_$(InputName).h&quot;"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath=".\FTNoIR_FSUIPCcontrols.ui"
>
<FileConfiguration
@@ -726,32 +632,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\FTNoIR_FTIRcontrols.ui"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Uic&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\uic.exe&quot; -o &quot;.\GeneratedFiles\ui_$(InputName).h&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- AdditionalDependencies="$(QTDIR)\bin\uic.exe"
- Outputs="&quot;.\GeneratedFiles\ui_$(InputName).h&quot;"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Uic&apos;ing $(InputFileName)..."
- CommandLine="&quot;$(QTDIR)\bin\uic.exe&quot; -o &quot;.\GeneratedFiles\ui_$(InputName).h&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- AdditionalDependencies="$(QTDIR)\bin\uic.exe"
- Outputs="&quot;.\GeneratedFiles\ui_$(InputName).h&quot;"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath=".\FTNoIR_FTNServerControls.ui"
>
<FileConfiguration
@@ -931,18 +811,10 @@
>
</File>
<File
- RelativePath=".\GeneratedFiles\ui_FTNoIR_FGcontrols.h"
- >
- </File>
- <File
RelativePath=".\GeneratedFiles\ui_FTNoIR_FSUIPCcontrols.h"
>
</File>
<File
- RelativePath=".\GeneratedFiles\ui_FTNoIR_FTIRcontrols.h"
- >
- </File>
- <File
RelativePath=".\GeneratedFiles\ui_FTNoIR_FTNServerControls.h"
>
</File>
@@ -1000,18 +872,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\GeneratedFiles\Release\moc_FGServer.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath=".\GeneratedFiles\Release\moc_FSUIPCServer.cpp"
>
<FileConfiguration
@@ -1024,18 +884,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\GeneratedFiles\Release\moc_FTIRServer.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath=".\GeneratedFiles\Release\moc_FTNoIR_cxx_protocolserver.cpp"
>
<FileConfiguration
@@ -1173,18 +1021,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\GeneratedFiles\Debug\moc_FGServer.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath=".\GeneratedFiles\Debug\moc_FSUIPCServer.cpp"
>
<FileConfiguration
@@ -1208,18 +1044,6 @@
</FileConfiguration>
</File>
<File
- RelativePath=".\GeneratedFiles\Debug\moc_FTIRServer.cpp"
- >
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath=".\GeneratedFiles\Debug\moc_FTNoIR_cxx_protocolserver.cpp"
>
<FileConfiguration
diff --git a/FaceTrackNoIR/tracker.cpp b/FaceTrackNoIR/tracker.cpp
index cb881201..46b26237 100644
--- a/FaceTrackNoIR/tracker.cpp
+++ b/FaceTrackNoIR/tracker.cpp
@@ -188,8 +188,7 @@ QFrame *video_frame;
case FLIGHTGEAR:
server_Game = QSharedPointer<FTServer>(new FTServer ( )); // Create Free-track protocol-server
-// server_Game = QSharedPointer<FGServer>(new FGServer ( this )); // Create FlightGear protocol-server
-// server_Game = NULL;
+
//
// Load the DLL with the protocol-logic and retrieve a pointer to the Protocol-class.
//
@@ -220,7 +219,27 @@ QFrame *video_frame;
break;
case TRACKIR:
- server_Game = QSharedPointer<FTIRServer>(new FTIRServer ( )); // Create Fake-TIR protocol-server
+ server_Game = QSharedPointer<FTServer>(new FTServer ( )); // Create Free-track protocol-server
+
+ //
+ // Load the DLL with the protocol-logic and retrieve a pointer to the Protocol-class.
+ //
+ protocolLib = new QLibrary("FTNoIR_Protocol_FTIR.dll");
+
+ getProtocol = (importGetProtocol) protocolLib->resolve("GetProtocol");
+ if (getProtocol) {
+ IProtocolPtr ptrXyz(getProtocol());
+ if (ptrXyz)
+ {
+ pProtocol = ptrXyz;
+ pProtocol->Initialize();
+ qDebug() << "Protocol::setup Function Resolved!";
+ }
+ }
+ else {
+ QMessageBox::warning(0,"FaceTrackNoIR Error", "Protocol-DLL not loaded",QMessageBox::Ok,QMessageBox::NoButton);
+ return;
+ }
break;
case SIMCONNECT:
diff --git a/FaceTrackNoIR/tracker.h b/FaceTrackNoIR/tracker.h
index 1ffed69c..c5921e85 100644
--- a/FaceTrackNoIR/tracker.h
+++ b/FaceTrackNoIR/tracker.h
@@ -36,9 +36,9 @@
#include <Dinput.h>
#include "FTServer.h" // Freetrack-server
-#include "FGServer.h" // FlightGear-server
+//#include "FGServer.h" // FlightGear-server
#include "PPJoyServer.h" // Virtual Joystick
-#include "FTIRServer.h" // FakeTIR-server
+//#include "FTIRServer.h" // FakeTIR-server
#include "SCServer.h" // SimConnect-server (for MS Flight Simulator X)
#include "FSUIPCServer.h" // FSUIPC-server (for MS Flight Simulator 2004)
#include "ExcelServer.h" // Excel-server (for analysing purposes)