From 2625fe5af6bf71a627dcf10ff813574f8a61f994 Mon Sep 17 00:00:00 2001 From: Wim Vriend Date: Mon, 31 May 2010 20:03:34 +0000 Subject: Implementing DirectInput voor keyboard afhandeling. git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@3 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb --- FaceTrackNoIR.ncb | Bin 31034368 -> 31034368 bytes FaceTrackNoIR.suo | Bin 172544 -> 178688 bytes FaceTrackNoIR/FaceTrackNoIR.cpp | 1 + FaceTrackNoIR/FaceTrackNoIR.h | 5 +- FaceTrackNoIR/Release/BuildLog.htm | Bin 12906 -> 10824 bytes FaceTrackNoIR/Release/FGServer.obj | Bin 184760 -> 184975 bytes FaceTrackNoIR/Release/FaceApp.obj | Bin 173017 -> 170505 bytes FaceTrackNoIR/Release/FaceTrackNoIR.obj | Bin 654850 -> 655057 bytes FaceTrackNoIR/Release/main.obj | Bin 174184 -> 170874 bytes FaceTrackNoIR/Release/moc_FaceApp.obj | Bin 169005 -> 165631 bytes FaceTrackNoIR/Release/moc_FaceTrackNoIR.obj | Bin 174472 -> 171098 bytes FaceTrackNoIR/Release/moc_tracker.obj | Bin 153526 -> 163587 bytes FaceTrackNoIR/Release/mt.dep | 2 +- FaceTrackNoIR/Release/tracker.obj | Bin 269242 -> 279315 bytes FaceTrackNoIR/Release/vc90.idb | Bin 2550784 -> 2550784 bytes FaceTrackNoIR/Release/vc90.pdb | Bin 2043904 -> 2134016 bytes FaceTrackNoIR/tracker.cpp | 73 +++++++++++++++++++++++++--- FaceTrackNoIR/tracker.h | 10 ++++ bin/FaceTrackNoIR.exe | Bin 442368 -> 449536 bytes 19 files changed, 81 insertions(+), 10 deletions(-) diff --git a/FaceTrackNoIR.ncb b/FaceTrackNoIR.ncb index 6cb4526c3..90482f627 100644 Binary files a/FaceTrackNoIR.ncb and b/FaceTrackNoIR.ncb differ diff --git a/FaceTrackNoIR.suo b/FaceTrackNoIR.suo index b0e584f88..de359e17a 100644 Binary files a/FaceTrackNoIR.suo and b/FaceTrackNoIR.suo differ diff --git a/FaceTrackNoIR/FaceTrackNoIR.cpp b/FaceTrackNoIR/FaceTrackNoIR.cpp index 95ef6e976..c9e1e76d8 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.cpp +++ b/FaceTrackNoIR/FaceTrackNoIR.cpp @@ -23,6 +23,7 @@ *********************************************************************************/ #include "FaceTrackNoIR.h" +#include "tracker.h" using namespace sm::faceapi; using namespace sm::faceapi::qt; diff --git a/FaceTrackNoIR/FaceTrackNoIR.h b/FaceTrackNoIR/FaceTrackNoIR.h index d09641d2d..16a432a34 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.h +++ b/FaceTrackNoIR/FaceTrackNoIR.h @@ -25,6 +25,7 @@ #ifndef FaceTrackNoIR_H #define FaceTrackNoIR_H +#include #include #include #include @@ -34,14 +35,14 @@ #include #include "ui_FaceTrackNoIR.h" -#include "tracker.h" - #include #include using namespace sm::faceapi; using namespace sm::faceapi::qt; +class Tracker; // pre-define class to avoid circular includes + class FaceTrackNoIR : public QMainWindow { Q_OBJECT diff --git a/FaceTrackNoIR/Release/BuildLog.htm b/FaceTrackNoIR/Release/BuildLog.htm index 0677d9b05..18bd1e169 100644 Binary files a/FaceTrackNoIR/Release/BuildLog.htm and b/FaceTrackNoIR/Release/BuildLog.htm differ diff --git a/FaceTrackNoIR/Release/FGServer.obj b/FaceTrackNoIR/Release/FGServer.obj index a297f793b..c11892992 100644 Binary files a/FaceTrackNoIR/Release/FGServer.obj and b/FaceTrackNoIR/Release/FGServer.obj differ diff --git a/FaceTrackNoIR/Release/FaceApp.obj b/FaceTrackNoIR/Release/FaceApp.obj index ae7857c83..c5d5a9e47 100644 Binary files a/FaceTrackNoIR/Release/FaceApp.obj and b/FaceTrackNoIR/Release/FaceApp.obj differ diff --git a/FaceTrackNoIR/Release/FaceTrackNoIR.obj b/FaceTrackNoIR/Release/FaceTrackNoIR.obj index 9e35aada4..3c1d59bf3 100644 Binary files a/FaceTrackNoIR/Release/FaceTrackNoIR.obj and b/FaceTrackNoIR/Release/FaceTrackNoIR.obj differ diff --git a/FaceTrackNoIR/Release/main.obj b/FaceTrackNoIR/Release/main.obj index c9810785a..5d8e5ce07 100644 Binary files a/FaceTrackNoIR/Release/main.obj and b/FaceTrackNoIR/Release/main.obj differ diff --git a/FaceTrackNoIR/Release/moc_FaceApp.obj b/FaceTrackNoIR/Release/moc_FaceApp.obj index 34d6862d4..2e13f0a8f 100644 Binary files a/FaceTrackNoIR/Release/moc_FaceApp.obj and b/FaceTrackNoIR/Release/moc_FaceApp.obj differ diff --git a/FaceTrackNoIR/Release/moc_FaceTrackNoIR.obj b/FaceTrackNoIR/Release/moc_FaceTrackNoIR.obj index 718584f8a..b9dfed7ed 100644 Binary files a/FaceTrackNoIR/Release/moc_FaceTrackNoIR.obj and b/FaceTrackNoIR/Release/moc_FaceTrackNoIR.obj differ diff --git a/FaceTrackNoIR/Release/moc_tracker.obj b/FaceTrackNoIR/Release/moc_tracker.obj index b6dea1133..e2db08f7b 100644 Binary files a/FaceTrackNoIR/Release/moc_tracker.obj and b/FaceTrackNoIR/Release/moc_tracker.obj differ diff --git a/FaceTrackNoIR/Release/mt.dep b/FaceTrackNoIR/Release/mt.dep index 965c3d3af..b12f071fb 100644 --- a/FaceTrackNoIR/Release/mt.dep +++ b/FaceTrackNoIR/Release/mt.dep @@ -1 +1 @@ -Manifest resource last updated at 20:44:54,75 on vr 28-05-2010 +Manifest resource last updated at 21:17:07,84 on ma 31-05-2010 diff --git a/FaceTrackNoIR/Release/tracker.obj b/FaceTrackNoIR/Release/tracker.obj index 8ef0b52a8..1feae14e0 100644 Binary files a/FaceTrackNoIR/Release/tracker.obj and b/FaceTrackNoIR/Release/tracker.obj differ diff --git a/FaceTrackNoIR/Release/vc90.idb b/FaceTrackNoIR/Release/vc90.idb index f645e021b..b3f2574fa 100644 Binary files a/FaceTrackNoIR/Release/vc90.idb and b/FaceTrackNoIR/Release/vc90.idb differ diff --git a/FaceTrackNoIR/Release/vc90.pdb b/FaceTrackNoIR/Release/vc90.pdb index b729977b9..432b1e6a1 100644 Binary files a/FaceTrackNoIR/Release/vc90.pdb and b/FaceTrackNoIR/Release/vc90.pdb differ diff --git a/FaceTrackNoIR/tracker.cpp b/FaceTrackNoIR/tracker.cpp index 327d9f49c..30247cd94 100644 --- a/FaceTrackNoIR/tracker.cpp +++ b/FaceTrackNoIR/tracker.cpp @@ -30,6 +30,10 @@ #include "tracker.h" #include "FaceTrackNoIR.h" +void initDInput(HINSTANCE hInstance, HWND hWnd); // sets up and initializes DirectInput +void detect_input(void); // gets the current input state +void cleanDInput(void); // closes DirectInput and releases memory + using namespace sm::faceapi; using namespace sm::faceapi::qt; @@ -138,13 +142,6 @@ void Tracker::setup(QWidget *head, FaceTrackNoIR *parent) { headRotYLine = headPoseWidget->findChild("headRotYLine"); headRotZLine = headPoseWidget->findChild("headRotZLine"); - // Let's start smoothing with 10 samples... - intMaxYawItems = 10; - intMaxPitchItems = 10; - intMaxRollItems = 10; - intMaxXItems = 10; - intMaxYItems = 10; - intMaxZItems = 10; // // Check if the Freetrack Client DLL is available @@ -163,6 +160,47 @@ void Tracker::setup(QWidget *head, FaceTrackNoIR *parent) { /** QThread run method @override **/ void Tracker::run() { + /** Direct Input variables **/ + LPDIRECTINPUT8 din; // the pointer to our DirectInput interface + LPDIRECTINPUTDEVICE8 dinkeyboard; // the pointer to the keyboard device + BYTE keystate[256]; // the storage for the key-information + HRESULT retAcquire; + + // + // Setup the DirectInput for keyboard strokes + // + // create the DirectInput interface + if (DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, + (void**)&din, NULL) != DI_OK) { // COM stuff, so we'll set it to NULL + qDebug() << "Tracker::setup DirectInput8 Creation failed!" << GetLastError(); + } + else { + qDebug() << "Tracker::setup DirectInput8 Creation OK!"; + } + + // create the keyboard device + if (din->CreateDevice(GUID_SysKeyboard, &dinkeyboard, NULL) != DI_OK) { + qDebug() << "Tracker::setup CreateDevice function failed!" << GetLastError(); + } + else { + qDebug() << "Tracker::setup CreateDevice function OK!"; + } + + // set the data format to keyboard format + if (dinkeyboard->SetDataFormat(&c_dfDIKeyboard) != DI_OK) { + qDebug() << "Tracker::setup SetDataFormat function failed!" << GetLastError(); + } + else { + qDebug() << "Tracker::setup SetDataFormat function OK!"; + } + + // set the control you will have over the keyboard + if (dinkeyboard->SetCooperativeLevel(mainApp->winId(), DISCL_NONEXCLUSIVE | DISCL_BACKGROUND) != DI_OK) { + qDebug() << "Tracker::setup SetCooperativeLevel function failed!" << GetLastError(); + } + else { + qDebug() << "Tracker::setup SetCooperativeLevel function OK!"; + } forever { @@ -175,6 +213,27 @@ void Tracker::run() { return; } + // + // Check the keyboard + // + // get access if we don't have it already + retAcquire = dinkeyboard->Acquire(); + if ( (retAcquire != DI_OK) && (retAcquire != S_FALSE) ) { + qDebug() << "Tracker::run Acquire function failed!" << GetLastError(); + } + else { + // get the input data + if (dinkeyboard->GetDeviceState(256, (LPVOID)keystate) != DI_OK) { + qDebug() << "Tracker::run GetDeviceState function failed!" << GetLastError(); + } + else { + qDebug() << "Tracker::run GetDeviceState function OK!"; + if(keystate[DIK_HOME] & 0x80) { + qDebug() << "Tracker::run() says HOME pressed"; + } + } + } + //if the confidence is good enough the headpose will be updated **/ if(Tracker::confid) { diff --git a/FaceTrackNoIR/tracker.h b/FaceTrackNoIR/tracker.h index 5405b0e7d..a51268187 100644 --- a/FaceTrackNoIR/tracker.h +++ b/FaceTrackNoIR/tracker.h @@ -31,9 +31,19 @@ #include #include #include + +#define DIRECTINPUT_VERSION 0x0800 +#include + #include "FTServer.h" // Freetrack-server #include "FGServer.h" // FlightGear-server +// include the DirectX Library files +//#pragma comment (lib, "d3d9.lib") +//#pragma comment (lib, "d3dx9.lib") +#pragma comment (lib, "dinput8.lib") +#pragma comment (lib, "dxguid.lib") + using namespace sm::faceapi; using namespace sm::faceapi::qt; diff --git a/bin/FaceTrackNoIR.exe b/bin/FaceTrackNoIR.exe index 05ce7bbad..d41c98b46 100644 Binary files a/bin/FaceTrackNoIR.exe and b/bin/FaceTrackNoIR.exe differ -- cgit v1.2.3