Revision: 45556
http://sourceforge.net/p/vice-emu/code/45556
Author: compyx
Date: 2025-03-22 04:39:53 +0000 (Sat, 22 Mar 2025)
Log Message:
-----------
Joystick: Windows: implement driver's open() and close() methods
Implement `open()` and `close()` methods of the driver, for now just call
`open()` for each device (calling IDirectInputDevice8::Acquire() just like the
old code has done), once the "JoyDevice{N}" resource setters actually close()
their old device and open() their new one this can be removed.
Modified Paths:
--------------
branches/compyx/joymap-001/vice/src/arch/gtk3/joystickdrv/joystick_win32_directinput.c
Modified: branches/compyx/joymap-001/vice/src/arch/gtk3/joystickdrv/joystick_win32_directinput.c
===================================================================
--- branches/compyx/joymap-001/vice/src/arch/gtk3/joystickdrv/joystick_win32_directinput.c 2025-03-21 19:46:33 UTC (rev 45555)
+++ branches/compyx/joymap-001/vice/src/arch/gtk3/joystickdrv/joystick_win32_directinput.c 2025-03-22 04:39:53 UTC (rev 45556)
@@ -406,8 +406,9 @@
{
joy_priv_t *pr = priv;
if (pr->didev != NULL) {
- IDirectInputDevice_Unacquire(pr->didev);
- IDirectInputDevice_Release(pr->didev);
+ /* it's safe to call Unacquire() on an unacquired device */
+ IDirectInputDevice8_Unacquire(pr->didev);
+ IDirectInputDevice8_Release(pr->didev);
}
lib_free(priv);
}
@@ -414,13 +415,46 @@
/*
- * Driver methods: NOPs for now
+ * Driver methods
*/
-static bool win32_joy_open(joystick_device_t *joydev) { return true; }
-static void win32_joy_poll(joystick_device_t *joydev) {}
-static void win32_joy_close(joystick_device_t *joydev) {}
+/** \brief Open joystick device for polling
+ *
+ * \param[in] joydev joystick device
+ *
+ * \return \c true on success, \c false on failure
+ */
+static bool win32_joy_open(joystick_device_t *joydev)
+{
+ joy_priv_t *priv = joydev->priv;
+ HRESULT result;
+ result = IDirectInputDevice8_Acquire(priv->didev);
+ if (SUCCEEDED(result)) {
+ return true;
+ }
+ log_error(winjoy_log, "failed to acquire device \"%s\": error 0x%08lx",
+ joydev->name, (unsigned long)result);
+ return false;
+}
+
+static void win32_joy_poll(joystick_device_t *joydev)
+{
+ /* TODO */
+}
+
+/** \brief Close joystick device
+ *
+ * \param[in] joydev joystick device
+ */
+static void win32_joy_close(joystick_device_t *joydev)
+{
+ joy_priv_t *priv = joydev->priv;
+
+ IDirectInputDevice8_Unacquire(priv->didev);
+}
+
+
/** \brief Driver definition */
static joystick_driver_t win32_joy_driver = {
.open = win32_joy_open,
@@ -688,8 +722,11 @@
(LPVOID)joydev,
DIDFT_ABSAXIS|DIDFT_BUTTON|DIDFT_POV);
#endif
- /* TODO: Open device for polling (until the driver's open() method has been
- * properly implemented and tested. */
+ /* Open device manually for polling, until the driver's open() method has
+ * been properly implemented and tested (changing resource "JoyDeviceN"
+ * should close the old device and open the new one)
+ */
+ win32_joy_open(joydev);
/* register device and continue */
joystick_device_register(joydev);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|