diff options
Diffstat (limited to 'proto-simconnect/ftnoir_protocol_sc.h')
-rw-r--r-- | proto-simconnect/ftnoir_protocol_sc.h | 84 |
1 files changed, 39 insertions, 45 deletions
diff --git a/proto-simconnect/ftnoir_protocol_sc.h b/proto-simconnect/ftnoir_protocol_sc.h index 6f9a908f..df3a538d 100644 --- a/proto-simconnect/ftnoir_protocol_sc.h +++ b/proto-simconnect/ftnoir_protocol_sc.h @@ -3,7 +3,7 @@ * ISC License (ISC) * * * * Copyright (c) 2015, Wim Vriend * - * Copyright (c) 2014, 2017 Stanislaw Halik * + * Copyright (c) 2014, 2017, 2019 Stanislaw Halik * * * * Permission to use, copy, modify, and/or distribute this software for any * * purpose with or without fee is hereby granted, provided that the above * @@ -16,6 +16,7 @@ #include <atomic> #include <QThread> +#include <QMutex> #include <QMessageBox> #include <QSettings> #include <QLibrary> @@ -30,7 +31,7 @@ struct settings : opts { value<int> sxs_manifest; settings() : opts("proto-simconnect"), - sxs_manifest(b, "simconnect-manifest", 2) + sxs_manifest(b, "simconnect-manifest", 0) {} }; @@ -38,79 +39,72 @@ class simconnect : private QThread, public IProtocol { Q_OBJECT public: - simconnect(); + simconnect() = default; ~simconnect() override; module_status initialize() override; - void pose(const double* headpose); - void handle(); - QString game_name() { - return otr_tr("FS2004/FSX"); - } + void pose(const double* headpose, const double*) override; + QString game_name() override; + void run() override; + private: enum { - SIMCONNECT_RECV_ID_NULL, SIMCONNECT_RECV_ID_EXCEPTION = 2, SIMCONNECT_RECV_ID_QUIT = 3, SIMCONNECT_RECV_ID_EVENT_FRAME = 7, }; - #pragma pack(push, 1) struct SIMCONNECT_RECV { DWORD dwSize; DWORD dwVersion; DWORD dwID; }; - #pragma pack(pop) - typedef void (CALLBACK *DispatchProc)(SIMCONNECT_RECV*, DWORD, void*); + typedef void (CALLBACK *SC_DispatchProc)(SIMCONNECT_RECV*, DWORD, void*); - typedef HRESULT (WINAPI *importSimConnect_Open)(HANDLE * phSimConnect, LPCSTR szName, HWND hWnd, DWORD UserEventWin32, HANDLE hEventHandle, DWORD ConfigIndex); - typedef HRESULT (WINAPI *importSimConnect_Close)(HANDLE hSimConnect); - typedef HRESULT (WINAPI *importSimConnect_CameraSetRelative6DOF)(HANDLE hSimConnect, float fDeltaX, float fDeltaY, float fDeltaZ, float fPitchDeg, float fBankDeg, float fHeadingDeg); - typedef HRESULT (WINAPI *importSimConnect_CallDispatch)(HANDLE hSimConnect, DispatchProc pfcnDispatch, void * pContext); - typedef HRESULT (WINAPI *importSimConnect_SubscribeToSystemEvent)(HANDLE hSimConnect, DWORD EventID, const char * SystemEventName); + typedef HRESULT (WINAPI *SC_Open)(HANDLE* phSimConnect, LPCSTR szName, HWND hWnd, DWORD UserEventWin32, HANDLE hEventHandle, DWORD ConfigIndex); + typedef HRESULT (WINAPI *SC_Close)(HANDLE hSimConnect); + typedef HRESULT (WINAPI *SC_CameraSetRelative6DOF)(HANDLE hSimConnect, float fDeltaX, float fDeltaY, float fDeltaZ, float fPitchDeg, float fBankDeg, float fHeadingDeg); + typedef HRESULT (WINAPI *SC_CallDispatch)(HANDLE hSimConnect, SC_DispatchProc pfcnDispatch, void * pContext); + typedef HRESULT (WINAPI *SC_SubscribeToSystemEvent)(HANDLE hSimConnect, DWORD EventID, const char * SystemEventName); - void run() override; + float data[6] {}; + QMutex mtx; + + SC_Open simconnect_open = nullptr; + SC_Close simconnect_close = nullptr; + SC_CameraSetRelative6DOF simconnect_set6DOF = nullptr; + SC_CallDispatch simconnect_calldispatch = nullptr; + SC_SubscribeToSystemEvent simconnect_subscribe = nullptr; - std::atomic<float> virtSCPosX; - std::atomic<float> virtSCPosY; - std::atomic<float> virtSCPosZ; - std::atomic<float> virtSCRotX; - std::atomic<float> virtSCRotY; - std::atomic<float> virtSCRotZ; - - importSimConnect_Open simconnect_open; - importSimConnect_Close simconnect_close; - importSimConnect_CameraSetRelative6DOF simconnect_set6DOF; - importSimConnect_CallDispatch simconnect_calldispatch; - importSimConnect_SubscribeToSystemEvent simconnect_subscribetosystemevent; - - HANDLE hSimConnect; - std::atomic<bool> should_reconnect; - static void CALLBACK processNextSimconnectEvent(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext); + HANDLE handle = nullptr; + std::atomic<bool> reconnect = false; + static void CALLBACK event_handler(SIMCONNECT_RECV* pData, DWORD cbData, void* pContext); settings s; - QLibrary SCClientLib; + QLibrary library; }; -class SCControls: public IProtocolDialog +class simconnect_ui: public IProtocolDialog { Q_OBJECT -public: - SCControls(); - void register_protocol(IProtocol *) {} - void unregister_protocol() {} -private: + Ui::UICSCControls ui; settings s; + +public: + simconnect_ui(); + void register_protocol(IProtocol *) override {} + void unregister_protocol() override {} + private slots: void doOK(); void doCancel(); }; -class simconnectDll : public Metadata +class simconnect_metadata : public Metadata { -public: - QString name() { return otr_tr("Microsoft FSX SimConnect"); } - QIcon icon() { return QIcon(":/images/fsx.png"); } + Q_OBJECT + + QString name() override { return tr("Microsoft FSX SimConnect"); } + QIcon icon() override { return QIcon(":/images/fsx.png"); } }; |