Christoph Frick : dinput:
Simplify the code that finds the offset of the given linux event.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Nov 24 06:19:41 CST 2006
Module: wine
Branch: master
Commit: 53620bc77b50a87cec767e292b572302f47a6e3a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=53620bc77b50a87cec767e292b572302f47a6e3a
Author: Christoph Frick <frick at sc-networks.de>
Date: Fri Nov 24 09:19:57 2006 +0100
dinput: Simplify the code that finds the offset of the given linux event.
---
dlls/dinput/joystick_linuxinput.c | 88 ++++++++++++-------------------------
1 files changed, 29 insertions(+), 59 deletions(-)
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index 18588aa..66aa43e 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -154,7 +154,7 @@ static void fake_current_js_state(Joysti
static int find_property_offset(JoystickImpl *This, LPCDIPROPHEADER ph);
static DWORD map_pov(int event_value, int is_x);
static void find_joydevs(void);
-static int lxinput_to_djoy2_offset(int ie_type, int ie_code);
+static int lxinput_to_user_offset(JoystickImpl *This, int ie_type, int ie_code);
static int offset_to_object(JoystickImpl *This, int offset);
static void calculate_ids(LPDIDATAFORMAT df);
@@ -761,41 +761,42 @@ static int find_property_offset(Joystick
/* defines how the linux input system offset mappings into c_dfDIJoystick2 */
static int
-lxinput_to_djoy2_offset( int ie_type, int ie_code )
+lxinput_to_user_offset(JoystickImpl *This, int ie_type, int ie_code )
{
+ int offset = -1;
switch (ie_type) {
case EV_ABS:
switch (ie_code) {
- case ABS_X: return 0;
- case ABS_Y: return 1;
- case ABS_Z: return 2;
- case ABS_RX: return 3;
- case ABS_RY: return 4;
- case ABS_RZ: return 5;
- case ABS_THROTTLE: return 6;
- case ABS_RUDDER: return 7;
- case ABS_HAT0X:
- case ABS_HAT0Y: return 8;
- case ABS_HAT1X:
- case ABS_HAT1Y: return 9;
- case ABS_HAT2X:
- case ABS_HAT2Y: return 10;
- case ABS_HAT3X:
- case ABS_HAT3Y: return 11;
+ case ABS_X: offset = 0; break;
+ case ABS_Y: offset = 1; break;
+ case ABS_Z: offset = 2; break;
+ case ABS_RX: offset = 3; break;
+ case ABS_RY: offset = 4; break;
+ case ABS_RZ: offset = 5; break;
+ case ABS_THROTTLE: offset = 6; break;
+ case ABS_RUDDER: offset = 7; break;
+ case ABS_HAT0X: case ABS_HAT0Y: offset = 8; break;
+ case ABS_HAT1X: case ABS_HAT1Y: offset = 9; break;
+ case ABS_HAT2X: case ABS_HAT2Y: offset = 10; break;
+ case ABS_HAT3X: case ABS_HAT3Y: offset = 11; break;
+ /* XXX when adding new axes here also fix the offset for the buttons bellow */
default:
FIXME("Unhandled EV_ABS(0x%02X)\n", ie_code);
return -1;
}
+ break;
case EV_KEY:
- if (ie_code < 128) {
- return 12 + ie_code;
- } else {
+ if (ie_code >= 128) {
WARN("DX8 does not support more than 128 buttons\n");
+ return -1;
}
+ offset = 12 + ie_code; /* XXX */
+ break;
+ default:
+ FIXME("Unhandled type(0x%02X)\n", ie_type);
return -1;
}
- FIXME("Unhandled type(0x%02X)\n", ie_type);
- return -1;
+ return This->offsets[offset];
}
/* convert wine format offset to user format object index */
@@ -888,14 +889,7 @@ static void joy_polldev(JoystickImpl *Th
TRACE("(%p) %d -> %d\n", This, ie.code, btn);
if (btn&0x80) {
btn &= 0x7F;
- /* see if there is a mapping */
- offset = lxinput_to_djoy2_offset(ie.type, btn);
- if (offset==-1) {
- return;
- }
- /* and see if there is an offset in the df */
- offset = This->offsets[offset];
- if (offset==-1) {
+ if ((offset = lxinput_to_user_offset(This, ie.type, btn)) == -1) {
return;
}
This->js.rgbButtons[btn] = ie.value?0x80:0x00;
@@ -903,14 +897,7 @@ static void joy_polldev(JoystickImpl *Th
}
break;
case EV_ABS:
- /* see if there is a mapping */
- offset = lxinput_to_djoy2_offset(ie.type, ie.code);
- if (offset==-1) {
- return;
- }
- /* and see if there is an offset in the df */
- offset = This->offsets[offset];
- if (offset==-1) {
+ if ((offset = lxinput_to_user_offset(This, ie.type, ie.code)) == -1) {
return;
}
switch (ie.code) {
@@ -1289,8 +1276,6 @@ static HRESULT WINAPI JoystickAImpl_Enum
ddoi.guidType = GUID_RzAxis;
break;
case ABS_THROTTLE:
- ddoi.guidType = GUID_Slider;
- break;
case ABS_RUDDER:
ddoi.guidType = GUID_Slider;
break;
@@ -1304,12 +1289,7 @@ static HRESULT WINAPI JoystickAImpl_Enum
FIXME("unhandled abs axis 0x%02x, ignoring!\n",i);
continue;
}
- user_offset = lxinput_to_djoy2_offset(EV_ABS, i);
- if (user_offset == -1) {
- continue;
- }
- user_offset = This->offsets[user_offset];
- if (user_offset == -1) {
+ if ((user_offset = lxinput_to_user_offset(This, EV_ABS, i)) == -1) {
continue;
}
user_object = offset_to_object(This, user_offset);
@@ -1334,12 +1314,7 @@ static HRESULT WINAPI JoystickAImpl_Enum
ddoi.guidType = GUID_POV;
for (i=0; i<4; i++) {
if (test_bit(This->joydev->absbits,ABS_HAT0X+(i<<1)) && test_bit(This->joydev->absbits,ABS_HAT0Y+(i<<1))) {
- user_offset = lxinput_to_djoy2_offset(EV_ABS, ABS_HAT0X+i);
- if (user_offset == -1) {
- continue;
- }
- user_offset = This->offsets[user_offset];
- if (user_offset == -1) {
+ if ((user_offset = lxinput_to_user_offset(This, EV_ABS, ABS_HAT0X+i))== -1) {
continue;
}
user_object = offset_to_object(This, user_offset);
@@ -1364,12 +1339,7 @@ static HRESULT WINAPI JoystickAImpl_Enum
for (i = 0; i < KEY_MAX; i++) {
if (!test_bit(This->joydev->keybits,i)) continue;
- user_offset = lxinput_to_djoy2_offset(EV_KEY, btncount);
- if (user_offset == -1) {
- continue;
- }
- user_offset = This->offsets[user_offset];
- if (user_offset == -1) {
+ if ((user_offset = lxinput_to_user_offset(This, EV_KEY, btncount)) == -1) {
continue;
}
user_object = offset_to_object(This, user_offset);
More information about the wine-cvs
mailing list