From 9040b187a1c4fa380f8a12207b9dd6d04b3a10ac Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 12 Aug 2016 18:00:49 +0200 Subject: all: rename modules s#^opentrack-##. and opentrack -> api Adjust usages. --- dinput/win32-joystick.hpp | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 dinput/win32-joystick.hpp (limited to 'dinput/win32-joystick.hpp') diff --git a/dinput/win32-joystick.hpp b/dinput/win32-joystick.hpp new file mode 100644 index 00000000..4b48d4a1 --- /dev/null +++ b/dinput/win32-joystick.hpp @@ -0,0 +1,101 @@ +/* Copyright (c) 2015-2016, 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 copyright notice and this permission + * notice appear in all copies. + */ +#pragma once + +#ifdef _WIN32 + +#include "dinput.hpp" +#include "compat/timer.hpp" +#include "export.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace std { +template<> +struct hash +{ + inline std::size_t operator()(const QString& value) const + { + return qHash(value); + } +}; +} + +struct OPENTRACK_DINPUT_EXPORT win32_joy_ctx +{ + using fn = std::function; + + struct joy + { + LPDIRECTINPUTDEVICE8 joy_handle; + QString guid, name; + bool pressed[128 + 4 * 4]; + Timer first_timer; + + joy(LPDIRECTINPUTDEVICE8 handle, const QString& guid, const QString& name); + ~joy(); + + void release(); + bool poll(fn f); + }; + + using joys_t = std::unordered_map>; + + static constexpr int joy_axis_size = 65535; + + struct joy_info + { + QString name, guid; + }; + + void poll(fn f); + bool poll_axis(const QString& guid, int* axes); + std::vector get_joy_info(); + + win32_joy_ctx(const win32_joy_ctx&) = delete; + win32_joy_ctx& operator=(const win32_joy_ctx&) = delete; + + win32_joy_ctx(); + void refresh(); + + using di_t = dinput_handle::di_t; + +private: + static QString guid_to_string(const GUID& guid); + + class OPENTRACK_DINPUT_EXPORT enum_state final + { + std::vector all; + joys_t joys; + dinput_handle::di_t di; + + static BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext); + static BOOL CALLBACK EnumObjectsCallback(const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* ctx); + + public: + static QMutex mtx; + + enum_state(); + ~enum_state(); + void refresh(); + const joys_t& get_joys() const; + }; + + static enum_state enumerator; +}; + +#endif -- cgit v1.2.3