[PATCH 5/8] winebus.sys: Avoid unnecessary scaling of effect parameter values.

Rémi Bernon rbernon at codeweavers.com
Fri Nov 19 02:39:39 CST 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/winebus.sys/bus_sdl.c      |  24 +++---
 dlls/winebus.sys/bus_udev.c     |  12 +--
 dlls/winebus.sys/hid.c          | 142 +++++++++++++++-----------------
 dlls/winebus.sys/unix_private.h |  32 +++----
 dlls/winebus.sys/unixlib.c      |   4 +-
 5 files changed, 104 insertions(+), 110 deletions(-)

diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index 220e360d78f..e3932e31ff5 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -480,13 +480,13 @@ static NTSTATUS sdl_device_physical_device_control(struct unix_device *iface, US
     return STATUS_NOT_SUPPORTED;
 }
 
-static NTSTATUS sdl_device_physical_device_set_gain(struct unix_device *iface, BYTE value)
+static NTSTATUS sdl_device_physical_device_set_gain(struct unix_device *iface, BYTE percent)
 {
     struct sdl_device *impl = impl_from_unix_device(iface);
 
-    TRACE("iface %p, value %#x.\n", iface, value);
+    TRACE("iface %p, percent %#x.\n", iface, percent);
 
-    pSDL_HapticSetGain(impl->sdl_haptic, value * 100 / 255);
+    pSDL_HapticSetGain(impl->sdl_haptic, percent);
 
     return STATUS_SUCCESS;
 }
@@ -583,10 +583,10 @@ static NTSTATUS sdl_device_physical_effect_update(struct unix_device *iface, BYT
         effect.periodic.button = params->trigger_button;
         effect.periodic.interval = params->trigger_repeat_interval;
         effect.periodic.direction.type = SDL_HAPTIC_SPHERICAL;
-        effect.periodic.direction.dir[0] = params->direction[0] * 36000 / 256;
-        effect.periodic.direction.dir[1] = params->direction[1] * 36000 / 256;
+        effect.periodic.direction.dir[0] = params->direction[0];
+        effect.periodic.direction.dir[1] = params->direction[1];
         effect.periodic.period = params->periodic.period;
-        effect.periodic.magnitude = params->periodic.magnitude * 128;
+        effect.periodic.magnitude = params->periodic.magnitude;
         effect.periodic.offset = params->periodic.offset;
         effect.periodic.phase = params->periodic.phase;
         effect.periodic.attack_length = params->envelope.attack_time;
@@ -604,8 +604,8 @@ static NTSTATUS sdl_device_physical_effect_update(struct unix_device *iface, BYT
         effect.condition.button = params->trigger_button;
         effect.condition.interval = params->trigger_repeat_interval;
         effect.condition.direction.type = SDL_HAPTIC_SPHERICAL;
-        effect.condition.direction.dir[0] = params->direction[0] * 36000 / 256;
-        effect.condition.direction.dir[1] = params->direction[1] * 36000 / 256;
+        effect.condition.direction.dir[0] = params->direction[0];
+        effect.condition.direction.dir[1] = params->direction[1];
         if (params->condition_count >= 1)
         {
             effect.condition.right_sat[0] = params->condition[0].positive_saturation;
@@ -632,8 +632,8 @@ static NTSTATUS sdl_device_physical_effect_update(struct unix_device *iface, BYT
         effect.constant.button = params->trigger_button;
         effect.constant.interval = params->trigger_repeat_interval;
         effect.constant.direction.type = SDL_HAPTIC_SPHERICAL;
-        effect.constant.direction.dir[0] = params->direction[0] * 36000 / 256;
-        effect.constant.direction.dir[1] = params->direction[1] * 36000 / 256;
+        effect.constant.direction.dir[0] = params->direction[0];
+        effect.constant.direction.dir[1] = params->direction[1];
         effect.constant.level = params->constant_force.magnitude;
         effect.constant.attack_length = params->envelope.attack_time;
         effect.constant.attack_level = params->envelope.attack_level;
@@ -647,8 +647,8 @@ static NTSTATUS sdl_device_physical_effect_update(struct unix_device *iface, BYT
         effect.ramp.button = params->trigger_button;
         effect.ramp.interval = params->trigger_repeat_interval;
         effect.ramp.direction.type = SDL_HAPTIC_SPHERICAL;
-        effect.ramp.direction.dir[0] = params->direction[0] * 36000 / 256;
-        effect.ramp.direction.dir[1] = params->direction[1] * 36000 / 256;
+        effect.ramp.direction.dir[0] = params->direction[0];
+        effect.ramp.direction.dir[1] = params->direction[1];
         effect.ramp.start = params->ramp_force.ramp_start;
         effect.ramp.end = params->ramp_force.ramp_end;
         effect.ramp.attack_length = params->envelope.attack_time;
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index d7bbd5ba79d..3a7a5db723d 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -924,17 +924,17 @@ static NTSTATUS lnxev_device_physical_device_control(struct unix_device *iface,
     return STATUS_NOT_SUPPORTED;
 }
 
-static NTSTATUS lnxev_device_physical_device_set_gain(struct unix_device *iface, BYTE value)
+static NTSTATUS lnxev_device_physical_device_set_gain(struct unix_device *iface, BYTE percent)
 {
     struct lnxev_device *impl = lnxev_impl_from_unix_device(iface);
     struct input_event ie =
     {
         .type = EV_FF,
         .code = FF_GAIN,
-        .value = value * 100 / 255,
+        .value = percent,
     };
 
-    TRACE("iface %p, value %#x.\n", iface, value);
+    TRACE("iface %p, percent %#x.\n", iface, percent);
 
     if (write(impl->base.device_fd, &ie, sizeof(ie)) == -1)
         WARN("write failed %d %s\n", errno, strerror(errno));
@@ -1031,7 +1031,7 @@ static NTSTATUS lnxev_device_physical_effect_update(struct unix_device *iface, B
     effect.trigger.button = params->trigger_button;
     effect.trigger.interval = params->trigger_repeat_interval;
     /* only supports polar with one direction angle */
-    effect.direction = params->direction[0] * 256;
+    effect.direction = params->direction[0] * 0x800 / 1125;
 
     switch (params->effect_type)
     {
@@ -1041,9 +1041,9 @@ static NTSTATUS lnxev_device_physical_effect_update(struct unix_device *iface, B
     case PID_USAGE_ET_SAWTOOTH_UP:
     case PID_USAGE_ET_SAWTOOTH_DOWN:
         effect.u.periodic.period = params->periodic.period;
-        effect.u.periodic.magnitude = params->periodic.magnitude * 128;
+        effect.u.periodic.magnitude = params->periodic.magnitude;
         effect.u.periodic.offset = params->periodic.offset;
-        effect.u.periodic.phase = params->periodic.phase;
+        effect.u.periodic.phase = params->periodic.phase * 0x800 / 1125;
         effect.u.periodic.envelope.attack_length = params->envelope.attack_time;
         effect.u.periodic.envelope.attack_level = params->envelope.attack_level;
         effect.u.periodic.envelope.fade_length = params->envelope.fade_time;
diff --git a/dlls/winebus.sys/hid.c b/dlls/winebus.sys/hid.c
index 89bc4904fac..56f30338481 100644
--- a/dlls/winebus.sys/hid.c
+++ b/dlls/winebus.sys/hid.c
@@ -170,8 +170,6 @@ BOOL hid_device_add_buttons(struct unix_device *iface, USAGE usage_page, USAGE u
         USAGE_MAXIMUM(2, usage_max),
         LOGICAL_MINIMUM(1, 0),
         LOGICAL_MAXIMUM(1, 1),
-        PHYSICAL_MINIMUM(1, 0),
-        PHYSICAL_MAXIMUM(1, 1),
         REPORT_COUNT(2, count),
         REPORT_SIZE(1, 1),
         INPUT(1, Data|Var|Abs),
@@ -225,8 +223,6 @@ BOOL hid_device_add_hatswitch(struct unix_device *iface, INT count)
         USAGE(1, HID_USAGE_GENERIC_HATSWITCH),
         LOGICAL_MINIMUM(1, 1),
         LOGICAL_MAXIMUM(1, 8),
-        PHYSICAL_MINIMUM(1, 0),
-        PHYSICAL_MAXIMUM(2, 8),
         REPORT_SIZE(1, 8),
         REPORT_COUNT(4, count),
         UNIT(1, 0x0e /* none */),
@@ -286,8 +282,6 @@ BOOL hid_device_add_axes(struct unix_device *iface, BYTE count, USAGE usage_page
     {
         LOGICAL_MINIMUM(4, min),
         LOGICAL_MAXIMUM(4, max),
-        PHYSICAL_MINIMUM(4, min),
-        PHYSICAL_MAXIMUM(4, max),
         REPORT_SIZE(1, 32),
         REPORT_COUNT(1, count),
         INPUT(1, Data|Var|(rel ? Rel : Abs)),
@@ -354,8 +348,6 @@ BOOL hid_device_add_haptics(struct unix_device *iface)
             UNIT_EXPONENT(1, -3), /* 10^-3 */
             LOGICAL_MINIMUM(4, 0x00000000),
             LOGICAL_MAXIMUM(4, 0x7fffffff),
-            PHYSICAL_MINIMUM(4, 0x00000000),
-            PHYSICAL_MAXIMUM(4, 0x7fffffff),
             REPORT_SIZE(1, 32),
             REPORT_COUNT(1, 1),
             FEATURE(1, Data|Var|Abs),
@@ -367,8 +359,6 @@ BOOL hid_device_add_haptics(struct unix_device *iface)
             USAGE(1, HID_USAGE_HAPTICS_MANUAL_TRIGGER),
             LOGICAL_MINIMUM(1, 1),
             LOGICAL_MAXIMUM(1, 4),
-            PHYSICAL_MINIMUM(1, 1),
-            PHYSICAL_MAXIMUM(1, 4),
             REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
@@ -376,8 +366,6 @@ BOOL hid_device_add_haptics(struct unix_device *iface)
             USAGE(1, HID_USAGE_HAPTICS_INTENSITY),
             LOGICAL_MINIMUM(4, 0x00000000),
             LOGICAL_MAXIMUM(4, 0x0000ffff),
-            PHYSICAL_MINIMUM(4, 0x00000000),
-            PHYSICAL_MAXIMUM(4, 0x0000ffff),
             REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
@@ -442,23 +430,23 @@ struct pid_effect_update
     UINT16 start_delay;
     BYTE trigger_button;
     BYTE enable_bits;
-    BYTE direction[2];
+    UINT16 direction[2];
 };
 
 struct pid_set_periodic
 {
     BYTE index;
-    BYTE magnitude;
-    BYTE offset;
-    BYTE phase;
+    UINT16 magnitude;
+    INT16 offset;
+    UINT16 phase;
     UINT16 period;
 };
 
 struct pid_set_envelope
 {
     BYTE index;
-    BYTE attack_level;
-    BYTE fade_level;
+    UINT16 attack_level;
+    UINT16 fade_level;
     UINT16 attack_time;
     UINT16 fade_time;
 };
@@ -467,25 +455,25 @@ struct pid_set_condition
 {
     BYTE index;
     BYTE condition_index;
-    BYTE center_point_offset;
-    BYTE positive_coefficient;
-    BYTE negative_coefficient;
-    BYTE positive_saturation;
-    BYTE negative_saturation;
-    BYTE dead_band;
+    INT16 center_point_offset;
+    INT16 positive_coefficient;
+    INT16 negative_coefficient;
+    UINT16 positive_saturation;
+    UINT16 negative_saturation;
+    UINT16 dead_band;
 };
 
 struct pid_set_constant_force
 {
     BYTE index;
-    UINT16 magnitude;
+    INT16 magnitude;
 };
 
 struct pid_set_ramp_force
 {
     BYTE index;
-    BYTE ramp_start;
-    BYTE ramp_end;
+    INT16 ramp_start;
+    INT16 ramp_end;
 };
 #include "poppack.h"
 
@@ -501,38 +489,40 @@ static BOOL hid_descriptor_add_set_periodic(struct unix_device *iface)
             REPORT_ID(1, report_id),
 
             USAGE(1, PID_USAGE_EFFECT_BLOCK_INDEX),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(1, 0x7f),
-            LOGICAL_MINIMUM(1, 0x00),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
 
             USAGE(1, PID_USAGE_MAGNITUDE),
             LOGICAL_MINIMUM(1, 0),
-            LOGICAL_MAXIMUM(2, 0x00ff),
+            LOGICAL_MAXIMUM(2, 0x7fff),
             PHYSICAL_MINIMUM(1, 0),
             PHYSICAL_MAXIMUM(2, 10000),
-            REPORT_SIZE(1, 8),
+            REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
 
             USAGE(1, PID_USAGE_OFFSET),
-            LOGICAL_MINIMUM(1, 0x80),
-            LOGICAL_MAXIMUM(1, 0x7f),
+            LOGICAL_MINIMUM(2, 0x8000),
+            LOGICAL_MAXIMUM(2, 0x7fff),
             PHYSICAL_MINIMUM(2, -10000),
-            PHYSICAL_MAXIMUM(2, 10000),
-            REPORT_SIZE(1, 8),
+            PHYSICAL_MAXIMUM(2, +10000),
+            REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
 
             USAGE(1, PID_USAGE_PHASE),
             UNIT(1, 0x14), /* Eng Rot:Angular Pos */
             UNIT_EXPONENT(1, -2),
             LOGICAL_MINIMUM(1, 0),
-            LOGICAL_MAXIMUM(2, 0xff),
-            PHYSICAL_MINIMUM(1, 0),
-            PHYSICAL_MAXIMUM(4, 36000),
-            REPORT_SIZE(1, 8),
+            LOGICAL_MAXIMUM(4, 36000),
+            REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
 
@@ -541,13 +531,10 @@ static BOOL hid_descriptor_add_set_periodic(struct unix_device *iface)
             UNIT_EXPONENT(1, -3), /* 10^-3 */
             LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(2, 0x7fff),
-            PHYSICAL_MINIMUM(1, 0),
-            PHYSICAL_MAXIMUM(2, 0x7fff),
             REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
 
-            PHYSICAL_MAXIMUM(1, 0),
             UNIT_EXPONENT(1, 0),
             UNIT(1, 0), /* None */
         END_COLLECTION,
@@ -569,30 +556,30 @@ static BOOL hid_descriptor_add_set_envelope(struct unix_device *iface)
             REPORT_ID(1, report_id),
 
             USAGE(1, PID_USAGE_EFFECT_BLOCK_INDEX),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(1, 0x7f),
-            LOGICAL_MINIMUM(1, 0x00),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
 
             USAGE(1, PID_USAGE_ATTACK_LEVEL),
             USAGE(1, PID_USAGE_FADE_LEVEL),
-            LOGICAL_MINIMUM(1, 0x00),
-            LOGICAL_MAXIMUM(2, 0x00ff),
+            LOGICAL_MINIMUM(1, 0),
+            LOGICAL_MAXIMUM(2, 0x7fff),
             PHYSICAL_MINIMUM(1, 0),
             PHYSICAL_MAXIMUM(2, 10000),
-            REPORT_SIZE(1, 8),
+            REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 2),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
 
             USAGE(1, PID_USAGE_ATTACK_TIME),
             USAGE(1, PID_USAGE_FADE_TIME),
             UNIT(2, 0x1003), /* Eng Lin:Time */
             UNIT_EXPONENT(1, -3),
-            LOGICAL_MINIMUM(1, 0x00),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(2, 0x7fff),
-            PHYSICAL_MINIMUM(1, 0),
-            PHYSICAL_MAXIMUM(2, 0x7fff),
             REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 2),
             OUTPUT(1, Data|Var|Abs),
@@ -618,8 +605,8 @@ static BOOL hid_descriptor_add_set_condition(struct unix_device *iface)
             REPORT_ID(1, report_id),
 
             USAGE(1, PID_USAGE_EFFECT_BLOCK_INDEX),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(1, 0x7f),
-            LOGICAL_MINIMUM(1, 0x00),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
@@ -634,24 +621,28 @@ static BOOL hid_descriptor_add_set_condition(struct unix_device *iface)
             USAGE(1, PID_USAGE_CP_OFFSET),
             USAGE(1, PID_USAGE_POSITIVE_COEFFICIENT),
             USAGE(1, PID_USAGE_NEGATIVE_COEFFICIENT),
-            LOGICAL_MINIMUM(1, -128),
-            LOGICAL_MAXIMUM(1, +127),
+            LOGICAL_MINIMUM(2, 0x8000),
+            LOGICAL_MAXIMUM(2, 0x7fff),
             PHYSICAL_MINIMUM(2, -10000),
             PHYSICAL_MAXIMUM(2, +10000),
-            REPORT_SIZE(1, 8),
+            REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 3),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
 
             USAGE(1, PID_USAGE_POSITIVE_SATURATION),
             USAGE(1, PID_USAGE_NEGATIVE_SATURATION),
             USAGE(1, PID_USAGE_DEAD_BAND),
             LOGICAL_MINIMUM(1, 0),
-            LOGICAL_MAXIMUM(2, 0x00ff),
+            LOGICAL_MAXIMUM(2, 0x7fff),
             PHYSICAL_MINIMUM(1, 0),
             PHYSICAL_MAXIMUM(2, +10000),
-            REPORT_SIZE(1, 8),
+            REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 3),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
         END_COLLECTION,
     };
 
@@ -671,20 +662,22 @@ static BOOL hid_descriptor_add_set_constant_force(struct unix_device *iface)
             REPORT_ID(1, report_id),
 
             USAGE(1, PID_USAGE_EFFECT_BLOCK_INDEX),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(1, 0x7f),
-            LOGICAL_MINIMUM(1, 0x00),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
 
             USAGE(1, PID_USAGE_MAGNITUDE),
-            LOGICAL_MINIMUM(2, 0xff01),
-            LOGICAL_MAXIMUM(2, 0x00ff),
-            PHYSICAL_MINIMUM(2, -1000),
-            PHYSICAL_MAXIMUM(2, 1000),
+            LOGICAL_MINIMUM(2, 0x8000),
+            LOGICAL_MAXIMUM(2, 0x7fff),
+            PHYSICAL_MINIMUM(2, -10000),
+            PHYSICAL_MAXIMUM(2, +10000),
             REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
         END_COLLECTION,
     };
 
@@ -704,21 +697,23 @@ static BOOL hid_descriptor_add_set_ramp_force(struct unix_device *iface)
             REPORT_ID(1, report_id),
 
             USAGE(1, PID_USAGE_EFFECT_BLOCK_INDEX),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(1, 0x7f),
-            LOGICAL_MINIMUM(1, 0x00),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
 
             USAGE(1, PID_USAGE_RAMP_START),
             USAGE(1, PID_USAGE_RAMP_END),
-            LOGICAL_MINIMUM(1, 0x80),
-            LOGICAL_MAXIMUM(1, 0x7f),
+            LOGICAL_MINIMUM(2, 0x8000),
+            LOGICAL_MAXIMUM(2, 0x7fff),
             PHYSICAL_MINIMUM(2, -10000),
             PHYSICAL_MAXIMUM(2, +10000),
-            REPORT_SIZE(1, 8),
+            REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 2),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
         END_COLLECTION,
     };
 
@@ -762,12 +757,14 @@ BOOL hid_device_add_physical(struct unix_device *iface, USAGE *usages, USHORT co
 
             USAGE(1, PID_USAGE_DEVICE_GAIN),
             LOGICAL_MINIMUM(1, 0),
-            LOGICAL_MAXIMUM(2, 0x00ff),
+            LOGICAL_MAXIMUM(1, 100),
             PHYSICAL_MINIMUM(1, 0),
-            PHYSICAL_MAXIMUM(2, 0x2710),
+            PHYSICAL_MAXIMUM(2, 10000),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
+            PHYSICAL_MINIMUM(1, 0),
+            PHYSICAL_MAXIMUM(1, 0),
         END_COLLECTION,
     };
 
@@ -780,8 +777,8 @@ BOOL hid_device_add_physical(struct unix_device *iface, USAGE *usages, USHORT co
             REPORT_ID(1, effect_control_report),
 
             USAGE(1, PID_USAGE_EFFECT_BLOCK_INDEX),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(1, 0x7f),
-            LOGICAL_MINIMUM(1, 0x00),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
@@ -816,8 +813,8 @@ BOOL hid_device_add_physical(struct unix_device *iface, USAGE *usages, USHORT co
             REPORT_ID(1, effect_update_report),
 
             USAGE(1, PID_USAGE_EFFECT_BLOCK_INDEX),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(1, 0x7f),
-            LOGICAL_MINIMUM(1, 0x00),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
             OUTPUT(1, Data|Var|Abs),
@@ -841,16 +838,14 @@ BOOL hid_device_add_physical(struct unix_device *iface, USAGE *usages, USHORT co
             UNIT_EXPONENT(1, -3), /* 10^-3 */
             LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(2, 0x7fff),
-            PHYSICAL_MINIMUM(1, 0),
-            PHYSICAL_MAXIMUM(2, 0x7fff),
             REPORT_SIZE(1, 16),
             REPORT_COUNT(1, 4),
             OUTPUT(1, Data|Var|Abs),
-            PHYSICAL_MAXIMUM(1, 0),
             UNIT_EXPONENT(1, 0),
             UNIT(1, 0), /* None */
 
             USAGE(1, PID_USAGE_TRIGGER_BUTTON),
+            LOGICAL_MINIMUM(1, 0),
             LOGICAL_MAXIMUM(2, state->button_count),
             REPORT_SIZE(1, 8),
             REPORT_COUNT(1, 1),
@@ -860,6 +855,7 @@ BOOL hid_device_add_physical(struct unix_device *iface, USAGE *usages, USHORT co
             COLLECTION(1, Logical),
                 USAGE(4, (HID_USAGE_PAGE_GENERIC<<16)|HID_USAGE_GENERIC_X),
                 USAGE(4, (HID_USAGE_PAGE_GENERIC<<16)|HID_USAGE_GENERIC_Y),
+                LOGICAL_MINIMUM(1, 0),
                 LOGICAL_MAXIMUM(1, 1),
                 REPORT_SIZE(1, 1),
                 REPORT_COUNT(1, 2),
@@ -878,13 +874,11 @@ BOOL hid_device_add_physical(struct unix_device *iface, USAGE *usages, USHORT co
                 UNIT(1, 0x14), /* Eng Rot:Angular Pos */
                 UNIT_EXPONENT(1, -2),
                 LOGICAL_MINIMUM(1, 0),
-                LOGICAL_MAXIMUM(2, 0x00ff),
-                PHYSICAL_MAXIMUM(4, 36000),
-                REPORT_SIZE(1, 8),
+                LOGICAL_MAXIMUM(4, 36000),
+                REPORT_SIZE(1, 16),
                 REPORT_COUNT(1, 2),
                 OUTPUT(1, Data|Var|Abs),
             END_COLLECTION,
-            PHYSICAL_MAXIMUM(1, 0),
             UNIT_EXPONENT(1, 0),
             UNIT(1, 0), /* None */
         END_COLLECTION,
diff --git a/dlls/winebus.sys/unix_private.h b/dlls/winebus.sys/unix_private.h
index 0315deca35d..10784652a2b 100644
--- a/dlls/winebus.sys/unix_private.h
+++ b/dlls/winebus.sys/unix_private.h
@@ -31,39 +31,39 @@
 
 struct effect_periodic
 {
-    BYTE magnitude;
-    BYTE offset;
-    BYTE phase;
+    UINT16 magnitude;
+    INT16 offset;
+    UINT16 phase;
     UINT16 period;
 };
 
 struct effect_envelope
 {
-    BYTE attack_level;
-    BYTE fade_level;
+    UINT16 attack_level;
+    UINT16 fade_level;
     UINT16 attack_time;
     UINT16 fade_time;
 };
 
 struct effect_condition
 {
-    BYTE center_point_offset;
-    BYTE positive_coefficient;
-    BYTE negative_coefficient;
-    BYTE positive_saturation;
-    BYTE negative_saturation;
-    BYTE dead_band;
+    INT16 center_point_offset;
+    INT16 positive_coefficient;
+    INT16 negative_coefficient;
+    UINT16 positive_saturation;
+    UINT16 negative_saturation;
+    UINT16 dead_band;
 };
 
 struct effect_constant_force
 {
-    UINT16 magnitude;
+    INT16 magnitude;
 };
 
 struct effect_ramp_force
 {
-    BYTE ramp_start;
-    BYTE ramp_end;
+    INT16 ramp_start;
+    INT16 ramp_end;
 };
 
 struct effect_params
@@ -76,7 +76,7 @@ struct effect_params
     BYTE trigger_button;
     BOOL axis_enabled[2];
     BOOL direction_enabled;
-    BYTE direction[2];
+    UINT16 direction[2];
     BYTE condition_count;
     /* only for periodic, constant or ramp forces */
     struct effect_envelope envelope;
@@ -108,7 +108,7 @@ struct hid_device_vtbl
     NTSTATUS (*haptics_start)(struct unix_device *iface, DWORD duration_ms,
                               USHORT rumble_intensity, USHORT buzz_intensity);
     NTSTATUS (*physical_device_control)(struct unix_device *iface, USAGE control);
-    NTSTATUS (*physical_device_set_gain)(struct unix_device *iface, BYTE value);
+    NTSTATUS (*physical_device_set_gain)(struct unix_device *iface, BYTE percent);
     NTSTATUS (*physical_effect_control)(struct unix_device *iface, BYTE index, USAGE control, BYTE iterations);
     NTSTATUS (*physical_effect_update)(struct unix_device *iface, BYTE index, struct effect_params *params);
 };
diff --git a/dlls/winebus.sys/unixlib.c b/dlls/winebus.sys/unixlib.c
index 9d819bab7e3..1269ae05c2b 100644
--- a/dlls/winebus.sys/unixlib.c
+++ b/dlls/winebus.sys/unixlib.c
@@ -106,7 +106,7 @@ static NTSTATUS mouse_physical_device_control(struct unix_device *iface, USAGE c
     return STATUS_NOT_SUPPORTED;
 }
 
-static NTSTATUS mouse_physical_device_set_gain(struct unix_device *iface, BYTE value)
+static NTSTATUS mouse_physical_device_set_gain(struct unix_device *iface, BYTE percent)
 {
     return STATUS_NOT_SUPPORTED;
 }
@@ -189,7 +189,7 @@ static NTSTATUS keyboard_physical_device_control(struct unix_device *iface, USAG
     return STATUS_NOT_SUPPORTED;
 }
 
-static NTSTATUS keyboard_physical_device_set_gain(struct unix_device *iface, BYTE value)
+static NTSTATUS keyboard_physical_device_set_gain(struct unix_device *iface, BYTE percent)
 {
     return STATUS_NOT_SUPPORTED;
 }
-- 
2.33.1




More information about the wine-devel mailing list