dinput: Get default axes configuration from the device for joydev.

This commit is contained in:
Vitaliy Margolen 2009-08-15 11:59:05 -06:00 committed by Alexandre Julliard
parent 9a73798af8
commit 0932f4a113
1 changed files with 28 additions and 1 deletions

View File

@ -79,6 +79,9 @@ struct JoyDev
{
char device[MAX_PATH];
char name[MAX_PATH];
BYTE dev_axes_map[ABS_MAX + 1];
int have_axes_map;
};
typedef struct JoystickImpl JoystickImpl;
@ -133,6 +136,29 @@ static INT find_joystick_devices(void)
WARN("ioctl(%s,JSIOCGNAME) failed: %s\n", joydev.device, strerror(errno));
#endif
if (ioctl(fd, JSIOCGAXMAP, joydev.dev_axes_map) < 0)
{
WARN("ioctl(%s,JSIOCGNAME) failed: %s\n", joydev.device, strerror(errno));
joydev.have_axes_map = 0;
}
else
{
INT j;
joydev.have_axes_map = 1;
/* Remap to DI numbers */
for (j = 0; j < ABS_MAX; j++)
if (joydev.dev_axes_map[j] < 8)
/* Axis match 1-to-1 */
joydev.dev_axes_map[j] = j;
else if (joydev.dev_axes_map[j] == 16 ||
joydev.dev_axes_map[j] == 17)
/* POV axis */
joydev.dev_axes_map[j] = 8;
else
joydev.dev_axes_map[j] = -1;
}
close(fd);
if (!joystick_devices_count)
@ -296,7 +322,8 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
newDevice->generic.deadzone = 0;
/* do any user specified configuration */
hr = setup_dinput_options(&newDevice->generic, NULL);
hr = setup_dinput_options(&newDevice->generic, newDevice->joydev->have_axes_map ?
newDevice->joydev->dev_axes_map : NULL);
if (hr != DI_OK)
goto FAILED1;