dinput: Implement HID joystick DIPROP_(DEADZONE|SATURATION|GRANULARITY).
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
9646873d63
commit
5eb65418eb
|
@ -137,6 +137,12 @@ static inline const char *debugstr_hid_caps( struct hid_caps *caps )
|
||||||
return "(unknown type)";
|
return "(unknown type)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct extra_caps
|
||||||
|
{
|
||||||
|
LONG deadzone;
|
||||||
|
LONG saturation;
|
||||||
|
};
|
||||||
|
|
||||||
#define DEVICE_STATE_MAX_SIZE 1024
|
#define DEVICE_STATE_MAX_SIZE 1024
|
||||||
|
|
||||||
struct hid_joystick
|
struct hid_joystick
|
||||||
|
@ -156,6 +162,7 @@ struct hid_joystick
|
||||||
HIDP_LINK_COLLECTION_NODE *collection_nodes;
|
HIDP_LINK_COLLECTION_NODE *collection_nodes;
|
||||||
HIDP_BUTTON_CAPS *input_button_caps;
|
HIDP_BUTTON_CAPS *input_button_caps;
|
||||||
HIDP_VALUE_CAPS *input_value_caps;
|
HIDP_VALUE_CAPS *input_value_caps;
|
||||||
|
struct extra_caps *input_extra_caps;
|
||||||
|
|
||||||
char *input_report_buf;
|
char *input_report_buf;
|
||||||
USAGE_AND_PAGE *usages_buf;
|
USAGE_AND_PAGE *usages_buf;
|
||||||
|
@ -424,6 +431,7 @@ static ULONG WINAPI hid_joystick_Release( IDirectInputDevice8W *iface )
|
||||||
{
|
{
|
||||||
HeapFree( GetProcessHeap(), 0, tmp.usages_buf );
|
HeapFree( GetProcessHeap(), 0, tmp.usages_buf );
|
||||||
HeapFree( GetProcessHeap(), 0, tmp.input_report_buf );
|
HeapFree( GetProcessHeap(), 0, tmp.input_report_buf );
|
||||||
|
HeapFree( GetProcessHeap(), 0, tmp.input_extra_caps );
|
||||||
HeapFree( GetProcessHeap(), 0, tmp.input_value_caps );
|
HeapFree( GetProcessHeap(), 0, tmp.input_value_caps );
|
||||||
HeapFree( GetProcessHeap(), 0, tmp.input_button_caps );
|
HeapFree( GetProcessHeap(), 0, tmp.input_button_caps );
|
||||||
HeapFree( GetProcessHeap(), 0, tmp.collection_nodes );
|
HeapFree( GetProcessHeap(), 0, tmp.collection_nodes );
|
||||||
|
@ -519,6 +527,34 @@ static BOOL get_property_prop_range( struct hid_joystick *impl, struct hid_caps
|
||||||
return DIENUM_STOP;
|
return DIENUM_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL get_property_prop_deadzone( struct hid_joystick *impl, struct hid_caps *caps,
|
||||||
|
DIDEVICEOBJECTINSTANCEW *instance, void *data )
|
||||||
|
{
|
||||||
|
struct extra_caps *extra;
|
||||||
|
DIPROPDWORD *deadzone = data;
|
||||||
|
extra = impl->input_extra_caps + (caps->value - impl->input_value_caps);
|
||||||
|
deadzone->dwData = extra->deadzone;
|
||||||
|
return DIENUM_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL get_property_prop_saturation( struct hid_joystick *impl, struct hid_caps *caps,
|
||||||
|
DIDEVICEOBJECTINSTANCEW *instance, void *data )
|
||||||
|
{
|
||||||
|
struct extra_caps *extra;
|
||||||
|
DIPROPDWORD *saturation = data;
|
||||||
|
extra = impl->input_extra_caps + (caps->value - impl->input_value_caps);
|
||||||
|
saturation->dwData = extra->saturation;
|
||||||
|
return DIENUM_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL get_property_prop_granularity( struct hid_joystick *impl, struct hid_caps *caps,
|
||||||
|
DIDEVICEOBJECTINSTANCEW *instance, void *data )
|
||||||
|
{
|
||||||
|
DIPROPDWORD *granularity = data;
|
||||||
|
granularity->dwData = 1;
|
||||||
|
return DIENUM_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI hid_joystick_GetProperty( IDirectInputDevice8W *iface, const GUID *guid,
|
static HRESULT WINAPI hid_joystick_GetProperty( IDirectInputDevice8W *iface, const GUID *guid,
|
||||||
DIPROPHEADER *header )
|
DIPROPHEADER *header )
|
||||||
{
|
{
|
||||||
|
@ -538,6 +574,24 @@ static HRESULT WINAPI hid_joystick_GetProperty( IDirectInputDevice8W *iface, con
|
||||||
if (enum_objects( impl, header, DIDFT_AXIS, get_property_prop_range, header ) == DIENUM_STOP)
|
if (enum_objects( impl, header, DIDFT_AXIS, get_property_prop_range, header ) == DIENUM_STOP)
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
return DIERR_NOTFOUND;
|
return DIERR_NOTFOUND;
|
||||||
|
case (DWORD_PTR)DIPROP_DEADZONE:
|
||||||
|
if (header->dwSize != sizeof(DIPROPDWORD)) return DIERR_INVALIDPARAM;
|
||||||
|
if (header->dwHow == DIPH_DEVICE) return DIERR_UNSUPPORTED;
|
||||||
|
if (enum_objects( impl, header, DIDFT_AXIS, get_property_prop_deadzone, header ) == DIENUM_STOP)
|
||||||
|
return DI_OK;
|
||||||
|
return DIERR_NOTFOUND;
|
||||||
|
case (DWORD_PTR)DIPROP_SATURATION:
|
||||||
|
if (header->dwSize != sizeof(DIPROPDWORD)) return DIERR_INVALIDPARAM;
|
||||||
|
if (header->dwHow == DIPH_DEVICE) return DIERR_UNSUPPORTED;
|
||||||
|
if (enum_objects( impl, header, DIDFT_AXIS, get_property_prop_saturation, header ) == DIENUM_STOP)
|
||||||
|
return DI_OK;
|
||||||
|
return DIERR_NOTFOUND;
|
||||||
|
case (DWORD_PTR)DIPROP_GRANULARITY:
|
||||||
|
if (header->dwSize != sizeof(DIPROPDWORD)) return DIERR_INVALIDPARAM;
|
||||||
|
if (header->dwHow == DIPH_DEVICE) return DIERR_UNSUPPORTED;
|
||||||
|
if (enum_objects( impl, header, DIDFT_AXIS, get_property_prop_granularity, header ) == DIENUM_STOP)
|
||||||
|
return DI_OK;
|
||||||
|
return DIERR_NOTFOUND;
|
||||||
case (DWORD_PTR)DIPROP_PRODUCTNAME:
|
case (DWORD_PTR)DIPROP_PRODUCTNAME:
|
||||||
{
|
{
|
||||||
DIPROPSTRING *value = (DIPROPSTRING *)header;
|
DIPROPSTRING *value = (DIPROPSTRING *)header;
|
||||||
|
@ -606,6 +660,26 @@ static BOOL set_property_prop_range( struct hid_joystick *impl, struct hid_caps
|
||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL set_property_prop_deadzone( struct hid_joystick *impl, struct hid_caps *caps,
|
||||||
|
DIDEVICEOBJECTINSTANCEW *instance, void *data )
|
||||||
|
{
|
||||||
|
struct extra_caps *extra;
|
||||||
|
DIPROPDWORD *deadzone = data;
|
||||||
|
extra = impl->input_extra_caps + (caps->value - impl->input_value_caps);
|
||||||
|
extra->deadzone = deadzone->dwData;
|
||||||
|
return DIENUM_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL set_property_prop_saturation( struct hid_joystick *impl, struct hid_caps *caps,
|
||||||
|
DIDEVICEOBJECTINSTANCEW *instance, void *data )
|
||||||
|
{
|
||||||
|
struct extra_caps *extra;
|
||||||
|
DIPROPDWORD *saturation = data;
|
||||||
|
extra = impl->input_extra_caps + (caps->value - impl->input_value_caps);
|
||||||
|
extra->saturation = saturation->dwData;
|
||||||
|
return DIENUM_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI hid_joystick_SetProperty( IDirectInputDevice8W *iface, const GUID *guid,
|
static HRESULT WINAPI hid_joystick_SetProperty( IDirectInputDevice8W *iface, const GUID *guid,
|
||||||
const DIPROPHEADER *header )
|
const DIPROPHEADER *header )
|
||||||
{
|
{
|
||||||
|
@ -627,6 +701,22 @@ static HRESULT WINAPI hid_joystick_SetProperty( IDirectInputDevice8W *iface, con
|
||||||
enum_objects( impl, header, DIDFT_AXIS, set_property_prop_range, (void *)header );
|
enum_objects( impl, header, DIDFT_AXIS, set_property_prop_range, (void *)header );
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
case (DWORD_PTR)DIPROP_DEADZONE:
|
||||||
|
{
|
||||||
|
DIPROPDWORD *value = (DIPROPDWORD *)header;
|
||||||
|
if (header->dwSize != sizeof(DIPROPDWORD)) return DIERR_INVALIDPARAM;
|
||||||
|
if (value->dwData > 10000) return DIERR_INVALIDPARAM;
|
||||||
|
enum_objects( impl, header, DIDFT_AXIS, set_property_prop_deadzone, (void *)header );
|
||||||
|
return DI_OK;
|
||||||
|
}
|
||||||
|
case (DWORD_PTR)DIPROP_SATURATION:
|
||||||
|
{
|
||||||
|
DIPROPDWORD *value = (DIPROPDWORD *)header;
|
||||||
|
if (header->dwSize != sizeof(DIPROPDWORD)) return DIERR_INVALIDPARAM;
|
||||||
|
if (value->dwData > 10000) return DIERR_INVALIDPARAM;
|
||||||
|
enum_objects( impl, header, DIDFT_AXIS, set_property_prop_saturation, (void *)header );
|
||||||
|
return DI_OK;
|
||||||
|
}
|
||||||
case (DWORD_PTR)DIPROP_FFLOAD:
|
case (DWORD_PTR)DIPROP_FFLOAD:
|
||||||
case (DWORD_PTR)DIPROP_GRANULARITY:
|
case (DWORD_PTR)DIPROP_GRANULARITY:
|
||||||
case (DWORD_PTR)DIPROP_VIDPID:
|
case (DWORD_PTR)DIPROP_VIDPID:
|
||||||
|
@ -859,7 +949,7 @@ static LONG scale_value( ULONG value, const HIDP_VALUE_CAPS *caps, LONG min, LON
|
||||||
return min + MulDiv( tmp - caps->LogicalMin, max - min, caps->LogicalMax - caps->LogicalMin );
|
return min + MulDiv( tmp - caps->LogicalMin, max - min, caps->LogicalMax - caps->LogicalMin );
|
||||||
}
|
}
|
||||||
|
|
||||||
static LONG scale_axis_value( ULONG value, const HIDP_VALUE_CAPS *caps )
|
static LONG scale_axis_value( ULONG value, const HIDP_VALUE_CAPS *caps, struct extra_caps *extra )
|
||||||
{
|
{
|
||||||
LONG tmp = sign_extend( value, caps ), log_ctr, log_min, log_max, phy_ctr, phy_min, phy_max;
|
LONG tmp = sign_extend( value, caps ), log_ctr, log_min, log_max, phy_ctr, phy_min, phy_max;
|
||||||
ULONG bit_max = (1 << caps->BitSize) - 1;
|
ULONG bit_max = (1 << caps->BitSize) - 1;
|
||||||
|
@ -879,14 +969,14 @@ static LONG scale_axis_value( ULONG value, const HIDP_VALUE_CAPS *caps )
|
||||||
tmp -= log_ctr;
|
tmp -= log_ctr;
|
||||||
if (tmp <= 0)
|
if (tmp <= 0)
|
||||||
{
|
{
|
||||||
log_max = 0;
|
log_max = MulDiv( log_min - log_ctr, extra->deadzone, 10000 );
|
||||||
log_min -= log_ctr;
|
log_min = MulDiv( log_min - log_ctr, extra->saturation, 10000 );
|
||||||
phy_max = phy_ctr;
|
phy_max = phy_ctr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log_min = 0;
|
log_min = MulDiv( log_max - log_ctr, extra->deadzone, 10000 );
|
||||||
log_max -= log_ctr;
|
log_max = MulDiv( log_max - log_ctr, extra->saturation, 10000 );
|
||||||
phy_min = phy_ctr;
|
phy_min = phy_ctr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,14 +993,16 @@ static BOOL read_device_state_value( struct hid_joystick *impl, struct hid_caps
|
||||||
struct parse_device_state_params *params = data;
|
struct parse_device_state_params *params = data;
|
||||||
char *report_buf = impl->input_report_buf;
|
char *report_buf = impl->input_report_buf;
|
||||||
HIDP_VALUE_CAPS *value_caps = caps->value;
|
HIDP_VALUE_CAPS *value_caps = caps->value;
|
||||||
|
struct extra_caps *extra;
|
||||||
LONG old_value, value;
|
LONG old_value, value;
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
|
|
||||||
|
extra = impl->input_extra_caps + (value_caps - impl->input_value_caps);
|
||||||
status = HidP_GetUsageValue( HidP_Input, instance->wUsagePage, 0, instance->wUsage,
|
status = HidP_GetUsageValue( HidP_Input, instance->wUsagePage, 0, instance->wUsage,
|
||||||
&logical_value, impl->preparsed, report_buf, report_len );
|
&logical_value, impl->preparsed, report_buf, report_len );
|
||||||
if (status != HIDP_STATUS_SUCCESS) WARN( "HidP_GetUsageValue %04x:%04x returned %#x\n",
|
if (status != HIDP_STATUS_SUCCESS) WARN( "HidP_GetUsageValue %04x:%04x returned %#x\n",
|
||||||
instance->wUsagePage, instance->wUsage, status );
|
instance->wUsagePage, instance->wUsage, status );
|
||||||
if (instance->dwType & DIDFT_AXIS) value = scale_axis_value( logical_value, value_caps );
|
if (instance->dwType & DIDFT_AXIS) value = scale_axis_value( logical_value, value_caps, extra );
|
||||||
else value = scale_value( logical_value, value_caps, value_caps->PhysicalMin, value_caps->PhysicalMax );
|
else value = scale_value( logical_value, value_caps, value_caps->PhysicalMin, value_caps->PhysicalMax );
|
||||||
|
|
||||||
old_value = *(LONG *)(params->old_state + instance->dwOfs);
|
old_value = *(LONG *)(params->old_state + instance->dwOfs);
|
||||||
|
@ -1305,9 +1397,19 @@ static HRESULT hid_joystick_create_device( IDirectInputImpl *dinput, const GUID
|
||||||
.dwHow = DIPH_DEVICE,
|
.dwHow = DIPH_DEVICE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
DIPROPDWORD saturation =
|
||||||
|
{
|
||||||
|
.diph =
|
||||||
|
{
|
||||||
|
.dwSize = sizeof(DIPROPDWORD),
|
||||||
|
.dwHeaderSize = sizeof(DIPROPHEADER),
|
||||||
|
.dwHow = DIPH_DEVICE,
|
||||||
|
},
|
||||||
|
};
|
||||||
HIDD_ATTRIBUTES attrs = {.Size = sizeof(attrs)};
|
HIDD_ATTRIBUTES attrs = {.Size = sizeof(attrs)};
|
||||||
HIDP_LINK_COLLECTION_NODE *nodes;
|
HIDP_LINK_COLLECTION_NODE *nodes;
|
||||||
struct hid_joystick *impl = NULL;
|
struct hid_joystick *impl = NULL;
|
||||||
|
struct extra_caps *extra;
|
||||||
DIDATAFORMAT *format = NULL;
|
DIDATAFORMAT *format = NULL;
|
||||||
HIDP_BUTTON_CAPS *buttons;
|
HIDP_BUTTON_CAPS *buttons;
|
||||||
HIDP_VALUE_CAPS *values;
|
HIDP_VALUE_CAPS *values;
|
||||||
|
@ -1356,6 +1458,9 @@ static HRESULT hid_joystick_create_device( IDirectInputImpl *dinput, const GUID
|
||||||
size = impl->caps.NumberInputValueCaps * sizeof(HIDP_VALUE_CAPS);
|
size = impl->caps.NumberInputValueCaps * sizeof(HIDP_VALUE_CAPS);
|
||||||
if (!(values = HeapAlloc( GetProcessHeap(), 0, size ))) goto failed;
|
if (!(values = HeapAlloc( GetProcessHeap(), 0, size ))) goto failed;
|
||||||
impl->input_value_caps = values;
|
impl->input_value_caps = values;
|
||||||
|
size = impl->caps.NumberInputValueCaps * sizeof(struct extra_caps);
|
||||||
|
if (!(extra = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, size ))) goto failed;
|
||||||
|
impl->input_extra_caps = extra;
|
||||||
|
|
||||||
size = impl->caps.InputReportByteLength;
|
size = impl->caps.InputReportByteLength;
|
||||||
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, size ))) goto failed;
|
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, size ))) goto failed;
|
||||||
|
@ -1400,6 +1505,8 @@ static HRESULT hid_joystick_create_device( IDirectInputImpl *dinput, const GUID
|
||||||
enum_objects( impl, &range.diph, DIDFT_AXIS, set_property_prop_range, &range );
|
enum_objects( impl, &range.diph, DIDFT_AXIS, set_property_prop_range, &range );
|
||||||
range.lMax = 36000;
|
range.lMax = 36000;
|
||||||
enum_objects( impl, &range.diph, DIDFT_POV, set_property_prop_range, &range );
|
enum_objects( impl, &range.diph, DIDFT_POV, set_property_prop_range, &range );
|
||||||
|
saturation.dwData = 10000;
|
||||||
|
enum_objects( impl, &range.diph, DIDFT_AXIS, set_property_prop_saturation, &saturation );
|
||||||
|
|
||||||
*out = &impl->base.IDirectInputDevice8W_iface;
|
*out = &impl->base.IDirectInputDevice8W_iface;
|
||||||
return DI_OK;
|
return DI_OK;
|
||||||
|
|
|
@ -3867,16 +3867,13 @@ static void test_simple_joystick(void)
|
||||||
todo_wine
|
todo_wine
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_AUTOCENTER returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_AUTOCENTER returned %#x\n", hr );
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_FFLOAD, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_FFLOAD, &prop_dword.diph );
|
||||||
todo_wine
|
todo_wine
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_FFLOAD returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_FFLOAD returned %#x\n", hr );
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_GRANULARITY, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_GRANULARITY, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_GRANULARITY returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_GRANULARITY returned %#x\n", hr );
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_RANGE, &prop_range.diph );
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_RANGE returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_RANGE returned %#x\n", hr );
|
||||||
|
@ -3885,21 +3882,15 @@ static void test_simple_joystick(void)
|
||||||
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC );
|
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
todo_wine
|
|
||||||
ok( prop_dword.dwData == 0, "got %u expected %u\n", prop_dword.dwData, 0 );
|
ok( prop_dword.dwData == 0, "got %u expected %u\n", prop_dword.dwData, 0 );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_GRANULARITY, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_GRANULARITY, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_GRANULARITY returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_GRANULARITY returned %#x\n", hr );
|
||||||
todo_wine
|
|
||||||
ok( prop_dword.dwData == 1, "got %u expected %u\n", prop_dword.dwData, 1 );
|
ok( prop_dword.dwData == 1, "got %u expected %u\n", prop_dword.dwData, 1 );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
todo_wine
|
|
||||||
ok( prop_dword.dwData == 10000, "got %u expected %u\n", prop_dword.dwData, 10000 );
|
ok( prop_dword.dwData == 10000, "got %u expected %u\n", prop_dword.dwData, 10000 );
|
||||||
|
|
||||||
prop_range.diph.dwHow = DIPH_BYUSAGE;
|
prop_range.diph.dwHow = DIPH_BYUSAGE;
|
||||||
|
@ -4368,67 +4359,51 @@ static void test_simple_joystick(void)
|
||||||
prop_dword.diph.dwObj = 0;
|
prop_dword.diph.dwObj = 0;
|
||||||
prop_dword.dwData = 10001;
|
prop_dword.dwData = 10001;
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
prop_dword.dwData = 1000;
|
prop_dword.dwData = 1000;
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
prop_dword.dwData = 6000;
|
prop_dword.dwData = 6000;
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
|
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DIERR_UNSUPPORTED, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
|
|
||||||
prop_dword.diph.dwHow = DIPH_BYUSAGE;
|
prop_dword.diph.dwHow = DIPH_BYUSAGE;
|
||||||
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC );
|
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC );
|
||||||
prop_dword.dwData = 2000;
|
prop_dword.dwData = 2000;
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
ok( prop_dword.dwData == 2000, "got %u expected %u\n", prop_dword.dwData, 2000 );
|
ok( prop_dword.dwData == 2000, "got %u expected %u\n", prop_dword.dwData, 2000 );
|
||||||
prop_dword.dwData = 7000;
|
prop_dword.dwData = 7000;
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
|
|
||||||
prop_dword.diph.dwHow = DIPH_BYUSAGE;
|
prop_dword.diph.dwHow = DIPH_BYUSAGE;
|
||||||
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC );
|
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_X, HID_USAGE_PAGE_GENERIC );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
todo_wine
|
|
||||||
ok( prop_dword.dwData == 2000, "got %u expected %u\n", prop_dword.dwData, 2000 );
|
ok( prop_dword.dwData == 2000, "got %u expected %u\n", prop_dword.dwData, 2000 );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
todo_wine
|
|
||||||
ok( prop_dword.dwData == 7000, "got %u expected %u\n", prop_dword.dwData, 7000 );
|
ok( prop_dword.dwData == 7000, "got %u expected %u\n", prop_dword.dwData, 7000 );
|
||||||
|
|
||||||
prop_dword.diph.dwHow = DIPH_BYUSAGE;
|
prop_dword.diph.dwHow = DIPH_BYUSAGE;
|
||||||
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_Y, HID_USAGE_PAGE_GENERIC );
|
prop_dword.diph.dwObj = MAKELONG( HID_USAGE_GENERIC_Y, HID_USAGE_PAGE_GENERIC );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
todo_wine
|
|
||||||
ok( prop_dword.dwData == 1000, "got %u expected %u\n", prop_dword.dwData, 1000 );
|
ok( prop_dword.dwData == 1000, "got %u expected %u\n", prop_dword.dwData, 1000 );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_GetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
todo_wine
|
|
||||||
ok( prop_dword.dwData == 6000, "got %u expected %u\n", prop_dword.dwData, 6000 );
|
ok( prop_dword.dwData == 6000, "got %u expected %u\n", prop_dword.dwData, 6000 );
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(injected_input); ++i)
|
for (i = 0; i < ARRAY_SIZE(injected_input); ++i)
|
||||||
|
@ -4439,9 +4414,7 @@ static void test_simple_joystick(void)
|
||||||
if (broken( state.lX == -10750 )) win_skip( "Ignoring 32-bit rounding\n" );
|
if (broken( state.lX == -10750 )) win_skip( "Ignoring 32-bit rounding\n" );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
todo_wine_if( i == 3 || i == 4 )
|
|
||||||
check_member( state, expect_state_abs[i], "%d", lX );
|
check_member( state, expect_state_abs[i], "%d", lX );
|
||||||
todo_wine_if( i == 3 || i == 4 )
|
|
||||||
check_member( state, expect_state_abs[i], "%d", lY );
|
check_member( state, expect_state_abs[i], "%d", lY );
|
||||||
}
|
}
|
||||||
check_member( state, expect_state_abs[i], "%d", lZ );
|
check_member( state, expect_state_abs[i], "%d", lZ );
|
||||||
|
@ -4465,7 +4438,6 @@ static void test_simple_joystick(void)
|
||||||
ok( hr == DI_OK, "IDirectInputDevice8_GetDeviceState returned: %#x\n", hr );
|
ok( hr == DI_OK, "IDirectInputDevice8_GetDeviceState returned: %#x\n", hr );
|
||||||
winetest_push_context( "state[%d]", i );
|
winetest_push_context( "state[%d]", i );
|
||||||
check_member( state, expect_state_abs[i], "%d", lX );
|
check_member( state, expect_state_abs[i], "%d", lX );
|
||||||
todo_wine
|
|
||||||
check_member( state, expect_state_abs[i], "%d", lY );
|
check_member( state, expect_state_abs[i], "%d", lY );
|
||||||
check_member( state, expect_state_abs[i], "%d", lZ );
|
check_member( state, expect_state_abs[i], "%d", lZ );
|
||||||
check_member( state, expect_state_abs[i], "%d", lRx );
|
check_member( state, expect_state_abs[i], "%d", lRx );
|
||||||
|
@ -4547,11 +4519,9 @@ static void test_simple_joystick(void)
|
||||||
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_CALIBRATION returned %#x\n", hr );
|
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_CALIBRATION returned %#x\n", hr );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_DEADZONE, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_DEADZONE returned %#x\n", hr );
|
||||||
prop_dword.dwData = 0xdeadbeef;
|
prop_dword.dwData = 0xdeadbeef;
|
||||||
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
hr = IDirectInputDevice8_SetProperty( device, DIPROP_SATURATION, &prop_dword.diph );
|
||||||
todo_wine
|
|
||||||
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_SetProperty DIPROP_SATURATION returned %#x\n", hr );
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(injected_input); ++i)
|
for (i = 0; i < ARRAY_SIZE(injected_input); ++i)
|
||||||
|
|
Loading…
Reference in New Issue