Rémi Bernon : winebus.sys: Build report descriptors in start_device.
Alexandre Julliard
julliard at winehq.org
Wed Aug 18 16:22:10 CDT 2021
Module: wine
Branch: master
Commit: 620b514aa0b41187a3c438eb515bbeab02feb7bb
URL: https://source.winehq.org/git/wine.git/?a=commit;h=620b514aa0b41187a3c438eb515bbeab02feb7bb
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Wed Aug 18 09:14:19 2021 +0200
winebus.sys: Build report descriptors in start_device.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winebus.sys/bus_sdl.c | 19 +++----------------
dlls/winebus.sys/bus_udev.c | 17 ++---------------
dlls/winebus.sys/main.c | 30 ++++++++++++++----------------
3 files changed, 19 insertions(+), 47 deletions(-)
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index e7b7c1fef22..21eac3c67f4 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -489,7 +489,9 @@ static int compare_platform_device(DEVICE_OBJECT *device, void *context)
static NTSTATUS start_device(DEVICE_OBJECT *device)
{
- return STATUS_SUCCESS;
+ struct platform_private *ext = impl_from_DEVICE_OBJECT(device);
+ if (ext->sdl_controller) return build_mapped_report_descriptor(ext);
+ return build_report_descriptor(ext);
}
static NTSTATUS get_reportdescriptor(DEVICE_OBJECT *device, BYTE *buffer, DWORD length, DWORD *out_length)
@@ -797,25 +799,10 @@ static void try_add_device(unsigned int index)
if (device)
{
- NTSTATUS status;
struct platform_private *private = impl_from_DEVICE_OBJECT(device);
private->sdl_joystick = joystick;
private->sdl_controller = controller;
private->id = id;
-
- /* FIXME: We should probably move this to IRP_MN_START_DEVICE. */
- if (controller)
- status = build_mapped_report_descriptor(private);
- else
- status = build_report_descriptor(private);
- if (status)
- {
- ERR("Building report descriptor failed, removing device\n");
- bus_unlink_hid_device(device);
- bus_remove_hid_device(device);
- HeapFree(GetProcessHeap(), 0, serial);
- return;
- }
IoInvalidateDeviceRelations(bus_pdo, BusRelations);
}
else
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index eb6434ad2a5..25c8b5f0b36 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -862,7 +862,8 @@ static void lnxev_free_device(DEVICE_OBJECT *device)
static NTSTATUS lnxev_start_device(DEVICE_OBJECT *device)
{
- return STATUS_SUCCESS;
+ struct wine_input_private *ext = input_impl_from_DEVICE_OBJECT(device);
+ return build_report_descriptor(ext, ext->base.udev_device);
}
static NTSTATUS lnxev_get_reportdescriptor(DEVICE_OBJECT *device, BYTE *buffer, DWORD length, DWORD *out_length)
@@ -1148,20 +1149,6 @@ static void try_add_device(struct udev_device *dev)
struct platform_private *private = impl_from_DEVICE_OBJECT(device);
private->udev_device = udev_device_ref(dev);
private->device_fd = fd;
-#ifdef HAS_PROPER_INPUT_HEADER
- if (strcmp(subsystem, "input") == 0)
- /* FIXME: We should probably move this to IRP_MN_START_DEVICE. */
- if (build_report_descriptor((struct wine_input_private *)private, dev))
- {
- ERR("Building report descriptor failed, removing device\n");
- close(fd);
- udev_device_unref(dev);
- bus_unlink_hid_device(device);
- bus_remove_hid_device(device);
- HeapFree(GetProcessHeap(), 0, serial);
- return;
- }
-#endif
IoInvalidateDeviceRelations(bus_pdo, BusRelations);
}
else
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
index f15e7da47b2..3bb534a7d8a 100644
--- a/dlls/winebus.sys/main.c
+++ b/dlls/winebus.sys/main.c
@@ -488,6 +488,13 @@ static void mouse_free_device(DEVICE_OBJECT *device)
static NTSTATUS mouse_start_device(DEVICE_OBJECT *device)
{
+ if (!hid_descriptor_begin(&mouse_desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_MOUSE))
+ return STATUS_NO_MEMORY;
+ if (!hid_descriptor_add_buttons(&mouse_desc, HID_USAGE_PAGE_BUTTON, 1, 3))
+ return STATUS_NO_MEMORY;
+ if (!hid_descriptor_end(&mouse_desc))
+ return STATUS_NO_MEMORY;
+
return STATUS_SUCCESS;
}
@@ -551,14 +558,6 @@ static const platform_vtbl mouse_vtbl =
static void mouse_device_create(void)
{
static const WCHAR busidW[] = {'W','I','N','E','M','O','U','S','E',0};
-
- if (!hid_descriptor_begin(&mouse_desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_MOUSE))
- return;
- if (!hid_descriptor_add_buttons(&mouse_desc, HID_USAGE_PAGE_BUTTON, 1, 3))
- return;
- if (!hid_descriptor_end(&mouse_desc))
- return;
-
mouse_obj = bus_create_hid_device(busidW, 0, 0, -1, 0, 0, busidW, FALSE, &mouse_vtbl, 0);
IoInvalidateDeviceRelations(bus_pdo, BusRelations);
}
@@ -569,6 +568,13 @@ static void keyboard_free_device(DEVICE_OBJECT *device)
static NTSTATUS keyboard_start_device(DEVICE_OBJECT *device)
{
+ if (!hid_descriptor_begin(&keyboard_desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_KEYBOARD))
+ return STATUS_NO_MEMORY;
+ if (!hid_descriptor_add_buttons(&keyboard_desc, HID_USAGE_PAGE_KEYBOARD, 0, 101))
+ return STATUS_NO_MEMORY;
+ if (!hid_descriptor_end(&keyboard_desc))
+ return STATUS_NO_MEMORY;
+
return STATUS_SUCCESS;
}
@@ -632,14 +638,6 @@ static const platform_vtbl keyboard_vtbl =
static void keyboard_device_create(void)
{
static const WCHAR busidW[] = {'W','I','N','E','K','E','Y','B','O','A','R','D',0};
-
- if (!hid_descriptor_begin(&keyboard_desc, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_KEYBOARD))
- return;
- if (!hid_descriptor_add_buttons(&keyboard_desc, HID_USAGE_PAGE_KEYBOARD, 0, 101))
- return;
- if (!hid_descriptor_end(&keyboard_desc))
- return;
-
keyboard_obj = bus_create_hid_device(busidW, 0, 0, -1, 0, 0, busidW, FALSE, &keyboard_vtbl, 0);
IoInvalidateDeviceRelations(bus_pdo, BusRelations);
}
More information about the wine-cvs
mailing list