From 6d551ee44f44a2b6352b7eed2d2517c55e14f958 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Mon, 30 May 2011 22:31:59 +0000 Subject: [PATCH] Also take the unsigned -> signed conversion into account. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41846 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/input/usb_hid/HIDReportItem.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp b/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp index 8a1aa51af0..ca59641936 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp +++ b/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp @@ -118,9 +118,14 @@ HIDReportItem::SetData(uint32 data) uint32 HIDReportItem::ScaledData(uint8 scaleToBits, bool toBeSigned) { - uint32 source = fData; - if (Signed() && !toBeSigned) - source = (uint32)((int32)fData - (int32)fMinimum); + uint32 source; + if (Signed() != toBeSigned) { + if (toBeSigned) + source = (uint32)((int32)fData - (fMaximum + 1) / 2) & fMask; + else + source = (uint32)((int32)fData - (int32)fMinimum); + } else + source = fData; if (fBitCount == scaleToBits) return source;