Re: Questions about implementing hid driver or input driver

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

 



On Thu, 6 Sep 2012, Dmitry Torokhov wrote:

> > Hi list,
> > I have a tablet that shows it is a HID device.
> > But the report descriptor looks broken.
> > 
> > Below shows the device information:
> > 
> > lsusb -v:
> > 
> > Bus 002 Device 004: ID 04b4:3045 Cypress Semiconductor Corp.
> > Device Descriptor:
> >   bLength                18
> >   bDescriptorType         1
> >   bcdUSB               1.10
> >   bDeviceClass            0 (Defined at Interface level)
> >   bDeviceSubClass         0
> >   bDeviceProtocol         0
> >   bMaxPacketSize0         8
> >   idVendor           0x04b4 Cypress Semiconductor Corp.
> >   idProduct          0x3045
> >   bcdDevice            1.00
> >   iManufacturer           1 Ping-IT
> >   iProduct                2 RS232_USB
> >   iSerial                 0
> >   bNumConfigurations      1
> >   Configuration Descriptor:
> >     bLength                 9
> >     bDescriptorType         2
> >     wTotalLength           34
> >     bNumInterfaces          1
> >     bConfigurationValue     1
> >     iConfiguration          3 Bus power
> >     bmAttributes         0xa0
> >       (Bus Powered)
> >       Remote Wakeup
> >     MaxPower              100mA
> >     Interface Descriptor:
> >       bLength                 9
> >       bDescriptorType         4
> >       bInterfaceNumber        0
> >       bAlternateSetting       0
> >       bNumEndpoints           1
> >       bInterfaceClass         3 Human Interface Device
> >       bInterfaceSubClass      0 No Subclass
> >       bInterfaceProtocol      0 None
> >       iInterface              4 HID
> >         HID Device Descriptor:
> >           bLength                 9
> >           bDescriptorType        33
> >           bcdHID               1.10
> >           bCountryCode            0 Not supported
> >           bNumDescriptors         1
> >           bDescriptorType        34 Report
> >           wDescriptorLength      26
> >          Report Descriptors:
> >            ** UNAVAILABLE **
> >       Endpoint Descriptor:
> >         bLength                 7
> >         bDescriptorType         5
> >         bEndpointAddress     0x81  EP 1 IN
> >         bmAttributes            3
> >           Transfer Type            Interrupt
> >           Synch Type               None
> >           Usage Type               Data
> >         wMaxPacketSize     0x0008  1x 8 bytes
> >         bInterval              10
> > Device Status:     0x0000
> >   (Bus Powered)
> > 
> > And below is the report descriptor ( by usbhid-dump / hidrd-convert )
> > 
> > 0x05, 0x0D, /*  Usage Page (Digitizer),         */
> > 0x09, 0x08, /*  Usage (3D Digitizer),           */
> > 0xA1, 0x01, /*  Collection (Application),       */
> > 0x09, 0x01, /*      Usage (Digitizer),          */
> > 0xA1, 0x00, /*      Collection (Physical),      */
> > 0x05, 0x01, /*          Usage Page (Desktop),   */
> > 0x09, 0x3B, /*          Usage (Byte Count),     */
> > 0x15, 0x00, /*          Logical Minimum (0),    */
> > 0x25, 0x7F, /*          Logical Maximum (127),  */
> > 0x75, 0x08, /*          Report Size (8),        */
> > 0x95, 0x07, /*          Report Count (7),       */
> > 0x81, 0x02, /*          Input (Variable),       */
> > 0xC0,       /*      End Collection,             */
> > 0xC0        /*  End Collection                  */
> > 
> > The report descriptor looks broken to me:
> >  1. The report descriptor does not have Usage for TOOL_PEN/STYLUS/STYLUS2/PRESSURE,
> >     so evdev doest not recognized it as a tablet.
> >     Actually, the report descriptor does not define any detail of the data.
> >     It only shows a 7 bytes report content.
> >  2. It does not have Report ID field. 
> >     (Does it make sense to have a report descriptor without Report ID field?)
> > 
> > So in this case, should I implement a HID (special device) driver or
> > a input driver (in drivers/input/tablet folder) for this device?
> >
> 
> I think because the driver would hardly use any of HID infrastructure it
> would make sense to do it as an input driver.

Agreed.

It however also slightly depends on the actual data it is sending. It 
might be a proper HID protocol in the end, just the report descriptor 
might be completely bogus.
We already have a couple devices supported in linux by hid-waltop driver. 
The only thing it does is that it replaces completely wrong report 
desriptor with a proper one, and it's enough to make the device work 
properly.

But that really depends on the protocol that the device is using in the 
reports.

-- 
Jiri Kosina
SUSE Labs
--
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


[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