summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorWim Vriend <facetracknoir@gmail.com>2011-04-07 17:46:27 +0000
committerWim Vriend <facetracknoir@gmail.com>2011-04-07 17:46:27 +0000
commitbf57ac0073435d8e77275b36b67cf831bc02741c (patch)
tree6192f0008514759c2978fc447762d10bd24288fc
parent803b200ff1b3bc1e9eb1e167ed38379370febc13 (diff)
PPJoy in DLL
git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@67 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb
-rw-r--r--FaceTrackNoIR/FTTypes.cpp5
-rw-r--r--FaceTrackNoIR/SCServer.cpp342
-rw-r--r--FaceTrackNoIR/SCServer.h138
-rw-r--r--FaceTrackNoIR/SCServer.manifest13
4 files changed, 0 insertions, 498 deletions
diff --git a/FaceTrackNoIR/FTTypes.cpp b/FaceTrackNoIR/FTTypes.cpp
deleted file mode 100644
index 36c35592..00000000
--- a/FaceTrackNoIR/FTTypes.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-/** @file
- @brief
-*/
-#include "FTTypes.h"
-
diff --git a/FaceTrackNoIR/SCServer.cpp b/FaceTrackNoIR/SCServer.cpp
deleted file mode 100644
index ec6adac0..00000000
--- a/FaceTrackNoIR/SCServer.cpp
+++ /dev/null
@@ -1,342 +0,0 @@
-/********************************************************************************
-* SCServer SCServer is the Class, that communicates headpose-data *
-* to games, using the SimConnect.dll. *
-* *
-* Copyright (C) 2010 Wim Vriend (Developing) *
-* Ron Hendriks (Testing and Research) *
-* *
-* This program is free software; you can redistribute it and/or modify it *
-* under the terms of the GNU General Public License as published by the *
-* Free Software Foundation; either version 3 of the License, or (at your *
-* option) any later version. *
-* *
-* This program is distributed in the hope that it will be useful, but *
-* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
-* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
-* more details. *
-* *
-* You should have received a copy of the GNU General Public License along *
-* with this program; if not, see <http://www.gnu.org/licenses/>. *
-* *
-********************************************************************************/
-/*
- Modifications (last one on top):
- 20101224 - WVR: Base class is no longer inheriting QThread. sendHeadposeToGame
- is called from run() of Tracker.cpp
-*/
-#include "SCServer.h"
-
-importSimConnect_CameraSetRelative6DOF SCServer::simconnect_set6DOF;
-HANDLE SCServer::hSimConnect = 0; // Handle to SimConnect
-
-float SCServer::virtSCPosX = 0.0f; // Headpose
-float SCServer::virtSCPosY = 0.0f;
-float SCServer::virtSCPosZ = 0.0f;
-
-float SCServer::virtSCRotX = 0.0f;
-float SCServer::virtSCRotY = 0.0f;
-float SCServer::virtSCRotZ = 0.0f;
-
-float SCServer::prevSCPosX = 0.0f; // previous Headpose
-float SCServer::prevSCPosY = 0.0f;
-float SCServer::prevSCPosZ = 0.0f;
-
-float SCServer::prevSCRotX = 0.0f;
-float SCServer::prevSCRotY = 0.0f;
-float SCServer::prevSCRotZ = 0.0f;
-
-/** constructor **/
-SCServer::SCServer() {
- ProgramName = "Microsoft FSX";
- blnSimConnectActive = false;
- hSimConnect = 0;
-}
-
-/** destructor **/
-SCServer::~SCServer() {
-
- qDebug() << "~SCServer says: inside" << SCServer::hSimConnect;
-
- if (hSimConnect != 0) {
- qDebug() << "~SCServer says: before simconnect_close";
- if (SUCCEEDED( simconnect_close( SCServer::hSimConnect ) ) ) {
- qDebug() << "~SCServer says: close SUCCEEDED";
- }
- }
-
- qDebug() << "~SCServer says: before unload";
-// SCClientLib.unload(); Generates crash when tracker is ended...
- qDebug() << "~SCServer says: finished";
-}
-
-//
-// Update Headpose in Game.
-//
-void SCServer::sendHeadposeToGame() {
-
- //
- // It's only useful to send data, if the connection was made.
- //
- if (!blnSimConnectActive) {
- if (SUCCEEDED(simconnect_open(&hSimConnect, "FaceTrackNoIR", NULL, 0, 0, 0))) {
- qDebug() << "SCServer::sendHeadposeToGame() says: SimConnect active!";
-
- //set up the events we want to listen for
- HRESULT hr;
-
- simconnect_subscribetosystemevent(hSimConnect, EVENT_PING, "Frame");
-
- hr = simconnect_mapclienteventtosimevent(hSimConnect, EVENT_INIT, "");
- hr = simconnect_addclienteventtonotificationgroup(hSimConnect, GROUP0, EVENT_INIT, false);
- hr = simconnect_setnotificationgrouppriority(hSimConnect, GROUP0, SIMCONNECT_GROUP_PRIORITY_HIGHEST);
- ////hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT0, "VK_COMMA", EVENT_INIT);
- ////hr = SimConnect_SetInputGroupState(hSimConnect, INPUT0, SIMCONNECT_STATE_ON);
-
- blnSimConnectActive = true;
- }
- }
- else {
- //
- // Write the 6DOF-data to FSX
- //
- // 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)) {
-// if (S_OK == simconnect_set6DOF(hSimConnect, virtPosX, virtPosY, virtPosZ, virtRotX, virtRotZ, virtRotY)) {
-// qDebug() << "SCServer::run() says: SimConnect data written!";
-// }
- }
-
- prevPosX = virtPosX;
- prevPosY = virtPosY;
- prevPosZ = virtPosZ;
- prevRotX = virtRotX;
- prevRotY = virtRotY;
- prevRotZ = virtRotZ;
-
- simconnect_calldispatch(hSimConnect, processNextSimconnectEvent, NULL);
- }
-}
-
-//
-// Check if the Client DLL exists and load it (to test it), if so.
-// SimConnect uses a 'side-by-side' installation. The manifest is loaded and (if that's OK) the
-// right DLL will be loaded automatically...
-//
-// Returns 'true' if all seems OK.
-//
-bool SCServer::checkServerInstallationOK( HANDLE handle )
-{
- QString aFileName; // File Path and Name
-
- // Code to activate the context for the SimConnect DLL
- ACTCTX act = { 0 };
- HANDLE hctx;
- ULONG_PTR ulCookie;
-
-
- qDebug() << "SCCheckClientDLL says: Starting Function";
-
- try {
-
- act.cbSize = sizeof(act);
- act.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID;
-
- QString manifest(QCoreApplication::applicationDirPath());
- manifest += "\\FaceTrackNoIR.exe";
- const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(manifest.utf16());
-
- act.lpSource = encodedName;
- act.lpResourceName = MAKEINTRESOURCE(101);
-
- hctx = CreateActCtx (&act);
-
- if (hctx != INVALID_HANDLE_VALUE) {
- if (!ActivateActCtx(hctx, &ulCookie)) {
- ReleaseActCtx(hctx);
- qDebug() << "FTCheckClientDLL says: Error activating SimConnect manifest";
- }
- }
- else {
- qDebug() << "FTCheckClientDLL says: Error INVALID_HANDLE: " << GetLastError();
- return false;
- }
-
- //
- // Just try to load the DLL. Let Windows handle the PATH's and such trivialities...
- //
- aFileName = SC_CLIENT_FILENAME;
-
- //
- // Load the DLL.
- //
- SCClientLib.setFileName(aFileName);
- if (SCClientLib.load() != true) {
- qDebug() << "FTCheckClientDLL says: Error loading SimConnect DLL";
- return false;
- }
-
- //
- // Deactivate the context again: the function-references should stay in-tact...
- //
- DeactivateActCtx(0, ulCookie);
- ReleaseActCtx(hctx);
-
- } catch(...) {
- return false;
- }
-
- //
- // Get the functions from the DLL.
- //
- simconnect_open = (importSimConnect_Open) SCClientLib.resolve("SimConnect_Open");
- if (simconnect_open == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_Open function not found in DLL!";
- return false;
- }
- simconnect_set6DOF = (importSimConnect_CameraSetRelative6DOF) SCClientLib.resolve("SimConnect_CameraSetRelative6DOF");
- if (simconnect_set6DOF == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_CameraSetRelative6DOF function not found in DLL!";
- return false;
- }
- simconnect_close = (importSimConnect_Close) SCClientLib.resolve("SimConnect_Close");
- if (simconnect_close == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_Close function not found in DLL!";
- return false;
- }
-
- //return true;
-
- simconnect_calldispatch = (importSimConnect_CallDispatch) SCClientLib.resolve("SimConnect_CallDispatch");
- if (simconnect_calldispatch == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_CallDispatch function not found in DLL!";
- return false;
- }
-
- simconnect_subscribetosystemevent = (importSimConnect_SubscribeToSystemEvent) SCClientLib.resolve("SimConnect_SubscribeToSystemEvent");
- if (simconnect_subscribetosystemevent == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_SubscribeToSystemEvent function not found in DLL!";
- return false;
- }
-
- simconnect_mapclienteventtosimevent = (importSimConnect_MapClientEventToSimEvent) SCClientLib.resolve("SimConnect_MapClientEventToSimEvent");
- if (simconnect_subscribetosystemevent == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_MapClientEventToSimEvent function not found in DLL!";
- return false;
- }
-
- simconnect_addclienteventtonotificationgroup = (importSimConnect_AddClientEventToNotificationGroup) SCClientLib.resolve("SimConnect_AddClientEventToNotificationGroup");
- if (simconnect_subscribetosystemevent == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_AddClientEventToNotificationGroup function not found in DLL!";
- return false;
- }
-
- simconnect_setnotificationgrouppriority = (importSimConnect_SetNotificationGroupPriority) SCClientLib.resolve("SimConnect_SetNotificationGroupPriority");
- if (simconnect_subscribetosystemevent == NULL) {
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect_SetNotificationGroupPriority function not found in DLL!";
- return false;
- }
-
- qDebug() << "SCServer::checkServerInstallationOK() says: SimConnect functions resolved in DLL!";
-
- return true;
-}
-
-//
-// Get the program-name from the client (Game!).
-//
-QString SCServer::GetProgramName() {
-QString *str;
-
- str = new QString("FSX");
- return *str;
-}
-
-
-void CALLBACK SCServer::processNextSimconnectEvent(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext)
-{
-// HRESULT hr;
-
- switch(pData->dwID)
- {
- case SIMCONNECT_RECV_ID_EVENT:
- {
- SIMCONNECT_RECV_EVENT *evt = (SIMCONNECT_RECV_EVENT*)pData;
-
- qDebug() << "SCServer::processNextSimconnectEvent() says: SimConnect active!";
- //switch(evt->uEventID)
- //{
- // //case EVENT_CAMERA_RIGHT:
-
- // // cameraBank = normalize180( cameraBank + 5.0f);
-
- // // hr = SimConnect_CameraSetRelative6DOF(hSimConnect, 0.0f, 0.0f, 0.0f,
- // // SIMCONNECT_CAMERA_IGNORE_FIELD,SIMCONNECT_CAMERA_IGNORE_FIELD, cameraBank);
-
- // // printf("\nCamera Bank = %f", cameraBank);
- // // break;
-
- // //case EVENT_CAMERA_LEFT:
- // //
- // // cameraBank = normalize180( cameraBank - 5.0f);
-
- // // hr = SimConnect_CameraSetRelative6DOF(hSimConnect, 0.0f, 0.0f, 0.0f,
- // // SIMCONNECT_CAMERA_IGNORE_FIELD,SIMCONNECT_CAMERA_IGNORE_FIELD, cameraBank);
- // //
- // // printf("\nCamera Bank = %f", cameraBank);
- // // break;
-
- // //default:
- // // break;
- //}
- //break;
- }
- case SIMCONNECT_RECV_ID_EVENT_FRAME:
- {
-// qDebug() << "SCServer::processNextSimconnectEvent() says: Frame event!";
- if ((prevSCPosX != virtSCPosX) || (prevSCPosY != virtSCPosY) || (prevSCPosZ != virtSCPosZ) ||
- (prevSCRotX != virtSCRotX) || (prevSCRotY != virtSCRotY) || (prevSCRotZ != virtSCRotZ)) {
- if (S_OK == simconnect_set6DOF(hSimConnect, virtSCPosX, virtSCPosY, virtSCPosZ, virtSCRotX, virtSCRotZ, virtSCRotY)) {
- // qDebug() << "SCServer::run() says: SimConnect data written!";
- }
- }
- prevSCPosX = virtSCPosX;
- prevSCPosY = virtSCPosY;
- prevSCPosZ = virtSCPosZ;
- prevSCRotX = virtSCRotX;
- prevSCRotY = virtSCRotY;
- prevSCRotZ = virtSCRotZ;
- }
-
- case SIMCONNECT_RECV_ID_EXCEPTION:
- {
- SIMCONNECT_RECV_EXCEPTION *except = (SIMCONNECT_RECV_EXCEPTION*)pData;
-
- switch (except->dwException)
- {
- case SIMCONNECT_EXCEPTION_ERROR:
- printf("\nCamera error");
- break;
-
- default:
- printf("\nException");
- break;
- }
- break;
- }
-
- case SIMCONNECT_RECV_ID_QUIT:
- {
- qDebug() << "SCServer::processNextSimconnectEvent() says: Quit event!";
-// quit = 1;
- break;
- }
-
- default:
- break;
- }
-}
-
-
-//END
diff --git a/FaceTrackNoIR/SCServer.h b/FaceTrackNoIR/SCServer.h
deleted file mode 100644
index 03917401..00000000
--- a/FaceTrackNoIR/SCServer.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/********************************************************************************
-* SCServer SCServer is the Class, that communicates headpose-data *
-* to games, using the SimConnect.dll. *
-* *
-* Copyright (C) 2010 Wim Vriend (Developing) *
-* Ron Hendriks (Testing and Research) *
-* *
-* This program is free software; you can redistribute it and/or modify it *
-* under the terms of the GNU General Public License as published by the *
-* Free Software Foundation; either version 3 of the License, or (at your *
-* option) any later version. *
-* *
-* This program is distributed in the hope that it will be useful, but *
-* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
-* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
-* more details. *
-* *
-* You should have received a copy of the GNU General Public License along *
-* with this program; if not, see <http://www.gnu.org/licenses/>. *
-* *
-********************************************************************************/
-#pragma once
-#ifndef INCLUDED_SCSERVER_H
-#define INCLUDED_SCSERVER_H
-
-//
-// Prevent the SimConnect manifest from being merged in the application-manifest
-// This is necessary to run FaceTrackNoIR on a PC without FSX
-//
-#define SIMCONNECT_H_NOMANIFEST
-#include "FTNoIR_cxx_protocolserver.h"
-//#include "Windows.h"
-//#include <stdlib.h>
-#include "SimConnect.h"
-#include <QApplication>
-#include <QString>
-#include <QMessageBox>
-#include <QSettings>
-#include <QFile>
-#include <QDebug>
-#include <QLibrary>
-
-typedef HRESULT (WINAPI *importSimConnect_Open)(HANDLE * phSimConnect, LPCSTR szName, HWND hWnd, DWORD UserEventWin32, HANDLE hEventHandle, DWORD ConfigIndex);
-typedef HRESULT (WINAPI *importSimConnect_Close)(HANDLE hSimConnect);
-typedef HRESULT (WINAPI *importSimConnect_CameraSetRelative6DOF)(HANDLE hSimConnect, float fDeltaX, float fDeltaY, float fDeltaZ, float fPitchDeg, float fBankDeg, float fHeadingDeg);
-typedef HRESULT (WINAPI *importSimConnect_CallDispatch)(HANDLE hSimConnect, DispatchProc pfcnDispatch, void * pContext);
-typedef HRESULT (WINAPI *importSimConnect_SubscribeToSystemEvent)(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * SystemEventName);
-typedef HRESULT (WINAPI *importSimConnect_MapClientEventToSimEvent)(HANDLE hSimConnect, SIMCONNECT_CLIENT_EVENT_ID EventID, const char * EventName);
-typedef HRESULT (WINAPI *importSimConnect_AddClientEventToNotificationGroup)(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, SIMCONNECT_CLIENT_EVENT_ID EventID, BOOL bMaskable);
-typedef HRESULT (WINAPI *importSimConnect_SetNotificationGroupPriority)(HANDLE hSimConnect, SIMCONNECT_NOTIFICATION_GROUP_ID GroupID, DWORD uPriority);
-
-using namespace std;
-using namespace v4friend::ftnoir;
-
-static const char* SC_CLIENT_FILENAME = "SimConnect.dll";
-
-enum GROUP_ID
-{
- GROUP0=0,
-};
-
-enum EVENT_ID
-{
- EVENT_PING=0,
- EVENT_INIT,
-};
-
-enum INPUT_ID
-{
- INPUT0=0,
-};
-
-class SCServer : public ProtocolServerBase {
- Q_OBJECT
-
-public:
-
- // public member methods
- SCServer();
- ~SCServer();
-
- QString GetProgramName();
-
- // protected member methods
-protected:
- bool checkServerInstallationOK( HANDLE handle );
- void sendHeadposeToGame();
-
-private:
- // Private properties
- QString ProgramName;
- QLibrary SCClientLib;
-
- importSimConnect_Open simconnect_open; // SimConnect function(s) in DLL
- importSimConnect_Close simconnect_close;
- static importSimConnect_CameraSetRelative6DOF simconnect_set6DOF;
- importSimConnect_CallDispatch simconnect_calldispatch;
- importSimConnect_SubscribeToSystemEvent simconnect_subscribetosystemevent;
- importSimConnect_MapClientEventToSimEvent simconnect_mapclienteventtosimevent;
- importSimConnect_AddClientEventToNotificationGroup simconnect_addclienteventtonotificationgroup;
- importSimConnect_SetNotificationGroupPriority simconnect_setnotificationgrouppriority;
-
- static HANDLE hSimConnect; // Handle to SimConnect
- static void CALLBACK processNextSimconnectEvent(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext);
-
- static float virtSCPosX;
- static float virtSCPosY;
- static float virtSCPosZ;
-
- static float virtSCRotX;
- static float virtSCRotY;
- static float virtSCRotZ;
-
- static float prevSCPosX;
- static float prevSCPosY;
- static float prevSCPosZ;
-
- static float prevSCRotX;
- static float prevSCRotY;
- static float prevSCRotZ;
-
- bool blnSimConnectActive;
-
-public:
- void setVirtRotX(float rot) { virtSCRotX = -1.0f * rot; } // degrees
- void setVirtRotY(float rot) { virtSCRotY = -1.0f * rot; }
- void setVirtRotZ(float rot) { virtSCRotZ = rot; }
-
- void setVirtPosX(float pos) { virtSCPosX = pos/100.f; } // cm to meters
- void setVirtPosY(float pos) { virtSCPosY = pos/100.f; }
- void setVirtPosZ(float pos) { virtSCPosZ = -1.0f * pos/100.f; }
-
-
-};
-
-
-#endif//INCLUDED_SCSERVER_H
-//END
diff --git a/FaceTrackNoIR/SCServer.manifest b/FaceTrackNoIR/SCServer.manifest
deleted file mode 100644
index 19b123ba..00000000
--- a/FaceTrackNoIR/SCServer.manifest
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
-<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
- <dependency>
- <dependentAssembly>
- <assemblyIdentity type='win32' name='Microsoft.FlightSimulator.SimConnect ' version='10.0.60905.0' processorArchitecture='x86' publicKeyToken='67c7c14424d61b5b' />
- </dependentAssembly>
- </dependency>
- <dependency>
- <dependentAssembly>
- <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
- </dependentAssembly>
- </dependency>
-</assembly>