USB TouchScreen Controller .

Hi ,

I’m currently trying to develop my own driver for a touchscreen usb
controller . ( actually got several kind of them from different
manufacturer )
they all come with drivers but :

  1. they not all compatible
  2. they dont have all options i’d like
  3. some of them are full of bugs

i’m new to driver development, so i first read most of Walter Oney WDM book
already but i still wondering what i need to do to start with .

i’m thinking of 2 solutions ,

  1. Make a MS Mouse driver filter driver .
  2. an USB Function Driver

i think i got all required information about those devices . they all use a
similar report packet .
some people told me to declare my devices as HID standard device , but only
1 of them can be installed as a HID device and the calibration is off .

from the USBINT Sample of Oney’s Book , i succesfully installed a function
driver for 1 of my device , and can read data from the interrupt pipe .
now i got 2 problems :

  1. How can i move my mouse pointer with the data i got kernel side if it’s
    possible ?
  2. The Sample use a IOCTL to wait for the interrupt and seems i can read
    data using DeviceIoControl() in the user mode testing app , but each time i
    write my interrupt data to my AssociatedIrp.SystemBuffer i got the BSOD ,
    IRQ_NOT_LESS_OR_EQUAL .

.
i’m aware i must be missing some basics so Any advices , will be greatly
appreciated
thanks ,
Ronan .

Hi Ronan,

Sorry I can’t help with the implications of the HID driver itself, but this
part I may be able to help with:

  1. The Sample use a IOCTL to wait for the interrupt and seems
    i can read
    data using DeviceIoControl() in the user mode testing app ,
    but each time i
    write my interrupt data to my AssociatedIrp.SystemBuffer i
    got the BSOD ,
    IRQ_NOT_LESS_OR_EQUAL .

This BSOD tells you that the buffer (or some other memory, check that it’s
actually the address of SystemBuffer that is the target address that fails)
that you’re writing to is pageable. You need to allocate a non-pageable
buffer, or use MmProbeAndLockPages to lock the pages so that they can not be
paged out.

Of course, if your address for the BSOD (i.e. the address being read or
written) is not SystemBuffer, then you need to figure out what it is that
it’s writing to, and make that non-pageable.

Hope this helps.


Mats

> got the BSOD ,

IRQ_NOT_LESS_OR_EQUAL .

When asking this kind of questions, you will likely get more reponses if you
attach the output from !analyze -v

Calvin Guan Software Engineer
ATI Technologies Inc. www.ati.com