diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2018-12-12 16:16:36 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2018-12-12 17:28:24 +0100 |
commit | c503daf6c6b99beb7d811c952fd52d763aa008ca (patch) | |
tree | 0a3a5181829c7b4d68a100696d7d66be94931607 /proto-wine/ftnoir_protocol_wine.cpp | |
parent | fe0bbcc24ae2d0916135a8f7553ee46c9b463b44 (diff) |
proto/wine: fixes
- use SDK_WINE boolean
- improve logic when building for X-Plane only
- rename when building for X-Plane
- conditionalize Wine-related stuff
- move starting the wrapper to initialize() as it should be done
- use more C++17
- update header usage
Diffstat (limited to 'proto-wine/ftnoir_protocol_wine.cpp')
-rw-r--r-- | proto-wine/ftnoir_protocol_wine.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/proto-wine/ftnoir_protocol_wine.cpp b/proto-wine/ftnoir_protocol_wine.cpp index 7d415555..edeb8ce4 100644 --- a/proto-wine/ftnoir_protocol_wine.cpp +++ b/proto-wine/ftnoir_protocol_wine.cpp @@ -7,28 +7,23 @@ #include <sys/mman.h> #include <sys/stat.h> /* For mode constants */ #include <fcntl.h> /* For O_* constants */ -#include "csv/csv.h" +#ifndef OTR_WINE_NO_WRAPPER +# include "csv/csv.h" +#endif #include "compat/macros.hpp" #include "compat/library-path.hpp" -wine::wine() : lck_shm(WINE_SHM_NAME, WINE_MTX_NAME, sizeof(WineSHM)), shm(NULL), gameid(0) -{ - if (lck_shm.success()) { - shm = (WineSHM*) lck_shm.ptr(); - memset(shm, 0, sizeof(*shm)); - } - static const QString library_path(QCoreApplication::applicationDirPath() + OPENTRACK_LIBRARY_PATH); - wrapper.setWorkingDirectory(QCoreApplication::applicationDirPath()); - wrapper.start("wine", QStringList() << (library_path + "opentrack-wrapper-wine.exe.so")); -} +wine::wine() = default; wine::~wine() { +#ifndef OTR_WINE_NO_WRAPPER if (shm) { shm->stop = true; wrapper.waitForFinished(100); } - wrapper.close(); + wrapper.kill(); +#endif //shm_unlink("/" WINE_SHM_NAME); } @@ -38,9 +33,10 @@ void wine::pose( const double *headpose ) { lck_shm.lock(); for (int i = 3; i < 6; i++) - shm->data[i] = headpose[i] / (180 / M_PI ); + shm->data[i] = (headpose[i] * M_PI) / 180; for (int i = 0; i < 3; i++) shm->data[i] = headpose[i] * 10; +#ifndef OTR_WINE_NO_WRAPPER if (shm->gameid != gameid) { QString gamename; @@ -51,16 +47,29 @@ void wine::pose( const double *headpose ) gameid = shm->gameid2 = shm->gameid; connected_game = gamename; } +#endif lck_shm.unlock(); } } module_status wine::initialize() { +#ifndef OTR_WINE_NO_WRAPPER + static const QString library_path(OPENTRACK_BASE_PATH + OPENTRACK_LIBRARY_PATH); + wrapper.setWorkingDirectory(OPENTRACK_BASE_PATH); + wrapper.start("wine", { library_path + "opentrack-wrapper-wine.exe.so" }); +#endif + + if (lck_shm.success()) + { + shm = (WineSHM*) lck_shm.ptr(); + memset(shm, 0, sizeof(*shm)); + } + if (lck_shm.success()) return status_ok(); else return error(tr("Can't open shared memory mapping")); } -OPENTRACK_DECLARE_PROTOCOL(wine, FTControls, wineDll) +OPENTRACK_DECLARE_PROTOCOL(wine, FTControls, wine_metadata) |