server: Combine HID usage page and usage together.

This commit is contained in:
Rémi Bernon 2024-02-06 10:50:32 +01:00 committed by Alexandre Julliard
parent 3c64448037
commit c62ca2e1aa
6 changed files with 18 additions and 23 deletions

View file

@ -3555,8 +3555,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
case RIM_TYPEHID: case RIM_TYPEHID:
req->input.hw.rawinput.hid.device = HandleToUlong( rawinput->header.hDevice ); req->input.hw.rawinput.hid.device = HandleToUlong( rawinput->header.hDevice );
req->input.hw.rawinput.hid.param = rawinput->header.wParam; req->input.hw.rawinput.hid.param = rawinput->header.wParam;
req->input.hw.rawinput.hid.usage_page = hid_usage_page; req->input.hw.rawinput.hid.usage = MAKELONG(hid_usage, hid_usage_page);
req->input.hw.rawinput.hid.usage = hid_usage;
req->input.hw.rawinput.hid.count = rawinput->data.hid.dwCount; req->input.hw.rawinput.hid.count = rawinput->data.hid.dwCount;
req->input.hw.rawinput.hid.length = rawinput->data.hid.dwSizeHid; req->input.hw.rawinput.hid.length = rawinput->data.hid.dwSizeHid;
wine_server_add_data( req, rawinput->data.hid.bRawData, wine_server_add_data( req, rawinput->data.hid.bRawData,

View file

@ -899,8 +899,7 @@ BOOL WINAPI NtUserRegisterRawInputDevices( const RAWINPUTDEVICE *devices, UINT d
for (i = 0; i < device_count; ++i) for (i = 0; i < device_count; ++i)
{ {
server_devices[i].usage_page = registered_devices[i].usUsagePage; server_devices[i].usage = MAKELONG(registered_devices[i].usUsage, registered_devices[i].usUsagePage);
server_devices[i].usage = registered_devices[i].usUsage;
server_devices[i].flags = registered_devices[i].dwFlags; server_devices[i].flags = registered_devices[i].dwFlags;
server_devices[i].target = wine_server_user_handle( registered_devices[i].hwndTarget ); server_devices[i].target = wine_server_user_handle( registered_devices[i].hwndTarget );
} }

View file

@ -285,8 +285,7 @@ union rawinput
int type; int type;
unsigned int device; unsigned int device;
unsigned int param; unsigned int param;
unsigned short usage_page; unsigned int usage;
unsigned short usage;
unsigned int count; unsigned int count;
unsigned int length; unsigned int length;
} hid; } hid;
@ -863,8 +862,7 @@ typedef struct
struct rawinput_device struct rawinput_device
{ {
unsigned short usage_page; unsigned int usage;
unsigned short usage;
unsigned int flags; unsigned int flags;
user_handle_t target; user_handle_t target;
}; };
@ -6507,7 +6505,7 @@ union generic_reply
/* ### protocol_version begin ### */ /* ### protocol_version begin ### */
#define SERVER_PROTOCOL_VERSION 788 #define SERVER_PROTOCOL_VERSION 789
/* ### protocol_version end ### */ /* ### protocol_version end ### */

View file

@ -301,8 +301,7 @@ union rawinput
int type; /* RIM_TYPEHID */ int type; /* RIM_TYPEHID */
unsigned int device; /* rawinput device index */ unsigned int device; /* rawinput device index */
unsigned int param; /* rawinput message param */ unsigned int param; /* rawinput message param */
unsigned short usage_page;/* HID usage page */ unsigned int usage; /* HID device usage */
unsigned short usage; /* HID usage */
unsigned int count; /* HID report count */ unsigned int count; /* HID report count */
unsigned int length; /* HID report length */ unsigned int length; /* HID report length */
} hid; } hid;
@ -879,8 +878,7 @@ typedef struct
struct rawinput_device struct rawinput_device
{ {
unsigned short usage_page; unsigned int usage;
unsigned short usage;
unsigned int flags; unsigned int flags;
user_handle_t target; user_handle_t target;
}; };

View file

@ -35,6 +35,7 @@
#include "winuser.h" #include "winuser.h"
#include "winternl.h" #include "winternl.h"
#include "ntuser.h" #include "ntuser.h"
#include "hidusage.h"
#include "handle.h" #include "handle.h"
#include "file.h" #include "file.h"
@ -1637,13 +1638,13 @@ static user_handle_t find_hardware_message_window( struct desktop *desktop, stru
return win; return win;
} }
static struct rawinput_device *find_rawinput_device( struct process *process, unsigned short usage_page, unsigned short usage ) static struct rawinput_device *find_rawinput_device( struct process *process, unsigned int usage )
{ {
struct rawinput_device *device, *end; struct rawinput_device *device, *end;
for (device = process->rawinput_devices, end = device + process->rawinput_device_count; device != end; device++) for (device = process->rawinput_devices, end = device + process->rawinput_device_count; device != end; device++)
{ {
if (device->usage_page != usage_page || device->usage != usage) continue; if (device->usage != usage) continue;
return device; return device;
} }
@ -1808,7 +1809,7 @@ static int queue_rawinput_message( struct process* process, void *arg )
else if (raw_msg->data.rawinput.type == RIM_TYPEKEYBOARD) else if (raw_msg->data.rawinput.type == RIM_TYPEKEYBOARD)
device = process->rawinput_kbd; device = process->rawinput_kbd;
else else
device = find_rawinput_device( process, raw_msg->data.rawinput.hid.usage_page, raw_msg->data.rawinput.hid.usage ); device = find_rawinput_device( process, raw_msg->data.rawinput.hid.usage );
if (!device) return 0; if (!device) return 0;
if (raw_msg->message == WM_INPUT_DEVICE_CHANGE && !(device->flags & RIDEV_DEVNOTIFY)) return 0; if (raw_msg->message == WM_INPUT_DEVICE_CHANGE && !(device->flags & RIDEV_DEVNOTIFY)) return 0;
@ -3505,6 +3506,6 @@ DECL_HANDLER(update_rawinput_devices)
process->rawinput_device_count = device_count; process->rawinput_device_count = device_count;
memcpy( process->rawinput_devices, devices, size ); memcpy( process->rawinput_devices, devices, size );
process->rawinput_mouse = find_rawinput_device( process, 1, 2 ); process->rawinput_mouse = find_rawinput_device( process, MAKELONG(HID_USAGE_GENERIC_MOUSE, HID_USAGE_PAGE_GENERIC) );
process->rawinput_kbd = find_rawinput_device( process, 1, 6 ); process->rawinput_kbd = find_rawinput_device( process, MAKELONG(HID_USAGE_GENERIC_KEYBOARD, HID_USAGE_PAGE_GENERIC) );
} }

View file

@ -434,9 +434,9 @@ static void dump_rawinput( const char *prefix, const union rawinput *rawinput )
rawinput->kbd.message, rawinput->kbd.vkey, rawinput->kbd.scan ); rawinput->kbd.message, rawinput->kbd.vkey, rawinput->kbd.scan );
break; break;
case RIM_TYPEHID: case RIM_TYPEHID:
fprintf( stderr, "%s{type=HID,device=%04x,param=%04x,page=%04hx,usage=%04hx,count=%u,length=%u}", fprintf( stderr, "%s{type=HID,device=%04x,param=%04x,usage=%04x:%04x,count=%u,length=%u}",
prefix, rawinput->hid.device, rawinput->hid.param, rawinput->hid.usage_page, prefix, rawinput->hid.device, rawinput->hid.param, HIWORD(rawinput->hid.usage),
rawinput->hid.usage, rawinput->hid.count, rawinput->hid.length ); LOWORD(rawinput->hid.usage), rawinput->hid.count, rawinput->hid.length );
break; break;
default: default:
fprintf( stderr, "%s{type=%04x}", prefix, rawinput->type ); fprintf( stderr, "%s{type=%04x}", prefix, rawinput->type );
@ -1357,8 +1357,8 @@ static void dump_varargs_rawinput_devices(const char *prefix, data_size_t size )
while (size >= sizeof(*device)) while (size >= sizeof(*device))
{ {
device = cur_data; device = cur_data;
fprintf( stderr, "{usage_page=%04x,usage=%04x,flags=%08x,target=%08x}", fprintf( stderr, "{usage=%08x,flags=%08x,target=%08x}",
device->usage_page, device->usage, device->flags, device->target ); device->usage, device->flags, device->target );
size -= sizeof(*device); size -= sizeof(*device);
remove_data( sizeof(*device) ); remove_data( sizeof(*device) );
if (size) fputc( ',', stderr ); if (size) fputc( ',', stderr );