diff options
Diffstat (limited to 'ftnoir_protocol_fg')
| -rw-r--r-- | ftnoir_protocol_fg/FGTypes.h | 28 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/FTNoIR_FGcontrols.ui | 279 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/FTNoIR_Protocol_FG.cpp | 257 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/FTNoIR_Protocol_FG.h | 127 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc8.vcproj | 380 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc9.vcproj | 385 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/Protocol.qrc | 5 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/ftnoir_protocol_fg_dialog.cpp | 225 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/ftnoir_protocol_fg_dll.cpp | 56 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/images/FlightGear.ico | bin | 0 -> 13094 bytes | 
10 files changed, 1742 insertions, 0 deletions
| diff --git a/ftnoir_protocol_fg/FGTypes.h b/ftnoir_protocol_fg/FGTypes.h new file mode 100644 index 00000000..949dc213 --- /dev/null +++ b/ftnoir_protocol_fg/FGTypes.h @@ -0,0 +1,28 @@ +/********************************************************************************
 +* 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/ftnoir_protocol_fg/FTNoIR_FGcontrols.ui b/ftnoir_protocol_fg/FTNoIR_FGcontrols.ui new file mode 100644 index 00000000..3469e7aa --- /dev/null +++ b/ftnoir_protocol_fg/FTNoIR_FGcontrols.ui @@ -0,0 +1,279 @@ +<?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>1000</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/ftnoir_protocol_fg/FTNoIR_Protocol_FG.cpp b/ftnoir_protocol_fg/FTNoIR_Protocol_FG.cpp new file mode 100644 index 00000000..5506f534 --- /dev/null +++ b/ftnoir_protocol_fg/FTNoIR_Protocol_FG.cpp @@ -0,0 +1,257 @@ +/********************************************************************************
 +* 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):
 +	20110401 - WVR: Moved protocol to a DLL, convenient for installation etc.
 +	20101224 - WVR: Base class is no longer inheriting QThread. sendHeadposeToGame
 +					is called from run() of Tracker.cpp
 +*/
 +#include "ftnoir_protocol_fg.h"
 +#include <QFile>
 +
 +// For Todd and Arda Kutlu
 +//#define SEND_ASCII_DATA
 +//#define LOG_OUTPUT
 +
 +/** constructor **/
 +FTNoIR_Protocol::FTNoIR_Protocol()
 +{
 +	blnConnectionActive = false;
 +	hMainWindow = NULL;
 +	loadSettings();
 +}
 +
 +/** destructor **/
 +FTNoIR_Protocol::~FTNoIR_Protocol()
 +{
 +	if (inSocket != 0) {
 +		inSocket->close();
 +		delete inSocket;
 +	}
 +	
 +	if (outSocket != 0) {
 +		outSocket->close();
 +		delete outSocket;
 +	}
 +}
 +
 +/** helper to Auto-destruct **/
 +void FTNoIR_Protocol::Release()
 +{
 +    delete this;
 +}
 +
 +void FTNoIR_Protocol::Initialize()
 +{
 +	return;
 +}
 +
 +//
 +// Load the current Settings from the currently 'active' INI-file.
 +//
 +void FTNoIR_Protocol::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 ();
 +
 +}
 +
 +//
 +// Update Headpose in Game.
 +//
 +void FTNoIR_Protocol::sendHeadposeToGame( THeadPoseData *headpose, THeadPoseData *rawheadpose ) {
 +int no_bytes;
 +QHostAddress sender;
 +quint16 senderPort;
 +PDWORD_PTR MsgResult = 0;
 +
 +#ifdef SEND_ASCII_DATA
 +char data[100];
 +#endif
 +
 +	//
 +	// Copy the Raw measurements directly to the client.
 +	//
 +	FlightData.x = headpose->x;
 +	FlightData.y = headpose->y;
 +	FlightData.z = headpose->z;
 +	FlightData.p = headpose->pitch;
 +	FlightData.h = headpose->yaw;
 +	FlightData.r = headpose->roll;
 +	FlightData.status = fg_cmd;
 +
 +	//
 +	// Try to send an UDP-message to the FlightGear
 +	//
 +
 +#ifdef SEND_ASCII_DATA
 +	sprintf_s(data, "%.2f %.2f %.2f %.2f %.2f %.2f\n\0", FlightData.x, FlightData.y, FlightData.z, FlightData.p, FlightData.h, FlightData.r);
 +
 +	if (outSocket != 0) {
 +		no_bytes = outSocket->writeDatagram((const char *) &data, strlen( data ), destIP, destPort);
 +		if ( no_bytes > 0) {
 +		qDebug() << "FGServer::writePendingDatagrams says: bytes send =" << data;
 +		}
 +		else {
 +			qDebug() << "FGServer::writePendingDatagrams says: nothing sent!";
 +		}
 +	}
 +
 +#endif
 +
 +	#ifdef LOG_OUTPUT
 +	//	Use this for some debug-output to file...
 +	QFile datafile(QCoreApplication::applicationDirPath() + "\\FG_output.txt");
 +	if (datafile.open(QFile::WriteOnly | QFile::Append)) {
 +		QTextStream out(&datafile);
 +		out << "output:\t" << FlightData.x << "\t" << FlightData.y << "\t" << FlightData.z << "\t" << FlightData.p << "\t" << FlightData.h << "\t" << FlightData.r << '\n';
 +	}
 +	#endif
 +
 +	#ifndef SEND_ASCII_DATA
 +	//! [1]
 +//	no_bytes = outSocket->writeDatagram((const char *) &FlightData, sizeof( FlightData ), QHostAddress::LocalHost, 5550);
 +	if (outSocket != 0) {
 +		no_bytes = outSocket->writeDatagram((const char *) &FlightData, sizeof( FlightData ), destIP, destPort);
 +		if ( no_bytes > 0) {
 +	//		qDebug() << "FGServer::writePendingDatagrams says: bytes send =" << no_bytes << sizeof( double );
 +		}
 +		else {
 +			qDebug() << "FGServer::writePendingDatagrams says: nothing sent!";
 +		}
 +	}
 +	#endif
 +
 +	//
 +	// 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
 +			}
 +
 +			if (!blnConnectionActive) {
 +				blnConnectionActive = true;
 +				if (hMainWindow != NULL) {
 +					SendMessageTimeout( (HWND) hMainWindow, RegisterWindowMessageA(FT_PROGRAMID), 0, 0, 0, 2000, MsgResult);
 +				}
 +			}
 +		}
 +	}
 +}
 +
 +//
 +// Check if the Client DLL exists and load it (to test it), if so.
 +// Returns 'true' if all seems OK.
 +//
 +bool FTNoIR_Protocol::checkServerInstallationOK( HANDLE handle )
 +{   
 +	// Init. the data
 +	FlightData.x = 0.0f;
 +	FlightData.y = 0.0f;
 +	FlightData.z = 0.0f;
 +	FlightData.h = 0.0f;
 +	FlightData.p = 0.0f;
 +	FlightData.r = 0.0f;
 +	FlightData.status = 0;
 +	fg_cmd = 1;
 +
 +	inSocket = 0;
 +	outSocket = 0;
 +
 +	hMainWindow = handle;
 +
 +	//
 +	// 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;
 +}
 +
 +//
 +// Return a name, if present the name from the Game, that is connected...
 +//
 +void FTNoIR_Protocol::getNameFromGame( char *dest )
 +{   
 +	sprintf_s(dest, 99, "FlightGear");
 +	return;
 +}
 +
 +////////////////////////////////////////////////////////////////////////////////
 +// Factory function that creates instances if the Protocol object.
 +
 +// Export both decorated and undecorated names.
 +//   GetProtocol     - Undecorated name, which can be easily used with GetProcAddress
 +//                Win32 API function.
 +//   _GetProtocol@0  - Common name decoration for __stdcall functions in C language.
 +#pragma comment(linker, "/export:GetProtocol=_GetProtocol@0")
 +
 +FTNOIR_PROTOCOL_BASE_EXPORT IProtocolPtr __stdcall GetProtocol()
 +{
 +	return new FTNoIR_Protocol;
 +}
 diff --git a/ftnoir_protocol_fg/FTNoIR_Protocol_FG.h b/ftnoir_protocol_fg/FTNoIR_Protocol_FG.h new file mode 100644 index 00000000..34773540 --- /dev/null +++ b/ftnoir_protocol_fg/FTNoIR_Protocol_FG.h @@ -0,0 +1,127 @@ +/********************************************************************************
 +* FaceTrackNoIR		This program is a private project of some enthusiastic		*
 +*					gamers from Holland, who don't like to pay much for			*
 +*					head-tracking.												*
 +*																				*
 +* Copyright (C) 2013	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_protocol_base\ftnoir_protocol_base.h"
 +#include "ui_FTNoIR_FGcontrols.h"
 +#include "FGTypes.h"
 +#include <QThread>
 +#include <QUdpSocket>
 +#include <QMessageBox>
 +#include <QSettings>
 +#include "Windows.h"
 +#include "math.h"
 +
 +static const char* FT_PROGRAMID = "FT_ProgramID";				// For message to FaceTrackNoIR main-window.
 +
 +class FTNoIR_Protocol : public IProtocol
 +{
 +public:
 +	FTNoIR_Protocol();
 +	~FTNoIR_Protocol();
 +
 +	void Release();
 +    void Initialize();
 +
 +	bool checkServerInstallationOK( HANDLE handle );
 +	void sendHeadposeToGame( THeadPoseData *headpose, THeadPoseData *rawheadpose );
 +	void getNameFromGame( char *dest );						// Take care dest can handle up to 100 chars...
 +
 +private:
 +
 +	bool blnConnectionActive;
 +	HANDLE hMainWindow;										// Save the handle to FaceTrackNoIR main-window
 +
 +	//	Tracker *headTracker;								// For upstream messages...
 +	TFlightGearData FlightData;
 +	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 FTNoIR protocol client-settings.
 +class FGControls: public QWidget, Ui::UICFGControls, public IProtocolDialog
 +{
 +    Q_OBJECT
 +public:
 +
 +	explicit FGControls();
 +    virtual ~FGControls();
 +	void showEvent ( QShowEvent * event );
 +
 +	void Release();											// Member functions which are accessible from outside the DLL
 +    void Initialize(QWidget *parent);
 +	void registerProtocol(IProtocol *protocol) {
 +		theProtocol = (FTNoIR_Protocol *) protocol;			// Accept the pointer to the Protocol
 +	};
 +	void unRegisterProtocol() {
 +		theProtocol = NULL;									// Reset the pointer
 +	};
 +
 +private:
 +	Ui::UICFGControls ui;
 +	void loadSettings();
 +	void save();
 +
 +	/** helper **/
 +	bool settingsDirty;
 +	FTNoIR_Protocol *theProtocol;
 +
 +private slots:
 +	void doOK();
 +	void doCancel();
 +	void chkLocalPCOnlyChanged();
 +	void settingChanged() { settingsDirty = true; };
 +};
 +
 +//*******************************************************************************************************
 +// FaceTrackNoIR Protocol DLL. Functions used to get general info on the Protocol
 +//*******************************************************************************************************
 +class FTNoIR_ProtocolDll : public IProtocolDll
 +{
 +public:
 +	FTNoIR_ProtocolDll();
 +	~FTNoIR_ProtocolDll();
 +
 +	void getFullName(QString *strToBeFilled) { *strToBeFilled = QString("FlightGear"); };
 +	void getShortName(QString *strToBeFilled) { *strToBeFilled = QString("FlightGear"); };
 +	void getDescription(QString *strToBeFilled) { *strToBeFilled = QString("FlightGear UDP protocol"); };
 +
 +	void getIcon(QIcon *icon) { *icon = QIcon(":/images/FlightGear.ico"); };
 +};
 +
 +
 +#endif//INCLUDED_FGSERVER_H
 +//END
 diff --git a/ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc8.vcproj b/ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc8.vcproj new file mode 100644 index 00000000..47da021d --- /dev/null +++ b/ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc8.vcproj @@ -0,0 +1,380 @@ +<?xml version="1.0" encoding="Windows-1252"?>
 +<VisualStudioProject
 +	ProjectType="Visual C++"
 +	Version="8,00"
 +	Name="FTNoIR_Protocol_FG"
 +	ProjectGUID="{7C77C833-5687-4A35-B219-4CF4D3D8E626}"
 +	RootNamespace="FTNoIR_Protocol_FG"
 +	Keyword="Qt4VSv1.0"
 +	>
 +	<Platforms>
 +		<Platform
 +			Name="Win32"
 +		/>
 +	</Platforms>
 +	<ToolFiles>
 +	</ToolFiles>
 +	<Configurations>
 +		<Configuration
 +			Name="Release|Win32"
 +			OutputDirectory="$(SolutionDir)/bin"
 +			IntermediateDirectory="$(ConfigurationName)"
 +			ConfigurationType="2"
 +			>
 +			<Tool
 +				Name="VCPreBuildEventTool"
 +			/>
 +			<Tool
 +				Name="VCCustomBuildTool"
 +			/>
 +			<Tool
 +				Name="VCXMLDataGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCWebServiceProxyGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCMIDLTool"
 +			/>
 +			<Tool
 +				Name="VCCLCompilerTool"
 +				AdditionalIncludeDirectories=".\GeneratedFiles;"$(QTDIR)\include";".\GeneratedFiles\$(ConfigurationName)";"$(QTDIR)\include\qtmain";"$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtNetwork";"$(QTDIR)\include\QtGui";.\"
 +				PreprocessorDefinitions="UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_THREAD_SUPPORT;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;FTNOIR_PROTOCOL_BASE_LIB;QT_DLL"
 +				RuntimeLibrary="2"
 +				TreatWChar_tAsBuiltInType="false"
 +				DebugInformationFormat="0"
 +			/>
 +			<Tool
 +				Name="VCManagedResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCPreLinkEventTool"
 +			/>
 +			<Tool
 +				Name="VCLinkerTool"
 +				AdditionalDependencies="qtmain.lib QtCore4.lib QtGui4.lib QtNetwork4.lib"
 +				OutputFile="$(OutDir)\$(ProjectName).dll"
 +				AdditionalLibraryDirectories="$(QTDIR)\lib"
 +				GenerateDebugInformation="false"
 +				SubSystem="2"
 +				OptimizeReferences="1"
 +				EnableCOMDATFolding="1"
 +			/>
 +			<Tool
 +				Name="VCALinkTool"
 +			/>
 +			<Tool
 +				Name="VCManifestTool"
 +			/>
 +			<Tool
 +				Name="VCXDCMakeTool"
 +			/>
 +			<Tool
 +				Name="VCBscMakeTool"
 +			/>
 +			<Tool
 +				Name="VCFxCopTool"
 +			/>
 +			<Tool
 +				Name="VCAppVerifierTool"
 +			/>
 +			<Tool
 +				Name="VCWebDeploymentTool"
 +			/>
 +			<Tool
 +				Name="VCPostBuildEventTool"
 +			/>
 +		</Configuration>
 +		<Configuration
 +			Name="Debug|Win32"
 +			OutputDirectory="$(SolutionDir)/bin_dbg"
 +			IntermediateDirectory="$(ConfigurationName)"
 +			ConfigurationType="2"
 +			>
 +			<Tool
 +				Name="VCPreBuildEventTool"
 +			/>
 +			<Tool
 +				Name="VCCustomBuildTool"
 +			/>
 +			<Tool
 +				Name="VCXMLDataGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCWebServiceProxyGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCMIDLTool"
 +			/>
 +			<Tool
 +				Name="VCCLCompilerTool"
 +				Optimization="0"
 +				AdditionalIncludeDirectories=".\GeneratedFiles;"$(QTDIR)\include";".\GeneratedFiles\$(ConfigurationName)";"$(QTDIR)\include\qtmain";"$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtNetwork";"$(QTDIR)\include\QtGui";.\"
 +				PreprocessorDefinitions="UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_THREAD_SUPPORT;QT_CORE_LIB;FTNOIR_PROTOCOL_BASE_LIB;QT_DLL"
 +				RuntimeLibrary="3"
 +				TreatWChar_tAsBuiltInType="false"
 +				DebugInformationFormat="3"
 +			/>
 +			<Tool
 +				Name="VCManagedResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCPreLinkEventTool"
 +			/>
 +			<Tool
 +				Name="VCLinkerTool"
 +				AdditionalDependencies="qtmaind.lib QtCored4.lib QtGuid4.lib QtNetworkd4.lib"
 +				OutputFile="$(OutDir)\$(ProjectName).dll"
 +				AdditionalLibraryDirectories="$(QTDIR)\lib"
 +				GenerateDebugInformation="true"
 +				SubSystem="2"
 +			/>
 +			<Tool
 +				Name="VCALinkTool"
 +			/>
 +			<Tool
 +				Name="VCManifestTool"
 +			/>
 +			<Tool
 +				Name="VCXDCMakeTool"
 +			/>
 +			<Tool
 +				Name="VCBscMakeTool"
 +			/>
 +			<Tool
 +				Name="VCFxCopTool"
 +			/>
 +			<Tool
 +				Name="VCAppVerifierTool"
 +			/>
 +			<Tool
 +				Name="VCWebDeploymentTool"
 +			/>
 +			<Tool
 +				Name="VCPostBuildEventTool"
 +			/>
 +		</Configuration>
 +	</Configurations>
 +	<References>
 +	</References>
 +	<Files>
 +		<Filter
 +			Name="Source Files"
 +			Filter="cpp;cxx;c;def"
 +			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 +			>
 +			<File
 +				RelativePath=".\ftnoir_Protocol_FG.cpp"
 +				>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Header Files"
 +			Filter="h"
 +			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
 +			>
 +			<File
 +				RelativePath=".\FGTypes.h"
 +				>
 +			</File>
 +			<File
 +				RelativePath="..\FTNoIR_Protocol_Base\ftnoir_Protocol_base.h"
 +				>
 +			</File>
 +			<File
 +				RelativePath="..\FTNoIR_Protocol_Base\ftnoir_Protocol_base_global.h"
 +				>
 +			</File>
 +			<File
 +				RelativePath=".\FTNoIR_Protocol_FG.h"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Moc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\moc.exe"   -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DFTNOIR_PROTOCOL_BASE_LIB -DQT_DLL -D_WINDLL  -I".\GeneratedFiles\." -I"$(QTDIR)\include\." -I".\GeneratedFiles\$(ConfigurationName)\." -I"$(QTDIR)\include\qtmain\." -I"$(QTDIR)\include\QtCore\." -I"$(QTDIR)\include\QtNetwork\." -I"$(QTDIR)\include\QtGui\." -I".\." ".\FTNoIR_Protocol_FG.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp"
"
 +						AdditionalDependencies=""$(QTDIR)\bin\moc.exe";$(InputPath)"
 +						Outputs="".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp""
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Moc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\moc.exe"  "$(InputPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DFTNOIR_PROTOCOL_BASE_LIB -DQT_DLL -D_WINDLL  "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtGui" "-I."
"
 +						AdditionalDependencies=""$(QTDIR)\bin\moc.exe";$(InputPath)"
 +						Outputs="".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp""
 +					/>
 +				</FileConfiguration>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Form Files"
 +			Filter="ui"
 +			UniqueIdentifier="{99349809-55BA-4b9d-BF79-8FDBB0286EB3}"
 +			>
 +			<File
 +				RelativePath=".\FTNoIR_FGcontrols.ui"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Uic'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_$(InputName).h" "$(InputPath)"
"
 +						AdditionalDependencies="$(QTDIR)\bin\uic.exe"
 +						Outputs="".\GeneratedFiles\ui_$(InputName).h""
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Uic'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_$(InputName).h" "$(InputPath)"
"
 +						AdditionalDependencies="$(QTDIR)\bin\uic.exe"
 +						Outputs="".\GeneratedFiles\ui_$(InputName).h""
 +					/>
 +				</FileConfiguration>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Resource Files"
 +			Filter="qrc;*"
 +			UniqueIdentifier="{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}"
 +			ParseFiles="false"
 +			>
 +			<File
 +				RelativePath=".\Protocol.qrc"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Rcc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\rcc.exe" -name "$(InputName)" -no-compress "$(InputPath)" -o .\GeneratedFiles\qrc_$(InputName).cpp
"
 +						AdditionalDependencies="$(InputPath);.\images\SeeingMachines.ico"
 +						Outputs=".\GeneratedFiles\qrc_$(InputName).cpp"
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Rcc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\rcc.exe" -name "$(InputName)" -no-compress "$(InputPath)" -o .\GeneratedFiles\qrc_$(InputName).cpp
"
 +						AdditionalDependencies="$(InputPath);.\images\SeeingMachines.ico"
 +						Outputs=".\GeneratedFiles\qrc_$(InputName).cpp"
 +					/>
 +				</FileConfiguration>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Generated Files"
 +			Filter="moc;h;cpp"
 +			UniqueIdentifier="{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}"
 +			SourceControlFiles="false"
 +			>
 +			<File
 +				RelativePath=".\generatedfiles\qrc_Protocol.cpp"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCLCompilerTool"
 +						UsePrecompiledHeader="0"
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCLCompilerTool"
 +						UsePrecompiledHeader="0"
 +					/>
 +				</FileConfiguration>
 +			</File>
 +			<File
 +				RelativePath=".\GeneratedFiles\ui_FTNoIR_FGcontrols.h"
 +				>
 +			</File>
 +			<Filter
 +				Name="Release"
 +				Filter="cpp;moc"
 +				SourceControlFiles="false"
 +				>
 +				<File
 +					RelativePath=".\GeneratedFiles\Release\moc_FTNoIR_Protocol_FG.cpp"
 +					>
 +					<FileConfiguration
 +						Name="Debug|Win32"
 +						ExcludedFromBuild="true"
 +						>
 +						<Tool
 +							Name="VCCLCompilerTool"
 +						/>
 +					</FileConfiguration>
 +				</File>
 +			</Filter>
 +			<Filter
 +				Name="Debug"
 +				Filter="cpp;moc"
 +				SourceControlFiles="false"
 +				>
 +				<File
 +					RelativePath=".\GeneratedFiles\Debug\moc_FTNoIR_Protocol_FG.cpp"
 +					>
 +					<FileConfiguration
 +						Name="Release|Win32"
 +						ExcludedFromBuild="true"
 +						>
 +						<Tool
 +							Name="VCCLCompilerTool"
 +						/>
 +					</FileConfiguration>
 +				</File>
 +			</Filter>
 +		</Filter>
 +	</Files>
 +	<Globals>
 +		<Global
 +			Name="lupdateOnBuild"
 +			Value="0"
 +		/>
 +		<Global
 +			Name="MocDir"
 +			Value=".\GeneratedFiles\$(ConfigurationName)"
 +		/>
 +		<Global
 +			Name="MocOptions"
 +			Value=""
 +		/>
 +		<Global
 +			Name="QtVersion Win32"
 +			Value="4.6.2"
 +		/>
 +		<Global
 +			Name="RccDir"
 +			Value=".\GeneratedFiles"
 +		/>
 +		<Global
 +			Name="UicDir"
 +			Value=".\GeneratedFiles"
 +		/>
 +	</Globals>
 +</VisualStudioProject>
 diff --git a/ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc9.vcproj b/ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc9.vcproj new file mode 100644 index 00000000..9dd85008 --- /dev/null +++ b/ftnoir_protocol_fg/FTNoIR_Protocol_FG_vc9.vcproj @@ -0,0 +1,385 @@ +<?xml version="1.0" encoding="Windows-1252"?>
 +<VisualStudioProject
 +	ProjectType="Visual C++"
 +	Version="9,00"
 +	Name="FTNoIR_Protocol_FG"
 +	ProjectGUID="{7C77C833-5687-4A35-B219-4CF4D3D8E626}"
 +	RootNamespace="FTNoIR_Protocol_FG"
 +	Keyword="Qt4VSv1.0"
 +	TargetFrameworkVersion="131072"
 +	>
 +	<Platforms>
 +		<Platform
 +			Name="Win32"
 +		/>
 +	</Platforms>
 +	<ToolFiles>
 +	</ToolFiles>
 +	<Configurations>
 +		<Configuration
 +			Name="Release|Win32"
 +			OutputDirectory="$(SolutionDir)/bin"
 +			IntermediateDirectory="$(ConfigurationName)"
 +			ConfigurationType="2"
 +			>
 +			<Tool
 +				Name="VCPreBuildEventTool"
 +			/>
 +			<Tool
 +				Name="VCCustomBuildTool"
 +			/>
 +			<Tool
 +				Name="VCXMLDataGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCWebServiceProxyGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCMIDLTool"
 +			/>
 +			<Tool
 +				Name="VCCLCompilerTool"
 +				AdditionalIncludeDirectories=".\GeneratedFiles;"$(QTDIR)\include";".\GeneratedFiles\$(ConfigurationName)";"$(QTDIR)\include\qtmain";"$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtNetwork";"$(QTDIR)\include\QtGui";.\"
 +				PreprocessorDefinitions="UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_THREAD_SUPPORT;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;FTNOIR_PROTOCOL_BASE_LIB;QT_DLL"
 +				RuntimeLibrary="2"
 +				TreatWChar_tAsBuiltInType="false"
 +				DebugInformationFormat="0"
 +			/>
 +			<Tool
 +				Name="VCManagedResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCPreLinkEventTool"
 +			/>
 +			<Tool
 +				Name="VCLinkerTool"
 +				AdditionalDependencies="qtmain.lib QtCore4.lib QtGui4.lib QtNetwork4.lib"
 +				OutputFile="$(OutDir)\$(ProjectName).dll"
 +				AdditionalLibraryDirectories="$(QTDIR)\lib"
 +				GenerateDebugInformation="false"
 +				SubSystem="2"
 +				RandomizedBaseAddress="1"
 +				DataExecutionPrevention="0"
 +			/>
 +			<Tool
 +				Name="VCALinkTool"
 +			/>
 +			<Tool
 +				Name="VCManifestTool"
 +			/>
 +			<Tool
 +				Name="VCXDCMakeTool"
 +			/>
 +			<Tool
 +				Name="VCBscMakeTool"
 +			/>
 +			<Tool
 +				Name="VCFxCopTool"
 +			/>
 +			<Tool
 +				Name="VCAppVerifierTool"
 +			/>
 +			<Tool
 +				Name="VCPostBuildEventTool"
 +			/>
 +		</Configuration>
 +		<Configuration
 +			Name="Debug|Win32"
 +			OutputDirectory="$(SolutionDir)/bin_dbg"
 +			IntermediateDirectory="$(ConfigurationName)"
 +			ConfigurationType="2"
 +			>
 +			<Tool
 +				Name="VCPreBuildEventTool"
 +			/>
 +			<Tool
 +				Name="VCCustomBuildTool"
 +			/>
 +			<Tool
 +				Name="VCXMLDataGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCWebServiceProxyGeneratorTool"
 +			/>
 +			<Tool
 +				Name="VCMIDLTool"
 +			/>
 +			<Tool
 +				Name="VCCLCompilerTool"
 +				Optimization="0"
 +				AdditionalIncludeDirectories=".\GeneratedFiles;"$(QTDIR)\include";".\GeneratedFiles\$(ConfigurationName)";"$(QTDIR)\include\qtmain";"$(QTDIR)\include\QtCore";"$(QTDIR)\include\QtNetwork";"$(QTDIR)\include\QtGui";.\"
 +				PreprocessorDefinitions="UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_THREAD_SUPPORT;QT_CORE_LIB;FTNOIR_PROTOCOL_BASE_LIB;QT_DLL"
 +				RuntimeLibrary="3"
 +				TreatWChar_tAsBuiltInType="false"
 +				DebugInformationFormat="3"
 +			/>
 +			<Tool
 +				Name="VCManagedResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCResourceCompilerTool"
 +			/>
 +			<Tool
 +				Name="VCPreLinkEventTool"
 +			/>
 +			<Tool
 +				Name="VCLinkerTool"
 +				AdditionalDependencies="qtmaind.lib QtCored4.lib QtGuid4.lib QtNetworkd4.lib"
 +				OutputFile="$(OutDir)\$(ProjectName).dll"
 +				AdditionalLibraryDirectories="$(QTDIR)\lib"
 +				GenerateDebugInformation="true"
 +				SubSystem="2"
 +				RandomizedBaseAddress="1"
 +				DataExecutionPrevention="0"
 +			/>
 +			<Tool
 +				Name="VCALinkTool"
 +			/>
 +			<Tool
 +				Name="VCManifestTool"
 +			/>
 +			<Tool
 +				Name="VCXDCMakeTool"
 +			/>
 +			<Tool
 +				Name="VCBscMakeTool"
 +			/>
 +			<Tool
 +				Name="VCFxCopTool"
 +			/>
 +			<Tool
 +				Name="VCAppVerifierTool"
 +			/>
 +			<Tool
 +				Name="VCPostBuildEventTool"
 +			/>
 +		</Configuration>
 +	</Configurations>
 +	<References>
 +	</References>
 +	<Files>
 +		<Filter
 +			Name="Source Files"
 +			Filter="cpp;cxx;c;def"
 +			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 +			>
 +			<File
 +				RelativePath=".\ftnoir_Protocol_FG.cpp"
 +				>
 +			</File>
 +			<File
 +				RelativePath=".\ftnoir_protocol_fg_dialog.cpp"
 +				>
 +			</File>
 +			<File
 +				RelativePath=".\ftnoir_protocol_fg_dll.cpp"
 +				>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Header Files"
 +			Filter="h"
 +			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
 +			>
 +			<File
 +				RelativePath=".\FGTypes.h"
 +				>
 +			</File>
 +			<File
 +				RelativePath="..\FTNoIR_Protocol_Base\ftnoir_Protocol_base.h"
 +				>
 +			</File>
 +			<File
 +				RelativePath="..\FTNoIR_Protocol_Base\ftnoir_Protocol_base_global.h"
 +				>
 +			</File>
 +			<File
 +				RelativePath=".\FTNoIR_Protocol_FG.h"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Moc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\moc.exe"   -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DFTNOIR_PROTOCOL_BASE_LIB -DQT_DLL -D_WINDLL  -I".\GeneratedFiles\." -I"$(QTDIR)\include\." -I".\GeneratedFiles\$(ConfigurationName)\." -I"$(QTDIR)\include\qtmain\." -I"$(QTDIR)\include\QtCore\." -I"$(QTDIR)\include\QtNetwork\." -I"$(QTDIR)\include\QtGui\." -I".\." ".\FTNoIR_Protocol_FG.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp"
"
 +						AdditionalDependencies=""$(QTDIR)\bin\moc.exe";$(InputPath)"
 +						Outputs="".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp""
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Moc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\moc.exe"  "$(InputPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DFTNOIR_PROTOCOL_BASE_LIB -DQT_DLL -D_WINDLL  "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtGui" "-I."
"
 +						AdditionalDependencies=""$(QTDIR)\bin\moc.exe";$(InputPath)"
 +						Outputs="".\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp""
 +					/>
 +				</FileConfiguration>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Form Files"
 +			Filter="ui"
 +			UniqueIdentifier="{99349809-55BA-4b9d-BF79-8FDBB0286EB3}"
 +			>
 +			<File
 +				RelativePath=".\FTNoIR_FGcontrols.ui"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Uic'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_$(InputName).h" "$(InputPath)"
"
 +						AdditionalDependencies="$(QTDIR)\bin\uic.exe"
 +						Outputs="".\GeneratedFiles\ui_$(InputName).h""
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Uic'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_$(InputName).h" "$(InputPath)"
"
 +						AdditionalDependencies="$(QTDIR)\bin\uic.exe"
 +						Outputs="".\GeneratedFiles\ui_$(InputName).h""
 +					/>
 +				</FileConfiguration>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Resource Files"
 +			Filter="qrc;*"
 +			UniqueIdentifier="{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}"
 +			ParseFiles="false"
 +			>
 +			<File
 +				RelativePath=".\Protocol.qrc"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Rcc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\rcc.exe" -name "$(InputName)" -no-compress "$(InputPath)" -o .\GeneratedFiles\qrc_$(InputName).cpp
"
 +						AdditionalDependencies="$(InputPath);.\images\SeeingMachines.ico"
 +						Outputs=".\GeneratedFiles\qrc_$(InputName).cpp"
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCustomBuildTool"
 +						Description="Rcc'ing $(InputFileName)..."
 +						CommandLine=""$(QTDIR)\bin\rcc.exe" -name "$(InputName)" -no-compress "$(InputPath)" -o .\GeneratedFiles\qrc_$(InputName).cpp
"
 +						AdditionalDependencies="$(InputPath);.\images\SeeingMachines.ico"
 +						Outputs=".\GeneratedFiles\qrc_$(InputName).cpp"
 +					/>
 +				</FileConfiguration>
 +			</File>
 +		</Filter>
 +		<Filter
 +			Name="Generated Files"
 +			Filter="moc;h;cpp"
 +			UniqueIdentifier="{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}"
 +			SourceControlFiles="false"
 +			>
 +			<File
 +				RelativePath=".\generatedfiles\qrc_Protocol.cpp"
 +				>
 +				<FileConfiguration
 +					Name="Release|Win32"
 +					>
 +					<Tool
 +						Name="VCCLCompilerTool"
 +						UsePrecompiledHeader="0"
 +					/>
 +				</FileConfiguration>
 +				<FileConfiguration
 +					Name="Debug|Win32"
 +					>
 +					<Tool
 +						Name="VCCLCompilerTool"
 +						UsePrecompiledHeader="0"
 +					/>
 +				</FileConfiguration>
 +			</File>
 +			<File
 +				RelativePath=".\GeneratedFiles\ui_FTNoIR_FGcontrols.h"
 +				>
 +			</File>
 +			<Filter
 +				Name="Release"
 +				Filter="cpp;moc"
 +				SourceControlFiles="false"
 +				>
 +				<File
 +					RelativePath=".\GeneratedFiles\Release\moc_FTNoIR_Protocol_FG.cpp"
 +					>
 +					<FileConfiguration
 +						Name="Debug|Win32"
 +						ExcludedFromBuild="true"
 +						>
 +						<Tool
 +							Name="VCCLCompilerTool"
 +						/>
 +					</FileConfiguration>
 +				</File>
 +			</Filter>
 +			<Filter
 +				Name="Debug"
 +				Filter="cpp;moc"
 +				SourceControlFiles="false"
 +				>
 +				<File
 +					RelativePath=".\GeneratedFiles\Debug\moc_FTNoIR_Protocol_FG.cpp"
 +					>
 +					<FileConfiguration
 +						Name="Release|Win32"
 +						ExcludedFromBuild="true"
 +						>
 +						<Tool
 +							Name="VCCLCompilerTool"
 +						/>
 +					</FileConfiguration>
 +				</File>
 +			</Filter>
 +		</Filter>
 +	</Files>
 +	<Globals>
 +		<Global
 +			Name="lupdateOnBuild"
 +			Value="0"
 +		/>
 +		<Global
 +			Name="MocDir"
 +			Value=".\GeneratedFiles\$(ConfigurationName)"
 +		/>
 +		<Global
 +			Name="MocOptions"
 +			Value=""
 +		/>
 +		<Global
 +			Name="QtVersion Win32"
 +			Value="$(DefaultQtVersion)"
 +		/>
 +		<Global
 +			Name="RccDir"
 +			Value=".\GeneratedFiles"
 +		/>
 +		<Global
 +			Name="UicDir"
 +			Value=".\GeneratedFiles"
 +		/>
 +	</Globals>
 +</VisualStudioProject>
 diff --git a/ftnoir_protocol_fg/Protocol.qrc b/ftnoir_protocol_fg/Protocol.qrc new file mode 100644 index 00000000..1e715ac9 --- /dev/null +++ b/ftnoir_protocol_fg/Protocol.qrc @@ -0,0 +1,5 @@ +<RCC> +    <qresource prefix="/"> +        <file>images/FlightGear.ico</file> +    </qresource> +</RCC> diff --git a/ftnoir_protocol_fg/ftnoir_protocol_fg_dialog.cpp b/ftnoir_protocol_fg/ftnoir_protocol_fg_dialog.cpp new file mode 100644 index 00000000..0138a4c1 --- /dev/null +++ b/ftnoir_protocol_fg/ftnoir_protocol_fg_dialog.cpp @@ -0,0 +1,225 @@ +/********************************************************************************
 +* 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):
 +	20110401 - WVR: Moved protocol to a DLL, convenient for installation etc.
 +	20101224 - WVR: Base class is no longer inheriting QThread. sendHeadposeToGame
 +					is called from run() of Tracker.cpp
 +*/
 +#include "ftnoir_protocol_fg.h"
 +#include <QFile>
 +
 +//*******************************************************************************************************
 +// FaceTrackNoIR Client Settings-dialog.
 +//*******************************************************************************************************
 +
 +//
 +// Constructor for server-settings-dialog
 +//
 +FGControls::FGControls() :
 +QWidget()
 +{
 +	ui.setupUi( this );
 +
 +	QPoint offsetpos(100, 100);
 +	//if (parent) {
 +	//	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()));
 +
 +	theProtocol = NULL;
 +
 +	// Load the settings from the current .INI-file
 +	loadSettings();
 +}
 +
 +//
 +// Destructor for server-dialog
 +//
 +FGControls::~FGControls() {
 +	qDebug() << "~FGControls() says: started";
 +}
 +
 +void FGControls::Release()
 +{
 +    delete this;
 +}
 +
 +//
 +// Initialize tracker-client-dialog
 +//
 +void FGControls::Initialize(QWidget *parent) {
 +
 +	QPoint offsetpos(100, 100);
 +	if (parent) {
 +		this->move(parent->pos() + offsetpos);
 +	}
 +	show();
 +}
 +
 +//
 +// 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;
 +}
 +
 +////////////////////////////////////////////////////////////////////////////////
 +// Factory function that creates instances if the Protocol-settings dialog object.
 +
 +// Export both decorated and undecorated names.
 +//   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")
 +
 +FTNOIR_PROTOCOL_BASE_EXPORT IProtocolDialogPtr __stdcall GetProtocolDialog( )
 +{
 +	return new FGControls;
 +}
\ No newline at end of file diff --git a/ftnoir_protocol_fg/ftnoir_protocol_fg_dll.cpp b/ftnoir_protocol_fg/ftnoir_protocol_fg_dll.cpp new file mode 100644 index 00000000..ca71063b --- /dev/null +++ b/ftnoir_protocol_fg/ftnoir_protocol_fg_dll.cpp @@ -0,0 +1,56 @@ +/********************************************************************************
 +* FaceTrackNoIR		This program is a private project of some enthusiastic		*
 +*					gamers from Holland, who don't like to pay much for			*
 +*					head-tracking.												*
 +*																				*
 +* Copyright (C) 2012	Wim Vriend (Developing)									*
 +*						Ron Hendriks (Researching and Testing)					*
 +*																				*
 +* Homepage																		*
 +*																				*
 +* This program is free software; you can redistribute it and/or modify it		*
 +* under the terms of the GNU General Public License as published by the			*
 +* Free Software Foundation; either version 3 of the License, or (at your		*
 +* option) any later version.													*
 +*																				*
 +* This program is distributed in the hope that it will be useful, but			*
 +* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY	*
 +* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for	*
 +* more details.																	*
 +*																				*
 +* You should have received a copy of the GNU General Public License along		*
 +* with this program; if not, see <http://www.gnu.org/licenses/>.				*
 +*																				*
 +********************************************************************************/
 +/*
 +	Modifications (last one on top):
 +		20120830 - WVR: The Dialog class was used to get general info on the DLL. This
 +						had a big disadvantage: the complete dialog was loaded, just to get
 +						some data and then it was deleted again (without ever showing the dialog).
 +						The ProtocolDll class solves this.
 +						The functions to get the name(s) and icon were removed from the two other classes.
 +*/
 +#include "ftnoir_protocol_fg.h"
 +#include <QDebug>
 +
 +FTNoIR_ProtocolDll::FTNoIR_ProtocolDll() {
 +}
 +
 +FTNoIR_ProtocolDll::~FTNoIR_ProtocolDll()
 +{
 +
 +}
 +
 +////////////////////////////////////////////////////////////////////////////////
 +// Factory function that creates instances if the Protocol object.
 +
 +// Export both decorated and undecorated names.
 +//   GetProtocolDll     - Undecorated name, which can be easily used with GetProcAddress
 +//						Win32 API function.
 +//   _GetProtocolDll@0  - Common name decoration for __stdcall functions in C language.
 +#pragma comment(linker, "/export:GetProtocolDll=_GetProtocolDll@0")
 +
 +FTNOIR_PROTOCOL_BASE_EXPORT IProtocolDllPtr __stdcall GetProtocolDll()
 +{
 +	return new FTNoIR_ProtocolDll;
 +}
 diff --git a/ftnoir_protocol_fg/images/FlightGear.ico b/ftnoir_protocol_fg/images/FlightGear.icoBinary files differ new file mode 100644 index 00000000..f96c0f88 --- /dev/null +++ b/ftnoir_protocol_fg/images/FlightGear.ico | 
