Aric Stewart : dinput: Move joystick Polling and Device State to the generic part.

Alexandre Julliard julliard at winehq.org
Tue Mar 10 10:53:30 CDT 2009


Module: wine
Branch: master
Commit: 94a5e0978d832a488798acd6b9a41afa1299cb07
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=94a5e0978d832a488798acd6b9a41afa1299cb07

Author: Aric Stewart <aric at codeweavers.com>
Date:   Mon Mar  9 10:06:57 2009 -0500

dinput: Move joystick Polling and Device State to the generic part.

---

 dlls/dinput/joystick.c         |   42 +++++++++++++++++++++
 dlls/dinput/joystick_linux.c   |   78 ++++++++++-----------------------------
 dlls/dinput/joystick_private.h |   12 ++++++
 3 files changed, 74 insertions(+), 58 deletions(-)

diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c
index d1299cb..006e5be 100644
--- a/dlls/dinput/joystick.c
+++ b/dlls/dinput/joystick.c
@@ -345,3 +345,45 @@ HRESULT WINAPI JoystickWGenericImpl_GetDeviceInfo(
 
     return DI_OK;
 }
+
+HRESULT WINAPI JoystickAGenericImpl_Poll(LPDIRECTINPUTDEVICE8A iface)
+{
+    JoystickGenericImpl *This = (JoystickGenericImpl *)iface;
+
+    TRACE("(%p)\n",This);
+
+    if (!This->base.acquired) {
+        WARN("not acquired\n");
+        return DIERR_NOTACQUIRED;
+    }
+
+    This->joy_polldev(This);
+    return DI_OK;
+}
+
+/******************************************************************************
+  *     GetDeviceState : returns the "state" of the joystick.
+  *
+  */
+HRESULT WINAPI JoystickAGenericImpl_GetDeviceState(
+    LPDIRECTINPUTDEVICE8A iface,
+    DWORD len,
+    LPVOID ptr)
+{
+    JoystickGenericImpl *This = (JoystickGenericImpl *)iface;
+
+    TRACE("(%p,0x%08x,%p)\n", This, len, ptr);
+
+    if (!This->base.acquired) {
+        WARN("not acquired\n");
+        return DIERR_NOTACQUIRED;
+    }
+
+    /* update joystick state */
+    This->joy_polldev(This);
+
+    /* convert and copy data to user supplied buffer */
+    fill_DataFormat(ptr, len, &This->js, &This->base.data_format);
+
+    return DI_OK;
+}
diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c
index ad9ad02..2fb0ff4 100644
--- a/dlls/dinput/joystick_linux.c
+++ b/dlls/dinput/joystick_linux.c
@@ -87,7 +87,6 @@ struct JoystickImpl
 
 	/* joystick private */
 	int				joyfd;
-	DIJOYSTATE2			js;		/* wine data */
 	LONG				deadzone;
 	int				*axis_map;
 	int				axes;
@@ -105,6 +104,8 @@ static const GUID DInput_Wine_Joystick_GUID = { /* 9e573ed9-7734-11d2-8d4a-23903
 static INT joystick_devices_count = -1;
 static LPSTR joystick_devices[MAX_JOYSTICKS];
 
+static void joy_polldev(JoystickGenericImpl *This);
+
 static INT find_joystick_devices(void)
 {
     INT i;
@@ -379,6 +380,7 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
     }
 
     newDevice->generic.guidProduct = DInput_Wine_Joystick_GUID;
+    newDevice->generic.joy_polldev = joy_polldev;
 
     /* get the device name */
 #if defined(JSIOCGNAME)
@@ -649,9 +651,11 @@ static HRESULT WINAPI JoystickAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
     return DI_NOEFFECT;
 }
 
-static void joy_polldev(JoystickImpl *This) {
+static void joy_polldev(JoystickGenericImpl *This_in) {
     struct pollfd plfd;
     struct	js_event jse;
+    JoystickImpl *This = (JoystickImpl*) This_in;
+
     TRACE("(%p)\n", This);
 
     if (This->joyfd==-1) {
@@ -678,7 +682,7 @@ static void joy_polldev(JoystickImpl *This) {
             if (jse.number >= This->generic.devcaps.dwButtons) return;
 
             inst_id = DIDFT_MAKEINSTANCE(jse.number) | DIDFT_PSHBUTTON;
-            This->js.rgbButtons[jse.number] = value = jse.value ? 0x80 : 0x00;
+            This->generic.js.rgbButtons[jse.number] = value = jse.value ? 0x80 : 0x00;
         }
         else if (jse.type & JS_EVENT_AXIS)
         {
@@ -691,14 +695,14 @@ static void joy_polldev(JoystickImpl *This) {
             TRACE("changing axis %d => %d\n", jse.number, number);
             switch (number)
             {
-                case 0: This->js.lX  = value; break;
-                case 1: This->js.lY  = value; break;
-                case 2: This->js.lZ  = value; break;
-                case 3: This->js.lRx = value; break;
-                case 4: This->js.lRy = value; break;
-                case 5: This->js.lRz = value; break;
-                case 6: This->js.rglSlider[0] = value; break;
-                case 7: This->js.rglSlider[1] = value; break;
+                case 0: This->generic.js.lX  = value; break;
+                case 1: This->generic.js.lY  = value; break;
+                case 2: This->generic.js.lZ  = value; break;
+                case 3: This->generic.js.lRx = value; break;
+                case 4: This->generic.js.lRy = value; break;
+                case 5: This->generic.js.lRz = value; break;
+                case 6: This->generic.js.rglSlider[0] = value; break;
+                case 7: This->generic.js.rglSlider[1] = value; break;
                 case 8: case 9: case 10: case 11:
                 {
                     int idx = number - 8;
@@ -708,7 +712,7 @@ static void joy_polldev(JoystickImpl *This) {
                     else
                         This->povs[idx].x = jse.value;
 
-                    This->js.rgdwPOV[idx] = value = joystick_map_pov(&This->povs[idx]);
+                    This->generic.js.rgdwPOV[idx] = value = joystick_map_pov(&This->povs[idx]);
                     break;
                 }
                 default:
@@ -722,48 +726,6 @@ static void joy_polldev(JoystickImpl *This) {
     }
 }
 
-/******************************************************************************
-  *     GetDeviceState : returns the "state" of the joystick.
-  *
-  */
-static HRESULT WINAPI JoystickAImpl_GetDeviceState(
-    LPDIRECTINPUTDEVICE8A iface,
-    DWORD len,
-    LPVOID ptr)
-{
-    JoystickImpl *This = (JoystickImpl *)iface;
-
-    TRACE("(%p,0x%08x,%p)\n", This, len, ptr);
-
-    if (!This->generic.base.acquired) {
-        WARN("not acquired\n");
-        return DIERR_NOTACQUIRED;
-    }
-
-    /* update joystick state */
-    joy_polldev(This);
-
-    /* convert and copy data to user supplied buffer */
-    fill_DataFormat(ptr, len, &This->js, &This->generic.base.data_format);
-
-    return DI_OK;
-}
-
-static HRESULT WINAPI JoystickAImpl_Poll(LPDIRECTINPUTDEVICE8A iface)
-{
-    JoystickImpl *This = (JoystickImpl *)iface;
-
-    TRACE("(%p)\n",This);
-
-    if (!This->generic.base.acquired) {
-        WARN("not acquired\n");
-        return DIERR_NOTACQUIRED;
-    }
-
-    joy_polldev(This);
-    return DI_OK;
-}
-
 static const IDirectInputDevice8AVtbl JoystickAvt =
 {
 	IDirectInputDevice2AImpl_QueryInterface,
@@ -775,7 +737,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
 	JoystickAGenericImpl_SetProperty,
 	JoystickAImpl_Acquire,
 	JoystickAImpl_Unacquire,
-	JoystickAImpl_GetDeviceState,
+	JoystickAGenericImpl_GetDeviceState,
 	IDirectInputDevice2AImpl_GetDeviceData,
 	IDirectInputDevice2AImpl_SetDataFormat,
 	IDirectInputDevice2AImpl_SetEventNotification,
@@ -791,7 +753,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
 	IDirectInputDevice2AImpl_SendForceFeedbackCommand,
 	IDirectInputDevice2AImpl_EnumCreatedEffectObjects,
 	IDirectInputDevice2AImpl_Escape,
-	JoystickAImpl_Poll,
+	JoystickAGenericImpl_Poll,
 	IDirectInputDevice2AImpl_SendDeviceData,
 	IDirectInputDevice7AImpl_EnumEffectsInFile,
 	IDirectInputDevice7AImpl_WriteEffectToFile,
@@ -817,7 +779,7 @@ static const IDirectInputDevice8WVtbl JoystickWvt =
 	XCAST(SetProperty)JoystickAGenericImpl_SetProperty,
 	XCAST(Acquire)JoystickAImpl_Acquire,
 	XCAST(Unacquire)JoystickAImpl_Unacquire,
-	XCAST(GetDeviceState)JoystickAImpl_GetDeviceState,
+	XCAST(GetDeviceState)JoystickAGenericImpl_GetDeviceState,
 	XCAST(GetDeviceData)IDirectInputDevice2AImpl_GetDeviceData,
 	XCAST(SetDataFormat)IDirectInputDevice2AImpl_SetDataFormat,
 	XCAST(SetEventNotification)IDirectInputDevice2AImpl_SetEventNotification,
@@ -833,7 +795,7 @@ static const IDirectInputDevice8WVtbl JoystickWvt =
 	XCAST(SendForceFeedbackCommand)IDirectInputDevice2AImpl_SendForceFeedbackCommand,
 	XCAST(EnumCreatedEffectObjects)IDirectInputDevice2AImpl_EnumCreatedEffectObjects,
 	XCAST(Escape)IDirectInputDevice2AImpl_Escape,
-	XCAST(Poll)JoystickAImpl_Poll,
+	XCAST(Poll)JoystickAGenericImpl_Poll,
 	XCAST(SendDeviceData)IDirectInputDevice2AImpl_SendDeviceData,
         IDirectInputDevice7WImpl_EnumEffectsInFile,
         IDirectInputDevice7WImpl_WriteEffectToFile,
diff --git a/dlls/dinput/joystick_private.h b/dlls/dinput/joystick_private.h
index 36f5b47..3d87c7c 100644
--- a/dlls/dinput/joystick_private.h
+++ b/dlls/dinput/joystick_private.h
@@ -29,14 +29,21 @@
 #include "dinput_private.h"
 #include "device_private.h"
 
+struct JoystickGenericImpl;
+
+typedef void joy_polldev_handler(struct JoystickGenericImpl *This);
+
 typedef struct JoystickGenericImpl
 {
     struct IDirectInputDevice2AImpl base;
 
     ObjProps    *props;
     DIDEVCAPS   devcaps;
+    DIJOYSTATE2 js;     /* wine data */
     GUID        guidProduct;
     char        *name;
+
+    joy_polldev_handler *joy_polldev;
 } JoystickGenericImpl;
 
 
@@ -63,4 +70,9 @@ HRESULT WINAPI JoystickAGenericImpl_GetDeviceInfo( LPDIRECTINPUTDEVICE8A iface,
 HRESULT WINAPI JoystickWGenericImpl_GetDeviceInfo( LPDIRECTINPUTDEVICE8W iface,
     LPDIDEVICEINSTANCEW pdidi);
 
+HRESULT WINAPI JoystickAGenericImpl_Poll(LPDIRECTINPUTDEVICE8A iface);
+
+HRESULT WINAPI JoystickAGenericImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface,
+    DWORD len, LPVOID ptr);
+
 #endif /* __WINE_DLLS_DINPUT_JOYSTICK_PRIVATE_H */




More information about the wine-cvs mailing list