RE: g_hid and hid-multitouch compatibility?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Benjamin,

I've attached some logs (rdesc.txt, events.txt and evtest.txt) showing a simulated 2-touch sequence spanning over four frames (last frame is a "untouch" event). Looking at the logs I'd say that I have a problem with the MIN/MAX limit decoding as evtest says limits are -127/127 but that is not what we're reporting according to rdesc.

While we're at it I have some more questions:
Q: Do we need to acknowledge the Device Configuration Feature Report sent from the host to the device (instructing the device to report "multi-touch" events)?
Q: Do we need to send the ContactCountMaximum Feature Report as described in the Windows 7 specification? Because I can see that these values are hardcoded (or just initialized?) in hid-multitouch for each supported device.

Regards,
Pablo


> -----Original Message-----
> From: Benjamin Tissoires [mailto:benjamin.tissoires@xxxxxxxxx]
> Sent: den 31 maj 2011 13:19
> To: Pablo Cases
> Cc: Stéphane Chatty; Henrik Rydberg; Jiri Kosina; linux-
> input@xxxxxxxxxxxxxxx
> Subject: Re: g_hid and hid-multitouch compatibility?
>
> Hi Pablo,
>
> On Mon, May 30, 2011 at 18:11, Pablo Cases <pablo.cases@xxxxxxxxxxxx>
> wrote:
> > Hi Benjamin,
> >
> > Now things seem to work a lot better thanks to your input :) I'm
> still on the 2.6.38 version of the multitouch code, but static
> registering works after adding our faked USB VIP/PID to hid.ids.c, hid-
> core.c and hid-multitouch.c:
> >
> > Digitizers.TipSwitch ---> Key.Touch
> > Digitizers.InRange ---> Sync.Report
> > Digitizers.ContactID ---> Sync.Report
> > GenericDesktop.X ---> Absolute.MTPositionX
> > GenericDesktop.Y ---> Absolute.MTPositionY
> > Digitizers.TipSwitch ---> Key.Touch
> > Digitizers.InRange ---> Sync.Report
> > Digitizers.ContactID ---> Sync.Report
> > GenericDesktop.X ---> Absolute.MTPositionX
> > GenericDesktop.Y ---> Absolute.MTPositionY
> > Digitizers.ContactCount ---> Sync.Report
> > Button.0001 ---> Key.LeftBtn
> > Button.0002 ---> Key.RightBtn
> > Button.0003 ---> Key.MiddleBtn
> > GenericDesktop.X ---> Absolute.MTPositionX
> > GenericDesktop.Y ---> Absolute.MTPositionY
> > GenericDesktop.Wheel ---> Relative.Wheel
> >
> > Running some diagnostics:
> > workstation$ sudo python eviocg.py /dev/input/event3
> > the device '/dev/input/event3' is multitouch enabled with the
> protocol B.
>
> Can you send me the output of the command "evtest /dev/input/event3"
> while moving/releasing fingers? I'm particularly interested in the
> headers of this output (with the maximum of the ABS_MT_SLOTS).
>
> Can you also send the full reports descriptor from
> /sys/kernel/debug/hid/0003:xxxx:yyyy.0002/rdesc
>
> >
> > An unmodified version of mtdiag now discovers our multitouch device,
> but I cannot get any valid touch output in the "drawing surface" of the
> application. You mentioned that I could optimize things by using some
> of the quirk defined, but is this necessary or optional?
>
> purely optional. (normally)
>
> > If I'm reporting as the Windows 7 specification describes do I still
> need to use any of the quirks?
>
> the point is that many hardware makers interpreted differently this
> documentation (that's why we have those quirks). I'm not sure how
> Microsoft handles this mess, but it may be even more complicated than
> our hid-multitouch... So I can not guarantee that it will work out of
> the box.
> The big point lies in the understanding of the different
> significations of the fields during a touch life time.
>
> > Specially I'm wondering about the quirks that relate to contact
> id/contact number and slots. Do I really need to think about slots at
> all if I have valid ContactIDs in my reports?
>
> Well it's optimization, so it's optional (though I prefer, because it
> avoids finding elements in lists).
>
> Cheers,
> Benjamin
>
> >
> > Regards,
> > Pablo
> >
> >
> >> -----Original Message-----
> >> From: Benjamin Tissoires [mailto:benjamin.tissoires@xxxxxxxxx]
> >> Sent: den 28 maj 2011 00:42
> >> To: Pablo Cases
> >> Cc: Stéphane Chatty; Henrik Rydberg; Jiri Kosina; linux-
> >> input@xxxxxxxxxxxxxxx
> >> Subject: Re: g_hid and hid-multitouch compatibility?
> >>
> >> Hi Pablo
> >>
> >> On Sat, May 28, 2011 at 00:08, Pablo Cases
> <pablo.cases@xxxxxxxxxxxx>
> >> wrote:
> >> > Hi Benjamin,
> >> >
> >> > Thanks for the response. It is my ignorance that should be excused
> as
> >> I have shown/will show that I am the novice with regards to USB HID
> and
> >> multitouch in this forum :)
> >> > I´ll continue interleaving additional comments below.
> >> >
> >> > -Pablo
> >> >
> >> >> -----Original Message-----
> >> >> From: Benjamin Tissoires [mailto:benjamin.tissoires@xxxxxxxxx]
> >> >> Sent: den 27 maj 2011 18:10
> >> >> To: Pablo Cases
> >> >> Cc: Stéphane Chatty; Henrik Rydberg; Jiri Kosina; linux-
> >> >> input@xxxxxxxxxxxxxxx
> >> >> Subject: Re: g_hid and hid-multitouch compatibility?
> >> >>
> >> >> Hi Pablo,
> >> >>
> >> >> Adding Stéphane, Henrik and Jiri in CC.
> >> >>
> >> >> On Fri, May 27, 2011 at 17:33, Pablo Cases
> >> <pablo.cases@xxxxxxxxxxxx>
> >> >> wrote:
> >> >> >
> >> >> > Hi all,
> >> >> >
> >> >> > I have searched the net and the archives of linux-input for
> >> >> information on how to use the Linux g_hid kernel module on a
> device
> >> and
> >> >> the hid-multitouch kernel module on a host to communicate
> multitouch
> >> >> events. But unfortunately I can only get single touch working.
> >> >>
> >> >> Excuse my ignorance, I didn't know g_hid existed before your
> mail.
> >> If
> >> >> I understand it well enough, it's an hid emulation from user-
> space.
> >> >> Are you trying to inject events from a device in user-space to
> the
> >> >> kernel? If so, I think it would be easier to use uinput. And the
> >> funny
> >> >> think was that I'm currently writing a small lib to inject
> mulitouch
> >> >> events in a uinput device in an easier way.
> >> >>
> >> >
> >> > Maybe I misunderstand your explanation above but we´re not running
> >> g_hid and hid-multitouch on the same system. We have a separate
> >> hardware USB device running Linux with the g_hid kernel module
> loaded.
> >> On this device we then have (thanks to g_hid) a userspace file
> called
> >> /dev/hidg0 that we can write USB HID input reports to, which then
> will
> >> be sent through the device's gadget usb framework, through an
> physical
> >> USB cable, to a separate PC host running hid-multitouch.
> >>
> >> Thanks for the explaination. I didn't knew that it was possible to
> do
> >> such things. Linux is really a wonderful world ;-)
> >>
> >> >
> >> >> >
> >> >> > Q: Has anyone successfully completed a g_hid <-> hid-multitouch
> >> >> setup? And is there a description somewhere of such setup?
> >> >>
> >> >> I don't think so, hid-multitouch is really new (since 2.6.38, and
> >> was
> >> >> not very generic at this time).
> >> >>
> >> >> > Q: Is the Windows 7 multitouch USB HID descriptor the correct
> one
> >> to
> >> >> use also for Linux hid-multitouch? Or is some tweaking necessary?
> >> >>
> >> >> Normally, any valid Windows 7 multitouch USB HID descriptor can
> be
> >> >> handled by hid-multitouch.
> >> >> But it's more the events that are sent to hid-multitouch that
> will
> >> >> tell if your device is compatible or not.
> >> >>
> >> >> >
> >> >> > DETAILED DESCRIPTION BELOW
> >> >> > The device is a Linux device that uses g_hid (currently 2.6.37
> >> >> kernel) and a USB HID Report Descriptor for multitouch using two-
> >> touch
> >> >> parallel mode according to Microsoft document
> >> >> http://msdn.microsoft.com/en-us/windows/hardware/gg487437.
> >> >> >
> >> >> > On the host (ubuntu 11.04, 2.6.38 kernel) I register
> dynamically
> >> >> according to the description at http://lii-
> >> >> enac.fr/en/architecture/linux-input/multitouch-ubuntu-howto.html.
> >> Using
> >> >> the events/rdesc files in debugfs on Ubuntu 11.04 I have
> validated
> >> the
> >> >> parsing of the report descriptor and the input reports.
> >> >>
> >> >> This is really a bad idea to use these howto with ubuntu 11.04
> ATM.
> >> I
> >> >> didn't found the time to update this stuff, and this branch can
> not
> >> be
> >> >> used in ubuntu 11.04 (it contains code for 2.6.35 only, and there
> >> were
> >> >> changes in the hid layer after). If you only used the part "How
> to
> >> add
> >> >> your device to hid-multitouch from the user space" without
> updating
> >> >> your hid module, then it's as if you have'nt done anything (the
> >> >> generic hid module can not autodetect multitouch devices).
> >> >
> >> > Currently I am using the hid-multitouch code as existing in the
> >> source distribution of a 2.6.38 Ubuntu 11.04 fetched through apt-
> get.
> >> In the page referred to above I have only used the "How to add your
> >> device to hid-multitouch from the user space", and not the 2.6.35
> >> related parts.
> >>
> >> So there are no autodetection in your kernel.
> >>
> >> >
> >> > Ok, so for autodetection of multitouch devices to work I need to
> >> update the hid-multitouch module to a newer version (than was
> available
> >> in 2.6.38), preferably head on a git master branch somewhere?
> Another
> >> option is to add a static configuration field in hid-multitouch and
> >> hid-ids.h for my USB device's VID/PID. But then again, maybe it's
> >> better to do that on the latest available code as well?
> >>
> >> Autodetection is not available upstream too, sorry. The latest
> >> available code is on Jiri's tree. I'll try to maintain a bunch of
> >> patches to backport the work done on hid-multitouch since 2.6.35 on
> >> http://lii-enac.fr/en/architecture/linux-input/multitouch-
> >> howto.html#hid-multitouch
> >> but I'm a little late for the backports right now.
> >>
> >> Jiri's tree is at
> >> http://git.kernel.org/?p=linux/kernel/git/jikos/hid.git;a=summary
> >>
> >> >
> >> >> >
> >> >> > Example multitouch input report from
> >> >> /sys/kernel/debug/hid/0003:xxxx:yyyy.0002/events looks correct:
> >> >> > report (size 14) (numbered) =  05 03 00 a5 12 32 0e 03 01 99 14
> 32
> >> 0e
> >> >> 02
> >> >> > Digitizers.TipSwitch = 1
> >> >> > Digitizers.InRange = 1
> >> >> > Digitizers.ContactID = 0
> >> >> > GenericDesktop.X = 4773
> >> >> > GenericDesktop.Y = 3634
> >> >> > Digitizers.TipSwitch = 1
> >> >> > Digitizers.InRange = 1
> >> >> > Digitizers.ContactID = 1
> >> >> > GenericDesktop.X = 5273
> >> >> > GenericDesktop.Y = 3634
> >> >> > Digitizers.ContactCount = 2
> >> >> >
> >> >>
> >> >> Most of the time, the problematic part comes from the releases.
> But
> >> >> it's a good start.
> >> >
> >> > With "releases" I assume you mean the finger removal from the
> touch
> >> surface, like a "touch-up" event? I have not implemented that part
> yet,
> >> but our Microsoft contact informed us that for Windows 7
> compatibility
> >> it should be reported as a final touch report with
> >> > TipSwitch = 0
> >> > InRange = 1
> >> > Is this applicable to hid-multitouch too?
> >>
> >> Exactly, I meant touch-up. Your behavior is applicable to hid-
> >> multitouch.
> >>
> >> Once registering your device with hid-multitouch, you can choose a
> >> class that controls how optimized your driver will be. Normally, the
> >> MT_CLS_DEFAULT class will work with any Win 7 compliant device
> >> (crossing fingers).
> >>
> >> Then, you can optimize it by looking for the classes that have
> >> MT_QUIRK_VALID_IS_INRANGE (or adding a new one). In the same time,
> you
> >> can also optimize the way your device actually does the match
> between
> >> slots (from 0 to N-1 with N the maximum contact count of your
> device)
> >> and the tracking_id reported by the device (or the position in the
> hid
> >> report).
> >> For dual touches only devices, the differences are not big, but we
> >> prefer to optimize things all the time ;-)
> >>
> >> >
> >> >> > The first touch in the report is correctly presented both on
> >> Windows
> >> >> and on Ubuntu 11.04 (using ENAC's mtdiag tool with a minor tweak
> to
> >> >> display data from all devices not just multitouch ones). I can
> see
> >> in
> >> >> the debugfs files that the data for the second touch data is
> >> correctly
> >> >> transferred and interpreted (see above), but the mapping to the
> >> linux
> >> >> input system seems a bit strange though (see below). My guess is
> >> that I
> >> >> have not been correctly registered as a multitouch device. I'm
> >> assuming
> >> >> this also because I cannot see any activity from the hid-
> multitouch
> >> >> module other than it being initialized when I connect my device
> >> >> (probably another reason for the needed tweak in mtdiag above).
> >> >> >
> >> >> > Example mapping from
> >> /sys/kernel/debug/hid/0003:xxxx:yyyy.0002/rdesc
> >> >> that does not look entirely correct for the second touch:
> >> >> > Digitizers.TipSwitch ---> Key.Touch
> >> >> > Digitizers.InRange ---> Key.ToolPen
> >> >> > Digitizers.ContactID ---> Absolute.Misc
> >> >> > GenericDesktop.X ---> Absolute.X
> >> >> > GenericDesktop.Y ---> Absolute.Y
> >> >> > Digitizers.TipSwitch ---> Key.Touch
> >> >> > Digitizers.InRange ---> Key.ToolRubber
> >> >> > Digitizers.ContactID ---> Absolute.?
> >> >> > GenericDesktop.X ---> Absolute.Z
> >> >> > GenericDesktop.Y ---> Absolute.Rx
> >> >>
> >> >> This means that your device is handled by the generic usbhid and
> not
> >> >> hid-multitouch.
> >> >
> >> > That is what troubles me. I can see in the host's dmesg that
> >> "generic-usb" seems to be the driver chosen for my device when it is
> >> connected to the host. And according to your comment above I might
> not
> >> have correctly registered my device in hid-multitouch which would be
> >> the source of the problem...
> >> >
> >> > As a side note; I have sprinkled printk() here and there hid-
> >> multitouch.c and hid-core.c. While running the code I can only see
> that
> >> mt_init() and mt_exit() are called during module loading/unloading;
> >> never do I see any evidence of that the probing or mapping functions
> in
> >> hid-multitouch are used, only the generic usb parts are used for
> >> parsing the report descriptors and input reports.
> >>
> >> Yep, hid-multitouch does not handle your device. There is currently
> no
> >> user-space way to tell usbhid (the generic) not to handle a device.
> >> You'll have to add your VID-PID to the hid_have_special_driver list
> >> (in hid-core.c) to disable generic usb hid handling for your device.
> >> You can check the latest patches adding a specific device to
> >> hid-multitouch to have some examples.
> >>
> >> >
> >> > Could you point me to the location in the code where the decision
> is
> >> taken to use the hid-multitouch driver for a hid-multitouch
> supported
> >> device? I'm guessing it is somewhere in hid-core.c but I have not
> been
> >> able to pinpoint the location exactly. I could use this location as
> a
> >> start point to backtrace why we're not considered as a hid-
> multitouch
> >> supported device.
> >>
> >> it's just above ;-) hid_have_special_driver in hid-core.c
> >>
> >> Cheers,
> >> Benjamin
> >>
> >> >
> >> >> If you are trying to inject events from the user space, I
> strongly
> >> >> recommend to use uinput instead. Let me know if you want to have
> my
> >> >> little uinput-multitouch lib.
> >> >>
> >> >> Cheers,
> >> >> Benjamin
> >> >>
> >> >> > Digitizers.ContactCount ---> Absolute.?
> >> >> > Button.0001 ---> Key.LeftBtn
> >> >> > Button.0002 ---> Key.RightBtn
> >> >> > Button.0003 ---> Key.MiddleBtn
> >> >> > GenericDesktop.X ---> Relative.X
> >> >> > GenericDesktop.Y ---> Relative.Y
> >> >> > GenericDesktop.Wheel ---> Relative.Wheel
> >> >> >
> >> >> >
> >> >> > Regards,
> >> >> > Pablo Cases
> >> >> >
> >> >> > -------------------------
> >> >> > Pablo Cases, M.Sc.
> >> >> > Development Engineer Software
> >> >> > FlatFrog Laboratories AB
> >> >> > Magistratsvägen 10
> >> >> > 22643 Lund
> >> >> > Sweden
> >> >> > Tel: +46 708 393816
> >> >> > Mail: pc@xxxxxxxxxxxx
> >> >> > Web: www.flatfrog.com
> >> >> > --
> >> >> > To unsubscribe from this list: send the line "unsubscribe
> linux-
> >> >> input" in
> >> >> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> >> >> > More majordomo info at  http://vger.kernel.org/majordomo-
> info.html
> >> >> >
> >> >
> >
05 0d 09 04 a1 01 85 05 09 22 a1 02 15 00 25 01 75 01 95 01 09 42 81 02 09 32 81 02 95 06 81 03 25 7f 75 08 95 01 09 51 81 02 05 01 75 10 65 f1 55 0f 26 a6 2b 35 00 46 48 1b 09 30 81 02 26 90 18 46 59 0f 09 31 81 02 c0 05 0d 09 22 65 00 55 00 a1 02 45 00 05 0d 15 00 25 01 75 01 95 01 09 42 81 02 09 32 81 02 95 06 81 03 25 7f 75 08 95 01 09 51 81 02 05 01 75 10 65 f1 55 0f 26 a6 2b 35 00 46 48 1b 09 30 81 02 26 90 18 46 59 0f 09 31 81 02 c0 05 0d 09 54 65 00 55 00 95 01 75 08 45 00 15 00 25 08 81 02 09 55 85 06 25 0a b1 02 c0 09 0e a1 01 85 03 09 23 a1 02 09 52 09 53 15 00 25 0a 75 08 95 02 b1 02 c0 c0 05 01 09 02 a1 01 85 04 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 01 05 01 09 30 09 31 09 38 15 81 25 7f 75 08 95 03 81 06 c0 c0 

  INPUT(5)[INPUT]
    Field(0)
      Logical(Digitizers.Finger)
      Usage(1)
        Digitizers.TipSwitch
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(1)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Logical(Digitizers.Finger)
      Usage(1)
        Digitizers.InRange
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(1)
      Report Offset(1)
      Flags( Variable Absolute )
    Field(2)
      Logical(Digitizers.Finger)
      Usage(1)
        Digitizers.ContactID
      Logical Minimum(0)
      Logical Maximum(127)
      Report Size(8)
      Report Count(1)
      Report Offset(8)
      Flags( Variable Absolute )
    Field(3)
      Logical(Digitizers.Finger)
      Usage(1)
        GenericDesktop.X
      Logical Minimum(0)
      Logical Maximum(11174)
      Physical Minimum(0)
      Physical Maximum(6984)
      Unit Exponent(15)
      Unit(SI Linear : Centimeter^-1)
      Report Size(16)
      Report Count(1)
      Report Offset(16)
      Flags( Variable Absolute )
    Field(4)
      Logical(Digitizers.Finger)
      Usage(1)
        GenericDesktop.Y
      Logical Minimum(0)
      Logical Maximum(6288)
      Physical Minimum(0)
      Physical Maximum(3929)
      Unit Exponent(15)
      Unit(SI Linear : Centimeter^-1)
      Report Size(16)
      Report Count(1)
      Report Offset(32)
      Flags( Variable Absolute )
    Field(5)
      Logical(Digitizers.Finger)
      Usage(1)
        Digitizers.TipSwitch
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(1)
      Report Offset(48)
      Flags( Variable Absolute )
    Field(6)
      Logical(Digitizers.Finger)
      Usage(1)
        Digitizers.InRange
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(1)
      Report Offset(49)
      Flags( Variable Absolute )
    Field(7)
      Logical(Digitizers.Finger)
      Usage(1)
        Digitizers.ContactID
      Logical Minimum(0)
      Logical Maximum(127)
      Report Size(8)
      Report Count(1)
      Report Offset(56)
      Flags( Variable Absolute )
    Field(8)
      Logical(Digitizers.Finger)
      Usage(1)
        GenericDesktop.X
      Logical Minimum(0)
      Logical Maximum(11174)
      Physical Minimum(0)
      Physical Maximum(6984)
      Unit Exponent(15)
      Unit(SI Linear : Centimeter^-1)
      Report Size(16)
      Report Count(1)
      Report Offset(64)
      Flags( Variable Absolute )
    Field(9)
      Logical(Digitizers.Finger)
      Usage(1)
        GenericDesktop.Y
      Logical Minimum(0)
      Logical Maximum(6288)
      Physical Minimum(0)
      Physical Maximum(3929)
      Unit Exponent(15)
      Unit(SI Linear : Centimeter^-1)
      Report Size(16)
      Report Count(1)
      Report Offset(80)
      Flags( Variable Absolute )
    Field(10)
      Usage(1)
        Digitizers.ContactCount
      Logical Minimum(0)
      Logical Maximum(8)
      Report Size(8)
      Report Count(1)
      Report Offset(96)
      Flags( Variable Absolute )
  INPUT(4)[INPUT]
    Field(0)
      Physical(GenericDesktop.Pointer)
      Usage(3)
        Button.0001
        Button.0002
        Button.0003
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(3)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Physical(GenericDesktop.Pointer)
      Usage(3)
        GenericDesktop.X
        GenericDesktop.Y
        GenericDesktop.Wheel
      Logical Minimum(-127)
      Logical Maximum(127)
      Report Size(8)
      Report Count(3)
      Report Offset(8)
      Flags( Variable Relative )
  FEATURE(6)[FEATURE]
    Field(0)
      Usage(1)
        Digitizers.ContactMaximumNumber
      Logical Minimum(0)
      Logical Maximum(10)
      Report Size(8)
      Report Count(1)
      Report Offset(0)
      Flags( Variable Absolute )
  FEATURE(3)[FEATURE]
    Field(0)
      Logical(Digitizers.0023)
      Usage(2)
        Digitizers.InputMode
        Digitizers.DeviceIndex
      Logical Minimum(0)
      Logical Maximum(10)
      Report Size(8)
      Report Count(2)
      Report Offset(0)
      Flags( Variable Absolute )

Digitizers.TipSwitch ---> Key.Touch
Digitizers.InRange ---> Sync.Report
Digitizers.ContactID ---> Sync.Report
GenericDesktop.X ---> Absolute.MTPositionX
GenericDesktop.Y ---> Absolute.MTPositionY
Digitizers.TipSwitch ---> Key.Touch
Digitizers.InRange ---> Sync.Report
Digitizers.ContactID ---> Sync.Report
GenericDesktop.X ---> Absolute.MTPositionX
GenericDesktop.Y ---> Absolute.MTPositionY
Digitizers.ContactCount ---> Sync.Report
Button.0001 ---> Key.LeftBtn
Button.0002 ---> Key.RightBtn
Button.0003 ---> Key.MiddleBtn
GenericDesktop.X ---> Absolute.MTPositionX
GenericDesktop.Y ---> Absolute.MTPositionY
GenericDesktop.Wheel ---> Relative.Wheel

report (size 14) (numbered) =  05 03 00 88 13 b8 0b 03 01 7c 15 b8 0b 02
Digitizers.TipSwitch = 1
Digitizers.InRange = 1
Digitizers.ContactID = 0
GenericDesktop.X = 5000
GenericDesktop.Y = 3000
Digitizers.TipSwitch = 1
Digitizers.InRange = 1
Digitizers.ContactID = 1
GenericDesktop.X = 5500
GenericDesktop.Y = 3000
Digitizers.ContactCount = 2

report (size 14) (numbered) =  05 03 00 87 13 d0 0b 03 01 7b 15 d0 0b 02
Digitizers.TipSwitch = 1
Digitizers.InRange = 1
Digitizers.ContactID = 0
GenericDesktop.X = 4999
GenericDesktop.Y = 3024
Digitizers.TipSwitch = 1
Digitizers.InRange = 1
Digitizers.ContactID = 1
GenericDesktop.X = 5499
GenericDesktop.Y = 3024
Digitizers.ContactCount = 2

report (size 14) (numbered) =  05 03 00 86 13 e9 0b 03 01 7a 15 e9 0b 02
Digitizers.TipSwitch = 1
Digitizers.InRange = 1
Digitizers.ContactID = 0
GenericDesktop.X = 4998
GenericDesktop.Y = 3049
Digitizers.TipSwitch = 1
Digitizers.InRange = 1
Digitizers.ContactID = 1
GenericDesktop.X = 5498
GenericDesktop.Y = 3049
Digitizers.ContactCount = 2

report (size 14) (numbered) =  05 02 00 00 00 00 00 02 01 00 00 00 00 02
Digitizers.TipSwitch = 0
Digitizers.InRange = 1
Digitizers.ContactID = 0
GenericDesktop.X = 0
GenericDesktop.Y = 0
Digitizers.TipSwitch = 0
Digitizers.InRange = 1
Digitizers.ContactID = 1
GenericDesktop.X = 0
GenericDesktop.Y = 0
Digitizers.ContactCount = 2
workstation>$ sudo evtest /dev/input/event3
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xff0 product 0x1234 version 0x111
Input device name: "Flatfrog Multitouch 3200"
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
    Event code 330 (Touch)
  Event type 3 (Absolute)
    Event code 0 (X)
      Value      0
      Min     -127
      Max      127
    Event code 1 (Y)
      Value      0
      Min     -127
      Max      127
    Event code 47 (?)
      Value      0
      Min        0
      Max        1
    Event code 53 (?)
      Value      0
      Min     -127
      Max      127
    Event code 54 (?)
      Value      0
      Min     -127
      Max      127
    Event code 57 (?)
      Value      0
      Min        0
      Max    65535
Testing ... (interrupt to exit)
Event: time 1306852756.624325, type 3 (Absolute), code 57 (?), value 0
Event: time 1306852756.624331, type 3 (Absolute), code 53 (?), value 5000
Event: time 1306852756.624332, type 3 (Absolute), code 54 (?), value 3000
Event: time 1306852756.624333, type 3 (Absolute), code 47 (?), value 1
Event: time 1306852756.624333, type 3 (Absolute), code 57 (?), value 1
Event: time 1306852756.624334, type 3 (Absolute), code 53 (?), value 5500
Event: time 1306852756.624334, type 3 (Absolute), code 54 (?), value 3000
Event: time 1306852756.624336, type 1 (Key), code 330 (Touch), value 1
Event: time 1306852756.624337, type 3 (Absolute), code 0 (X), value 5000
Event: time 1306852756.624337, type 3 (Absolute), code 1 (Y), value 3000
Event: time 1306852756.624338, -------------- Report Sync ------------
Event: time 1306852756.629475, type 3 (Absolute), code 47 (?), value 0
Event: time 1306852756.629477, type 3 (Absolute), code 53 (?), value 4999
Event: time 1306852756.629477, type 3 (Absolute), code 54 (?), value 3024
Event: time 1306852756.629478, type 3 (Absolute), code 47 (?), value 1
Event: time 1306852756.629479, type 3 (Absolute), code 53 (?), value 5499
Event: time 1306852756.629479, type 3 (Absolute), code 54 (?), value 3024
Event: time 1306852756.629481, type 3 (Absolute), code 0 (X), value 4999
Event: time 1306852756.629482, type 3 (Absolute), code 1 (Y), value 3024
Event: time 1306852756.629482, -------------- Report Sync ------------
Event: time 1306852756.631954, type 3 (Absolute), code 47 (?), value 0
Event: time 1306852756.631956, type 3 (Absolute), code 53 (?), value 4998
Event: time 1306852756.631960, type 3 (Absolute), code 54 (?), value 3049
Event: time 1306852756.631969, type 3 (Absolute), code 47 (?), value 1
Event: time 1306852756.631970, type 3 (Absolute), code 53 (?), value 5498
Event: time 1306852756.631974, type 3 (Absolute), code 54 (?), value 3049
Event: time 1306852756.631986, type 3 (Absolute), code 0 (X), value 4998
Event: time 1306852756.631990, type 3 (Absolute), code 1 (Y), value 3049
Event: time 1306852756.631994, -------------- Report Sync ------------
Event: time 1306852756.644943, type 3 (Absolute), code 47 (?), value 0
Event: time 1306852756.644948, type 3 (Absolute), code 57 (?), value -1
Event: time 1306852756.644958, type 3 (Absolute), code 47 (?), value 1
Event: time 1306852756.644961, type 3 (Absolute), code 57 (?), value -1
Event: time 1306852756.644968, type 1 (Key), code 330 (Touch), value 0
Event: time 1306852756.644972, -------------- Report Sync ------------

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux