[PATCH 3/7] winebus.sys: Pass USAGE_AND_PAGE to hid_device_begin_report_descriptor.
Rémi Bernon
rbernon at codeweavers.com
Thu Mar 3 05:02:00 CST 2022
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/winebus.sys/bus_sdl.c | 6 +++--
dlls/winebus.sys/bus_udev.c | 39 +++++++++++++++++----------------
dlls/winebus.sys/hid.c | 7 +++---
dlls/winebus.sys/unix_private.h | 2 +-
dlls/winebus.sys/unixlib.c | 6 +++--
5 files changed, 32 insertions(+), 28 deletions(-)
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index c80b7ce324a..9efd8e2d00e 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -229,6 +229,7 @@ static BOOL descriptor_add_haptic(struct sdl_device *impl)
static NTSTATUS build_joystick_report_descriptor(struct unix_device *iface)
{
+ const USAGE_AND_PAGE device_usage = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_JOYSTICK};
static const USAGE_AND_PAGE absolute_usages[] =
{
{.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_X},
@@ -275,7 +276,7 @@ static NTSTATUS build_joystick_report_descriptor(struct unix_device *iface)
hat_count = pSDL_JoystickNumHats(impl->sdl_joystick);
button_count = pSDL_JoystickNumButtons(impl->sdl_joystick);
- if (!hid_device_begin_report_descriptor(iface, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_JOYSTICK))
+ if (!hid_device_begin_report_descriptor(iface, &device_usage))
return STATUS_NO_MEMORY;
if (!hid_device_begin_input_report(iface))
@@ -321,6 +322,7 @@ static NTSTATUS build_joystick_report_descriptor(struct unix_device *iface)
static NTSTATUS build_controller_report_descriptor(struct unix_device *iface)
{
+ const USAGE_AND_PAGE device_usage = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_GAMEPAD};
static const USAGE left_axis_usages[] = {HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y};
static const USAGE right_axis_usages[] = {HID_USAGE_GENERIC_RX, HID_USAGE_GENERIC_RY};
static const USAGE trigger_axis_usages[] = {HID_USAGE_GENERIC_Z, HID_USAGE_GENERIC_RZ};
@@ -328,7 +330,7 @@ static NTSTATUS build_controller_report_descriptor(struct unix_device *iface)
ULONG i, button_count = SDL_CONTROLLER_BUTTON_MAX - 1;
C_ASSERT(SDL_CONTROLLER_AXIS_MAX == 6);
- if (!hid_device_begin_report_descriptor(iface, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_GAMEPAD))
+ if (!hid_device_begin_report_descriptor(iface, &device_usage))
return STATUS_NO_MEMORY;
if (!hid_device_begin_input_report(iface))
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index 08034c8a07e..7a0a9587af0 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -555,16 +555,16 @@ static struct base_device *find_device_from_syspath(const char *path)
#define test_bit(arr,bit) (((BYTE*)(arr))[(bit)>>3]&(1<<((bit)&7)))
-static const BYTE* what_am_I(struct udev_device *dev)
+static const USAGE_AND_PAGE *what_am_I(struct udev_device *dev, int fd)
{
- static const BYTE Unknown[2] = {HID_USAGE_PAGE_GENERIC, 0};
- static const BYTE Mouse[2] = {HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_MOUSE};
- static const BYTE Keyboard[2] = {HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_KEYBOARD};
- static const BYTE Gamepad[2] = {HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_GAMEPAD};
- static const BYTE Keypad[2] = {HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_KEYPAD};
- static const BYTE Tablet[2] = {HID_USAGE_PAGE_DIGITIZER, HID_USAGE_DIGITIZER_PEN};
- static const BYTE Touchscreen[2] = {HID_USAGE_PAGE_DIGITIZER, HID_USAGE_DIGITIZER_TOUCH_SCREEN};
- static const BYTE Touchpad[2] = {HID_USAGE_PAGE_DIGITIZER, HID_USAGE_DIGITIZER_TOUCH_PAD};
+ static const USAGE_AND_PAGE Unknown = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = 0};
+ static const USAGE_AND_PAGE Mouse = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_MOUSE};
+ static const USAGE_AND_PAGE Keyboard = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_KEYBOARD};
+ static const USAGE_AND_PAGE Gamepad = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_GAMEPAD};
+ static const USAGE_AND_PAGE Keypad = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_KEYPAD};
+ static const USAGE_AND_PAGE Tablet = {.UsagePage = HID_USAGE_PAGE_DIGITIZER, .Usage = HID_USAGE_DIGITIZER_PEN};
+ static const USAGE_AND_PAGE Touchscreen = {.UsagePage = HID_USAGE_PAGE_DIGITIZER, .Usage = HID_USAGE_DIGITIZER_TOUCH_SCREEN};
+ static const USAGE_AND_PAGE Touchpad = {.UsagePage = HID_USAGE_PAGE_DIGITIZER, .Usage = HID_USAGE_DIGITIZER_TOUCH_PAD};
struct udev_device *parent = dev;
@@ -572,23 +572,24 @@ static const BYTE* what_am_I(struct udev_device *dev)
while (parent)
{
if (udev_device_get_property_value(parent, "ID_INPUT_MOUSE"))
- return Mouse;
+ return &Mouse;
else if (udev_device_get_property_value(parent, "ID_INPUT_KEYBOARD"))
- return Keyboard;
+ return &Keyboard;
else if (udev_device_get_property_value(parent, "ID_INPUT_JOYSTICK"))
- return Gamepad;
+ return &Gamepad;
else if (udev_device_get_property_value(parent, "ID_INPUT_KEY"))
- return Keypad;
+ return &Keypad;
else if (udev_device_get_property_value(parent, "ID_INPUT_TOUCHPAD"))
- return Touchpad;
+ return &Touchpad;
else if (udev_device_get_property_value(parent, "ID_INPUT_TOUCHSCREEN"))
- return Touchscreen;
+ return &Touchscreen;
else if (udev_device_get_property_value(parent, "ID_INPUT_TABLET"))
- return Tablet;
+ return &Tablet;
parent = udev_device_get_parent_with_subsystem_devtype(parent, "input", NULL);
}
- return Unknown;
+
+ return &Unknown;
}
static INT count_buttons(int device_fd, BYTE *map)
@@ -642,8 +643,8 @@ static NTSTATUS build_report_descriptor(struct unix_device *iface, struct udev_d
USHORT count = 0;
USAGE usages[16];
INT i, button_count, abs_count, rel_count, hat_count;
- const BYTE *device_usage = what_am_I(dev);
struct lnxev_device *impl = lnxev_impl_from_unix_device(iface);
+ const USAGE_AND_PAGE device_usage = *what_am_I(dev, impl->base.device_fd);
if (ioctl(impl->base.device_fd, EVIOCGBIT(EV_REL, sizeof(relbits)), relbits) == -1)
{
@@ -661,7 +662,7 @@ static NTSTATUS build_report_descriptor(struct unix_device *iface, struct udev_d
memset(ffbits, 0, sizeof(ffbits));
}
- if (!hid_device_begin_report_descriptor(iface, device_usage[0], device_usage[1]))
+ if (!hid_device_begin_report_descriptor(iface, &device_usage))
return STATUS_NO_MEMORY;
if (!hid_device_begin_input_report(iface))
diff --git a/dlls/winebus.sys/hid.c b/dlls/winebus.sys/hid.c
index 8d34fc86e63..ba0fa77ee11 100644
--- a/dlls/winebus.sys/hid.c
+++ b/dlls/winebus.sys/hid.c
@@ -74,15 +74,14 @@ static BOOL hid_report_descriptor_append_usage(struct hid_report_descriptor *des
return hid_report_descriptor_append(desc, template, sizeof(template));
}
-BOOL hid_device_begin_report_descriptor(struct unix_device *iface, USAGE usage_page, USAGE usage)
+BOOL hid_device_begin_report_descriptor(struct unix_device *iface, const USAGE_AND_PAGE *device_usage)
{
struct hid_report_descriptor *desc = &iface->hid_report_descriptor;
const BYTE template[] =
{
- USAGE_PAGE(2, usage_page),
- USAGE(2, usage),
+ USAGE_PAGE(2, device_usage->UsagePage),
+ USAGE(2, device_usage->Usage),
COLLECTION(1, Application),
- USAGE(1, 0),
};
memset(desc, 0, sizeof(*desc));
diff --git a/dlls/winebus.sys/unix_private.h b/dlls/winebus.sys/unix_private.h
index 3c37f219a4b..2cf6d382759 100644
--- a/dlls/winebus.sys/unix_private.h
+++ b/dlls/winebus.sys/unix_private.h
@@ -242,7 +242,7 @@ extern BOOL bus_event_queue_input_report(struct list *queue, struct unix_device
BYTE *report, USHORT length) DECLSPEC_HIDDEN;
extern BOOL bus_event_queue_pop(struct list *queue, struct bus_event *event) DECLSPEC_HIDDEN;
-extern BOOL hid_device_begin_report_descriptor(struct unix_device *iface, USAGE usage_page, USAGE usage) DECLSPEC_HIDDEN;
+extern BOOL hid_device_begin_report_descriptor(struct unix_device *iface, const USAGE_AND_PAGE *device_usage) DECLSPEC_HIDDEN;
extern BOOL hid_device_end_report_descriptor(struct unix_device *iface) DECLSPEC_HIDDEN;
extern BOOL hid_device_begin_input_report(struct unix_device *iface) DECLSPEC_HIDDEN;
diff --git a/dlls/winebus.sys/unixlib.c b/dlls/winebus.sys/unixlib.c
index f251e8e6af7..88cc513125a 100644
--- a/dlls/winebus.sys/unixlib.c
+++ b/dlls/winebus.sys/unixlib.c
@@ -87,7 +87,8 @@ static void mouse_destroy(struct unix_device *iface)
static NTSTATUS mouse_start(struct unix_device *iface)
{
- if (!hid_device_begin_report_descriptor(iface, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_MOUSE))
+ const USAGE_AND_PAGE device_usage = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_MOUSE};
+ if (!hid_device_begin_report_descriptor(iface, &device_usage))
return STATUS_NO_MEMORY;
if (!hid_device_add_buttons(iface, HID_USAGE_PAGE_BUTTON, 1, 3))
return STATUS_NO_MEMORY;
@@ -176,7 +177,8 @@ static void keyboard_destroy(struct unix_device *iface)
static NTSTATUS keyboard_start(struct unix_device *iface)
{
- if (!hid_device_begin_report_descriptor(iface, HID_USAGE_PAGE_GENERIC, HID_USAGE_GENERIC_KEYBOARD))
+ const USAGE_AND_PAGE device_usage = {.UsagePage = HID_USAGE_PAGE_GENERIC, .Usage = HID_USAGE_GENERIC_KEYBOARD};
+ if (!hid_device_begin_report_descriptor(iface, &device_usage))
return STATUS_NO_MEMORY;
if (!hid_device_add_buttons(iface, HID_USAGE_PAGE_KEYBOARD, 0, 101))
return STATUS_NO_MEMORY;
--
2.34.1
More information about the wine-devel
mailing list