[DINPUT] Another fixes
Christian Costa
titan.costa at wanadoo.fr
Sun Dec 12 06:55:40 CST 2004
Hi,
Changelog:
Handle device class in DX8 enumeration (found by Robert Reif).
Fixed remaining DX8 device types.
Factorized a bit GetCapabilities for keyboard and mouse.
Christian Costa titan.costa at wanadoo.fr
-------------- next part --------------
Index: joystick_linux.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/joystick_linux.c,v
retrieving revision 1.18
diff -u -r1.18 joystick_linux.c
--- joystick_linux.c 7 Dec 2004 14:19:29 -0000 1.18
+++ joystick_linux.c 12 Dec 2004 12:20:48 -0000
@@ -159,7 +159,7 @@
if ((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_JOYSTICK) && (version >= 8))) {
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))) {
/* check whether we have a joystick */
sprintf(dev, "%s%d", JOYDEV, id);
if ((fd = open(dev,O_RDONLY)) < 0) {
@@ -209,7 +209,7 @@
if ((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_JOYSTICK) && (version >= 8))) {
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))) {
/* check whether we have a joystick */
sprintf(dev, "%s%d", JOYDEV, id);
if ((fd = open(dev,O_RDONLY)) < 0) {
@@ -556,7 +556,10 @@
newDevice->devcaps.dwSize = sizeof(newDevice->devcaps);
newDevice->devcaps.dwFlags = DIDC_ATTACHED;
- newDevice->devcaps.dwDevType = DIDEVTYPE_JOYSTICK;
+ if (newDevice->dinput->version >= 8)
+ newDevice->devcaps.dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
+ else
+ newDevice->devcaps.dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
newDevice->devcaps.dwFFSamplePeriod = 0;
newDevice->devcaps.dwFFMinTimeResolution = 0;
newDevice->devcaps.dwFirmwareRevision = 0;
@@ -1582,10 +1585,7 @@
pdidi->guidInstance = GUID_Joystick;
pdidi->guidProduct = DInput_Wine_Joystick_GUID;
/* we only support traditional joysticks for now */
- if (This->dinput->version >= 8)
- pdidi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
- else
- pdidi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
+ pdidi->dwDevType = This->devcaps.dwDevType;
strcpy(pdidi->tszInstanceName, "Joystick");
strcpy(pdidi->tszProductName, This->name);
if (pdidi->dwSize > sizeof(DIDEVICEINSTANCE_DX3A)) {
@@ -1620,10 +1620,7 @@
pdidi->guidInstance = GUID_Joystick;
pdidi->guidProduct = DInput_Wine_Joystick_GUID;
/* we only support traditional joysticks for now */
- if (This->dinput->version >= 8)
- pdidi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
- else
- pdidi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
+ pdidi->dwDevType = This->devcaps.dwDevType;
MultiByteToWideChar(CP_ACP, 0, "Joystick", -1, pdidi->tszInstanceName, MAX_PATH);
MultiByteToWideChar(CP_ACP, 0, This->name, -1, pdidi->tszProductName, MAX_PATH);
if (pdidi->dwSize > sizeof(DIDEVICEINSTANCE_DX3W)) {
Index: joystick_linuxinput.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/joystick_linuxinput.c,v
retrieving revision 1.13
diff -u -r1.13 joystick_linuxinput.c
--- joystick_linuxinput.c 7 Dec 2004 14:19:29 -0000 1.13
+++ joystick_linuxinput.c 12 Dec 2004 12:20:50 -0000
@@ -177,7 +177,7 @@
if (!((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_JOYSTICK) && (version >= 8))))
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))))
return FALSE;
if (dwFlags & DIEDFL_FORCEFEEDBACK)
@@ -215,7 +215,7 @@
if (!((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_JOYSTICK) && (version >= 8))))
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))))
return FALSE;
if (dwFlags & DIEDFL_FORCEFEEDBACK)
@@ -233,7 +233,10 @@
lpddi->guidProduct = DInput_Wine_Joystick_GUID;
lpddi->guidFFDriver = GUID_NULL;
- lpddi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL<<8);
+ if (version >= 8)
+ lpddi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
+ else
+ lpddi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
MultiByteToWideChar(CP_ACP, 0, "Joystick", -1, lpddi->tszInstanceName, MAX_PATH);
/* ioctl JSIOCGNAME(len) */
@@ -760,7 +763,10 @@
wasacquired = 0;
}
lpDIDevCaps->dwFlags = DIDC_ATTACHED;
- lpDIDevCaps->dwDevType = DIDEVTYPE_JOYSTICK;
+ if (This->dinput->version >= 8)
+ lpDIDevCaps->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
+ else
+ lpDIDevCaps->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);
axes=0;
for (i=0;i<ABS_MAX;i++) if (test_bit(This->absbits,i)) axes++;
Index: keyboard.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/keyboard.c,v
retrieving revision 1.10
diff -u -r1.10 keyboard.c
--- keyboard.c 28 Oct 2004 21:01:44 -0000 1.10
+++ keyboard.c 12 Dec 2004 12:20:51 -0000
@@ -206,7 +206,7 @@
if ((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_KEYBOARD) && (version >= 8))) {
+ (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 8))) {
TRACE("Enumerating the Keyboard device\n");
fill_keyboard_dideviceinstanceA(lpddi, version);
@@ -224,7 +224,7 @@
if ((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_KEYBOARD) && (version >= 8))) {
+ (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 8))) {
TRACE("Enumerating the Keyboard device\n");
fill_keyboard_dideviceinstanceW(lpddi, version);
@@ -569,36 +569,34 @@
LPDIRECTINPUTDEVICE8A iface,
LPDIDEVCAPS lpDIDevCaps)
{
- SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
+ SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
+ DIDEVCAPS devcaps;
- TRACE("(this=%p,%p)\n",This,lpDIDevCaps);
+ TRACE("(this=%p,%p)\n",This,lpDIDevCaps);
- if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) {
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;
+ if ((lpDIDevCaps->dwSize != sizeof(DIDEVCAPS)) && (lpDIDevCaps->dwSize != sizeof(DIDEVCAPS_DX3))) {
+ WARN("invalid parameter\n");
+ return DIERR_INVALIDPARAM;
+ }
+
+ devcaps.dwSize = lpDIDevCaps->dwSize;
+ devcaps.dwFlags = DIDC_ATTACHED;
if (This->dinput->version >= 8)
- lpDIDevCaps->dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);
+ devcaps.dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);
else
- lpDIDevCaps->dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
- lpDIDevCaps->dwAxes = 0;
- lpDIDevCaps->dwButtons = 256;
- lpDIDevCaps->dwPOVs = 0;
- lpDIDevCaps->dwFFSamplePeriod = 0;
- lpDIDevCaps->dwFFMinTimeResolution = 0;
- lpDIDevCaps->dwFirmwareRevision = 100;
- lpDIDevCaps->dwHardwareRevision = 100;
- lpDIDevCaps->dwFFDriverVersion = 0;
- } else if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS_DX3)) {
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;
- lpDIDevCaps->dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
- lpDIDevCaps->dwAxes = 0;
- lpDIDevCaps->dwButtons = 256;
- lpDIDevCaps->dwPOVs = 0;
- } else {
- WARN("invalid parameter\n");
- return DIERR_INVALIDPARAM;
- }
+ devcaps.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
+ devcaps.dwAxes = 0;
+ devcaps.dwButtons = 256;
+ devcaps.dwPOVs = 0;
+ devcaps.dwFFSamplePeriod = 0;
+ devcaps.dwFFMinTimeResolution = 0;
+ devcaps.dwFirmwareRevision = 100;
+ devcaps.dwHardwareRevision = 100;
+ devcaps.dwFFDriverVersion = 0;
- return DI_OK;
+ memcpy(lpDIDevCaps, &devcaps, lpDIDevCaps->dwSize);
+
+ return DI_OK;
}
/******************************************************************************
Index: mouse.c
===================================================================
RCS file: /home/wine/wine/dlls/dinput/mouse.c,v
retrieving revision 1.12
diff -u -r1.12 mouse.c
--- mouse.c 21 Sep 2004 20:04:37 -0000 1.12
+++ mouse.c 12 Dec 2004 12:20:54 -0000
@@ -210,7 +210,7 @@
if ((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) {
+ (((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 8))) {
TRACE("Enumerating the mouse device\n");
fill_mouse_dideviceinstanceA(lpddi, version);
@@ -228,7 +228,7 @@
if ((dwDevType == 0) ||
((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) ||
- ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) {
+ (((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 8))) {
TRACE("Enumerating the mouse device\n");
fill_mouse_dideviceinstanceW(lpddi, version);
@@ -923,33 +923,31 @@
LPDIDEVCAPS lpDIDevCaps)
{
SysMouseImpl *This = (SysMouseImpl *)iface;
-
+ DIDEVCAPS devcaps;
+
TRACE("(this=%p,%p)\n",This,lpDIDevCaps);
-
- if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) {
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;
- if (This->dinput->version >= 8)
- lpDIDevCaps->dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);
- else
- lpDIDevCaps->dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);
- lpDIDevCaps->dwAxes = 3;
- lpDIDevCaps->dwButtons = 3;
- lpDIDevCaps->dwPOVs = 0;
- lpDIDevCaps->dwFFSamplePeriod = 0;
- lpDIDevCaps->dwFFMinTimeResolution = 0;
- lpDIDevCaps->dwFirmwareRevision = 100;
- lpDIDevCaps->dwHardwareRevision = 100;
- lpDIDevCaps->dwFFDriverVersion = 0;
- } else if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS_DX3)) {
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;
- lpDIDevCaps->dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);
- lpDIDevCaps->dwAxes = 3;
- lpDIDevCaps->dwButtons = 3;
- lpDIDevCaps->dwPOVs = 0;
- } else {
+
+ if ((lpDIDevCaps->dwSize != sizeof(DIDEVCAPS)) && (lpDIDevCaps->dwSize != sizeof(DIDEVCAPS_DX3))) {
WARN("invalid parameter\n");
return DIERR_INVALIDPARAM;
}
+
+ devcaps.dwSize = lpDIDevCaps->dwSize;
+ devcaps.dwFlags = DIDC_ATTACHED;
+ if (This->dinput->version >= 8)
+ devcaps.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);
+ else
+ devcaps.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);
+ devcaps.dwAxes = 3;
+ devcaps.dwButtons = 3;
+ devcaps.dwPOVs = 0;
+ devcaps.dwFFSamplePeriod = 0;
+ devcaps.dwFFMinTimeResolution = 0;
+ devcaps.dwFirmwareRevision = 100;
+ devcaps.dwHardwareRevision = 100;
+ devcaps.dwFFDriverVersion = 0;
+
+ memcpy(lpDIDevCaps, &devcaps, lpDIDevCaps->dwSize);
return DI_OK;
}
More information about the wine-patches
mailing list