From d674f5fe1e87596dcb8bae588ae798b4473ce269 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 2 Apr 2013 19:43:51 +0200 Subject: Build works now --- CMakeLists.txt | 1 - facetracknoir/faceapp.cpp | 60 ----- facetracknoir/faceapp.h | 27 -- facetracknoir/fsuipcserver.cpp | 308 ----------------------- facetracknoir/fsuipcserver.h | 121 --------- facetracknoir/ftnoir_fsuipccontrols.ui | 228 ----------------- facetracknoir/ftnoir_ftnservercontrols.ui | 261 ------------------- freetrackclient/freetrackclient.cpp | 19 +- ftnoir_protocol_ft/ftnoir_protocol_ft.cpp | 6 +- ftnoir_protocol_ft/ftnoir_protocol_ft.h | 11 +- ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp | 76 +++++- ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp | 5 +- 12 files changed, 78 insertions(+), 1045 deletions(-) delete mode 100644 facetracknoir/faceapp.cpp delete mode 100644 facetracknoir/faceapp.h delete mode 100644 facetracknoir/fsuipcserver.cpp delete mode 100644 facetracknoir/fsuipcserver.h delete mode 100644 facetracknoir/ftnoir_fsuipccontrols.ui delete mode 100644 facetracknoir/ftnoir_ftnservercontrols.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index 454e8888..59444c3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -508,7 +508,6 @@ if(NOT SDK_FACEAPI_ONLY) ) endif() install(FILES "${CMAKE_SOURCE_DIR}/bin/cleye.config" DESTINATION .) - install(FILES "${CMAKE_SOURCE_DIR}/bin/freetrackclient.dll" DESTINATION .) if(SDK_SIMCONNECT) install(TARGETS ftnoir-proto-simconnect RUNTIME DESTINATION . diff --git a/facetracknoir/faceapp.cpp b/facetracknoir/faceapp.cpp deleted file mode 100644 index 2811974c..00000000 --- a/facetracknoir/faceapp.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "FaceApp.h" -#include "windows.h" -#include "..\FTNoIR_Protocol_FT\FTTypes.h" -#include "..\FTNoIR_Protocol_FTIR\FTIRTypes.h" -#include - -// -// Override the Application MessageFilter, to receive messages from the game(s) -// -bool FaceApp::winEventFilter( MSG * msg, long * result ) -{ - int msgType = msg->message; // test line - - if (msgType == msgID_FTClient) { - qDebug() << "FaceApp::winEventFilter says: game tickles me =" << msgType << "hwnd =" << msg->hwnd; - if (mainWindow != NULL) { - mainWindow->getGameProgramName(); - } - } - - ////if (msgType == WM_HOTKEY) { - //// switch ( msg->wParam ) { - //// case 777: - //// qDebug() << "FaceApp::winEventFilter says: HOME pressed"; - //// break; - //// case 778: - //// qDebug() << "FaceApp::winEventFilter says: END pressed"; - //// break; - //// default: - //// qDebug() << "FaceApp::winEventFilter says: unknown HotKey pressed"; - //// break; - //// } - ////} - return( false ); -} - -// -// Setup the EventFilter -// -void FaceApp::SetupEventFilter( FaceTrackNoIR *window ) { - - mainWindow = window; - msgID_FTClient = RegisterWindowMessageA ( FT_PROGRAMID ); - qDebug() << "FaceApp::SetupEventFilter says: Message ID =" << msgID_FTClient; - msgID_FTIR_Register = RegisterWindowMessageA ( FTIR_REGISTER_PROGRAMHANDLE ); - msgID_FTIR_UnRegister = RegisterWindowMessageA ( FTIR_UNREGISTER_PROGRAMHANDLE ); - - ////if ( RegisterHotKey( window->winId(), 777, MOD_WIN, VK_HOME ) ) { - //// qDebug() << "FaceApp::SetupEventFilter says: RegisterHotKey HOME =" << VK_HOME; - ////} - ////if ( RegisterHotKey( window->winId(), 778, MOD_WIN, VK_END ) ) { - //// qDebug() << "FaceApp::SetupEventFilter says: RegisterHotKey END =" << VK_END; - ////} - //// - ////QAbstractEventDispatcher *evtdis = QAbstractEventDispatcher::instance(); - ////if (evtdis != NULL) { - //// qDebug() << "FaceApp::SetupEventFilter says: EventDispatcher found!"; - ////} - -} \ No newline at end of file diff --git a/facetracknoir/faceapp.h b/facetracknoir/faceapp.h deleted file mode 100644 index 39fd4b2f..00000000 --- a/facetracknoir/faceapp.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef FACEAPP_H -#define FACEAPP_H - -#include -#include "FaceTrackNoIR.h" - -class FaceApp : public QApplication -{ - Q_OBJECT -public: - FaceApp( int &argc, char **argv ) : QApplication( argc, argv ) {} - ~FaceApp() {} - - void SetupEventFilter( FaceTrackNoIR *window ); - -protected: - bool winEventFilter( MSG * msg, long * result ); - -private: - FaceTrackNoIR *mainWindow; - int msgID_FTClient; - int msgID_FTIR_Register; - int msgID_FTIR_UnRegister; - int msgID_FilterSettingChanged; -}; - -#endif // FACEAPP_H diff --git a/facetracknoir/fsuipcserver.cpp b/facetracknoir/fsuipcserver.cpp deleted file mode 100644 index 3006b430..00000000 --- a/facetracknoir/fsuipcserver.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/******************************************************************************** -* FSUIPCServer FSUIPCServer is the Class, that communicates headpose-data * -* to games, using the FSUIPC.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 -*/ -#include "FSUIPCServer.h" -#include - -/** constructor **/ -FSUIPCServer::FSUIPCServer() { - - loadSettings(); - ProgramName = "Microsoft FS2004"; - - prevPosX = 0.0f; - prevPosY = 0.0f; - prevPosZ = 0.0f; - prevRotX = 0.0f; - prevRotY = 0.0f; - prevRotZ = 0.0f; - -} - -/** destructor **/ -FSUIPCServer::~FSUIPCServer() { - - // - // Free the DLL - // - FSUIPCLib.unload(); -} - -// -// Update Headpose in Game. -// -void FSUIPCServer::sendHeadposeToGame() { -DWORD result; -TFSState pitch; -TFSState yaw; -TFSState roll; -WORD FSZoom; - - qDebug() << "FSUIPCServer::run() says: started!"; - - // - // Init. the FSUIPC offsets (derived from Free-track...) - // - pitch.Control = 66503; - yaw.Control = 66504; - roll.Control = 66505; - - // - // Only do this when the data has changed. This way, the HAT-switch can be used when tracking is OFF. - // - if ((prevPosX != virtPosX) || (prevPosY != virtPosY) || (prevPosZ != virtPosZ) || - (prevRotX != virtRotX) || (prevRotY != virtRotY) || (prevRotZ != virtRotZ)) { - // - // Open the connection - // - FSUIPC_Open(SIM_ANY, &result); - - // - // Check the FS-version - // - if (((result == FSUIPC_ERR_OK) || (result == FSUIPC_ERR_OPEN)) && - ((FSUIPC_FS_Version == SIM_FS2K2) || (FSUIPC_FS_Version == SIM_FS2K4))) { -// qDebug() << "FSUIPCServer::run() says: FSUIPC opened succesfully"; - // - // Write the 4! DOF-data to FS. Only rotations and zoom are possible. - // - pitch.Value = scale2AnalogLimits(virtRotX, -180, 180); - FSUIPC_Write(0x3110, 8, &pitch, &result); - - yaw.Value = scale2AnalogLimits(virtRotY, -180, 180); - FSUIPC_Write(0x3110, 8, &yaw, &result); - - roll.Value = scale2AnalogLimits(virtRotZ, -180, 180); - FSUIPC_Write(0x3110, 8, &roll, &result); - - FSZoom = (WORD) (64/50) * virtPosZ + 64; - FSUIPC_Write(0x832E, 2, &FSZoom, &result); - - // - // Write the data, in one go! - // - FSUIPC_Process(&result); - if (result == FSUIPC_ERR_SENDMSG) { - FSUIPC_Close(); //timeout (1 second) so assume FS closed - } - } - } - - prevPosX = virtPosX; - prevPosY = virtPosY; - prevPosZ = virtPosZ; - prevRotX = virtRotX; - prevRotY = virtRotY; - prevRotZ = virtRotZ; - -} - -// -// Check if the Client DLL exists and load it (to test it), if so. -// Returns 'true' if all seems OK. -// -bool FSUIPCServer::checkServerInstallationOK() -{ - qDebug() << "FSUIPCCheckClientDLL says: Starting Function"; - - // - // Load the DLL. - // - FSUIPCLib.setFileName( LocationOfDLL ); - if (FSUIPCLib.load() != true) { - qDebug() << "FSUIPCCheckClientDLL says: Error loading FSUIPC DLL"; - return false; - } - - return true; -} - -// -// Scale the measured value to the Joystick values -// -int FSUIPCServer::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 = ( 16383 * local_x ) / max_x; - - return (int) y; -} - -// -// Load the current Settings from the currently 'active' INI-file. -// -void FSUIPCServer::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 ( "FSUIPC" ); - LocationOfDLL = iniFile.value ( "LocationOfDLL", FSUIPC_FILENAME ).toString(); - iniFile.endGroup (); -} - -// -// Constructor for server-settings-dialog -// -FSUIPCControls::FSUIPCControls( 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.btnFindDLL, SIGNAL(clicked()), this, SLOT(getLocationOfDLL())); - - // Load the settings from the current .INI-file - loadSettings(); -} - -// -// Destructor for server-dialog -// -FSUIPCControls::~FSUIPCControls() { - qDebug() << "~FSUIPCControls() says: started"; -} - -// -// OK clicked on server-dialog -// -void FSUIPCControls::doOK() { - save(); - this->close(); -} - -// override show event -void FSUIPCControls::showEvent ( QShowEvent * event ) { - loadSettings(); -} - -// -// Cancel clicked on server-dialog -// -void FSUIPCControls::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 FSUIPCControls::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 ( "FSUIPC" ); - ui.txtLocationOfDLL->setText(iniFile.value ( "LocationOfDLL", FSUIPC_FILENAME ).toString() ); - iniFile.endGroup (); - - settingsDirty = false; - -} - -// -// Save the current Settings to the currently 'active' INI-file. -// -void FSUIPCControls::save() { - - qDebug() << "save() says: started"; - - 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 ( "FSUIPC" ); - iniFile.setValue ( "LocationOfDLL", ui.txtLocationOfDLL->text() ); - iniFile.endGroup (); - - settingsDirty = false; -} - -// -// Show the Dialog to set the DLL's location -// -void FSUIPCControls::getLocationOfDLL() -{ - // - // Get the new filename of the INI-file. - // - QString fileName = QFileDialog::getOpenFileName(this, tr("Locate file"), - ui.txtLocationOfDLL->text(), - tr("FSUIPC DLL file (FSUIPC*.dll);;All Files (*)")); - if (!fileName.isEmpty()) { - ui.txtLocationOfDLL->setText( fileName ); - settingsDirty = true; - } -} - - -//END diff --git a/facetracknoir/fsuipcserver.h b/facetracknoir/fsuipcserver.h deleted file mode 100644 index caba2f33..00000000 --- a/facetracknoir/fsuipcserver.h +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************** -* FSUIPCServer FSUIPCServer is the Class, that communicates headpose-data * -* to games, using the FSUIPC.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_FSUIPCSERVER_H -#define INCLUDED_FSUIPCSERVER_H - -#include "Windows.h" -#include -#include "FTNoIR_cxx_protocolserver.h" -#include "FSUIPC_User.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ui_FTNoIR_FSUIPCcontrols.h" - -using namespace std; -using namespace v4friend::ftnoir; - -static const char* FSUIPC_FILENAME = "C:\\Program Files\\Microsoft Games\\Flight Simulator 9\\Modules\\FSUIPC.dll"; - -// -// Define the structures necessary for the FSUIPC_Write calls -// -#pragma pack(push,1) // All fields in structure must be byte aligned. -typedef struct -{ - int Control; // Control identifier - int Value; // Value of DOF -} TFSState; -#pragma pack(pop) - -class FSUIPCServer : public ProtocolServerBase { - Q_OBJECT - -public: - - // public member methods - FSUIPCServer(); - ~FSUIPCServer(); - - // protected member methods -protected: - bool checkServerInstallationOK(); - void sendHeadposeToGame(); - -private: - // Private properties - QString ProgramName; - QLibrary FSUIPCLib; - QString LocationOfDLL; - void loadSettings(); - float prevPosX, prevPosY, prevPosZ, prevRotX, prevRotY, prevRotZ; - -public: - - // Settings for calculating the Virtual Pose - void setVirtRotX(float rot) { virtRotX = -1.0f * rot; } // degrees - void setVirtRotY(float rot) { virtRotY = rot; } - void setVirtRotZ(float rot) { virtRotZ = rot; } - - void setVirtPosX(float pos) { virtPosX = 0.0f; } // cm, X and Y are not working for FS2002/2004! - void setVirtPosY(float pos) { virtPosY = 0.0f; } - void setVirtPosZ(float pos) { virtPosZ = -1.0f * pos; } - - static int scale2AnalogLimits( float x, float min_x, float max_x ); -}; - -// Widget that has controls for FSUIPC server-settings. -class FSUIPCControls: public QWidget, public Ui::UICFSUIPCControls -{ - Q_OBJECT -public: - - explicit FSUIPCControls( QWidget *parent=0, Qt::WindowFlags f=0 ); - virtual ~FSUIPCControls(); - void showEvent ( QShowEvent * event ); - -private: - Ui::UICFSUIPCControls ui; - void loadSettings(); - void save(); - - /** helper **/ - bool settingsDirty; - -private slots: - void doOK(); - void doCancel(); - void getLocationOfDLL(); - -}; - - -#endif//INCLUDED_FSUIPCSERVER_H -//END diff --git a/facetracknoir/ftnoir_fsuipccontrols.ui b/facetracknoir/ftnoir_fsuipccontrols.ui deleted file mode 100644 index e4c4963d..00000000 --- a/facetracknoir/ftnoir_fsuipccontrols.ui +++ /dev/null @@ -1,228 +0,0 @@ - - - UICFSUIPCControls - - - - 0 - 0 - 541 - 131 - - - - FSUIPC settings FaceTrackNoIR - - - - images/facetracknoir.pngimages/facetracknoir.png - - - Qt::LeftToRight - - - false - - - - - - - - - 0 - 0 - - - - Location of FSUIPC.dll: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 230 - 0 - - - - Location of FSUIPC.dll - - - QFrame::Box - - - QFrame::Sunken - - - 1 - - - Location of FSUIPC.dll - - - - - - - - 35 - 16777215 - - - - ... - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - The DLL should be placed in the Modules folder of MS Flight Simulator - - - - - - - - - - - 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/ftnoir_ftnservercontrols.ui b/facetracknoir/ftnoir_ftnservercontrols.ui deleted file mode 100644 index 3cb4bdeb..00000000 --- a/facetracknoir/ftnoir_ftnservercontrols.ui +++ /dev/null @@ -1,261 +0,0 @@ - - - UICFTNServerControls - - - - 0 - 0 - 411 - 156 - - - - FTNoIR protocol settings FaceTrackNoIR - - - - images/FaceTrackNoIR.pngimages/FaceTrackNoIR.png - - - Qt::LeftToRight - - - false - - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - - 60 - 16777215 - - - - 255 - - - 1 - - - - - - - IP-address remote PC - - - - - - - Port-number - - - - - - - 5550 - - - 10000 - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - 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 - - - - - startEngineClicked() - stopEngineClicked() - cameraSettingsClicked() - - diff --git a/freetrackclient/freetrackclient.cpp b/freetrackclient/freetrackclient.cpp index ac6148e8..1a591de9 100644 --- a/freetrackclient/freetrackclient.cpp +++ b/freetrackclient/freetrackclient.cpp @@ -30,20 +30,7 @@ */ -#ifdef WIN64 -#pragma comment(linker, "/export:FTGetData") -#pragma comment(linker, "/export:FTReportName") -#pragma comment(linker, "/export:FTGetDllVersion") -#pragma comment(linker, "/export:FTProvider") -#endif - -#ifdef WIN64 -# define FT_DECLSPEC __declspec(dllexport) -#else -# define FT_DECLSPEC -#endif - -#define FT_EXPORT(t) extern "C" t FT_DECLSPEC __stdcall +#define FT_EXPORT(t) extern "C" t __declspec(dllexport) __stdcall #define NP_AXIS_MAX 16383 #include @@ -53,7 +40,7 @@ #include #include -#include "..\..\FTNOIR_PROTOCOL_FT\FTTypes.h" +#include "ftnoir_protocol_ft\fttypes.h" // // Functions to create/open the file-mapping @@ -64,7 +51,7 @@ void FTDestroyMapping(); float scale2AnalogLimits( float x, float min_x, float max_x ); float getDegreesFromRads ( float rads ); -#if 1 +#if 0 static FILE *debug_stream = fopen("c:\\FreeTrackClient.log", "a"); #define dbg_report(...) if (debug_stream) { fprintf(debug_stream, __VA_ARGS__); fflush(debug_stream); } #else diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp b/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp index b8461993..5616915a 100644 --- a/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp +++ b/ftnoir_protocol_ft/ftnoir_protocol_ft.cpp @@ -505,9 +505,9 @@ void FTNoIR_Protocol::getNameFromGame( char *dest ) // GetProtocol - Undecorated name, which can be easily used with GetProcAddress // Win32 API function. // _GetProtocol@0 - Common name decoration for __stdcall functions in C language. -#pragma comment(linker, "/export:GetProtocol=_GetProtocol@0") +//#pragma comment(linker, "/export:GetProtocol=_GetProtocol@0") -FTNOIR_PROTOCOL_BASE_EXPORT IProtocolPtr __stdcall GetProtocol() +extern "C" FTNOIR_PROTOCOL_BASE_EXPORT void* CALLING_CONVENTION GetConstructor() { - return new FTNoIR_Protocol; + return (IProtocol*) new FTNoIR_ProtocolDll; } diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft.h b/ftnoir_protocol_ft/ftnoir_protocol_ft.h index c82c3e79..5b36ab5a 100644 --- a/ftnoir_protocol_ft/ftnoir_protocol_ft.h +++ b/ftnoir_protocol_ft/ftnoir_protocol_ft.h @@ -28,16 +28,17 @@ #ifndef INCLUDED_FTSERVER_H #define INCLUDED_FTSERVER_H -#include "..\ftnoir_protocol_base\ftnoir_protocol_base.h" -#include "ui_FTNoIR_FTcontrols.h" -#include "FTTypes.h" +#include "ftnoir_protocol_base/ftnoir_protocol_base.h" +#include "ui_ftnoir_ftcontrols.h" +#include "facetracknoir/global-settings.h" +#include "fttypes.h" #include #include #include #include #include #include -#include "Windows.h" +#include //#include "math.h" //typedef char *(WINAPI *importProvider)(void); @@ -125,7 +126,7 @@ private slots: //******************************************************************************************************* // FaceTrackNoIR Protocol DLL. Functions used to get general info on the Protocol //******************************************************************************************************* -class FTNoIR_ProtocolDll : public IProtocolDll +class FTNoIR_ProtocolDll : public Metadata { public: FTNoIR_ProtocolDll(); diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp b/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp index 46dd263f..ffdd7ddd 100644 --- a/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp +++ b/ftnoir_protocol_ft/ftnoir_protocol_ft_dialog.cpp @@ -32,7 +32,7 @@ */ #include "ftnoir_protocol_ft.h" #include -#include "facetracknoir/global-settings.h" +#include //******************************************************************************************************* // FaceTrackNoIR Client Settings-dialog. @@ -51,12 +51,36 @@ QWidget() // 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())); + connect(ui.bntLocateNPClient, SIGNAL(clicked()), this, SLOT(selectDLL())); + connect(ui.chkTIRViews, SIGNAL(stateChanged(int)), this, SLOT(settingChanged())); + connect(ui.chkStartDummy, SIGNAL(stateChanged(int)), this, SLOT(settingChanged())); + connect(ui.cbxSelectInterface, SIGNAL(currentIndexChanged(int)), this, SLOT(settingChanged( int ))); + + ui.cbxSelectInterface->addItem("Enable both"); + ui.cbxSelectInterface->addItem("Use FreeTrack, hide TrackIR"); + ui.cbxSelectInterface->addItem("Use TrackIR, hide FreeTrack"); theProtocol = NULL; // Load the settings from the current .INI-file loadSettings(); + + + aFileName = QCoreApplication::applicationDirPath() + "/TIRViews.dll"; + if ( !QFile::exists( aFileName ) ) { + ui.chkTIRViews->setChecked( false ); + ui.chkTIRViews->setEnabled ( false ); + + // + // Best do this save() last, or it will continually reset the settings... :-( + // + save(); + } + else { + ui.chkTIRViews->setEnabled ( true ); + } + + } // @@ -66,11 +90,6 @@ FTControls::~FTControls() { qDebug() << "~FTControls() says: started"; } -void FTControls::Release() -{ - delete this; -} - // // Initialize tracker-client-dialog // @@ -142,7 +161,12 @@ void FTControls::loadSettings() { qDebug() << "loadSettings says: iniFile = " << currentFile; iniFile.beginGroup ( "FT" ); -// ui.chkTIRViews->setChecked (iniFile.value ( "useTIRViews", 0 ).toBool()); + ui.cbxSelectInterface->setCurrentIndex( iniFile.value ( "UsedInterface", 0 ).toInt() ); + iniFile.endGroup (); + + iniFile.beginGroup ( "FTIR" ); + ui.chkTIRViews->setChecked (iniFile.value ( "useTIRViews", 0 ).toBool()); + ui.chkStartDummy->setChecked (iniFile.value ( "useDummyExe", 1 ).toBool()); iniFile.endGroup (); settingsDirty = false; @@ -158,12 +182,44 @@ void FTControls::save() { QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) iniFile.beginGroup ( "FT" ); -// iniFile.setValue ( "useTIRViews", ui.chkTIRViews->isChecked() ); + iniFile.setValue ( "UsedInterface", ui.cbxSelectInterface->currentIndex()); + iniFile.endGroup (); + + iniFile.beginGroup ( "FTIR" ); + iniFile.setValue ( "useTIRViews", ui.chkTIRViews->isChecked() ); + iniFile.setValue ( "useDummyExe", ui.chkStartDummy->isChecked() ); iniFile.endGroup (); settingsDirty = false; } +// +// Select a NPClient.dll file, to repair the Location in the Registry. +// Several program distribute their own version of this file. +// +void FTControls::selectDLL() { + QFileDialog::Options options; + QFileDialog::FileMode mode; + + options |= QFileDialog::DontUseNativeDialog; + mode = QFileDialog::ExistingFile; + QString selectedFilter; + QString fileName = QFileDialog::getOpenFileName( this, tr("Select the desired NPClient DLL"), QCoreApplication::applicationDirPath() + "/NPClient.dll", tr("Dll file (*.dll);;All Files (*)")); + + // + // Write the location of the file in the required Registry-key. + // + if (! fileName.isEmpty() ) { + if (fileName.endsWith("NPClient.dll", Qt::CaseInsensitive) ) { + QSettings settingsTIR("NaturalPoint", "NATURALPOINT\\NPClient Location"); // Registry settings (in HK_USER) + QString aLocation = fileName.left(fileName.length() - 12); // Location of Client DLL + + settingsTIR.setValue( "Path" , aLocation ); + } + } +} + + //////////////////////////////////////////////////////////////////////////////// // Factory function that creates instances if the Protocol-settings dialog object. @@ -171,8 +227,6 @@ void FTControls::save() { // GetProtocolDialog - Undecorated name, which can be easily used with GetProcAddress // Win32 API function. // _GetProtocolDialog@0 - Common name decoration for __stdcall functions in C language. -//#pragma comment(linker, "/export:GetProtocolDialog=_GetProtocolDialog@0") - extern "C" FTNOIR_PROTOCOL_BASE_EXPORT void* CALLING_CONVENTION GetDialog( ) { return (IProtocolDialog*) new FTControls; diff --git a/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp b/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp index 1209e38b..5f821f59 100644 --- a/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp +++ b/ftnoir_protocol_ft/ftnoir_protocol_ft_dll.cpp @@ -32,7 +32,6 @@ */ #include "ftnoir_protocol_ft.h" #include -#include "facetracknoir/global-settings.h" FTNoIR_ProtocolDll::FTNoIR_ProtocolDll() { } @@ -49,9 +48,7 @@ FTNoIR_ProtocolDll::~FTNoIR_ProtocolDll() // GetProtocolDll - Undecorated name, which can be easily used with GetProcAddress // Win32 API function. // _GetProtocolDll@0 - Common name decoration for __stdcall functions in C language. -//#pragma comment(linker, "/export:GetProtocolDll=_GetProtocolDll@0") - extern "C" FTNOIR_PROTOCOL_BASE_EXPORT Metadata* CALLING_CONVENTION GetMetadata() { return new FTNoIR_ProtocolDll; -} +} \ No newline at end of file -- cgit v1.2.3