Scubapro Aladin Square
vavincavent
vavincavent at gmail.com
Tue Nov 14 11:56:40 PST 2017
new usb.pcap file following
if (length < 31)
length = 31;
Vincent
Le mardi 14 novembre 2017 à 11:29 -0800, Linus Torvalds a écrit :
> On Tue, Nov 14, 2017 at 11:17 AM, Linus Torvalds
> <torvalds at linux-foundation.org> wrote:
> > On Tue, Nov 14, 2017 at 10:52 AM, vavincavent <vavincavent at gmail.co
> > m> wrote:
> > > and ... i join usb.pcap file!
> >
> > Ok, that's a good dump. I see
> >
> > - device 1: root hub (1d6b:0002)
> > - device 2: logitech LX710 (046d:c517)
> > - device 3: RealTek RTS5129 card reader (0bda:0129)
> > - device 4: Realtek something (0bda:57de) Wifi?
> > - device 59: Lite-On bluetooth donge (04ca:3018)
> > - device 60: c251:2006
> >
> > I assume that matches what you'd expect on that bus?
> >
> > So it's that device 60.
> >
> > And the only traffic I see there is (apart from the two empty
> > reads)
> > is that one URB_INTERRUPT write packet with data 0110.
> >
> > Very odd.
> >
> > Also, for some reason wireshark is not showing it as a USB HID
> > protocol thing. That's odd. I was pretty sure wireshark should do
> > that.
>
> Oh, it only does that for the setup packets that aren't there.
>
> And I do notice a big difference to what I get when I do a similar
> dump.
>
> Your dump shows:
>
> Frame 1573: 66 bytes on wire (528 bits), 66 bytes captured (528
> bits) on interface 0
> USB URB
> [Source: host]
> [Destination: 1.60.2]
> URB id: 0xffff97a01200de40
> URB type: URB_SUBMIT ('S')
> URB transfer type: URB_INTERRUPT (0x01)
> Endpoint: 0x02, Direction: OUT
> Device: 60
> URB bus id: 1
> Device setup request: not relevant ('-')
> Data: present (0)
> URB sec: 1510685037
> URB usec: 39850
> URB status: Operation now in progress (-EINPROGRESS) (-115)
> URB length [bytes]: 2
> Data length [bytes]: 2
> [Response in: 1574]
> [bInterfaceClass: Unknown (0xffff)]
> Unused Setup Header
> Interval: 8
> Start frame: 0
> Copy of Transfer Flags: 0x00000000
> Number of ISO descriptors: 0
> Leftover Capture Data: 0110
>
> for that 0110 command packet.
>
> When I do it, I get:
>
> Frame 579: 95 bytes on wire (760 bits), 95 bytes captured (760
> bits)
> on interface 0
> USB URB
> [Source: host]
> [Destination: 3.6.1]
> URB id: 0xffff914c372596c0
> URB type: URB_SUBMIT ('S')
> URB transfer type: URB_INTERRUPT (0x01)
> Endpoint: 0x01, Direction: OUT
> Device: 6
> URB bus id: 3
> Device setup request: not relevant ('-')
> Data: present (0)
> URB sec: 1510686848
> URB usec: 546665
> URB status: Operation now in progress (-EINPROGRESS) (-115)
> URB length [bytes]: 31
> Data length [bytes]: 31
> [Response in: 580]
> [bInterfaceClass: HID (0x03)]
> Unused Setup Header
> Interval: 4
> Start frame: 0
> Copy of Transfer Flags: 0x00000000
> Number of ISO descriptors: 0
> Leftover Capture Data:
> 011b00000000000000000000000000000000000000000000...
>
> Notice the different in Data length and padding.
>
> So I think what's going on here is that different versions of libusb
> end up padding things differently, and your dive computer doesn't
> like
> the short packets that your version of libusb creates.
>
> I dunno. Maybe it's some other thing that results in this difference.
>
> Anyway, let's just hack around it and test, See that
> "libusb_interrupt_transfer()" call in the function dc_usbhid_write()
> in src/usbhit.c?
>
> Add something like
>
> if (length < 31)
> length = 31;
>
> to just before it. It will send garbage padding, but the dive
> computer
> sends _us_ garbage padding, so that's probably ok.
>
> It's a horrible hack, but it's just for testing.
>
> Linus
More information about the subsurface
mailing list