From aa066bdd4622d4f6824fee864f6be6806813f04d Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 30 Oct 2015 07:37:41 +0100 Subject: move to subdirectory-based build system Closes #224 --- protocol-vjoy/CMakeLists.txt | 14 ++++ protocol-vjoy/ftnoir_protocol_vjoy.cpp | 33 ++++++++ protocol-vjoy/ftnoir_protocol_vjoy.h | 91 +++++++++++++++++++++ protocol-vjoy/ftnoir_protocol_vjoy_dialog.cpp | 22 +++++ protocol-vjoy/ftnoir_vjoy_controls.ui | 113 ++++++++++++++++++++++++++ protocol-vjoy/images/vjoy.png | Bin 0 -> 694 bytes protocol-vjoy/vjoy-protocol.qrc | 5 ++ protocol-vjoy/vjoy.def | 5 ++ 8 files changed, 283 insertions(+) create mode 100644 protocol-vjoy/CMakeLists.txt create mode 100644 protocol-vjoy/ftnoir_protocol_vjoy.cpp create mode 100644 protocol-vjoy/ftnoir_protocol_vjoy.h create mode 100644 protocol-vjoy/ftnoir_protocol_vjoy_dialog.cpp create mode 100644 protocol-vjoy/ftnoir_vjoy_controls.ui create mode 100644 protocol-vjoy/images/vjoy.png create mode 100644 protocol-vjoy/vjoy-protocol.qrc create mode 100644 protocol-vjoy/vjoy.def (limited to 'protocol-vjoy') diff --git a/protocol-vjoy/CMakeLists.txt b/protocol-vjoy/CMakeLists.txt new file mode 100644 index 00000000..22678c32 --- /dev/null +++ b/protocol-vjoy/CMakeLists.txt @@ -0,0 +1,14 @@ +if(WIN32) + set(SDK_VJOY "" CACHE PATH "VJoy SDK path") + if(SDK_VJOY) + opentrack_boilerplate(opentrack-proto-vjoy GNU-LINK "-Wl,--enable-stdcall-fixup") + if(MSVC) + set(ext .lib) + else() + set(ext .dll) + endif() + target_link_libraries(opentrack-proto-vjoy ${MY_QT_LIBS} ${SDK_VJOY}/VJoy${ext}) + target_include_directories(opentrack-proto-vjoy SYSTEM PUBLIC ${SDK_VJOY}) + install(FILES "${SDK_VJOY}/VJoy.dll" DESTINATION . ${opentrack-perms}) + endif() +endif() diff --git a/protocol-vjoy/ftnoir_protocol_vjoy.cpp b/protocol-vjoy/ftnoir_protocol_vjoy.cpp new file mode 100644 index 00000000..24148c63 --- /dev/null +++ b/protocol-vjoy/ftnoir_protocol_vjoy.cpp @@ -0,0 +1,33 @@ +#include "ftnoir_protocol_vjoy.h" +#include "opentrack/plugin-api.hpp" + +FTNoIR_Protocol::FTNoIR_Protocol() +{ + static char meh[1] = {0}; + VJoy_Initialize(meh, meh); +} + +FTNoIR_Protocol::~FTNoIR_Protocol() +{ + VJoy_Shutdown(); +} + +void FTNoIR_Protocol::pose( const double *headpose ) { +#ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + JOYSTICK_STATE state[2] = { 0 }; + + state[0].POV = (4 << 12) | (4 << 8) | (4 << 4) | 4; + + state[0].XAxis = std::min(VJOY_AXIS_MAX, std::max(VJOY_AXIS_MIN, headpose[Yaw] * VJOY_AXIS_MAX / 180.0)); + state[0].YAxis = std::min(VJOY_AXIS_MAX, std::max(VJOY_AXIS_MIN, headpose[Pitch] * VJOY_AXIS_MAX / 180.0)); + state[0].ZAxis = std::min(VJOY_AXIS_MAX, std::max(VJOY_AXIS_MIN, headpose[Roll] * VJOY_AXIS_MAX / 180.0)); + state[0].XRotation = std::min(VJOY_AXIS_MAX, std::max(VJOY_AXIS_MIN, headpose[TX] * VJOY_AXIS_MAX / 100.0)); + state[0].YRotation = std::min(VJOY_AXIS_MAX, std::max(VJOY_AXIS_MIN, headpose[TY] * VJOY_AXIS_MAX / 100.0)); + state[0].ZRotation = std::min(VJOY_AXIS_MAX, std::max(VJOY_AXIS_MIN, headpose[TZ] * VJOY_AXIS_MAX / 100.0)); + + VJoy_UpdateJoyState(0, state); +} + +OPENTRACK_DECLARE_PROTOCOL(FTNoIR_Protocol, VJoyControls, FTNoIR_ProtocolDll) diff --git a/protocol-vjoy/ftnoir_protocol_vjoy.h b/protocol-vjoy/ftnoir_protocol_vjoy.h new file mode 100644 index 00000000..118306b5 --- /dev/null +++ b/protocol-vjoy/ftnoir_protocol_vjoy.h @@ -0,0 +1,91 @@ +/* Homepage http://facetracknoir.sourceforge.net/home/default.htm * + * * + * ISC License (ISC) * + * * + * Copyright (c) 2015, Wim Vriend * + * * + * Permission to use, copy, modify, and/or distribute this software for any * + * purpose with or without fee is hereby granted, provided that the above * + * copyright notice and this permission notice appear in all copies. * + */ +#pragma once +#include "ui_ftnoir_vjoy_controls.h" +#include +#include "opentrack/plugin-api.hpp" + +#define FT_PROGRAMID "FT_ProgramID" + +class FTNoIR_Protocol : public IProtocol +{ +public: + FTNoIR_Protocol(); + ~FTNoIR_Protocol() override; + bool correct() { + return true; + } + void pose( const double *headpose ); + QString game_name() { + return "Virtual joystick"; + } +private: +}; + +// Widget that has controls for FTNoIR protocol client-settings. +class VJoyControls: public IProtocolDialog +{ + Q_OBJECT +public: + + explicit VJoyControls(); + void register_protocol(IProtocol *) {} + void unregister_protocol() {} + +private: + Ui::UICVJoyControls ui; + void save(); + +private slots: + void doOK(); + void doCancel(); +}; + +class FTNoIR_ProtocolDll : public Metadata +{ +public: + QString name() { return QString("Joystick emulation -- VJoy"); } + QIcon icon() { return QIcon(":/images/vjoy.png"); } +}; + +#define VJOY_AXIS_MIN -32768 +#define VJOY_AXIS_NIL 0 +#define VJOY_AXIS_MAX 32767 + +#include + +#include + +typedef struct _JOYSTICK_STATE +{ + UCHAR ReportId; // Report Id + SHORT XAxis; // X Axis + SHORT YAxis; // Y Axis + SHORT ZAxis; // Z Axis + SHORT XRotation; // X Rotation + SHORT YRotation; // Y Rotation + SHORT ZRotation; // Z Rotation + SHORT Slider; // Slider + SHORT Dial; // Dial + USHORT POV; // POV + UINT32 Buttons; // 32 Buttons +} JOYSTICK_STATE, * PJOYSTICK_STATE; + +#ifndef _MSC_VER +EXTERN_C BOOL __stdcall VJoy_Initialize(PCHAR name, PCHAR serial); +EXTERN_C VOID __stdcall VJoy_Shutdown(); +EXTERN_C BOOL __stdcall VJoy_UpdateJoyState(int id, PJOYSTICK_STATE pJoyState); +#else +#define VJOY_API __declspec(dllimport) +VJOY_API BOOL __stdcall VJoy_Initialize(PCHAR name, PCHAR serial); +VJOY_API VOID __stdcall VJoy_Shutdown(); +VJOY_API BOOL __stdcall VJoy_UpdateJoyState(int id, PJOYSTICK_STATE pJoyState); +#endif diff --git a/protocol-vjoy/ftnoir_protocol_vjoy_dialog.cpp b/protocol-vjoy/ftnoir_protocol_vjoy_dialog.cpp new file mode 100644 index 00000000..08c65558 --- /dev/null +++ b/protocol-vjoy/ftnoir_protocol_vjoy_dialog.cpp @@ -0,0 +1,22 @@ +#include "ftnoir_protocol_vjoy.h" +#include "opentrack/plugin-api.hpp" + +VJoyControls::VJoyControls() +{ + ui.setupUi( this ); + connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK())); + connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel())); +} + +void VJoyControls::doOK() { + save(); + this->close(); +} + +void VJoyControls::doCancel() { + this->close(); +} + +void VJoyControls::save() { +} + diff --git a/protocol-vjoy/ftnoir_vjoy_controls.ui b/protocol-vjoy/ftnoir_vjoy_controls.ui new file mode 100644 index 00000000..2214b887 --- /dev/null +++ b/protocol-vjoy/ftnoir_vjoy_controls.ui @@ -0,0 +1,113 @@ + + + UICVJoyControls + + + Qt::NonModal + + + + 0 + 0 + 228 + 69 + + + + VJoy + + + + :/images/vjoy.png:/images/vjoy.png + + + Qt::LeftToRight + + + false + + + + + + No settings necessary + + + + + + + + + QLayout::SetDefaultConstraint + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + OK + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + Cancel + + + + + + + + + + + btnOK + btnCancel + + + + + + + startEngineClicked() + stopEngineClicked() + cameraSettingsClicked() + + diff --git a/protocol-vjoy/images/vjoy.png b/protocol-vjoy/images/vjoy.png new file mode 100644 index 00000000..8eb14be8 Binary files /dev/null and b/protocol-vjoy/images/vjoy.png differ diff --git a/protocol-vjoy/vjoy-protocol.qrc b/protocol-vjoy/vjoy-protocol.qrc new file mode 100644 index 00000000..7b3741f1 --- /dev/null +++ b/protocol-vjoy/vjoy-protocol.qrc @@ -0,0 +1,5 @@ + + + images/vjoy.png + + diff --git a/protocol-vjoy/vjoy.def b/protocol-vjoy/vjoy.def new file mode 100644 index 00000000..aea590a4 --- /dev/null +++ b/protocol-vjoy/vjoy.def @@ -0,0 +1,5 @@ +LIBRARY vjoy.dll +IMPORTS +VJoy_Initialize = _VJoy_Initialize +VJoy_Shutdown = _VJoy_Shutdown +VJoy_UpdateJoyState = _VJoy_UpdateJoyState -- cgit v1.2.3