summaryrefslogtreecommitdiffhomepage
path: root/proto-simconnect/ftnoir_protocol_sc.h
diff options
context:
space:
mode:
Diffstat (limited to 'proto-simconnect/ftnoir_protocol_sc.h')
-rw-r--r--proto-simconnect/ftnoir_protocol_sc.h84
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"); }
};