summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/input/input_dinput.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2023-02-28 04:20:52 +1100
committer Vas Crabb <vas@vastheman.com>2023-02-28 04:20:52 +1100
commitdeceecfbfb3fc639162dd58026bb1d729c107fa6 (patch)
tree145ce74bee37e3a25e3c13bac4cb6b048ac830d1 /src/osd/modules/input/input_dinput.cpp
parentb13a5d971f387b60f7b87265ca9f84312288084d (diff)
osd/modules/input: Modernised interface for enumerating DirectInput devices.
Gets rid of some state in the winhybrid joystick module that's only used during initialisation.
Diffstat (limited to 'src/osd/modules/input/input_dinput.cpp')
-rw-r--r--src/osd/modules/input/input_dinput.cpp27
1 files changed, 10 insertions, 17 deletions
diff --git a/src/osd/modules/input/input_dinput.cpp b/src/osd/modules/input/input_dinput.cpp
index 1ec3c85a886..9bc417caf0f 100644
--- a/src/osd/modules/input/input_dinput.cpp
+++ b/src/osd/modules/input/input_dinput.cpp
@@ -125,12 +125,6 @@ namespace osd {
namespace {
-BOOL CALLBACK device_enum_interface_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref)
-{
- return static_cast<device_enum_interface *>(ref)->device_enum_callback(instance);
-}
-
-
std::string guid_to_string(GUID const &guid)
{
// size of a GUID string with dashes plus NUL terminator
@@ -307,11 +301,8 @@ void dinput_mouse_device::configure(input_device &device)
// dinput_module - base DirectInput module
//============================================================
-class dinput_module : public input_module_impl<dinput_device, osd_common_t>, public device_enum_interface
+class dinput_module : public input_module_impl<dinput_device, osd_common_t>
{
-protected:
- std::unique_ptr<dinput_api_helper> m_dinput_helper;
-
public:
dinput_module(const char* type, const char* name) :
input_module_impl<dinput_device, osd_common_t>(type, name),
@@ -343,13 +334,18 @@ public:
{
input_module_impl<dinput_device, osd_common_t>::input_init(machine);
- HRESULT result = m_dinput_helper->enum_attached_devices(dinput_devclass(), *this);
+ HRESULT const result = m_dinput_helper->enum_attached_devices(
+ dinput_devclass(),
+ [this] (LPCDIDEVICEINSTANCE instance) { return device_enum_callback(instance); });
if (result != DI_OK)
fatalerror("DirectInput: Unable to enumerate devices (result=%08X)\n", uint32_t(result));
}
protected:
virtual int dinput_devclass() = 0;
+ virtual BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance) = 0;
+
+ std::unique_ptr<dinput_api_helper> m_dinput_helper;
};
@@ -361,6 +357,7 @@ public:
{
}
+protected:
virtual int dinput_devclass() override
{
return DI8DEVCLASS_KEYBOARD;
@@ -392,6 +389,7 @@ public:
{
}
+protected:
virtual int dinput_devclass() override
{
return DI8DEVCLASS_POINTER;
@@ -438,6 +436,7 @@ public:
{
}
+protected:
virtual int dinput_devclass() override
{
return DI8DEVCLASS_GAMECTRL;
@@ -1212,12 +1211,6 @@ int dinput_api_helper::initialize()
}
-HRESULT dinput_api_helper::enum_attached_devices(int devclass, device_enum_interface &enumerate_interface) const
-{
- return m_dinput->EnumDevices(devclass, device_enum_interface_callback, &enumerate_interface, DIEDFL_ATTACHEDONLY);
-}
-
-
std::pair<Microsoft::WRL::ComPtr<IDirectInputDevice8>, LPCDIDATAFORMAT> dinput_api_helper::open_device(
LPCDIDEVICEINSTANCE instance,
LPCDIDATAFORMAT format1,