[PATCH v2 6/6] winejoystick.drv: Remove unnecessary driver.
Rémi Bernon
rbernon at codeweavers.com
Fri Dec 10 02:44:49 CST 2021
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
configure.ac | 2 -
dlls/winejoystick.drv/Makefile.in | 10 -
dlls/winejoystick.drv/joystick.c | 52 --
dlls/winejoystick.drv/joystick.h | 34 -
dlls/winejoystick.drv/joystick_linux.c | 458 ----------
dlls/winejoystick.drv/joystick_osx.c | 935 --------------------
dlls/winejoystick.drv/winejoystick.drv.spec | 1 -
tools/winapi/win32.api | 13 -
8 files changed, 1505 deletions(-)
delete mode 100644 dlls/winejoystick.drv/Makefile.in
delete mode 100644 dlls/winejoystick.drv/joystick.c
delete mode 100644 dlls/winejoystick.drv/joystick.h
delete mode 100644 dlls/winejoystick.drv/joystick_linux.c
delete mode 100644 dlls/winejoystick.drv/joystick_osx.c
delete mode 100644 dlls/winejoystick.drv/winejoystick.drv.spec
diff --git a/configure.ac b/configure.ac
index d509cdae49c..55543c128cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -866,7 +866,6 @@ esac
enable_winecoreaudio_drv=${enable_winecoreaudio_drv:-no}
enable_wineandroid_drv=${enable_wineandroid_drv:-no}
enable_winemac_drv=${enable_winemac_drv:-no}
-test "$ac_cv_header_linux_joystick_h" = "yes" -o "$ac_cv_header_IOKit_hid_IOHIDLib_h" = "yes" || enable_winejoystick_drv=${enable_winejoystick_drv:-no}
dnl Check for cross compiler to build test programs
AC_SUBST(CROSSTARGET)
@@ -3409,7 +3408,6 @@ WINE_CONFIG_MAKEFILE(dlls/winecrt0)
WINE_CONFIG_MAKEFILE(dlls/wined3d)
WINE_CONFIG_MAKEFILE(dlls/winegstreamer)
WINE_CONFIG_MAKEFILE(dlls/winehid.sys)
-WINE_CONFIG_MAKEFILE(dlls/winejoystick.drv)
WINE_CONFIG_MAKEFILE(dlls/winemac.drv)
WINE_CONFIG_MAKEFILE(dlls/winemapi)
WINE_CONFIG_MAKEFILE(dlls/wineoss.drv)
diff --git a/dlls/winejoystick.drv/Makefile.in b/dlls/winejoystick.drv/Makefile.in
deleted file mode 100644
index 52564855994..00000000000
--- a/dlls/winejoystick.drv/Makefile.in
+++ /dev/null
@@ -1,10 +0,0 @@
-MODULE = winejoystick.drv
-IMPORTS = winmm user32
-EXTRALIBS = $(IOKIT_LIBS)
-
-EXTRADLLFLAGS = -mcygwin
-
-C_SRCS = \
- joystick.c \
- joystick_linux.c \
- joystick_osx.c
diff --git a/dlls/winejoystick.drv/joystick.c b/dlls/winejoystick.drv/joystick.c
deleted file mode 100644
index 3e140b91175..00000000000
--- a/dlls/winejoystick.drv/joystick.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * WinMM joystick driver common code
- *
- * Copyright 1997 Andreas Mohr
- * Copyright 2000 Wolfgang Schwotzer
- * Copyright 2002 David Hagood
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include "joystick.h"
-
-
-/**************************************************************************
- * DriverProc (JOYSTICK.@)
- */
-LRESULT CALLBACK JSTCK_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, LPARAM dwParam1, LPARAM dwParam2)
-{
- switch(wMsg) {
- case DRV_LOAD: return 1;
- case DRV_FREE: return 1;
- case DRV_OPEN: return driver_open((LPSTR)dwParam1, dwParam2);
- case DRV_CLOSE: return driver_close(dwDevID);
- case DRV_ENABLE: return 1;
- case DRV_DISABLE: return 1;
- case DRV_QUERYCONFIGURE: return 1;
- case DRV_CONFIGURE: MessageBoxA(0, "JoyStick MultiMedia Driver !", "JoyStick Driver", MB_OK); return 1;
- case DRV_INSTALL: return DRVCNF_RESTART;
- case DRV_REMOVE: return DRVCNF_RESTART;
-
- case JDD_GETNUMDEVS: return 1;
- case JDD_GETDEVCAPS: return driver_joyGetDevCaps(dwDevID, (LPJOYCAPSW)dwParam1, dwParam2);
- case JDD_GETPOS: return driver_joyGetPos(dwDevID, (LPJOYINFO)dwParam1);
- case JDD_SETCALIBRATION:
- case JDD_CONFIGCHANGED: return JOYERR_NOCANDO;
- case JDD_GETPOSEX: return driver_joyGetPosEx(dwDevID, (LPJOYINFOEX)dwParam1);
- default:
- return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
- }
-}
diff --git a/dlls/winejoystick.drv/joystick.h b/dlls/winejoystick.drv/joystick.h
deleted file mode 100644
index 1ec1edb8133..00000000000
--- a/dlls/winejoystick.drv/joystick.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * WinMM joystick driver header
- *
- * Copyright 2015 Ken Thomases for CodeWeavers Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "mmddk.h"
-#include "winuser.h"
-
-
-LRESULT driver_open(LPSTR str, DWORD index) DECLSPEC_HIDDEN;
-LRESULT driver_close(DWORD_PTR device_id) DECLSPEC_HIDDEN;
-LRESULT driver_joyGetDevCaps(DWORD_PTR device_id, JOYCAPSW* caps, DWORD size) DECLSPEC_HIDDEN;
-LRESULT driver_joyGetPosEx(DWORD_PTR device_id, JOYINFOEX* info) DECLSPEC_HIDDEN;
-LRESULT driver_joyGetPos(DWORD_PTR device_id, JOYINFO* info) DECLSPEC_HIDDEN;
diff --git a/dlls/winejoystick.drv/joystick_linux.c b/dlls/winejoystick.drv/joystick_linux.c
deleted file mode 100644
index 50f06bc7331..00000000000
--- a/dlls/winejoystick.drv/joystick_linux.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * joystick functions
- *
- * Copyright 1997 Andreas Mohr
- * Copyright 2000 Wolfgang Schwotzer
- * Copyright 2002 David Hagood
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- * NOTES:
- *
- * - nearly all joystick functions can be regarded as obsolete,
- * as Linux (2.1.x) now supports extended joysticks with a completely
- * new joystick driver interface
- * New driver's documentation says:
- * "For backward compatibility the old interface is still included,
- * but will be dropped in the future."
- * Thus we should implement the new interface and at most keep the old
- * routines for backward compatibility.
- * - better support of enhanced joysticks (Linux 2.2 interface is available)
- * - support more joystick drivers (like the XInput extension)
- * - should load joystick DLL as any other driver (instead of hardcoding)
- * the driver's name, and load it as any low lever driver.
- */
-
-#include "config.h"
-
-#ifdef HAVE_LINUX_22_JOYSTICK_API
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#ifdef HAVE_LINUX_IOCTL_H
-#include <linux/ioctl.h>
-#endif
-#include <linux/joystick.h>
-#ifdef SW_MAX
-#undef SW_MAX
-#endif
-#define JOYDEV_NEW "/dev/input/js%d"
-#define JOYDEV_OLD "/dev/js%d"
-#include <errno.h>
-
-#include "joystick.h"
-
-#include "wingdi.h"
-#include "winnls.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(joystick);
-
-#define MAXJOYSTICK (JOYSTICKID2 + 30)
-
-typedef struct tagWINE_JSTCK {
- int joyIntf;
- BOOL in_use;
- /* Some extra info we need to make this actually work under the
- Linux 2.2 event api.
- First of all, we cannot keep closing and reopening the device file -
- that blows away the state of the stick device, and we lose events. So, we
- need to open the low-level device once, and close it when we are done.
-
- Secondly, the event API only gives us what's changed. However, Windows apps
- want the whole state every time, so we have to cache the data.
- */
-
- int dev; /* Linux level device file descriptor */
- int x;
- int y;
- int z;
- int r;
- int u;
- int v;
- int pov_x;
- int pov_y;
- int buttons;
- char axesMap[ABS_MAX + 1];
-} WINE_JSTCK;
-
-static WINE_JSTCK JSTCK_Data[MAXJOYSTICK];
-
-/**************************************************************************
- * JSTCK_drvGet [internal]
- */
-static WINE_JSTCK *JSTCK_drvGet(DWORD_PTR dwDevID)
-{
- int p;
-
- if ((dwDevID - (DWORD_PTR)JSTCK_Data) % sizeof(JSTCK_Data[0]) != 0)
- return NULL;
- p = (dwDevID - (DWORD_PTR)JSTCK_Data) / sizeof(JSTCK_Data[0]);
- if (p < 0 || p >= MAXJOYSTICK || !((WINE_JSTCK*)dwDevID)->in_use)
- return NULL;
-
- return (WINE_JSTCK*)dwDevID;
-}
-
-/**************************************************************************
- * driver_open
- */
-LRESULT driver_open(LPSTR str, DWORD dwIntf)
-{
- if (dwIntf >= MAXJOYSTICK || JSTCK_Data[dwIntf].in_use)
- return 0;
-
- JSTCK_Data[dwIntf].joyIntf = dwIntf;
- JSTCK_Data[dwIntf].dev = -1;
- JSTCK_Data[dwIntf].in_use = TRUE;
- return (LRESULT)&JSTCK_Data[dwIntf];
-}
-
-/**************************************************************************
- * driver_close
- */
-LRESULT driver_close(DWORD_PTR dwDevID)
-{
- WINE_JSTCK* jstck = JSTCK_drvGet(dwDevID);
-
- if (jstck == NULL)
- return 0;
- jstck->in_use = FALSE;
- if (jstck->dev > 0)
- {
- close(jstck->dev);
- jstck->dev = 0;
- }
- return 1;
-}
-
-struct js_status
-{
- int buttons;
- int x;
- int y;
-};
-
-/**************************************************************************
- * JSTCK_OpenDevice [internal]
- */
-static int JSTCK_OpenDevice(WINE_JSTCK* jstick)
-{
- char buf[20];
- int flags, fd, found_ix, i;
- static DWORD last_attempt;
- DWORD now;
-
- if (jstick->dev > 0)
- return jstick->dev;
-
- now = GetTickCount();
- if (now - last_attempt < 2000)
- return -1;
- last_attempt = now;
-
- flags = O_RDONLY | O_NONBLOCK;
-
- /* The first joystick may not be at /dev/input/js0, find the correct
- * first or second device. For example the driver for XBOX 360 wireless
- * receiver creates entries starting at 20.
- */
- for (found_ix = i = 0; i < MAXJOYSTICK; i++) {
- sprintf(buf, JOYDEV_NEW, i);
- if ((fd = open(buf, flags)) < 0) {
- sprintf(buf, JOYDEV_OLD, i);
- if ((fd = open(buf, flags)) < 0)
- continue;
- }
-
- if (found_ix++ == jstick->joyIntf)
- {
- TRACE("Found joystick[%d] at %s\n", jstick->joyIntf, buf);
- jstick->dev = fd;
- last_attempt = 0;
- break;
- }
-
- close(fd);
- }
-
- if (jstick->dev > 0)
- ioctl(jstick->dev, JSIOCGAXMAP, jstick->axesMap);
-
- return jstick->dev;
-}
-
-
-/**************************************************************************
- * JoyGetDevCaps [MMSYSTEM.102]
- */
-LRESULT driver_joyGetDevCaps(DWORD_PTR dwDevID, LPJOYCAPSW lpCaps, DWORD dwSize)
-{
- WINE_JSTCK* jstck;
- int dev;
- char nrOfAxes;
- char nrOfButtons;
- char identString[MAXPNAMELEN];
- int i;
- int driverVersion;
-
- if ((jstck = JSTCK_drvGet(dwDevID)) == NULL)
- return MMSYSERR_NODRIVER;
-
- if ((dev = JSTCK_OpenDevice(jstck)) < 0) return JOYERR_PARMS;
- ioctl(dev, JSIOCGAXES, &nrOfAxes);
- ioctl(dev, JSIOCGBUTTONS, &nrOfButtons);
- ioctl(dev, JSIOCGVERSION, &driverVersion);
- ioctl(dev, JSIOCGNAME(sizeof(identString)), identString);
- TRACE("Driver: 0x%06x, Name: %s, #Axes: %d, #Buttons: %d\n",
- driverVersion, identString, nrOfAxes, nrOfButtons);
- lpCaps->wMid = MM_MICROSOFT;
- lpCaps->wPid = MM_PC_JOYSTICK;
- MultiByteToWideChar(CP_UNIXCP, 0, identString, -1, lpCaps->szPname, MAXPNAMELEN);
- lpCaps->szPname[MAXPNAMELEN-1] = '\0';
- lpCaps->wXmin = 0;
- lpCaps->wXmax = 0xFFFF;
- lpCaps->wYmin = 0;
- lpCaps->wYmax = 0xFFFF;
- lpCaps->wZmin = 0;
- lpCaps->wZmax = (nrOfAxes >= 3) ? 0xFFFF : 0;
-#ifdef BODGE_THE_HAT
- /* Half-Life won't allow you to map an axis event to things like
- "next weapon" and "use". Linux reports the hat on my stick as
- axis U and V. So, IFF BODGE_THE_HAT is defined, lie through our
- teeth and say we have 32 buttons, and we will map the axes to
- the high buttons. Really, perhaps this should be a registry entry,
- or even a parameter to the Linux joystick driver (which would completely
- remove the need for this.)
- */
- lpCaps->wNumButtons = 32;
-#else
- lpCaps->wNumButtons = nrOfButtons;
-#endif
- if (dwSize == sizeof(JOYCAPSW)) {
- /* complete 95 structure */
- lpCaps->wRmin = 0;
- lpCaps->wRmax = 0xFFFF;
- lpCaps->wUmin = 0;
- lpCaps->wUmax = 0xFFFF;
- lpCaps->wVmin = 0;
- lpCaps->wVmax = 0xFFFF;
- lpCaps->wMaxAxes = 6; /* same as MS Joystick Driver */
- lpCaps->wNumAxes = 0; /* nr of axes in use */
- lpCaps->wMaxButtons = 32; /* same as MS Joystick Driver */
- lpCaps->szRegKey[0] = 0;
- lpCaps->szOEMVxD[0] = 0;
- lpCaps->wCaps = 0;
- for (i = 0; i < nrOfAxes; i++) {
- switch (jstck->axesMap[i]) {
- case 0: /* X */
- case 1: /* Y */
- case 8: /* Wheel */
- case 9: /* Gas */
- lpCaps->wNumAxes++;
- break;
- case 2: /* Z */
- case 6: /* Throttle */
- case 10: /* Brake */
- lpCaps->wNumAxes++;
- lpCaps->wCaps |= JOYCAPS_HASZ;
- break;
- case 5: /* Rz */
- case 7: /* Rudder */
- lpCaps->wNumAxes++;
- lpCaps->wCaps |= JOYCAPS_HASR;
- break;
- case 3: /* Rx */
- lpCaps->wNumAxes++;
- lpCaps->wCaps |= JOYCAPS_HASU;
- break;
- case 4: /* Ry */
- lpCaps->wNumAxes++;
- lpCaps->wCaps |= JOYCAPS_HASV;
- break;
- case 16: /* Hat 0 X */
- case 17: /* Hat 0 Y */
- lpCaps->wCaps |= JOYCAPS_HASPOV | JOYCAPS_POV4DIR;
- /* TODO: JOYCAPS_POVCTS handling */
- break;
- default:
- WARN("Unknown axis %hhu(%u). Skipped.\n", jstck->axesMap[i], i);
- }
- }
- }
-
- return JOYERR_NOERROR;
-}
-
-/**************************************************************************
- * driver_joyGetPos
- */
-LRESULT driver_joyGetPosEx(DWORD_PTR dwDevID, LPJOYINFOEX lpInfo)
-{
- WINE_JSTCK* jstck;
- int dev;
- struct js_event ev;
-
- if ((jstck = JSTCK_drvGet(dwDevID)) == NULL)
- return MMSYSERR_NODRIVER;
-
- if ((dev = JSTCK_OpenDevice(jstck)) < 0) return JOYERR_PARMS;
-
- while ((read(dev, &ev, sizeof(struct js_event))) > 0) {
- if (ev.type == (JS_EVENT_AXIS)) {
- switch (jstck->axesMap[ev.number]) {
- case 0: /* X */
- case 8: /* Wheel */
- jstck->x = ev.value;
- break;
- case 1: /* Y */
- case 9: /* Gas */
- jstck->y = ev.value;
- break;
- case 2: /* Z */
- case 6: /* Throttle */
- case 10: /* Brake */
- jstck->z = ev.value;
- break;
- case 5: /* Rz */
- case 7: /* Rudder */
- jstck->r = ev.value;
- break;
- case 3: /* Rx */
- jstck->u = ev.value;
- break;
- case 4: /* Ry */
- jstck->v = ev.value;
- break;
- case 16: /* Hat 0 X */
- jstck->pov_x = ev.value;
- break;
- case 17: /* Hat 0 Y */
- jstck->pov_y = ev.value;
- break;
- default:
- FIXME("Unknown joystick event '%d'\n", ev.number);
- }
- } else if (ev.type == (JS_EVENT_BUTTON)) {
- if (ev.value) {
- jstck->buttons |= (1 << ev.number);
- /* FIXME: what to do for this field when
- * multiple buttons are depressed ?
- */
- if (lpInfo->dwFlags & JOY_RETURNBUTTONS)
- lpInfo->dwButtonNumber = ev.number + 1;
- }
- else
- jstck->buttons &= ~(1 << ev.number);
- }
- }
- /* EAGAIN is returned when the queue is empty */
- if (errno != EAGAIN) {
- /* FIXME: error should not be ignored */
- ERR("Error while reading joystick state (%s)\n", strerror(errno));
- }
- /* Now, copy the cached values into Window's structure... */
- if (lpInfo->dwFlags & JOY_RETURNBUTTONS)
- lpInfo->dwButtons = jstck->buttons;
- if (lpInfo->dwFlags & JOY_RETURNX)
- lpInfo->dwXpos = jstck->x + 32767;
- if (lpInfo->dwFlags & JOY_RETURNY)
- lpInfo->dwYpos = jstck->y + 32767;
- if (lpInfo->dwFlags & JOY_RETURNZ)
- lpInfo->dwZpos = jstck->z + 32767;
- if (lpInfo->dwFlags & JOY_RETURNR)
- lpInfo->dwRpos = jstck->r + 32767;
-# ifdef BODGE_THE_HAT
- else if (lpInfo->dwFlags & JOY_RETURNBUTTONS)
- {
- if (jstck->r > 0)
- lpInfo->dwButtons |= 1<<7;
- else if (jstck->r < 0)
- lpInfo->dwButtons |= 1<<8;
- }
-# endif
- if (lpInfo->dwFlags & JOY_RETURNU)
- lpInfo->dwUpos = jstck->u + 32767;
-# ifdef BODGE_THE_HAT
- else if (lpInfo->dwFlags & JOY_RETURNBUTTONS)
- {
- if (jstck->u > 0)
- lpInfo->dwButtons |= 1<<9;
- else if (jstck->u < 0)
- lpInfo->dwButtons |= 1<<10;
- }
-# endif
- if (lpInfo->dwFlags & JOY_RETURNV)
- lpInfo->dwVpos = jstck->v + 32767;
- if (lpInfo->dwFlags & JOY_RETURNPOV) {
- if (jstck->pov_y > 0) {
- if (jstck->pov_x < 0)
- lpInfo->dwPOV = 22500; /* SW */
- else if (jstck->pov_x > 0)
- lpInfo->dwPOV = 13500; /* SE */
- else
- lpInfo->dwPOV = 18000; /* S, JOY_POVBACKWARD */
- } else if (jstck->pov_y < 0) {
- if (jstck->pov_x < 0)
- lpInfo->dwPOV = 31500; /* NW */
- else if (jstck->pov_x > 0)
- lpInfo->dwPOV = 4500; /* NE */
- else
- lpInfo->dwPOV = 0; /* N, JOY_POVFORWARD */
- } else if (jstck->pov_x < 0)
- lpInfo->dwPOV = 27000; /* W, JOY_POVLEFT */
- else if (jstck->pov_x > 0)
- lpInfo->dwPOV = 9000; /* E, JOY_POVRIGHT */
- else
- lpInfo->dwPOV = JOY_POVCENTERED; /* Center */
- }
-
- TRACE("x: %d, y: %d, z: %d, r: %d, u: %d, v: %d, buttons: 0x%04x, flags: 0x%04x (fd %d)\n",
- lpInfo->dwXpos, lpInfo->dwYpos, lpInfo->dwZpos,
- lpInfo->dwRpos, lpInfo->dwUpos, lpInfo->dwVpos,
- lpInfo->dwButtons, lpInfo->dwFlags, dev
- );
-
- return JOYERR_NOERROR;
-}
-
-/**************************************************************************
- * driver_joyGetPos
- */
-LRESULT driver_joyGetPos(DWORD_PTR dwDevID, LPJOYINFO lpInfo)
-{
- JOYINFOEX ji;
- LONG ret;
-
- memset(&ji, 0, sizeof(ji));
-
- ji.dwSize = sizeof(ji);
- ji.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | JOY_RETURNBUTTONS;
- ret = driver_joyGetPosEx(dwDevID, &ji);
- if (ret == JOYERR_NOERROR) {
- lpInfo->wXpos = ji.dwXpos;
- lpInfo->wYpos = ji.dwYpos;
- lpInfo->wZpos = ji.dwZpos;
- lpInfo->wButtons = ji.dwButtons;
- }
-
- return ret;
-}
-
-#endif /* HAVE_LINUX_JOYSTICK_H */
diff --git a/dlls/winejoystick.drv/joystick_osx.c b/dlls/winejoystick.drv/joystick_osx.c
deleted file mode 100644
index 6f53477937f..00000000000
--- a/dlls/winejoystick.drv/joystick_osx.c
+++ /dev/null
@@ -1,935 +0,0 @@
-/*
- * WinMM joystick driver OS X implementation
- *
- * Copyright 1997 Andreas Mohr
- * Copyright 1998 Marcus Meissner
- * Copyright 1998,1999 Lionel Ulmer
- * Copyright 2000 Wolfgang Schwotzer
- * Copyright 2000-2001 TransGaming Technologies Inc.
- * Copyright 2002 David Hagood
- * Copyright 2009 CodeWeavers, Aric Stewart
- * Copyright 2015 Ken Thomases for CodeWeavers Inc.
- * Copyright 2016 David Lawrie
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include "config.h"
-
-#if defined(HAVE_IOKIT_HID_IOHIDLIB_H)
-
-#define DWORD UInt32
-#define LPDWORD UInt32*
-#define LONG SInt32
-#define LPLONG SInt32*
-#define E_PENDING __carbon_E_PENDING
-#define ULONG __carbon_ULONG
-#define E_INVALIDARG __carbon_E_INVALIDARG
-#define E_OUTOFMEMORY __carbon_E_OUTOFMEMORY
-#define E_HANDLE __carbon_E_HANDLE
-#define E_ACCESSDENIED __carbon_E_ACCESSDENIED
-#define E_UNEXPECTED __carbon_E_UNEXPECTED
-#define E_FAIL __carbon_E_FAIL
-#define E_ABORT __carbon_E_ABORT
-#define E_POINTER __carbon_E_POINTER
-#define E_NOINTERFACE __carbon_E_NOINTERFACE
-#define E_NOTIMPL __carbon_E_NOTIMPL
-#define S_FALSE __carbon_S_FALSE
-#define S_OK __carbon_S_OK
-#define HRESULT_FACILITY __carbon_HRESULT_FACILITY
-#define IS_ERROR __carbon_IS_ERROR
-#define FAILED __carbon_FAILED
-#define SUCCEEDED __carbon_SUCCEEDED
-#define MAKE_HRESULT __carbon_MAKE_HRESULT
-#define HRESULT __carbon_HRESULT
-#define STDMETHODCALLTYPE __carbon_STDMETHODCALLTYPE
-#include <IOKit/IOKitLib.h>
-#include <IOKit/hid/IOHIDLib.h>
-#undef ULONG
-#undef E_INVALIDARG
-#undef E_OUTOFMEMORY
-#undef E_HANDLE
-#undef E_ACCESSDENIED
-#undef E_UNEXPECTED
-#undef E_FAIL
-#undef E_ABORT
-#undef E_POINTER
-#undef E_NOINTERFACE
-#undef E_NOTIMPL
-#undef S_FALSE
-#undef S_OK
-#undef HRESULT_FACILITY
-#undef IS_ERROR
-#undef FAILED
-#undef SUCCEEDED
-#undef MAKE_HRESULT
-#undef HRESULT
-#undef STDMETHODCALLTYPE
-#undef DWORD
-#undef LPDWORD
-#undef LONG
-#undef LPLONG
-#undef E_PENDING
-
-#include "joystick.h"
-
-#include "wine/debug.h"
-
-
-WINE_DEFAULT_DEBUG_CHANNEL(joystick);
-
-
-#define MAXJOYSTICK (JOYSTICKID2 + 30)
-
-
-enum {
- AXIS_X, /* Winmm X */
- AXIS_Y, /* Winmm Y */
- AXIS_Z, /* Winmm Z */
- AXIS_RX, /* Winmm V */
- AXIS_RY, /* Winmm U */
- AXIS_RZ, /* Winmm R */
- NUM_AXES
-};
-
-struct axis {
- IOHIDElementRef element;
- CFIndex min_value, max_value;
-};
-
-typedef struct {
- BOOL in_use;
- IOHIDElementRef element;
- struct axis axes[NUM_AXES];
- CFMutableArrayRef buttons;
- IOHIDElementRef hatswitch;
-} joystick_t;
-
-
-static joystick_t joysticks[MAXJOYSTICK];
-static CFMutableArrayRef device_main_elements = NULL;
-
-static long get_device_property_long(IOHIDDeviceRef device, CFStringRef key)
-{
- CFTypeRef ref;
- long result = 0;
-
- if (device)
- {
- assert(IOHIDDeviceGetTypeID() == CFGetTypeID(device));
-
- ref = IOHIDDeviceGetProperty(device, key);
-
- if (ref && CFNumberGetTypeID() == CFGetTypeID(ref))
- CFNumberGetValue((CFNumberRef)ref, kCFNumberLongType, &result);
- }
-
- return result;
-}
-
-static CFStringRef copy_device_name(IOHIDDeviceRef device)
-{
- CFStringRef name;
-
- if (device)
- {
- CFTypeRef ref_name;
-
- assert(IOHIDDeviceGetTypeID() == CFGetTypeID(device));
-
- ref_name = IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductKey));
-
- if (ref_name && CFStringGetTypeID() == CFGetTypeID(ref_name))
- name = CFStringCreateCopy(kCFAllocatorDefault, ref_name);
- else
- {
- long vendID, prodID;
-
- vendID = get_device_property_long(device, CFSTR(kIOHIDVendorIDKey));
- prodID = get_device_property_long(device, CFSTR(kIOHIDProductIDKey));
- name = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("0x%04lx 0x%04lx"), vendID, prodID);
- }
- }
- else
- {
- ERR("NULL device\n");
- name = CFStringCreateCopy(kCFAllocatorDefault, CFSTR(""));
- }
-
- return name;
-}
-
-static long get_device_location_ID(IOHIDDeviceRef device)
-{
- return get_device_property_long(device, CFSTR(kIOHIDLocationIDKey));
-}
-
-static const char* debugstr_cf(CFTypeRef t)
-{
- CFStringRef s;
- const char* ret;
-
- if (!t) return "(null)";
-
- if (CFGetTypeID(t) == CFStringGetTypeID())
- s = t;
- else
- s = CFCopyDescription(t);
- ret = CFStringGetCStringPtr(s, kCFStringEncodingUTF8);
- if (ret) ret = debugstr_a(ret);
- if (!ret)
- {
- const UniChar* u = CFStringGetCharactersPtr(s);
- if (u)
- ret = debugstr_wn((const WCHAR*)u, CFStringGetLength(s));
- }
- if (!ret)
- {
- UniChar buf[200];
- int len = min(CFStringGetLength(s), ARRAY_SIZE(buf));
- CFStringGetCharacters(s, CFRangeMake(0, len), buf);
- ret = debugstr_wn(buf, len);
- }
- if (s != t) CFRelease(s);
- return ret;
-}
-
-static const char* debugstr_device(IOHIDDeviceRef device)
-{
- return wine_dbg_sprintf("<IOHIDDevice %p product %s IOHIDLocationID %lu>", device,
- debugstr_cf(IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductKey))),
- get_device_location_ID(device));
-}
-
-static const char* debugstr_element(IOHIDElementRef element)
-{
- return wine_dbg_sprintf("<IOHIDElement %p type %d usage %u/%u device %p>", element,
- IOHIDElementGetType(element), IOHIDElementGetUsagePage(element),
- IOHIDElementGetUsage(element), IOHIDElementGetDevice(element));
-}
-
-static int axis_for_usage_GD(int usage)
-{
- switch (usage)
- {
- case kHIDUsage_GD_X: return AXIS_X;
- case kHIDUsage_GD_Y: return AXIS_Y;
- case kHIDUsage_GD_Z: return AXIS_Z;
- case kHIDUsage_GD_Rx: return AXIS_RX;
- case kHIDUsage_GD_Ry: return AXIS_RY;
- case kHIDUsage_GD_Rz: return AXIS_RZ;
- }
-
- return -1;
-}
-
-static int axis_for_usage_Sim(int usage)
-{
- switch (usage)
- {
- case kHIDUsage_Sim_Rudder: return AXIS_RZ;
- case kHIDUsage_Sim_Throttle: return AXIS_Z;
- case kHIDUsage_Sim_Steering: return AXIS_X;
- case kHIDUsage_Sim_Accelerator: return AXIS_Y;
- case kHIDUsage_Sim_Brake: return AXIS_RZ;
- }
-
- return -1;
-}
-
-/**************************************************************************
- * joystick_from_id
- */
-static joystick_t* joystick_from_id(DWORD_PTR device_id)
-{
- int index;
-
- if ((device_id - (DWORD_PTR)joysticks) % sizeof(joysticks[0]) != 0)
- return NULL;
- index = (device_id - (DWORD_PTR)joysticks) / sizeof(joysticks[0]);
- if (index < 0 || index >= MAXJOYSTICK || !((joystick_t*)device_id)->in_use)
- return NULL;
-
- return (joystick_t*)device_id;
-}
-
-/**************************************************************************
- * create_osx_device_match
- */
-static CFDictionaryRef create_osx_device_match(int usage)
-{
- CFDictionaryRef result = NULL;
- int number;
- CFStringRef keys[] = { CFSTR(kIOHIDDeviceUsagePageKey), CFSTR(kIOHIDDeviceUsageKey) };
- CFNumberRef values[2];
- int i;
-
- TRACE("usage %d\n", usage);
-
- number = kHIDPage_GenericDesktop;
- values[0] = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &number);
- values[1] = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &usage);
-
- if (values[0] && values[1])
- {
- result = CFDictionaryCreate(NULL, (const void**)keys, (const void**)values, ARRAY_SIZE(values),
- &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
-
- if (!result)
- ERR("CFDictionaryCreate failed.\n");
- }
- else
- ERR("CFNumberCreate failed.\n");
-
- for (i = 0; i < ARRAY_SIZE(values); i++)
- if (values[i]) CFRelease(values[i]);
-
- return result;
-}
-
-/**************************************************************************
- * find_top_level
- */
-static CFIndex find_top_level(IOHIDDeviceRef hid_device, CFMutableArrayRef main_elements)
-{
- CFArrayRef elements;
- CFIndex total = 0;
-
- TRACE("hid_device %s\n", debugstr_device(hid_device));
-
- if (!hid_device)
- return 0;
-
- elements = IOHIDDeviceCopyMatchingElements(hid_device, NULL, 0);
-
- if (elements)
- {
- CFIndex i, count = CFArrayGetCount(elements);
- for (i = 0; i < count; i++)
- {
- IOHIDElementRef element = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, i);
- int type = IOHIDElementGetType(element);
-
- TRACE("element %s\n", debugstr_element(element));
-
- /* Check for top-level gaming device collections */
- if (type == kIOHIDElementTypeCollection && IOHIDElementGetParent(element) == 0)
- {
- int usage_page = IOHIDElementGetUsagePage(element);
- int usage = IOHIDElementGetUsage(element);
-
- if (usage_page == kHIDPage_GenericDesktop &&
- (usage == kHIDUsage_GD_Joystick || usage == kHIDUsage_GD_GamePad || usage == kHIDUsage_GD_MultiAxisController))
- {
- CFArrayAppendValue(main_elements, element);
- total++;
- }
- }
- }
- CFRelease(elements);
- }
-
- TRACE("-> total %d\n", (int)total);
- return total;
-}
-/**************************************************************************
- * device_name_comparator
- *
- * Virtual joysticks may not have a kIOHIDLocationIDKey and will default to location ID of 0, this orders virtual joysticks by their name
- */
-static CFComparisonResult device_name_comparator(IOHIDDeviceRef device1, IOHIDDeviceRef device2)
-{
- CFStringRef name1 = copy_device_name(device1), name2 = copy_device_name(device2);
- CFComparisonResult result = CFStringCompare(name1, name2, (kCFCompareForcedOrdering | kCFCompareNumerically));
- CFRelease(name1);
- CFRelease(name2);
- return result;
-}
-
-/**************************************************************************
- * device_location_name_comparator
- *
- * Helper to sort device array first by location ID, since location IDs are consistent across boots & launches, then by product name
- */
-static CFComparisonResult device_location_name_comparator(const void *val1, const void *val2, void *context)
-{
- IOHIDDeviceRef device1 = (IOHIDDeviceRef)val1, device2 = (IOHIDDeviceRef)val2;
- long loc1 = get_device_location_ID(device1), loc2 = get_device_location_ID(device2);
-
- if (loc1 < loc2)
- return kCFCompareLessThan;
- else if (loc1 > loc2)
- return kCFCompareGreaterThan;
- return device_name_comparator(device1, device2);
-}
-
-/**************************************************************************
- * copy_set_to_array
- *
- * Helper to copy the CFSet to a CFArray
- */
-static void copy_set_to_array(const void *value, void *context)
-{
- CFArrayAppendValue(context, value);
-}
-
-/**************************************************************************
- * find_osx_devices
- */
-static int find_osx_devices(void)
-{
- IOHIDManagerRef hid_manager;
- int usages[] = { kHIDUsage_GD_Joystick, kHIDUsage_GD_GamePad, kHIDUsage_GD_MultiAxisController };
- int i;
- CFDictionaryRef matching_dicts[ARRAY_SIZE(usages)];
- CFArrayRef matching;
- CFSetRef devset;
-
- TRACE("()\n");
-
- hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, 0L);
- if (IOHIDManagerOpen(hid_manager, 0) != kIOReturnSuccess)
- {
- ERR("Couldn't open IOHIDManager.\n");
- CFRelease(hid_manager);
- return 0;
- }
-
- for (i = 0; i < ARRAY_SIZE(matching_dicts); i++)
- {
- matching_dicts[i] = create_osx_device_match(usages[i]);
- if (!matching_dicts[i])
- {
- while (i > 0)
- CFRelease(matching_dicts[--i]);
- goto fail;
- }
- }
-
- matching = CFArrayCreate(NULL, (const void**)matching_dicts, ARRAY_SIZE(matching_dicts),
- &kCFTypeArrayCallBacks);
-
- for (i = 0; i < ARRAY_SIZE(matching_dicts); i++)
- CFRelease(matching_dicts[i]);
-
- IOHIDManagerSetDeviceMatchingMultiple(hid_manager, matching);
- CFRelease(matching);
- devset = IOHIDManagerCopyDevices(hid_manager);
- if (devset)
- {
- CFIndex num_devices, num_main_elements;
- CFMutableArrayRef devices;
-
- num_devices = CFSetGetCount(devset);
- devices = CFArrayCreateMutable(kCFAllocatorDefault, num_devices, &kCFTypeArrayCallBacks);
- CFSetApplyFunction(devset, copy_set_to_array, (void *)devices);
- CFArraySortValues(devices, CFRangeMake(0, num_devices), device_location_name_comparator, NULL);
-
- CFRelease(devset);
- if (!devices)
- goto fail;
-
- device_main_elements = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
- if (!device_main_elements)
- {
- CFRelease(devices);
- goto fail;
- }
-
- num_main_elements = 0;
- for (i = 0; i < num_devices; i++)
- {
- IOHIDDeviceRef hid_device = (IOHIDDeviceRef)CFArrayGetValueAtIndex(devices, i);
- TRACE("hid_device %s\n", debugstr_device(hid_device));
- num_main_elements += find_top_level(hid_device, device_main_elements);
- }
-
- CFRelease(devices);
-
- TRACE("found %i device(s), %i collection(s)\n",(int)num_devices,(int)num_main_elements);
- return (int)num_main_elements;
- }
-
-fail:
- IOHIDManagerClose(hid_manager, 0);
- CFRelease(hid_manager);
- return 0;
-}
-
-/**************************************************************************
- * collect_joystick_elements
- */
-static void collect_joystick_elements(joystick_t* joystick, IOHIDElementRef collection)
-{
- CFIndex i, count;
- CFArrayRef children = IOHIDElementGetChildren(collection);
-
- TRACE("collection %s\n", debugstr_element(collection));
-
- count = CFArrayGetCount(children);
- for (i = 0; i < count; i++)
- {
- IOHIDElementRef child;
- int type;
- uint32_t usage_page;
-
- child = (IOHIDElementRef)CFArrayGetValueAtIndex(children, i);
- TRACE("child %s\n", debugstr_element(child));
- type = IOHIDElementGetType(child);
- usage_page = IOHIDElementGetUsagePage(child);
-
- switch (type)
- {
- case kIOHIDElementTypeCollection:
- collect_joystick_elements(joystick, child);
- break;
- case kIOHIDElementTypeInput_Button:
- {
- TRACE("kIOHIDElementTypeInput_Button usage_page %d\n", usage_page);
-
- /* avoid strange elements found on the 360 controller */
- if (usage_page == kHIDPage_Button)
- CFArrayAppendValue(joystick->buttons, child);
- break;
- }
- case kIOHIDElementTypeInput_Axis:
- case kIOHIDElementTypeInput_Misc:
- {
- uint32_t usage = IOHIDElementGetUsage( child );
- switch (usage_page)
- {
- case kHIDPage_GenericDesktop:
- {
- switch(usage)
- {
- case kHIDUsage_GD_Hatswitch:
- {
- TRACE("kIOHIDElementTypeInput_Axis/Misc / kHIDUsage_GD_Hatswitch\n");
- if (joystick->hatswitch)
- TRACE(" ignoring additional hatswitch\n");
- else
- joystick->hatswitch = (IOHIDElementRef)CFRetain(child);
- break;
- }
- case kHIDUsage_GD_X:
- case kHIDUsage_GD_Y:
- case kHIDUsage_GD_Z:
- case kHIDUsage_GD_Rx:
- case kHIDUsage_GD_Ry:
- case kHIDUsage_GD_Rz:
- {
- int axis = axis_for_usage_GD(usage);
- TRACE("kIOHIDElementTypeInput_Axis/Misc / kHIDUsage_GD_<axis> (%d) axis %d\n", usage, axis);
- if (axis < 0 || joystick->axes[axis].element)
- TRACE(" ignoring\n");
- else
- {
- joystick->axes[axis].element = (IOHIDElementRef)CFRetain(child);
- joystick->axes[axis].min_value = IOHIDElementGetLogicalMin(child);
- joystick->axes[axis].max_value = IOHIDElementGetLogicalMax(child);
- }
- break;
- }
- case kHIDUsage_GD_Slider:
- case kHIDUsage_GD_Dial:
- case kHIDUsage_GD_Wheel:
- {
- /* if one axis is taken, fall to the next until axes are filled */
- int possible_axes[3] = {AXIS_Z,AXIS_RY,AXIS_RX};
- int axis = 0;
- while(axis < 3 && joystick->axes[possible_axes[axis]].element)
- axis++;
- if (axis == 3)
- TRACE("kIOHIDElementTypeInput_Axis/Misc / kHIDUsage_GD_<axis> (%d)\n ignoring\n", usage);
- else
- {
- TRACE("kIOHIDElementTypeInput_Axis/Misc / kHIDUsage_GD_<axis> (%d) axis %d\n", usage, possible_axes[axis]);
- joystick->axes[possible_axes[axis]].element = (IOHIDElementRef)CFRetain(child);
- joystick->axes[possible_axes[axis]].min_value = IOHIDElementGetLogicalMin(child);
- joystick->axes[possible_axes[axis]].max_value = IOHIDElementGetLogicalMax(child);
- }
- break;
- }
- default:
- FIXME("kIOHIDElementTypeInput_Axis/Misc / Unhandled GD Page usage %d\n", usage);
- break;
- }
- break;
- }
- case kHIDPage_Simulation:
- {
- switch(usage)
- {
- case kHIDUsage_Sim_Rudder:
- case kHIDUsage_Sim_Throttle:
- case kHIDUsage_Sim_Steering:
- case kHIDUsage_Sim_Accelerator:
- case kHIDUsage_Sim_Brake:
- {
- int axis = axis_for_usage_Sim(usage);
- TRACE("kIOHIDElementTypeInput_Axis/Misc / kHIDUsage_Sim_<axis> (%d) axis %d\n", usage, axis);
- if (axis < 0 || joystick->axes[axis].element)
- TRACE(" ignoring\n");
- else
- {
- joystick->axes[axis].element = (IOHIDElementRef)CFRetain(child);
- joystick->axes[axis].min_value = IOHIDElementGetLogicalMin(child);
- joystick->axes[axis].max_value = IOHIDElementGetLogicalMax(child);
- }
- break;
- }
- default:
- FIXME("kIOHIDElementTypeInput_Axis/Misc / Unhandled Sim Page usage %d\n", usage);
- break;
- }
- break;
- }
- default:
- FIXME("kIOHIDElementTypeInput_Axis/Misc / Unhandled Usage Page %d\n", usage_page);
- break;
- }
- break;
- }
- case kIOHIDElementTypeFeature:
- /* Describes input and output elements not intended for consumption by the end user. Ignoring. */
- break;
- default:
- FIXME("Unhandled type %i\n",type);
- break;
- }
- }
-}
-
-/**************************************************************************
- * button_usage_comparator
- */
-static CFComparisonResult button_usage_comparator(const void *val1, const void *val2, void *context)
-{
- IOHIDElementRef element1 = (IOHIDElementRef)val1, element2 = (IOHIDElementRef)val2;
- int usage1 = IOHIDElementGetUsage(element1), usage2 = IOHIDElementGetUsage(element2);
-
- if (usage1 < usage2)
- return kCFCompareLessThan;
- if (usage1 > usage2)
- return kCFCompareGreaterThan;
- return kCFCompareEqualTo;
-}
-
-/**************************************************************************
- * driver_open
- */
-LRESULT driver_open(LPSTR str, DWORD index)
-{
- if (index >= MAXJOYSTICK || joysticks[index].in_use)
- return 0;
-
- joysticks[index].in_use = TRUE;
- return (LRESULT)&joysticks[index];
-}
-
-/**************************************************************************
- * driver_close
- */
-LRESULT driver_close(DWORD_PTR device_id)
-{
- joystick_t* joystick = joystick_from_id(device_id);
- int i;
-
- if (joystick == NULL)
- return 0;
-
- CFRelease(joystick->element);
- for (i = 0; i < NUM_AXES; i++)
- {
- if (joystick->axes[i].element)
- CFRelease(joystick->axes[i].element);
- }
- if (joystick->buttons)
- CFRelease(joystick->buttons);
- if (joystick->hatswitch)
- CFRelease(joystick->hatswitch);
-
- memset(joystick, 0, sizeof(*joystick));
- return 1;
-}
-
-/**************************************************************************
- * open_joystick
- */
-static BOOL open_joystick(joystick_t* joystick)
-{
- CFIndex index;
- CFRange range;
-
- if (joystick->element)
- return TRUE;
-
- if (!device_main_elements)
- {
- find_osx_devices();
- if (!device_main_elements)
- return FALSE;
- }
-
- index = joystick - joysticks;
- if (index >= CFArrayGetCount(device_main_elements))
- return FALSE;
-
- joystick->element = (IOHIDElementRef)CFArrayGetValueAtIndex(device_main_elements, index);
- joystick->buttons = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
- collect_joystick_elements(joystick, joystick->element);
-
- /* Sort buttons into correct order */
- range.location = 0;
- range.length = CFArrayGetCount(joystick->buttons);
- CFArraySortValues(joystick->buttons, range, button_usage_comparator, NULL);
- if (range.length > 32)
- {
- /* Delete any buttons beyond the first 32 */
- range.location = 32;
- range.length -= 32;
- CFArrayReplaceValues(joystick->buttons, range, NULL, 0);
- }
-
- return TRUE;
-}
-
-
-/**************************************************************************
- * driver_joyGetDevCaps
- */
-LRESULT driver_joyGetDevCaps(DWORD_PTR device_id, JOYCAPSW* caps, DWORD size)
-{
- joystick_t* joystick;
- IOHIDDeviceRef device;
-
- if ((joystick = joystick_from_id(device_id)) == NULL)
- return MMSYSERR_NODRIVER;
-
- if (!open_joystick(joystick))
- return JOYERR_PARMS;
-
- caps->szPname[0] = 0;
-
- device = IOHIDElementGetDevice(joystick->element);
- if (device)
- {
- CFStringRef product_name = IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductKey));
- if (product_name)
- {
- CFRange range;
-
- range.location = 0;
- range.length = min(MAXPNAMELEN - 1, CFStringGetLength(product_name));
- CFStringGetCharacters(product_name, range, (UniChar*)caps->szPname);
- caps->szPname[range.length] = 0;
- }
- }
-
- caps->wMid = MM_MICROSOFT;
- caps->wPid = MM_PC_JOYSTICK;
- caps->wXmin = 0;
- caps->wXmax = 0xFFFF;
- caps->wYmin = 0;
- caps->wYmax = 0xFFFF;
- caps->wZmin = 0;
- caps->wZmax = joystick->axes[AXIS_Z].element ? 0xFFFF : 0;
- caps->wNumButtons = CFArrayGetCount(joystick->buttons);
- if (size == sizeof(JOYCAPSW))
- {
- int i;
-
- /* complete 95 structure */
- caps->wRmin = 0;
- caps->wRmax = 0xFFFF;
- caps->wUmin = 0;
- caps->wUmax = 0xFFFF;
- caps->wVmin = 0;
- caps->wVmax = 0xFFFF;
- caps->wMaxAxes = 6; /* same as MS Joystick Driver */
- caps->wNumAxes = 0;
- caps->wMaxButtons = 32; /* same as MS Joystick Driver */
- caps->szRegKey[0] = 0;
- caps->szOEMVxD[0] = 0;
- caps->wCaps = 0;
-
- for (i = 0; i < NUM_AXES; i++)
- {
- if (joystick->axes[i].element)
- {
- caps->wNumAxes++;
- switch (i)
- {
- case AXIS_Z: caps->wCaps |= JOYCAPS_HASZ; break;
- case AXIS_RX: caps->wCaps |= JOYCAPS_HASV; break;
- case AXIS_RY: caps->wCaps |= JOYCAPS_HASU; break;
- case AXIS_RZ: caps->wCaps |= JOYCAPS_HASR; break;
- }
- }
- }
-
- if (joystick->hatswitch)
- caps->wCaps |= JOYCAPS_HASPOV | JOYCAPS_POV4DIR;
- }
-
- TRACE("name %s buttons %u axes %d caps 0x%08x\n", debugstr_w(caps->szPname), caps->wNumButtons, caps->wNumAxes, caps->wCaps);
-
- return JOYERR_NOERROR;
-}
-
-/*
- * Helper to get the value from an element
- */
-static LRESULT driver_getElementValue(IOHIDDeviceRef device, IOHIDElementRef element, IOHIDValueRef *pValueRef)
-{
- IOReturn ret;
- ret = IOHIDDeviceGetValue(device, element, pValueRef);
- switch (ret)
- {
- case kIOReturnSuccess:
- return JOYERR_NOERROR;
- case kIOReturnNotAttached:
- return JOYERR_UNPLUGGED;
- default:
- ERR("IOHIDDeviceGetValue returned 0x%x\n",ret);
- return JOYERR_NOCANDO;
- }
-}
-
-/**************************************************************************
- * driver_joyGetPosEx
- */
-LRESULT driver_joyGetPosEx(DWORD_PTR device_id, JOYINFOEX* info)
-{
- static const struct {
- DWORD flag;
- off_t offset;
- } axis_map[NUM_AXES] = {
- { JOY_RETURNX, FIELD_OFFSET(JOYINFOEX, dwXpos) },
- { JOY_RETURNY, FIELD_OFFSET(JOYINFOEX, dwYpos) },
- { JOY_RETURNZ, FIELD_OFFSET(JOYINFOEX, dwZpos) },
- { JOY_RETURNV, FIELD_OFFSET(JOYINFOEX, dwVpos) },
- { JOY_RETURNU, FIELD_OFFSET(JOYINFOEX, dwUpos) },
- { JOY_RETURNR, FIELD_OFFSET(JOYINFOEX, dwRpos) },
- };
-
- joystick_t* joystick;
- IOHIDDeviceRef device;
- CFIndex i, count;
- IOHIDValueRef valueRef;
- long value;
- LRESULT rc;
-
- if ((joystick = joystick_from_id(device_id)) == NULL)
- return MMSYSERR_NODRIVER;
-
- if (!open_joystick(joystick))
- return JOYERR_PARMS;
-
- device = IOHIDElementGetDevice(joystick->element);
-
- if (info->dwFlags & JOY_RETURNBUTTONS)
- {
- info->dwButtons = 0;
- info->dwButtonNumber = 0;
-
- count = CFArrayGetCount(joystick->buttons);
- for (i = 0; i < count; i++)
- {
- IOHIDElementRef button = (IOHIDElementRef)CFArrayGetValueAtIndex(joystick->buttons, i);
- rc = driver_getElementValue(device, button, &valueRef);
- if (rc != JOYERR_NOERROR)
- return rc;
- value = IOHIDValueGetIntegerValue(valueRef);
- if (value)
- {
- info->dwButtons |= 1 << i;
- info->dwButtonNumber++;
- }
- }
- }
-
- for (i = 0; i < NUM_AXES; i++)
- {
- if (info->dwFlags & axis_map[i].flag)
- {
- DWORD* field = (DWORD*)((char*)info + axis_map[i].offset);
- if (joystick->axes[i].element)
- {
- rc = driver_getElementValue(device, joystick->axes[i].element, &valueRef);
- if (rc != JOYERR_NOERROR)
- return rc;
- value = IOHIDValueGetIntegerValue(valueRef) - joystick->axes[i].min_value;
- *field = MulDiv(value, 0xFFFF, joystick->axes[i].max_value - joystick->axes[i].min_value);
- }
- else
- {
- *field = 0;
- info->dwFlags &= ~axis_map[i].flag;
- }
- }
- }
-
- if (info->dwFlags & JOY_RETURNPOV)
- {
- if (joystick->hatswitch)
- {
- rc = driver_getElementValue(device, joystick->hatswitch, &valueRef);
- if (rc != JOYERR_NOERROR)
- return rc;
- value = IOHIDValueGetIntegerValue(valueRef);
- if (value >= 8)
- info->dwPOV = JOY_POVCENTERED;
- else
- info->dwPOV = value * 4500;
- }
- else
- {
- info->dwPOV = JOY_POVCENTERED;
- info->dwFlags &= ~JOY_RETURNPOV;
- }
- }
-
- TRACE("x: %d, y: %d, z: %d, r: %d, u: %d, v: %d, buttons: 0x%04x, pov %d, flags: 0x%04x\n",
- info->dwXpos, info->dwYpos, info->dwZpos, info->dwRpos, info->dwUpos, info->dwVpos, info->dwButtons, info->dwPOV, info->dwFlags);
-
- return JOYERR_NOERROR;
-}
-
-/**************************************************************************
- * driver_joyGetPos
- */
-LRESULT driver_joyGetPos(DWORD_PTR device_id, JOYINFO* info)
-{
- JOYINFOEX ji;
- LONG ret;
-
- memset(&ji, 0, sizeof(ji));
-
- ji.dwSize = sizeof(ji);
- ji.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | JOY_RETURNBUTTONS;
- ret = driver_joyGetPosEx(device_id, &ji);
- if (ret == JOYERR_NOERROR)
- {
- info->wXpos = ji.dwXpos;
- info->wYpos = ji.dwYpos;
- info->wZpos = ji.dwZpos;
- info->wButtons = ji.dwButtons;
- }
-
- return ret;
-}
-
-#endif /* HAVE_IOKIT_HID_IOHIDLIB_H */
diff --git a/dlls/winejoystick.drv/winejoystick.drv.spec b/dlls/winejoystick.drv/winejoystick.drv.spec
deleted file mode 100644
index 29932efde7c..00000000000
--- a/dlls/winejoystick.drv/winejoystick.drv.spec
+++ /dev/null
@@ -1 +0,0 @@
-@ stdcall -private DriverProc(long long long long long) JSTCK_DriverProc
diff --git a/tools/winapi/win32.api b/tools/winapi/win32.api
index d9b77dbce39..5f3dd85cc93 100644
--- a/tools/winapi/win32.api
+++ b/tools/winapi/win32.api
@@ -5615,19 +5615,6 @@ IUnknown *
IWineD3D *
IWineD3DClipper *
-%%winejoystick.drv
-
-%long
-
-HDRVR
-LPARAM
-LRESULT
-UINT
-
-%long --pointer
-
-DWORD_PTR
-
%%l3codeca.acm
%long
--
2.34.0
More information about the wine-devel
mailing list