summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_tracker_hillcrest/ftnoir_tracker_hillcrest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ftnoir_tracker_hillcrest/ftnoir_tracker_hillcrest.cpp')
-rw-r--r--ftnoir_tracker_hillcrest/ftnoir_tracker_hillcrest.cpp256
1 files changed, 0 insertions, 256 deletions
diff --git a/ftnoir_tracker_hillcrest/ftnoir_tracker_hillcrest.cpp b/ftnoir_tracker_hillcrest/ftnoir_tracker_hillcrest.cpp
deleted file mode 100644
index e6c3bbf2..00000000
--- a/ftnoir_tracker_hillcrest/ftnoir_tracker_hillcrest.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/********************************************************************************
-* 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: http://facetracknoir.sourceforge.net/home/default.htm *
-* *
-* 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/>. *
-* *
-********************************************************************************/
-/**
- * This file is part of libfreespace-examples.
- *
- * Copyright (c) 2009-2012, Hillcrest Laboratories, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of the Hillcrest Laboratories, Inc. nor the names
- * of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <float.h>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#ifdef WIN32
-#ifndef VC_EXTRALEAN
-#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
-#endif
-
-// Modify the following defines if you have to target a platform prior to the ones specified below.
-// Refer to MSDN for the latest info on corresponding values for different platforms.
-#ifndef WINVER // Allow use of features specific to Windows XP or later.
-#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
-#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
-#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
-#endif
-
-#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
-#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
-#endif
-
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
-#include <windows.h>
-#else
-#include <unistd.h>
-#endif
-
-#include "ftnoir_tracker_hillcrest.h"
-#include "facetracknoir/global-settings.h"
-
-static struct freespace_BodyFrame cachedBodyFrame;
-
-static void receiveMessageCallback(FreespaceDeviceId id,
- struct freespace_message* message,
- void* cookie,
- int result) {
- if (result == FREESPACE_SUCCESS && message != NULL && message->messageType == FREESPACE_MESSAGE_BODYFRAME) {
- cachedBodyFrame = message->bodyFrame;
- }
-}
-
-static FreespaceDeviceId initializeFreespace() {
- struct freespace_message message;
- FreespaceDeviceId device;
- int numIds;
- int rc;
-
- // Initialize the freespace library
- rc = freespace_init();
- if (rc != FREESPACE_SUCCESS) {
- qDebug() << "Initialization error" << rc;
- return -1;
- }
-
- /** --- START EXAMPLE INITIALIZATION OF DEVICE -- **/
- rc = freespace_getDeviceList(&device, 1, &numIds);
- if (numIds == 0) {
- qDebug() << "freespaceInputThread: Didn't find any device";
- return -1;
- }
-
- rc = freespace_openDevice(device);
- if (rc != FREESPACE_SUCCESS) {
- qDebug() << "freespaceInputThread: Error opening device" << rc;
- return -1;
- }
- freespace_setReceiveMessageCallback(device, receiveMessageCallback, NULL);
-
- rc = freespace_flush(device);
- if (rc != FREESPACE_SUCCESS) {
- qDebug() << "freespaceInputThread: Error flushing device" << rc;
- return -1;
- }
-
- memset(&cachedBodyFrame, 0, sizeof(cachedBodyFrame));
- memset(&message, 0, sizeof(message));
- if (FREESPACE_SUCCESS == freespace_isNewDevice(device)) {
- message.messageType = FREESPACE_MESSAGE_DATAMODECONTROLV2REQUEST;
- message.dataModeControlV2Request.packetSelect = 2;
- message.dataModeControlV2Request.modeAndStatus |= 0 << 1;
- } else {
- message.messageType = FREESPACE_MESSAGE_DATAMODEREQUEST;
- message.dataModeRequest.enableBodyMotion = 1;
- message.dataModeRequest.inhibitPowerManager = 1;
- }
- rc = freespace_sendMessage(device, &message);
- if (rc != FREESPACE_SUCCESS) {
- qDebug() << "freespaceInputThread: Could not send message" << rc;
- }
- /** --- END EXAMPLE INITIALIZATION OF DEVICE -- **/
-
- return device;
-}
-
-static void finalizeFreespace(FreespaceDeviceId device) {
- struct freespace_message message;
- int rc;
-
- if (device != -1)
- {
- /** --- START EXAMPLE FINALIZATION OF DEVICE --- **/
- memset(&message, 0, sizeof(message));
- if (FREESPACE_SUCCESS == freespace_isNewDevice(device)) {
- message.messageType = FREESPACE_MESSAGE_DATAMODECONTROLV2REQUEST;
- message.dataModeControlV2Request.packetSelect = 1;
- } else {
- message.messageType = FREESPACE_MESSAGE_DATAMODEREQUEST;
- message.dataModeRequest.enableMouseMovement = 1;
- }
- rc = freespace_sendMessage(device, &message);
- if (rc != FREESPACE_SUCCESS) {
- qDebug() << "freespaceInputThread: Could not send message" << rc;
- }
-
- freespace_closeDevice(device);
- }
- /** --- END EXAMPLE FINALIZATION OF DEVICE --- **/
-
- freespace_exit();
-}
-
-FTNoIR_Tracker::FTNoIR_Tracker()
-{
- device = initializeFreespace();
-}
-
-FTNoIR_Tracker::~FTNoIR_Tracker()
-{
- finalizeFreespace(device);
-}
-
-void FTNoIR_Tracker::StartTracker(QFrame* videoFrame)
-{
- loadSettings();
-}
-
-#define TO_DEG (180. / M_PI / 1e3 / 3.6)
-
-bool FTNoIR_Tracker::GiveHeadPoseData(double *data)
-{
- if (device != -1)
- {
- struct freespace_BodyFrame body;
- freespace_perform();
- body = cachedBodyFrame;
- if (bEnableYaw)
- data[Yaw] = body.angularVelZ * TO_DEG;
- if (bEnablePitch)
- data[Pitch] = body.angularVelY * TO_DEG;
- if (bEnableRoll)
- data[Roll] = body.angularVelX * TO_DEG;
- }
- return device != -1;
-}
-
-//
-// Load the current Settings from the currently 'active' INI-file.
-//
-void FTNoIR_Tracker::loadSettings() {
-
- qDebug() << "FTNoIR_Tracker::loadSettings says: Starting ";
- QSettings settings("opentrack"); // 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 ( "hillcrest-tracker" );
- bEnableRoll = iniFile.value ( "EnableRoll", 1 ).toBool();
- bEnablePitch = iniFile.value ( "EnablePitch", 1 ).toBool();
- bEnableYaw = iniFile.value ( "EnableYaw", 1 ).toBool();
- iniFile.endGroup ();
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// Factory function that creates instances if the Tracker object.
-
-// Export both decorated and undecorated names.
-// GetTracker - Undecorated name, which can be easily used with GetProcAddress
-// Win32 API function.
-// _GetTracker@0 - Common name decoration for __stdcall functions in C language.
-//#pragma comment(linker, "/export:GetTracker=_GetTracker@0")
-
-extern "C" FTNOIR_TRACKER_BASE_EXPORT ITracker* CALLING_CONVENTION GetConstructor()
-{
- return new FTNoIR_Tracker;
-}