From 1a7cf570243e99355997433d944c7c04e3022ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 26 Oct 2023 13:59:25 +0200 Subject: [PATCH] usb_hid: the report value for an array is an index starting at the logical minimum to be tested, related to bug #18641 Change-Id: I54b09001a7baf5e868eb5f26ca3064d4e6f31e53 Reviewed-on: https://review.haiku-os.org/c/haiku/+/7069 Reviewed-by: Adrien Destugues Reviewed-by: waddlesplash Tested-by: Commit checker robot --- src/add-ons/kernel/drivers/input/hid_shared/HIDReportItem.h | 1 + .../kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/drivers/input/hid_shared/HIDReportItem.h b/src/add-ons/kernel/drivers/input/hid_shared/HIDReportItem.h index 926f6551c0..b77f4be524 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/HIDReportItem.h +++ b/src/add-ons/kernel/drivers/input/hid_shared/HIDReportItem.h @@ -23,6 +23,7 @@ public: bool Relative() { return fRelative; }; bool Array() { return fArray; }; bool Signed() { return fMinimum > fMaximum; }; + uint32 Minimum() { return fMinimum; } uint16 UsagePage(); uint16 UsageID(); diff --git a/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp index da6619f109..5e7fd41b45 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp +++ b/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp @@ -549,7 +549,7 @@ KeyboardProtocolHandler::_ReadReport(bigtime_t timeout, uint32 *cookie) if (key->Extract() == B_OK && key->Valid()) { // handle both array and bitmap based keyboard reports if (key->Array()) { - fCurrentKeys[i] = key->Data(); + fCurrentKeys[i] = key->Data() - key->Minimum(); } else { if (key->Data() == 1) fCurrentKeys[i] = key->UsageID();