PORTS Forum

Ports and Interfaces => USB => Topic started by: stivo77 on February 02, 2021, 05:04:44 pm

Title: How to programatically force enumeration
Post by: stivo77 on February 02, 2021, 05:04:44 pm
I have an interesting problem with a touch screen device that interoperates with windows by responding to queries for touch HID report descriptors.  The project I am working on requires that the device be put into 'rotation mode' via a USB control message.  The device firmware is handling the command and dynamically does the rotation transform when reporting touches.  But the problem is that windows has already queried for the report descriptor and now the logical x/y limits in the descriptor are wrong.  Is there a windows API that can be called to force windows to request the report descriptor again? The device firmware knows that rotation  is in effect and will answer back with the right descriptor with the rotated x/y limits.  The control code that initiates the rotation is a C# library that uses LibUsbK, so I have a logical place in code to make windows API calls. Just not sure if there is a way to make windows ask for the report descriptor using the C# library.  Any help appreciated.
Title: Re: How to programatically force enumeration
Post by: Jan Axelson on February 02, 2021, 05:14:26 pm
I believe a new report descriptor would require enumerating as a new device or version in the device descriptor. This would require emulating detach and reattach.
Title: Re: How to programatically force enumeration
Post by: Renate on February 03, 2021, 01:38:16 pm
Well, you could force enumeration:
By sending something to your device to make it disconnect.
By sending something to the controlling hub to make it disabled/enabled.

But it's better to leave everything connected.

Doesn't Windows scale whatever the touch screen is to what the screen is (at least for a single screen)?
Can't you just report the range as [0, 0] to [65535, 65535]?
Then you can scale/rotate the touches on your side.