summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_protocol_wine
diff options
context:
space:
mode:
Diffstat (limited to 'ftnoir_protocol_wine')
-rw-r--r--ftnoir_protocol_wine/opentrack-wrapper-wine-main.cxx75
-rw-r--r--ftnoir_protocol_wine/opentrack-wrapper-wine-posix.cxx12
-rw-r--r--ftnoir_protocol_wine/opentrack-wrapper-wine-windows.cxx5
3 files changed, 54 insertions, 38 deletions
diff --git a/ftnoir_protocol_wine/opentrack-wrapper-wine-main.cxx b/ftnoir_protocol_wine/opentrack-wrapper-wine-main.cxx
index fe5a95f9..40f36f8d 100644
--- a/ftnoir_protocol_wine/opentrack-wrapper-wine-main.cxx
+++ b/ftnoir_protocol_wine/opentrack-wrapper-wine-main.cxx
@@ -10,33 +10,57 @@
#include "compat/compat.h"
void create_registry_key(void);
-ptr<BasePortableLockedShm> make_shm_posix();
-ptr<BasePortableLockedShm> make_shm_win32();
+
+class ShmPosix {
+public:
+ ShmPosix(const char *shmName, const char *mutexName, int mapSize);
+ ~ShmPosix();
+ void lock();
+ void unlock();
+ bool success();
+ inline void* ptr() { return mem; }
+private:
+ void* mem;
+ int fd, size;
+};
+
+class ShmWine {
+public:
+ ShmWine(const char *shmName, const char *mutexName, int mapSize);
+ ~ShmWine();
+ void lock();
+ void unlock();
+ bool success();
+ inline void* ptr() { return mem; }
+private:
+ void* mem;
+ void *hMutex, *hMapFile;
+};
+#include <windows.h>
int main(void)
{
- ptr<BasePortableLockedShm> lck_posix = make_shm_posix();
- ptr<BasePortableLockedShm> lck_wine = make_shm_win32();
- if(!lck_posix->success()) {
- printf("Can't open posix map: %d\n", errno);
- return 1;
- }
- if(!lck_wine->success()) {
- printf("Can't open Wine map\n");
- return 1;
- }
- WineSHM* shm_posix = (WineSHM*) lck_posix->ptr();
- FTHeap* shm_wine = (FTHeap*) lck_wine->ptr();
+ ShmPosix lck_posix(WINE_SHM_NAME, WINE_MTX_NAME, sizeof(WineSHM));
+ ShmWine lck_wine("FT_SharedMem", "FT_Mutext", sizeof(FTHeap));
+ if(!lck_posix.success()) {
+ printf("Can't open posix map: %d\n", errno);
+ return 1;
+ }
+ if(!lck_wine.success()) {
+ printf("Can't open Wine map\n");
+ return 1;
+ }
+ WineSHM* shm_posix = (WineSHM*) lck_posix.ptr();
+ FTHeap* shm_wine = (FTHeap*) lck_wine.ptr();
FTData* data = &shm_wine->data;
create_registry_key();
- while (1) {
- (void) Sleep(4);
- lck_posix->lock();
- if (shm_posix->stop) {
- lck_posix->unlock();
- break;
- }
- lck_wine->lock();
+ while (1) {
+ lck_posix.lock();
+ if (shm_posix->stop) {
+ lck_posix.unlock();
+ break;
+ }
+ lck_wine.lock();
data->Yaw = shm_posix->data[Yaw];
data->Pitch = shm_posix->data[Pitch];
data->Roll = shm_posix->data[Roll];
@@ -50,7 +74,8 @@ int main(void)
shm_posix->gameid = shm_wine->GameID;
for (int i = 0; i < 8; i++)
shm_wine->table[i] = shm_posix->table[i];
- lck_wine->unlock();
- lck_posix->unlock();
- }
+ lck_wine.unlock();
+ lck_posix.unlock();
+ (void) Sleep(4);
+ }
}
diff --git a/ftnoir_protocol_wine/opentrack-wrapper-wine-posix.cxx b/ftnoir_protocol_wine/opentrack-wrapper-wine-posix.cxx
index ea01ff03..010c4440 100644
--- a/ftnoir_protocol_wine/opentrack-wrapper-wine-posix.cxx
+++ b/ftnoir_protocol_wine/opentrack-wrapper-wine-posix.cxx
@@ -1,12 +1,8 @@
#define OPENTRACK_COMPAT_BUNDLED
+#ifdef _WIN32
+# undef _WIN32
+#endif
+
#define PortableLockedShm ShmPosix
-#undef _WIN32
-#include "ftnoir_protocol_ft/fttypes.h"
-#include "wine-shm.h"
#include "compat/compat.h"
#include "compat/compat.cpp"
-
-ptr<BasePortableLockedShm> make_shm_posix()
-{
- return std::make_shared<ShmPosix>(FREETRACK_HEAP, FREETRACK_MUTEX, sizeof(FTHeap));
-}
diff --git a/ftnoir_protocol_wine/opentrack-wrapper-wine-windows.cxx b/ftnoir_protocol_wine/opentrack-wrapper-wine-windows.cxx
index 715dcc69..b7dc531c 100644
--- a/ftnoir_protocol_wine/opentrack-wrapper-wine-windows.cxx
+++ b/ftnoir_protocol_wine/opentrack-wrapper-wine-windows.cxx
@@ -8,11 +8,6 @@
#include "compat/compat.cpp"
#include "wine-shm.h"
-ptr<BasePortableLockedShm> make_shm_win32()
-{
- return std::make_shared<ShmWine>(WINE_SHM_NAME, WINE_MTX_NAME, sizeof(WineSHM));
-}
-
void create_registry_key(void) {
char dir[8192];