Re: [PATCH] hid-multitouch: Add support for Lumio panels
From: Benjamin Tissoires
Date: Thu May 19 2011 - 18:37:19 EST
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@xxxxxxxxxx> wrote:
>>>>>> "Benjamin" == Benjamin Tissoires <benjamin.tissoires@xxxxxxx> writes:
>
> Benjamin> This patch enables support for Lumio optical devices.
> Benjamin> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxx>
>
> 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@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/