Skip to content

Bug in EncodedItem when creating instance and setting DataValueSigned #22

@DBuergin

Description

@DBuergin

TL;DR

When creating instance of EncodedItem

if DataValueSigned = X where

(X > Int16.MinValue && X < 0) || (X > Int16.MaxValue)

Then DataValueSigned cannot be round tripped and later accessed DataItems have a wrong value.

Use case

  • Windows 10
  • Visual Studio 2022
  • C# .Net Framework 4.8

I'm trying to get Logical min and max values from a USB device under Windows. The logical minimum in the hid descriptor is -512.
The later accessed DataItem contains a logical minimum of 0.

I've managed to narrow it down to EncodedItem.cs, line 162

But I cannot for the life of me understand the logic behind EncodedItem.Data.

Steps to reproduce with VS 2022:

  1. Open HidSharp project

  2. In Visual Studio Menu, go to View > Other Windows > C# Interactive

  3. In Solution Explorer, right click HidSharp Project and choose Initialize Interactive with Project

  4. In Interactive Console, enter the following:

> using HidSharp.Reports.Encodings;
> var item = new EncodedItem() { ItemType = ItemType.Global, TagForGlobal = GlobalItemTag.LogicalMinimum, DataValueSigned = -32768 };
> item.DataValueSigned

EncodedItem.DataValueSigned = 0

Observations

In       Out
-32769 = -32769
-32768 = 0
-1     = 0
1      = 1
32767  = 32767
32768  = -32768

If anyone has an Idea how to correct this without breaking anything else, I would appreciate the help.

Diego

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions