summaryrefslogtreecommitdiffhomepage
path: root/FreeTrackClient/FTClient.cpp
diff options
context:
space:
mode:
authorWim Vriend <facetracknoir@gmail.com>2013-02-09 15:29:53 +0000
committerWim Vriend <facetracknoir@gmail.com>2013-02-09 15:29:53 +0000
commit36f82a4f0dc4f002123cc313eab7c845dcd13572 (patch)
treec97146db8d0cf1f6b54a77650771b5e0824ed073 /FreeTrackClient/FTClient.cpp
parent22cf655f0b1380cb0e948302f4a73bbfb5ec919b (diff)
Created a FaceTrackNoIR-version of FreeTrackClient.dll, because the existing one was crashing ArmA2. Made a 64-bit version too.
The FTReportName function was a trouble-maker. In the repo of FreeTrack it expects a pointer to a name, in reality, it should receive an integer... Cost me a while to figure out why ArmA kept crashing :( Also added the option to enable/disable FreeTrack or TrackIR in the FreeTrack 2.0 settings-dialog. Even more, added a button so users can 'repair' the location of NPClient.dll. Some users complained that their SW didn't work with TrackIR any more, after running FaceTrackNoIR... git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@270 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb
Diffstat (limited to 'FreeTrackClient/FTClient.cpp')
-rw-r--r--FreeTrackClient/FTClient.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/FreeTrackClient/FTClient.cpp b/FreeTrackClient/FTClient.cpp
new file mode 100644
index 00000000..d48a2c28
--- /dev/null
+++ b/FreeTrackClient/FTClient.cpp
@@ -0,0 +1,119 @@
+/** @file
+ @brief
+*/
+#include "FTClient.h"
+
+
+
+
+ static double/*?*/ const FT_PROGRAMID = "FT_ProgramID";
+
+
+ HANDLE hFTMemMap;
+ PFreetrackData FTData;
+ unsigned long lastDataID;
+ PHandle FTHandle;
+ PAnsiChar FTProgramName;
+ HANDLE FTMutex;
+
+
+bool FTGetData(PFreetrackData data)
+{ bool result;
+ result = false;
+ if( !! FTData ) {
+ if( FTData->DataID != lastDataID ) {
+ Move( FTData/*?*/^ , data/*?*/^ , SizeOf( TFreetrackData ) );
+ lastDataID = FTData->DataID;
+ result = true;
+ }
+ } else
+ OpenMapping;
+return result;
+}
+
+
+void FTReportName(PAnsiChar name)
+{
+ unsigned long MsgResult;
+
+ if( OpenMapping && ( WaitForSingleObject( FTMutex , 100 ) == WAIT_OBJECT_0 ) ) {
+ Move( name/*?*/^ , FTProgramName/*?*/^ , 100 );
+ SendMessageTimeout( FTHandle/*?*/^ , RegisterWindowMessage( FT_PROGRAMID ) , 0 , 0 , 0 , 2000 , MsgResult );
+ ReleaseMutex( FTMutex );
+ }
+}
+
+
+char* FTGetDllVersion()
+{ char* result;
+ unsigned long VerInfoSize;
+ Pointer VerInfo;
+ unsigned long VerValueSize;
+ PVSFixedFileInfo VerValue;
+ unsigned long Dummy;
+ std::string verString;
+ char* dllName[100];
+
+ result = "";
+ GetModuleFilename( HInstance , &dllName , 100 );
+ VerInfoSize = GetFileVersionInfoSize( &dllName , Dummy );
+ if( !( VerInfoSize == 0 ) ) {
+ GetMem( VerInfo , VerInfoSize );
+ GetFileVersionInfo( &dllName , 0 , VerInfoSize , VerInfo );
+ VerQueryValue( VerInfo , "\\" , Pointer( VerValue ) , VerValueSize );
+ /*?*//* WITH VerValue/*?*/^ */
+ {
+ verString = IntToStr( dwFileVersionMS >> 16 );
+ verString = verString + "." + IntToStr( dwFileVersionMS && 0xFFFF );
+ verString = verString + "." + IntToStr( dwFileVersionLS >> 16 );
+ verString = verString + "." + IntToStr( dwFileVersionLS && 0xFFFF );
+ result = char*( verString );
+ }
+ FreeMem( VerInfo , VerInfoSize );
+ }
+return result;
+}
+
+
+char* FTProvider()
+{ char* result;
+ result = FREETRACK;return result;
+}
+
+
+
+
+
+bool OpenMapping()
+{ bool result;
+ if( hFTMemMap != 0 )
+ result = true;else {
+ hFTMemMap = OpenFileMapping( FILE_MAP_ALL_ACCESS , false , FT_MM_DATA );
+ if( ( hFTMemMap != 0 ) ) {
+ FTData = MapViewOfFile( hFTMemMap , FILE_MAP_ALL_ACCESS , 0 , 0 , SizeOf( TFreetrackData ) + SizeOf( HANDLE ) + 100 );
+ FTHandle = Pointer( unsigned long( FTData ) + SizeOf( TFreetrackData ) );
+ FTProgramName = Pointer( unsigned long( FTHandle ) + SizeOf( HANDLE ) );
+ FTMutex = OpenMutex( MUTEX_ALL_ACCESS , false , FREETRACK_MUTEX );
+ }
+ result = !! FTData;
+ }
+return result;
+}
+
+
+void DestroyMapping()
+{
+ if( FTData != 00 ) {
+ UnMapViewofFile( FTData );
+ FTData = 00;
+ }
+
+ CloseHandle( FTMutex );
+ CloseHandle( hFTMemMap );
+ hFTMemMap = 0;
+}
+
+
+
+
+//END