diff mbox

hid-multitouch: Add support for Lumio panels

Message ID 1305725244-5327-1-git-send-email-benjamin.tissoires@enac.fr (mailing list archive)
State Accepted
Commit df167c4a0d68a9dbde044a39a77f255ac666f93e
Headers show

Commit Message

Benjamin Tissoires May 18, 2011, 1:27 p.m. UTC
This patch enables support for Lumio optical devices.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
---
 drivers/hid/Kconfig          |    1 +
 drivers/hid/hid-core.c       |    1 +
 drivers/hid/hid-ids.h        |    3 +++
 drivers/hid/hid-multitouch.c |    5 +++++
 4 files changed, 10 insertions(+), 0 deletions(-)

Comments

Jiri Kosina May 18, 2011, 1:36 p.m. UTC | #1
On Wed, 18 May 2011, Benjamin Tissoires wrote:

> This patch enables support for Lumio optical devices.

Applied, thanks Benjamin.
Peter Korsgaard May 19, 2011, 9:16 p.m. UTC | #2
>>>>> "Benjamin" == Benjamin Tissoires <benjamin.tissoires@enac.fr> writes:

 Benjamin> This patch enables support for Lumio optical devices.
 Benjamin> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>

 Benjamin> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
 Benjamin> index 2e46eb2..a8c46b0 100644
 Benjamin> --- a/drivers/hid/hid-ids.h
 Benjamin> +++ b/drivers/hid/hid-ids.h
 Benjamin> @@ -411,6 +411,9 @@
 Benjamin>  #define USB_DEVICE_ID_DINOVO_MINI	0xc71f
 Benjamin>  #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2	0xca03
 
 Benjamin> +#define USB_VENDOR_ID_LUMIO		0x202e
 Benjamin> +#define USB_DEVICE_ID_CRYSTALTOUCH	0x0006
 Benjamin> +

Does this require any special configuration of the touchscreen
controller? I have a 202e:0005 device which afaik normally doesn't send
any multi touch events.

HID descriptors:

Bus 001 Device 021: ID 202e:0005  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x202e 
  idProduct          0x0005 
  bcdDevice            2.00
  iManufacturer           1 LUMIO Inc
  iProduct                2 LUMIO CrystalTouch ver 1.1C
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          116
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      38
          Report Descriptor: (length is 38)
            Item(Global): Usage Page, data= [ 0xa0 0xff ] 65440
                            (null)
            Item(Local ): Usage, data= [ 0x05 ] 5
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Local ): Usage, data= [ 0xa6 ] 166
                            (null)
            Item(Local ): Usage, data= [ 0xa7 ] 167
                            (null)
            Item(Global): Logical Minimum, data= [ 0x80 ] 128
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x40 ] 64
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x33 ] 51
                            (null)
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x40 ] 64
            Item(Main  ): Output, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x33 ] 51
                            (null)
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Feature, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               2
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               2
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      64
          Report Descriptor: (length is 64)
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x06 ] 6
                            Keyboard
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Usage Page, data= [ 0x07 ] 7
                            Keyboard
            Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
                            Control Left
            Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
                            GUI Right
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x03 ] 3
                            Constant Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x05 ] 5
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x06 ] 6
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x65 ] 101
            Item(Global): Usage Page, data= [ 0x07 ] 7
                            Keyboard
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            No Event
            Item(Local ): Usage Maximum, data= [ 0x65 ] 101
                            Keyboard Application (Windows Key for Win95 or Compose)
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0xa0 0xff ] 65440
                            (null)
            Item(Local ): Usage, data= [ 0xa5 ] 165
                            (null)
            Item(Global): Logical Minimum, data= [ 0x80 ] 128
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Feature, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      85
          Report Descriptor: (length is 85)
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x02 ] 2
                            Mouse
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Local ): Usage, data= [ 0x01 ] 1
                            Pointer
            Item(Main  ): Collection, data= [ 0x00 ] 0
                            Physical
            Item(Global): Usage Page, data= [ 0x09 ] 9
                            Buttons
            Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                            Button 1 (Primary)
            Item(Local ): Usage Maximum, data= [ 0x03 ] 3
                            Button 3 (Tertiary)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x03 ] 3
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x05 ] 5
            Item(Main  ): Input, data= [ 0x01 ] 1
                            Constant Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x30 ] 48
                            Direction-X
            Item(Local ): Usage, data= [ 0x31 ] 49
                            Direction-Y
            Item(Global): Logical Minimum, data= [ 0x00 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x0f ] 4095
            Item(Global): Physical Minimum, data= [ 0x00 0x00 ] 0
            Item(Global): Physical Maximum, data= [ 0xff 0x7f ] 32767
            Item(Global): Unit, data= [ 0x00 0x00 ] 0
                            System: None, Unit: (None)
            Item(Global): Report Size, data= [ 0x10 ] 16
            Item(Global): Report Count, data= [ 0x02 ] 2
            Item(Main  ): Input, data= [ 0x62 ] 98
                            Data Variable Absolute No_Wrap Linear
                            No_Preferred_State Null_State Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x88 ] 136
                            System Menu Exit
            Item(Global): Logical Minimum, data= [ 0x81 ] 129
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x06 ] 6
                            Data Variable Relative No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0xff ] 255
                            Vendor Specific
            Item(Local ): Usage, data= [ 0x02 ] 2
                            (null)
            Item(Global): Report Count, data= [ 0x02 ] 2
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x01 ] 1
                            Constant Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      89
          Report Descriptor: (length is 89)
            Item(Global): Usage Page, data= [ 0x0d ] 13
                            Digitizer
            Item(Local ): Usage, data= [ 0x04 ] 4
                            Touch Screen
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Local ): Usage, data= [ 0x22 ] 34
                            Finger
            Item(Main  ): Collection, data= [ 0x00 ] 0
                            Physical
            Item(Local ): Usage, data= [ 0x42 ] 66
                            Tip Switch
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x03 ] 3
            Item(Main  ): Input, data= [ 0x03 ] 3
                            Constant Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x32 ] 50
                            In Range
            Item(Local ): Usage, data= [ 0x47 ] 71
                            Confidence
            Item(Global): Report Count, data= [ 0x02 ] 2
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x0a ] 10
            Item(Main  ): Input, data= [ 0x03 ] 3
                            Constant Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Global): Logical Maximum, data= [ 0xff 0x7f ] 32767
            Item(Global): Unit, data= [ 0x11 ] 17
                            System: SI Linear, Unit: Centimeter
            Item(Global): Unit Exponent, data= [ 0x0e ] 14
                            Unit Exponent: 14
            Item(Global): Physical Maximum, data= [ 0x5d 0x14 ] 5213
            Item(Global): Report Size, data= [ 0x10 ] 16
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Local ): Usage, data= [ 0x30 ] 48
                            Direction-X
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x31 ] 49
                            Direction-Y
            Item(Global): Physical Maximum, data= [ 0x75 0x0b ] 2933
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x0d ] 13
                            Digitizer
            Item(Local ): Usage, data= [ 0x51 ] 81
                            Contact ID
            Item(Global): Report Size, data= [ 0x10 ] 16
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x55 ] 85
                            Maximum Contact Number
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x08 ] 8
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Feature, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
Device Status:     0x0001
  Self Powered
Benjamin Tissoires May 19, 2011, 10:37 p.m. UTC | #3
Hi Peter,

your device presents Contact ID, Tip Switch, In Range and Confidence.
I would say that Win 7 would treat it as a multitouch screen, so this
might work with hid-multitouch. Please note that's the first time I
see a report descriptor with only one touch reported for a multitouch
screen.

For the configuration, the device may emulate a mouse by default, and
hid-multitouch is able to switch to the multitouch mode. You will
loose the right click, but it can be enabled in gnome at least
(accessibility settings).

Can you just replace in hid-ids.h:
- #define USB_DEVICE_ID_CRYSTALTOUCH  0x0006
+ #define USB_DEVICE_ID_CRYSTALTOUCH  0x0005

and see if it's working?
If you prefer, I can make a new patch, but I'll need to know which
kernel you are running (tree and branch). A 2.6.39 and above would be
great.

Cheers,
Benjamin

On Thu, May 19, 2011 at 23:16, Peter Korsgaard <jacmet@sunsite.dk> wrote:
>>>>>> "Benjamin" == Benjamin Tissoires <benjamin.tissoires@enac.fr> writes:
>
>  Benjamin> This patch enables support for Lumio optical devices.
>  Benjamin> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
>
>  Benjamin> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
>  Benjamin> index 2e46eb2..a8c46b0 100644
>  Benjamin> --- a/drivers/hid/hid-ids.h
>  Benjamin> +++ b/drivers/hid/hid-ids.h
>  Benjamin> @@ -411,6 +411,9 @@
>  Benjamin>  #define USB_DEVICE_ID_DINOVO_MINI   0xc71f
>  Benjamin>  #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2  0xca03
>
>  Benjamin> +#define USB_VENDOR_ID_LUMIO         0x202e
>  Benjamin> +#define USB_DEVICE_ID_CRYSTALTOUCH  0x0006
>  Benjamin> +
>
> Does this require any special configuration of the touchscreen
> controller? I have a 202e:0005 device which afaik normally doesn't send
> any multi touch events.
>
> HID descriptors:
>
> Bus 001 Device 021: ID 202e:0005
> Device Descriptor:
>  bLength                18
>  bDescriptorType         1
>  bcdUSB               2.00
>  bDeviceClass            0 (Defined at Interface level)
>  bDeviceSubClass         0
>  bDeviceProtocol         0
>  bMaxPacketSize0        64
>  idVendor           0x202e
>  idProduct          0x0005
>  bcdDevice            2.00
>  iManufacturer           1 LUMIO Inc
>  iProduct                2 LUMIO CrystalTouch ver 1.1C
>  iSerial                 0
>  bNumConfigurations      1
>  Configuration Descriptor:
>    bLength                 9
>    bDescriptorType         2
>    wTotalLength          116
>    bNumInterfaces          4
>    bConfigurationValue     1
>    iConfiguration          0
>    bmAttributes         0x80
>      (Bus Powered)
>    MaxPower              500mA
>    Interface Descriptor:
>      bLength                 9
>      bDescriptorType         4
>      bInterfaceNumber        0
>      bAlternateSetting       0
>      bNumEndpoints           2
>      bInterfaceClass         3 Human Interface Device
>      bInterfaceSubClass      0 No Subclass
>      bInterfaceProtocol      0 None
>      iInterface              0
>        HID Device Descriptor:
>          bLength                 9
>          bDescriptorType        33
>          bcdHID               1.10
>          bCountryCode            0 Not supported
>          bNumDescriptors         1
>          bDescriptorType        34 Report
>          wDescriptorLength      38
>          Report Descriptor: (length is 38)
>            Item(Global): Usage Page, data= [ 0xa0 0xff ] 65440
>                            (null)
>            Item(Local ): Usage, data= [ 0x05 ] 5
>                            (null)
>            Item(Main  ): Collection, data= [ 0x01 ] 1
>                            Application
>            Item(Local ): Usage, data= [ 0xa6 ] 166
>                            (null)
>            Item(Local ): Usage, data= [ 0xa7 ] 167
>                            (null)
>            Item(Global): Logical Minimum, data= [ 0x80 ] 128
>            Item(Global): Logical Maximum, data= [ 0x7f ] 127
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Report Count, data= [ 0x40 ] 64
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Local ): Usage, data= [ 0x33 ] 51
>                            (null)
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Report Count, data= [ 0x40 ] 64
>            Item(Main  ): Output, data= [ 0x00 ] 0
>                            Data Array Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Local ): Usage, data= [ 0x33 ] 51
>                            (null)
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Report Count, data= [ 0x08 ] 8
>            Item(Main  ): Feature, data= [ 0x00 ] 0
>                            Data Array Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Main  ): End Collection, data=none
>      Endpoint Descriptor:
>        bLength                 7
>        bDescriptorType         5
>        bEndpointAddress     0x81  EP 1 IN
>        bmAttributes            3
>          Transfer Type            Interrupt
>          Synch Type               None
>          Usage Type               Data
>        wMaxPacketSize     0x0040  1x 64 bytes
>        bInterval               2
>      Endpoint Descriptor:
>        bLength                 7
>        bDescriptorType         5
>        bEndpointAddress     0x02  EP 2 OUT
>        bmAttributes            3
>          Transfer Type            Interrupt
>          Synch Type               None
>          Usage Type               Data
>        wMaxPacketSize     0x0040  1x 64 bytes
>        bInterval               2
>    Interface Descriptor:
>      bLength                 9
>      bDescriptorType         4
>      bInterfaceNumber        1
>      bAlternateSetting       0
>      bNumEndpoints           1
>      bInterfaceClass         3 Human Interface Device
>      bInterfaceSubClass      0 No Subclass
>      bInterfaceProtocol      0 None
>      iInterface              0
>        HID Device Descriptor:
>          bLength                 9
>          bDescriptorType        33
>          bcdHID               1.11
>          bCountryCode            0 Not supported
>          bNumDescriptors         1
>          bDescriptorType        34 Report
>          wDescriptorLength      64
>          Report Descriptor: (length is 64)
>            Item(Global): Usage Page, data= [ 0x01 ] 1
>                            Generic Desktop Controls
>            Item(Local ): Usage, data= [ 0x06 ] 6
>                            Keyboard
>            Item(Main  ): Collection, data= [ 0x01 ] 1
>                            Application
>            Item(Global): Usage Page, data= [ 0x07 ] 7
>                            Keyboard
>            Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
>                            Control Left
>            Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
>                            GUI Right
>            Item(Global): Logical Minimum, data= [ 0x00 ] 0
>            Item(Global): Logical Maximum, data= [ 0x01 ] 1
>            Item(Global): Report Size, data= [ 0x01 ] 1
>            Item(Global): Report Count, data= [ 0x08 ] 8
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Report Count, data= [ 0x01 ] 1
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Main  ): Input, data= [ 0x03 ] 3
>                            Constant Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Report Count, data= [ 0x05 ] 5
>            Item(Global): Report Size, data= [ 0x01 ] 1
>            Item(Global): Report Count, data= [ 0x06 ] 6
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Logical Minimum, data= [ 0x00 ] 0
>            Item(Global): Logical Maximum, data= [ 0x65 ] 101
>            Item(Global): Usage Page, data= [ 0x07 ] 7
>                            Keyboard
>            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
>                            No Event
>            Item(Local ): Usage Maximum, data= [ 0x65 ] 101
>                            Keyboard Application (Windows Key for Win95 or Compose)
>            Item(Main  ): Input, data= [ 0x00 ] 0
>                            Data Array Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Usage Page, data= [ 0xa0 0xff ] 65440
>                            (null)
>            Item(Local ): Usage, data= [ 0xa5 ] 165
>                            (null)
>            Item(Global): Logical Minimum, data= [ 0x80 ] 128
>            Item(Global): Logical Maximum, data= [ 0x7f ] 127
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Report Count, data= [ 0x08 ] 8
>            Item(Main  ): Feature, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Main  ): End Collection, data=none
>      Endpoint Descriptor:
>        bLength                 7
>        bDescriptorType         5
>        bEndpointAddress     0x86  EP 6 IN
>        bmAttributes            3
>          Transfer Type            Interrupt
>          Synch Type               None
>          Usage Type               Data
>        wMaxPacketSize     0x0008  1x 8 bytes
>        bInterval               1
>    Interface Descriptor:
>      bLength                 9
>      bDescriptorType         4
>      bInterfaceNumber        2
>      bAlternateSetting       0
>      bNumEndpoints           1
>      bInterfaceClass         3 Human Interface Device
>      bInterfaceSubClass      0 No Subclass
>      bInterfaceProtocol      0 None
>      iInterface              0
>        HID Device Descriptor:
>          bLength                 9
>          bDescriptorType        33
>          bcdHID               1.11
>          bCountryCode            0 Not supported
>          bNumDescriptors         1
>          bDescriptorType        34 Report
>          wDescriptorLength      85
>          Report Descriptor: (length is 85)
>            Item(Global): Usage Page, data= [ 0x01 ] 1
>                            Generic Desktop Controls
>            Item(Local ): Usage, data= [ 0x02 ] 2
>                            Mouse
>            Item(Main  ): Collection, data= [ 0x01 ] 1
>                            Application
>            Item(Local ): Usage, data= [ 0x01 ] 1
>                            Pointer
>            Item(Main  ): Collection, data= [ 0x00 ] 0
>                            Physical
>            Item(Global): Usage Page, data= [ 0x09 ] 9
>                            Buttons
>            Item(Local ): Usage Minimum, data= [ 0x01 ] 1
>                            Button 1 (Primary)
>            Item(Local ): Usage Maximum, data= [ 0x03 ] 3
>                            Button 3 (Tertiary)
>            Item(Global): Logical Minimum, data= [ 0x00 ] 0
>            Item(Global): Logical Maximum, data= [ 0x01 ] 1
>            Item(Global): Report Count, data= [ 0x03 ] 3
>            Item(Global): Report Size, data= [ 0x01 ] 1
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Report Count, data= [ 0x01 ] 1
>            Item(Global): Report Size, data= [ 0x05 ] 5
>            Item(Main  ): Input, data= [ 0x01 ] 1
>                            Constant Array Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Usage Page, data= [ 0x01 ] 1
>                            Generic Desktop Controls
>            Item(Local ): Usage, data= [ 0x30 ] 48
>                            Direction-X
>            Item(Local ): Usage, data= [ 0x31 ] 49
>                            Direction-Y
>            Item(Global): Logical Minimum, data= [ 0x00 0x00 ] 0
>            Item(Global): Logical Maximum, data= [ 0xff 0x0f ] 4095
>            Item(Global): Physical Minimum, data= [ 0x00 0x00 ] 0
>            Item(Global): Physical Maximum, data= [ 0xff 0x7f ] 32767
>            Item(Global): Unit, data= [ 0x00 0x00 ] 0
>                            System: None, Unit: (None)
>            Item(Global): Report Size, data= [ 0x10 ] 16
>            Item(Global): Report Count, data= [ 0x02 ] 2
>            Item(Main  ): Input, data= [ 0x62 ] 98
>                            Data Variable Absolute No_Wrap Linear
>                            No_Preferred_State Null_State Non_Volatile Bitfield
>            Item(Global): Usage Page, data= [ 0x01 ] 1
>                            Generic Desktop Controls
>            Item(Local ): Usage, data= [ 0x88 ] 136
>                            System Menu Exit
>            Item(Global): Logical Minimum, data= [ 0x81 ] 129
>            Item(Global): Logical Maximum, data= [ 0x7f ] 127
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Report Count, data= [ 0x01 ] 1
>            Item(Main  ): Input, data= [ 0x06 ] 6
>                            Data Variable Relative No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Usage Page, data= [ 0xff ] 255
>                            Vendor Specific
>            Item(Local ): Usage, data= [ 0x02 ] 2
>                            (null)
>            Item(Global): Report Count, data= [ 0x02 ] 2
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Main  ): Input, data= [ 0x01 ] 1
>                            Constant Array Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Main  ): End Collection, data=none
>            Item(Main  ): End Collection, data=none
>      Endpoint Descriptor:
>        bLength                 7
>        bDescriptorType         5
>        bEndpointAddress     0x85  EP 5 IN
>        bmAttributes            3
>          Transfer Type            Interrupt
>          Synch Type               None
>          Usage Type               Data
>        wMaxPacketSize     0x0008  1x 8 bytes
>        bInterval               1
>    Interface Descriptor:
>      bLength                 9
>      bDescriptorType         4
>      bInterfaceNumber        3
>      bAlternateSetting       0
>      bNumEndpoints           1
>      bInterfaceClass         3 Human Interface Device
>      bInterfaceSubClass      0 No Subclass
>      bInterfaceProtocol      0 None
>      iInterface              0
>        HID Device Descriptor:
>          bLength                 9
>          bDescriptorType        33
>          bcdHID               1.11
>          bCountryCode            0 Not supported
>          bNumDescriptors         1
>          bDescriptorType        34 Report
>          wDescriptorLength      89
>          Report Descriptor: (length is 89)
>            Item(Global): Usage Page, data= [ 0x0d ] 13
>                            Digitizer
>            Item(Local ): Usage, data= [ 0x04 ] 4
>                            Touch Screen
>            Item(Main  ): Collection, data= [ 0x01 ] 1
>                            Application
>            Item(Local ): Usage, data= [ 0x22 ] 34
>                            Finger
>            Item(Main  ): Collection, data= [ 0x00 ] 0
>                            Physical
>            Item(Local ): Usage, data= [ 0x42 ] 66
>                            Tip Switch
>            Item(Global): Logical Minimum, data= [ 0x00 ] 0
>            Item(Global): Logical Maximum, data= [ 0x01 ] 1
>            Item(Global): Report Size, data= [ 0x01 ] 1
>            Item(Global): Report Count, data= [ 0x01 ] 1
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Report Count, data= [ 0x03 ] 3
>            Item(Main  ): Input, data= [ 0x03 ] 3
>                            Constant Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Local ): Usage, data= [ 0x32 ] 50
>                            In Range
>            Item(Local ): Usage, data= [ 0x47 ] 71
>                            Confidence
>            Item(Global): Report Count, data= [ 0x02 ] 2
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Report Count, data= [ 0x0a ] 10
>            Item(Main  ): Input, data= [ 0x03 ] 3
>                            Constant Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Usage Page, data= [ 0x01 ] 1
>                            Generic Desktop Controls
>            Item(Global): Logical Maximum, data= [ 0xff 0x7f ] 32767
>            Item(Global): Unit, data= [ 0x11 ] 17
>                            System: SI Linear, Unit: Centimeter
>            Item(Global): Unit Exponent, data= [ 0x0e ] 14
>                            Unit Exponent: 14
>            Item(Global): Physical Maximum, data= [ 0x5d 0x14 ] 5213
>            Item(Global): Report Size, data= [ 0x10 ] 16
>            Item(Global): Report Count, data= [ 0x01 ] 1
>            Item(Local ): Usage, data= [ 0x30 ] 48
>                            Direction-X
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Local ): Usage, data= [ 0x31 ] 49
>                            Direction-Y
>            Item(Global): Physical Maximum, data= [ 0x75 0x0b ] 2933
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Global): Usage Page, data= [ 0x0d ] 13
>                            Digitizer
>            Item(Local ): Usage, data= [ 0x51 ] 81
>                            Contact ID
>            Item(Global): Report Size, data= [ 0x10 ] 16
>            Item(Global): Report Count, data= [ 0x01 ] 1
>            Item(Main  ): Input, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Local ): Usage, data= [ 0x55 ] 85
>                            Maximum Contact Number
>            Item(Global): Logical Minimum, data= [ 0x00 ] 0
>            Item(Global): Logical Maximum, data= [ 0x08 ] 8
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Report Count, data= [ 0x01 ] 1
>            Item(Main  ): Feature, data= [ 0x02 ] 2
>                            Data Variable Absolute No_Wrap Linear
>                            Preferred_State No_Null_Position Non_Volatile Bitfield
>            Item(Main  ): End Collection, data=none
>            Item(Main  ): End Collection, data=none
>      Endpoint Descriptor:
>        bLength                 7
>        bDescriptorType         5
>        bEndpointAddress     0x87  EP 7 IN
>        bmAttributes            3
>          Transfer Type            Interrupt
>          Synch Type               None
>          Usage Type               Data
>        wMaxPacketSize     0x0008  1x 8 bytes
>        bInterval               1
> Device Status:     0x0001
>  Self Powered
>
> --
> Bye, Peter Korsgaard
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stéphane Chatty May 20, 2011, 7:22 a.m. UTC | #4
Le 20 mai 2011 à 00:37, Benjamin Tissoires a écrit :

> Hi Peter,
> 
> your device presents Contact ID, Tip Switch, In Range and Confidence.
> I would say that Win 7 would treat it as a multitouch screen, so this
> might work with hid-multitouch. Please note that's the first time I
> see a report descriptor with only one touch reported for a multitouch
> screen.

Might be the same serial protocol as in capacitive eGalax panels.

St.



--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter Korsgaard May 20, 2011, 10:12 a.m. UTC | #5
>>>>> "Benjamin" == Benjamin Tissoires <benjamin.tissoires@enac.fr> writes:

Hi,

 Benjamin> your device presents Contact ID, Tip Switch, In Range and
 Benjamin> Confidence.  I would say that Win 7 would treat it as a
 Benjamin> multitouch screen, so this might work with
 Benjamin> hid-multitouch. Please note that's the first time I see a
 Benjamin> report descriptor with only one touch reported for a
 Benjamin> multitouch screen.

 Benjamin> For the configuration, the device may emulate a mouse by
 Benjamin> default, and hid-multitouch is able to switch to the
 Benjamin> multitouch mode. You will loose the right click, but it can
 Benjamin> be enabled in gnome at least (accessibility settings).

 Benjamin> Can you just replace in hid-ids.h:
 Benjamin> - #define USB_DEVICE_ID_CRYSTALTOUCH  0x0006
 Benjamin> + #define USB_DEVICE_ID_CRYSTALTOUCH  0x0005

 Benjamin> and see if it's working?  If you prefer, I can make a new
 Benjamin> patch, but I'll need to know which kernel you are running
 Benjamin> (tree and branch). A 2.6.39 and above would be great.

I'm on 2.6.39. The patch doesn't apply cleanly, but I've fixed it up
manually (http://peter.korsgaard.com/lumio-2.6.29.patch).

hid-multitouch does get loaded, and everything looks OK:

usb 2-1.1: new full speed USB device number 4 using uhci_hcd
hid-multitouch 0003:202E:0005.0008: hiddev0: USB HID v1.10 Device [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input0
input: LUMIO Inc LUMIO CrystalTouch ver 1.1C as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1/input/input18
hid-multitouch 0003:202E:0005.0009: input: USB HID v1.11 Keyboard [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input1
input: LUMIO Inc LUMIO CrystalTouch ver 1.1C as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/input/input19
hid-multitouch 0003:202E:0005.000A: input: USB HID v1.11 Mouse [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input2
input: LUMIO Inc LUMIO CrystalTouch ver 1.1C as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/input/input20
hid-multitouch 0003:202E:0005.000B: input: USB HID v1.11 Device [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input3

Evdev output is also different, but it doesn't seem to ever generate any
events when I touch the screen.

Before I had:

I: Bus=0003 Vendor=202e Product=0005 Version=0111
N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
P: Phys=usb-0000:00:1d.0-1.1/input1
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1/input/input28
U: Uniq=
H: Handlers=mac-button-emul sysrq kbd event16 
B: PROP=0
B: EV=100013
B: KEY=e080ffdf01cfffff fffffffffffffffe
B: MSC=10

I: Bus=0003 Vendor=202e Product=0005 Version=0111
N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
P: Phys=usb-0000:00:1d.0-1.1/input2
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/input/input29
U: Uniq=
H: Handlers=mac-button-emul event17 
B: PROP=0
B: EV=1f
B: KEY=70000 0 0 0 0
B: REL=200
B: ABS=3
B: MSC=10

I: Bus=0003 Vendor=202e Product=0005 Version=0111
N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
P: Phys=usb-0000:00:1d.0-1.1/input3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/input/input30
U: Uniq=
H: Handlers=mac-button-emul event18 
B: PROP=0
B: EV=1b
B: KEY=420 1 0 0 0 0
B: ABS=10000000003
B: MSC=10

With event16 + event18 never generating any events, and event17 giving:

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x202e product 0x5 version 0x111
Input device name: "LUMIO Inc LUMIO CrystalTouch ver 1.1C"
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
    Event code 272 (LeftBtn)
    Event code 273 (RightBtn)
    Event code 274 (MiddleBtn)
  Event type 2 (Relative)
    Event code 9 (Misc)
  Event type 3 (Absolute)
    Event code 0 (X)
      Value    650
      Min        0
      Max     4095
    Event code 1 (Y)
      Value   3221
      Min        0
      Max     4095
  Event type 4 (Misc)
    Event code 4 (ScanCode)
Testing ... (interrupt to exit)
Event: time 1305882024.934011, type 4 (Misc), code 4 (ScanCode), value 90001
Event: time 1305882024.934017, type 1 (Key), code 272 (LeftBtn), value 1
Event: time 1305882024.934029, type 3 (Absolute), code 0 (X), value 270
Event: time 1305882024.934034, type 3 (Absolute), code 1 (Y), value 1513
Event: time 1305882024.934039, type 2 (Relative), code 9 (Misc), value 1
Event: time 1305882024.934043, -------------- Report Sync ------------
Event: time 1305882024.943019, type 2 (Relative), code 9 (Misc), value 1
Event: time 1305882024.943025, -------------- Report Sync ------------
Event: time 1305882024.951998, type 3 (Absolute), code 0 (X), value 275
Event: time 1305882024.952006, type 3 (Absolute), code 1 (Y), value 1519
Event: time 1305882024.952010, type 2 (Relative), code 9 (Misc), value 1
Event: time 1305882024.952014, -------------- Report Sync ------------


Now with hid-multitouch I have:

I: Bus=0003 Vendor=202e Product=0005 Version=0111
N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
P: Phys=usb-0000:00:1d.0-1.1/input1
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1/input/input18
U: Uniq=
H: Handlers=mac-button-emul event16 
B: PROP=0
B: EV=100003
B: KEY=0

I: Bus=0003 Vendor=202e Product=0005 Version=0111
N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
P: Phys=usb-0000:00:1d.0-1.1/input2
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/input/input19
U: Uniq=
H: Handlers=mac-button-emul event17 
B: PROP=0
B: EV=b
B: KEY=0
B: ABS=60000000000003

I: Bus=0003 Vendor=202e Product=0005 Version=0111
N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
P: Phys=usb-0000:00:1d.0-1.1/input3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/input/input20
U: Uniq=
H: Handlers=mac-button-emul event18 
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=60000000000003

And event17:

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x202e product 0x5 version 0x111
Input device name: "LUMIO Inc LUMIO CrystalTouch ver 1.1C"
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
  Event type 3 (Absolute)
    Event code 0 (X)
      Value      0
      Min        0
      Max     4095
    Event code 1 (Y)
      Value      0
      Min        0
      Max     4095
    Event code 53 (?)
      Value      0
      Min        0
      Max     4095
    Event code 54 (?)
      Value      0
      Min        0
      Max     4095
Testing ... (interrupt to exit)
Event: time 1305886175.641112, -------------- Report Sync ------------

And then nothing. Any idea about how to progress?
Benjamin Tissoires May 20, 2011, 1:12 p.m. UTC | #6
Hi Peter,

I'll see with the device maker if your device should work in
multitouch. Your new evtest does not report enough multitouch things,
which is weird.

Cheers,
Benjamin

On Fri, May 20, 2011 at 12:12, Peter Korsgaard <jacmet@sunsite.dk> wrote:
>>>>>> "Benjamin" == Benjamin Tissoires <benjamin.tissoires@enac.fr> writes:
>
> Hi,
>
>  Benjamin> your device presents Contact ID, Tip Switch, In Range and
>  Benjamin> Confidence.  I would say that Win 7 would treat it as a
>  Benjamin> multitouch screen, so this might work with
>  Benjamin> hid-multitouch. Please note that's the first time I see a
>  Benjamin> report descriptor with only one touch reported for a
>  Benjamin> multitouch screen.
>
>  Benjamin> For the configuration, the device may emulate a mouse by
>  Benjamin> default, and hid-multitouch is able to switch to the
>  Benjamin> multitouch mode. You will loose the right click, but it can
>  Benjamin> be enabled in gnome at least (accessibility settings).
>
>  Benjamin> Can you just replace in hid-ids.h:
>  Benjamin> - #define USB_DEVICE_ID_CRYSTALTOUCH  0x0006
>  Benjamin> + #define USB_DEVICE_ID_CRYSTALTOUCH  0x0005
>
>  Benjamin> and see if it's working?  If you prefer, I can make a new
>  Benjamin> patch, but I'll need to know which kernel you are running
>  Benjamin> (tree and branch). A 2.6.39 and above would be great.
>
> I'm on 2.6.39. The patch doesn't apply cleanly, but I've fixed it up
> manually (http://peter.korsgaard.com/lumio-2.6.29.patch).
>
> hid-multitouch does get loaded, and everything looks OK:
>
> usb 2-1.1: new full speed USB device number 4 using uhci_hcd
> hid-multitouch 0003:202E:0005.0008: hiddev0: USB HID v1.10 Device [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input0
> input: LUMIO Inc LUMIO CrystalTouch ver 1.1C as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1/input/input18
> hid-multitouch 0003:202E:0005.0009: input: USB HID v1.11 Keyboard [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input1
> input: LUMIO Inc LUMIO CrystalTouch ver 1.1C as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/input/input19
> hid-multitouch 0003:202E:0005.000A: input: USB HID v1.11 Mouse [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input2
> input: LUMIO Inc LUMIO CrystalTouch ver 1.1C as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/input/input20
> hid-multitouch 0003:202E:0005.000B: input: USB HID v1.11 Device [LUMIO Inc LUMIO CrystalTouch ver 1.1C] on usb-0000:00:1d.0-1.1/input3
>
> Evdev output is also different, but it doesn't seem to ever generate any
> events when I touch the screen.
>
> Before I had:
>
> I: Bus=0003 Vendor=202e Product=0005 Version=0111
> N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> P: Phys=usb-0000:00:1d.0-1.1/input1
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1/input/input28
> U: Uniq=
> H: Handlers=mac-button-emul sysrq kbd event16
> B: PROP=0
> B: EV=100013
> B: KEY=e080ffdf01cfffff fffffffffffffffe
> B: MSC=10
>
> I: Bus=0003 Vendor=202e Product=0005 Version=0111
> N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> P: Phys=usb-0000:00:1d.0-1.1/input2
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/input/input29
> U: Uniq=
> H: Handlers=mac-button-emul event17
> B: PROP=0
> B: EV=1f
> B: KEY=70000 0 0 0 0
> B: REL=200
> B: ABS=3
> B: MSC=10
>
> I: Bus=0003 Vendor=202e Product=0005 Version=0111
> N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> P: Phys=usb-0000:00:1d.0-1.1/input3
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/input/input30
> U: Uniq=
> H: Handlers=mac-button-emul event18
> B: PROP=0
> B: EV=1b
> B: KEY=420 1 0 0 0 0
> B: ABS=10000000003
> B: MSC=10
>
> With event16 + event18 never generating any events, and event17 giving:
>
> Input driver version is 1.0.1
> Input device ID: bus 0x3 vendor 0x202e product 0x5 version 0x111
> Input device name: "LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> Supported events:
>  Event type 0 (Sync)
>  Event type 1 (Key)
>    Event code 272 (LeftBtn)
>    Event code 273 (RightBtn)
>    Event code 274 (MiddleBtn)
>  Event type 2 (Relative)
>    Event code 9 (Misc)
>  Event type 3 (Absolute)
>    Event code 0 (X)
>      Value    650
>      Min        0
>      Max     4095
>    Event code 1 (Y)
>      Value   3221
>      Min        0
>      Max     4095
>  Event type 4 (Misc)
>    Event code 4 (ScanCode)
> Testing ... (interrupt to exit)
> Event: time 1305882024.934011, type 4 (Misc), code 4 (ScanCode), value 90001
> Event: time 1305882024.934017, type 1 (Key), code 272 (LeftBtn), value 1
> Event: time 1305882024.934029, type 3 (Absolute), code 0 (X), value 270
> Event: time 1305882024.934034, type 3 (Absolute), code 1 (Y), value 1513
> Event: time 1305882024.934039, type 2 (Relative), code 9 (Misc), value 1
> Event: time 1305882024.934043, -------------- Report Sync ------------
> Event: time 1305882024.943019, type 2 (Relative), code 9 (Misc), value 1
> Event: time 1305882024.943025, -------------- Report Sync ------------
> Event: time 1305882024.951998, type 3 (Absolute), code 0 (X), value 275
> Event: time 1305882024.952006, type 3 (Absolute), code 1 (Y), value 1519
> Event: time 1305882024.952010, type 2 (Relative), code 9 (Misc), value 1
> Event: time 1305882024.952014, -------------- Report Sync ------------
>
>
> Now with hid-multitouch I have:
>
> I: Bus=0003 Vendor=202e Product=0005 Version=0111
> N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> P: Phys=usb-0000:00:1d.0-1.1/input1
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1/input/input18
> U: Uniq=
> H: Handlers=mac-button-emul event16
> B: PROP=0
> B: EV=100003
> B: KEY=0
>
> I: Bus=0003 Vendor=202e Product=0005 Version=0111
> N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> P: Phys=usb-0000:00:1d.0-1.1/input2
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/input/input19
> U: Uniq=
> H: Handlers=mac-button-emul event17
> B: PROP=0
> B: EV=b
> B: KEY=0
> B: ABS=60000000000003
>
> I: Bus=0003 Vendor=202e Product=0005 Version=0111
> N: Name="LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> P: Phys=usb-0000:00:1d.0-1.1/input3
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/input/input20
> U: Uniq=
> H: Handlers=mac-button-emul event18
> B: PROP=0
> B: EV=b
> B: KEY=400 0 0 0 0 0
> B: ABS=60000000000003
>
> And event17:
>
> Input driver version is 1.0.1
> Input device ID: bus 0x3 vendor 0x202e product 0x5 version 0x111
> Input device name: "LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> Supported events:
>  Event type 0 (Sync)
>  Event type 1 (Key)
>  Event type 3 (Absolute)
>    Event code 0 (X)
>      Value      0
>      Min        0
>      Max     4095
>    Event code 1 (Y)
>      Value      0
>      Min        0
>      Max     4095
>    Event code 53 (?)
>      Value      0
>      Min        0
>      Max     4095
>    Event code 54 (?)
>      Value      0
>      Min        0
>      Max     4095
> Testing ... (interrupt to exit)
> Event: time 1305886175.641112, -------------- Report Sync ------------
>
> And then nothing. Any idea about how to progress?
>
> --
> Bye, Peter Korsgaard
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter Korsgaard May 20, 2011, 1:31 p.m. UTC | #7
>>>>> "Benjamin" == Benjamin Tissoires <benjamin.tissoires@enac.fr> writes:

 Benjamin> Hi Peter,

 Benjamin> I'll see with the device maker if your device should work in
 Benjamin> multitouch. Your new evtest does not report enough multitouch
 Benjamin> things, which is weird.

Thanks. I haven't tried myself, but I believe it works with multitouch
in Win7.
Stéphane Chatty May 24, 2011, 9:05 a.m. UTC | #8
Le 20 mai 2011 à 15:31, Peter Korsgaard a écrit :

>>>>>> "Benjamin" == Benjamin Tissoires <benjamin.tissoires@enac.fr> writes:
> 
> Benjamin> Hi Peter,
> 
> Benjamin> I'll see with the device maker if your device should work in
> Benjamin> multitouch. Your new evtest does not report enough multitouch
> Benjamin> things, which is weird.
> 
> Thanks. I haven't tried myself, but I believe it works with multitouch
> in Win7.

Benjamin and I have been in touch with the Lumio people about this device and their reply is "old firmware, not supported anymore". Peter, is there a way to upgrade your firmware? 

Cheers,

St.

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter Korsgaard May 24, 2011, 11:38 a.m. UTC | #9
>>>>> "Stéphane" == Stéphane Chatty <chatty@enac.fr> writes:

Hi,

 Stéphane> Benjamin and I have been in touch with the Lumio people about
 Stéphane> this device and their reply is "old firmware, not supported
 Stéphane> anymore". Peter, is there a way to upgrade your firmware?

Thanks. I've not been directly involved with this project earlier or in
communication with Lumio, so I'm not 100% sure if this controller board
is able to handle new firmware. This configuration uses 2 cameras, but
we also have another setup with 4 cameras (where multitouch has been
verified under Win7). That one uses a different controller board, and
its firmware uses product ID 6 like on your setup.

I'll try to contact Lumio to verify.
diff mbox

Patch

diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index d9635d6..5a54b13 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -308,6 +308,7 @@  config HID_MULTITOUCH
 	  - Hanvon dual touch panels
 	  - Ilitek dual touch panel
 	  - IrTouch Infrared USB panels
+	  - Lumio CrystalTouch panels
 	  - MosArt dual-touch panels
 	  - PenMount dual touch panels
 	  - Pixcir dual touch panels
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 77f27ed..8a3ae13 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1411,6 +1411,7 @@  static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LUMIO, USB_DEVICE_ID_CRYSTALTOUCH) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD_BOOTLOADER) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 2e46eb2..a8c46b0 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -411,6 +411,9 @@ 
 #define USB_DEVICE_ID_DINOVO_MINI	0xc71f
 #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2	0xca03
 
+#define USB_VENDOR_ID_LUMIO		0x202e
+#define USB_DEVICE_ID_CRYSTALTOUCH	0x0006
+
 #define USB_VENDOR_ID_MCC		0x09db
 #define USB_DEVICE_ID_MCC_PMD1024LS	0x0076
 #define USB_DEVICE_ID_MCC_PMD1208LS	0x007a
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index b21251b..ef33e2d 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -599,6 +599,11 @@  static const struct hid_device_id mt_devices[] = {
 		HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS,
 			USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
 
+	/* Lumio panels */
+	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
+		HID_USB_DEVICE(USB_VENDOR_ID_LUMIO,
+			USB_DEVICE_ID_CRYSTALTOUCH) },
+
 	/* MosArt panels */
 	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
 		HID_USB_DEVICE(USB_VENDOR_ID_ASUS,