[PATCH v2 10/10] winejoystick.drv: Remove unnecessary driver.
Andrew Eikum
aeikum at codeweavers.com
Thu Dec 9 09:33:15 CST 2021
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Fri, Dec 03, 2021 at 12:19:10PM +0100, Rémi Bernon wrote:
> 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 | 462 ----------
> dlls/winejoystick.drv/joystick_osx.c | 935 --------------------
> dlls/winejoystick.drv/winejoystick.drv.spec | 1 -
> tools/winapi/win32.api | 13 -
> 8 files changed, 1509 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 2fe4b186fd6..328f80f17c9 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -899,7 +899,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)
> @@ -3488,7 +3487,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 7fd2c95aff1..00000000000
> --- a/dlls/winejoystick.drv/joystick_linux.c
> +++ /dev/null
> @@ -1,462 +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
> -
> -#ifdef HAVE_UNISTD_H
> -# include <unistd.h>
> -#endif
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <fcntl.h>
> -#ifdef HAVE_SYS_IOCTL_H
> -#include <sys/ioctl.h>
> -#endif
> -#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