From: Rémi Bernon rbernon@codeweavers.com
It causes a 30s delay with some devices, lets assume that it will later work without the delay. --- dlls/winebus.sys/bus_udev.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-)
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c index 65cabff09e4..3facaa0241e 100644 --- a/dlls/winebus.sys/bus_udev.c +++ b/dlls/winebus.sys/bus_udev.c @@ -549,7 +549,6 @@ static void set_abs_axis_value(struct unix_device *iface, int code, int value) static NTSTATUS build_report_descriptor(struct unix_device *iface, struct udev_device *dev, struct lnxev_info *info) { struct input_absinfo abs_info[ABS_CNT]; - struct ff_effect effect; USHORT count = 0; USAGE usages[16]; int i; @@ -599,21 +598,8 @@ static NTSTATUS build_report_descriptor(struct unix_device *iface, struct udev_d impl->haptic_effect_id = -1; for (i = 0; i < ARRAY_SIZE(impl->effect_ids); ++i) impl->effect_ids[i] = -1;
- if (test_bit(info->ff, FF_RUMBLE)) - { - effect.id = -1; - effect.type = FF_RUMBLE; - effect.replay.length = 0; - effect.u.rumble.strong_magnitude = 0; - effect.u.rumble.weak_magnitude = 0; - - if (ioctl(impl->base.device_fd, EVIOCSFF, &effect) == -1) - WARN("couldn't allocate rumble effect for haptics: %d %s\n", errno, strerror(errno)); - else if (!hid_device_add_haptics(iface)) - return FALSE; - else - impl->haptic_effect_id = effect.id; - } + if (test_bit(info->ff, FF_RUMBLE) && !hid_device_add_haptics(iface)) + return STATUS_NO_MEMORY;
for (i = 0; i < FF_MAX; ++i) if (test_bit(info->ff, i)) break; if (i != FF_MAX) @@ -761,7 +747,7 @@ static NTSTATUS lnxev_device_haptics_start(struct unix_device *iface, UINT durat effect.u.rumble.strong_magnitude = rumble_intensity; effect.u.rumble.weak_magnitude = buzz_intensity;
- if (ioctl(impl->base.device_fd, EVIOCSFF, &effect) == -1) + if (effect.id == -1 || ioctl(impl->base.device_fd, EVIOCSFF, &effect) == -1) { effect.id = -1; if (ioctl(impl->base.device_fd, EVIOCSFF, &effect) == 1)