HID digitizer on XP

I know this has been addressed in the past, but after sifting through
posts all afternoon I still can’t understand what is required (nor get
anything working).

I’m trying to write a driver for a touchscreen (digitizer) that appears as
a HID device (the device itself is not HID). I’m basing it on the VHIDMINI
sample, using (initially) the report descriptor from the “Digitizer
Drivers for Windows Touch and Pen-based Computers” document from Microsoft.

However, I’ve since read that Digitizer USAGE PAGE is not supported in XP.
I’ve also read posts that claim all you need to do is change the usage
page to Generic Desktop. Well I’m afraid that doesn’t make much sense to
me as USAGE 4 (touchscreen) suddenly becomes joystick under generic
desktop??? How’s that supposed to work???

Also, I don’t understand the drivers that have a “dummy mouse collection”.
Why?

So, under WinXP:

  1. What usage page / usages should I be using?
  2. Do I require a “dummy mouse collection”?
  3. If so, does this dummy report need to be sent as well?

Regards,


Mark McDougall, Engineer
Virtual Logic Pty Ltd, http:
21-25 King St, Rockdale, 2216
Ph: +612-9599-3255 Fax: +612-9599-3266</http:>

Mark McDougall wrote:

So, under WinXP:

  1. What usage page / usages should I be using?
  2. Do I require a “dummy mouse collection”?
  3. If so, does this dummy report need to be sent as well?

I’ve managed to get something “sort of” working, by simply using a mouse
collection. Seems the digitizer collection is completely and utterly
useless under WinXP.

However, the x,y values don’t seem to be working correctly. I’m using
16-bit values for each. I’ve set a logical min and max, but the pointer
still hovers around the top-left corner.

As a test, I initialise X,Y to zero and each call to getreport increments
both. I can see X,Y increment in TraceView but the pointer barely moves.

Any idea what I’m doing wrong?

Regards,


Mark McDougall, Engineer
Virtual Logic Pty Ltd, http:
21-25 King St, Rockdale, 2216
Ph: +612-9599-3255 Fax: +612-9599-3266</http:>

Mark McDougall wrote:

As a test, I initialise X,Y to zero and each call to getreport increments
both. I can see X,Y increment in TraceView but the pointer barely moves.

I’ve set my logical minimum to zero, and my logical maximum to 4095. The
pointer slowly moves away from the corner, but only reaches about 1/8th of
the screen away when the X,Y values start to exceed 4095, and it stops
moving thereafter…

Regards,


Mark McDougall, Engineer
Virtual Logic Pty Ltd, http:
21-25 King St, Rockdale, 2216
Ph: +612-9599-3255 Fax: +612-9599-3266</http:>