Hi,

Thank you very much for bearing with me.

Please make sure you read all the bytes from interrupt endpoint in multiples of 
64.

Now that is a very interesting bit of information.

> lsusb -vvv will give info reagrding the size of interrupt
> endpoint descriptor.

I have attached my lsusb -vvv output and would appreciate help. I have so far interpreted the report information given in these Stanzas:

>Item(Local ): Usage, data= [ 0x60 0x01 ] 352
>                            (null)
>            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
>                            Data Variable Absolute No_Wrap Linear
>Buffered Bytes
>            Item(Main  ): End Collection, data=none
>            Item(Local ): Usage, data= [ 0x61 ] 97
>                            (null)
>            Item(Main  ): Collection, data= [ 0x02 ] 2
>                            Logical
>            Item(Global): Report ID, data= [ 0x42 ] 66
>            Item(Global): Report Size, data= [ 0x08 ] 8
>            Item(Global): Report Count, data= [ 0x0b 0x00 ] 11

So when I expect less than 11 bytes I read 11. Because I thought this was a fixed size for the reportID given and some layer of the USB protocol would require messages to be of these predefined sizes.

I do not pretend to understand this stuff, so I have extrapolated from sending: I build my command in a buffer (the device has a command-protocol inherited from the version connected by RS-232), then look up the ReportID that is next larger than the packet. Pad the packet with zeroes to the size of the report. Prepend the ReportID I found and send it.

And this has worked so far. The device acts on the commands I send, some of them lead to physically noticeable results.

So I thought I'd do the same in reverse when reading the responses the device is supposed to give to each command.

I would very much like to be corrected. I do have a sort-of-working kludge now (I just go on reading repeatedly. After a number of INT_READ_FAILED and TIMEOUTs it finally answers. Takes ages, but is not really a timing issue, because if I wait for a long time before trying the problem is the same), but doing it correctly would make me feel much much much better.

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"I ran some quick calculations on it. He's about 80% on the right
 track.  That leaves him only 20% dead when he crashes." Bob C
Bus 001 Device 006: ID 0590:0034 Omron Corp. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0590 Omron Corp.
  idProduct          0x0034 
  bcdDevice            1.04
  iManufacturer           1 OMRON Corporation
  iProduct                4 V4KU-01JF-001       
  iSerial                 3 420172
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          2 Default
    bmAttributes         0xc0
      Self Powered
    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              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     337
          Report Descriptor: (length is 337)
            Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
                            (null)
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Local ): Usage, data= [ 0x20 ] 32
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x03 0x00 ] 3
            Item(Local ): Usage, data= [ 0x20 0x01 ] 288
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x21 ] 33
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x02 ] 2
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x0b 0x00 ] 11
            Item(Local ): Usage, data= [ 0x21 0x01 ] 289
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x22 ] 34
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x03 ] 3
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x13 0x00 ] 19
            Item(Local ): Usage, data= [ 0x22 0x01 ] 290
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x23 ] 35
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x04 ] 4
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x23 0x00 ] 35
            Item(Local ): Usage, data= [ 0x23 0x01 ] 291
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x24 ] 36
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x05 ] 5
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x4b 0x00 ] 75
            Item(Local ): Usage, data= [ 0x24 0x01 ] 292
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x25 ] 37
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x06 ] 6
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x8b 0x00 ] 139
            Item(Local ): Usage, data= [ 0x25 0x01 ] 293
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x26 ] 38
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x07 ] 7
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x0b 0x01 ] 267
            Item(Local ): Usage, data= [ 0x26 0x01 ] 294
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x27 ] 39
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x08 ] 8
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x73 0x01 ] 371
            Item(Local ): Usage, data= [ 0x27 0x01 ] 295
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x28 ] 40
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x09 ] 9
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x13 0x08 ] 2067
            Item(Local ): Usage, data= [ 0x28 0x01 ] 296
                            (null)
            Item(Main  ): Output, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x60 ] 96
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x41 ] 65
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x03 0x00 ] 3
            Item(Local ): Usage, data= [ 0x60 0x01 ] 352
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x61 ] 97
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x42 ] 66
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x0b 0x00 ] 11
            Item(Local ): Usage, data= [ 0x61 0x01 ] 353
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x62 ] 98
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x43 ] 67
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x13 0x00 ] 19
            Item(Local ): Usage, data= [ 0x62 0x01 ] 354
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x63 ] 99
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x44 ] 68
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x23 0x00 ] 35
            Item(Local ): Usage, data= [ 0x63 0x01 ] 355
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x64 ] 100
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x45 ] 69
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x4b 0x00 ] 75
            Item(Local ): Usage, data= [ 0x64 0x01 ] 356
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x65 ] 101
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x46 ] 70
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x8b 0x00 ] 139
            Item(Local ): Usage, data= [ 0x65 0x01 ] 357
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x66 ] 102
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x47 ] 71
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x0b 0x01 ] 267
            Item(Local ): Usage, data= [ 0x66 0x01 ] 358
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x67 ] 103
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x48 ] 72
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x73 0x01 ] 371
            Item(Local ): Usage, data= [ 0x67 0x01 ] 359
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            Item(Local ): Usage, data= [ 0x68 ] 104
                            (null)
            Item(Main  ): Collection, data= [ 0x02 ] 2
                            Logical
            Item(Global): Report ID, data= [ 0x49 ] 73
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0xf3 0x03 ] 1011
            Item(Local ): Usage, data= [ 0x68 0x01 ] 360
                            (null)
            Item(Main  ): Input, data= [ 0x02 0x01 ] 258
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile 
Buffered Bytes
            Item(Main  ): End Collection, data=none
            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              20
Device Status:     0x0000
  (Bus Powered)
_______________________________________________
libhid-discuss mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss

Reply via email to