From d3456cb84b428b2f5070517d6e571f6b2724dd24 Mon Sep 17 00:00:00 2001 From: Wim Vriend Date: Mon, 4 Apr 2011 19:58:09 +0000 Subject: Move protocols to DLL: TrackIR git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@61 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb --- FaceTrackNoIR/FGServer.cpp | 336 ------------------------ FaceTrackNoIR/FGServer.h | 106 -------- FaceTrackNoIR/FGTypes.h | 28 -- FaceTrackNoIR/FTIRServer.cpp | 481 ----------------------------------- FaceTrackNoIR/FTIRServer.h | 121 --------- FaceTrackNoIR/FTIRTypes.h | 183 ------------- FaceTrackNoIR/FTNoIR_FGcontrols.ui | 279 -------------------- FaceTrackNoIR/FTNoIR_FTIRcontrols.ui | 194 -------------- FaceTrackNoIR/FaceApp.cpp | 2 +- FaceTrackNoIR/FaceTrackNoIR.cpp | 47 +++- FaceTrackNoIR/FaceTrackNoIR.h | 11 +- FaceTrackNoIR/FaceTrackNoIR.vcproj | 176 ------------- FaceTrackNoIR/tracker.cpp | 25 +- FaceTrackNoIR/tracker.h | 4 +- 14 files changed, 74 insertions(+), 1919 deletions(-) delete mode 100644 FaceTrackNoIR/FGServer.cpp delete mode 100644 FaceTrackNoIR/FGServer.h delete mode 100644 FaceTrackNoIR/FGTypes.h delete mode 100644 FaceTrackNoIR/FTIRServer.cpp delete mode 100644 FaceTrackNoIR/FTIRServer.h delete mode 100644 FaceTrackNoIR/FTIRTypes.h delete mode 100644 FaceTrackNoIR/FTNoIR_FGcontrols.ui delete mode 100644 FaceTrackNoIR/FTNoIR_FTIRcontrols.ui (limited to 'FaceTrackNoIR') 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 . * -* * -* 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 -#include -#include "FGServer.h" -#include "Tracker.h" -#include - -/** 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 . * -* * -* 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 -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -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 . * -* * -********************************************************************************/ -/* - 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 . * -* * -********************************************************************************/ -#pragma once -#ifndef INCLUDED_FTIRSERVER_H -#define INCLUDED_FTIRSERVER_H - -#include "FTNoIR_cxx_protocolserver.h" -#include "FTIRTypes.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -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 . * -* * -********************************************************************************/ -#pragma once -#ifndef INCLUDED_FTIRTYPES_H -#define INCLUDED_FTIRTYPES_H - -#include "Windows.h" -#include -#include - -// -// 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 @@ - - - UICFGControls - - - - 0 - 0 - 411 - 194 - - - - FlightGear settings FaceTrackNoIR - - - - images/FaceTrackNoIR.icoimages/FaceTrackNoIR.ico - - - Qt::LeftToRight - - - false - - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - IP-address remote PC - - - - - - - Qt::RightToLeft - - - Local PC only - - - - - - - Port-number - - - - - - - 5550 - - - 10000 - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - If FlightGear is on the same PC as FaceTrackNoIR, tick the 'Local PC only' box. - - - - - - - Otherwise: enter IP-address and port-number for the remote PC. - - - true - - - - - - - Remember: you may have to change firewall-settings too! - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - QLayout::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - OK - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - Cancel - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 20 - - - - - - - - - - spinIPFirstNibble - spinIPSecondNibble - spinIPThirdNibble - spinIPFourthNibble - spinPortNumber - btnOK - btnCancel - chkLocalPC - - - - - startEngineClicked() - stopEngineClicked() - cameraSettingsClicked() - - 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 @@ - - - UICFTIRControls - - - - 0 - 0 - 411 - 157 - - - - FTIR settings FaceTrackNoIR - - - - images/FaceTrackNoIR.icoimages/FaceTrackNoIR.ico - - - Qt::LeftToRight - - - false - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::RightToLeft - - - Use TIRViews - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - TIRViews is only required for some older games (like CFS3). - - - - - - - For it to work, TIRViews.dll must be placed in the FaceTrackNoIR program folder. - - - true - - - - - - - If the checkbox is disabled, the DLL was not found. - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - QLayout::SetDefaultConstraint - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - OK - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - Cancel - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 10 - 20 - - - - - - - - - - - - startEngineClicked() - stopEngineClicked() - cameraSettingsClicked() - - 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 // 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 ITrackerDialogPtr; typedef ITrackerDialog *(WINAPI *importGetTrackerDialog)(void); +typedef AutoClosePtr IProtocolDialogPtr; +typedef IProtocolDialog *(WINAPI *importGetProtocolDialog)(void); -//#include #include -//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 @@ -211,18 +211,10 @@ RelativePath=".\FaceTrackNoIR.cpp" > - - - - @@ -335,36 +327,6 @@ /> - - - - - - - - - - @@ -391,36 +353,6 @@ /> - - - - - - - - - - @@ -673,32 +605,6 @@ /> - - - - - - - - @@ -725,32 +631,6 @@ /> - - - - - - - - @@ -930,18 +810,10 @@ RelativePath=".\GeneratedFiles\ui_FTNoIR_Curves.h" > - - - - @@ -999,18 +871,6 @@ /> - - - - - @@ -1023,18 +883,6 @@ /> - - - - - @@ -1172,18 +1020,6 @@ /> - - - - - @@ -1207,18 +1043,6 @@ /> - - - - - 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(new FTServer ( )); // Create Free-track protocol-server -// server_Game = QSharedPointer(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(new FTIRServer ( )); // Create Fake-TIR protocol-server + server_Game = QSharedPointer(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 #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) -- cgit v1.2.3