Author: mmlr Date: 2011-05-31 00:31:59 +0200 (Tue, 31 May 2011) New Revision: 41846 Changeset: https://dev.haiku-os.org/changeset/41846 Modified: haiku/trunk/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp Log: Also take the unsigned -> signed conversion into account. Modified: haiku/trunk/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp 2011-05-30 22:17:56 UTC (rev 41845) +++ haiku/trunk/src/add-ons/kernel/drivers/input/usb_hid/HIDReportItem.cpp 2011-05-30 22:31:59 UTC (rev 41846) @@ -118,9 +118,14 @@ 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;