[try2] [3/3] winejoystick.drv: Implement POV support

Vincent Pelletier plr.vincent at gmail.com
Mon Jan 19 13:35:27 CST 2009


Le Sunday 18 January 2009 16:57:55, vous avez écrit :
> On Sun, Jan 18, 2009 at 5:01 AM, Austin English <austinenglish at gmail.com> 
wrote:
> > Minor, but shouldn't that be 'case 17: /* Hat 0 Y */'

While I'm at resending this serie of patches, fix that in the way.

-- 
Vincent Pelletier
-------------- next part --------------
From 3af419fd7270493bb68dd88803f9b3af201c24c8 Mon Sep 17 00:00:00 2001
From: Vincent Pelletier <vincent at x2.(none)>
Date: Sat, 17 Jan 2009 12:54:07 +0100
Subject: Implement POV support.

---
 dlls/winejoystick.drv/joystick.c |   37 +++++++++++++++++++++++++++++++++++--
 1 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/dlls/winejoystick.drv/joystick.c b/dlls/winejoystick.drv/joystick.c
index fff81e2..2967a50 100644
--- a/dlls/winejoystick.drv/joystick.c
+++ b/dlls/winejoystick.drv/joystick.c
@@ -100,6 +100,8 @@ typedef struct tagWINE_JSTCK {
     int         r;
     int         u;
     int         v;
+    int         pov_x;
+    int         pov_y;
     int         buttons;
     char        axesMap[ABS_MAX + 1];
 } WINE_JSTCK;
@@ -278,11 +280,14 @@ static const WCHAR ini[] = {'W','i','n','e',' ','J','o','y','s','t','i','c','k',
 		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(%hhu). Skipped.\n", jstck->axesMap[i], i);
 	    }
-	    /* FIXME: don't know how to detect for
-	       JOYCAPS_HASPOV, JOYCAPS_POV4DIR, JOYCAPS_POVCTS */
 	}
     }
 #else
@@ -359,6 +364,12 @@ static LRESULT JSTCK_GetPosEx(DWORD_PTR dwDevID, LPJOYINFOEX lpInfo)
 	    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);
 	    }
@@ -413,6 +424,28 @@ static LRESULT JSTCK_GetPosEx(DWORD_PTR dwDevID, LPJOYINFOEX lpInfo)
 # 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 */
+    }
 
 #else
     dev_stat = read(dev, &js, sizeof(js));
-- 
1.5.6.5



More information about the wine-patches mailing list