From owner-freebsd-usb@FreeBSD.ORG Mon Nov 12 12:18:04 2012 Return-Path: Delivered-To: freebsd-usb@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 06B795DE for ; Mon, 12 Nov 2012 12:18:04 +0000 (UTC) (envelope-from toshi@ruby.ocn.ne.jp) Received: from defer103.ocn.ad.jp (defer103.ocn.ad.jp [122.28.15.166]) by mx1.freebsd.org (Postfix) with ESMTP id A330D8FC12 for ; Mon, 12 Nov 2012 12:18:03 +0000 (UTC) Received: from msgw002-02.ocn.ad.jp (msgw002-02.ocn.ad.jp [180.37.203.77]) by defer103.ocn.ad.jp (Postfix) with ESMTP id D47E31DE75 for ; Mon, 12 Nov 2012 20:52:16 +0900 (JST) Received: from localhost (p15170-ipngn100303sizuokaden.shizuoka.ocn.ne.jp [114.176.38.170]) by msgw002-02.ocn.ad.jp (Postfix) with ESMTP id E7DF91F7092; Mon, 12 Nov 2012 20:52:09 +0900 (JST) Date: Mon, 12 Nov 2012 20:52:08 +0900 (JST) Message-Id: <20121112.205208.208974549.toshi@ruby.ocn.ne.jp> To: freebsd-usb@freebsd.org Subject: isochronous transfer packet is out of sequence From: SAITOU Toshihide X-GPG-fingerprint: 34B3 0B6A 8520 F5B0 EBC7 69F6 C055 9F8A 0D49 F8FC X-Mailer: Mew version 6.2.51 on Emacs 22.3 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-usb@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: FreeBSD support for USB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Nov 2012 12:18:04 -0000 I have tryed the USB isochronous transfer for UVC cam using libusb interface and I find the packet fragment is out of sequence on the FreeBSD(1). But I don't find it on the MacBook(2). (1) FreeBSD 9.1-RC2, Intel Core i7 3770T (2) Mac OS X 10.6.8, Intel Core 2 Duo, libusb 1.0.9 (single core) Can I prevent this behaviour using libusb interface or is this an expected behaviour? The bellow I issued two libusb_submit_transfer at the beginning. ----- log (1) 049 4437e06b 0 c 818 04a 4437e06b 0 c c00 04b 4437e06b 0 c 818 UVC_STREAM_EOF total a1400 04c 4402516b 1 c b9c 04d 4402516b 1 c 87c 04e 4402516b 1 c 800 04f 4402516b 1 c c00 050 4402516b 1 c 800 051 4437e06b 0 c c00 052 4437e06b 0 c 744 053 4437e06b 0 c c00 ----- callback function static void cb(struct libusb_transfer *xfer) { uint8_t *p; int plen; int i; p = xfer->buffer; for (i = 0; i < xfer->num_iso_packets; i++, p += PKT_LEN) { if (xfer->iso_packet_desc[i].status == LIBUSB_TRANSFER_COMPLETED) { plen = xfer->iso_packet_desc[i].actual_length; if (plen < 2) continue; if (p[1] & UVC_STREAM_ERR) // bmHeaderInfo continue; fprintf(stderr, "%03x ", i); fprintf(stderr, "%08x ", p[2] | p[3]<<8 | p[4]<<16 | p[5]<<24); // pts fprintf(stderr, "%01x ", p[1] & UVC_STREAM_FID); // fid fprintf(stderr, "%01x ", p[0]); // header length fprintf(stderr, "%x\n", plen); // actual length total += plen - p[0]; if (p[1] & UVC_STREAM_EOF) { fprintf(stderr, "UVC_STREAM_EOF\n", total); fprintf(stderr, "total %x\n", total); if (total < FrameSize) { fprintf(stderr, "insufficient frame data.\n"); write(fd, padding, FrameSize - total); // zero padding } total = 0; } write(fd, p + p[0], plen - p[0]); // write payload data } } if (libusb_submit_transfer(xfer) != 0) { fprintf(stderr, "submit transfer failed.\n"); } } --- SAITOU Toshihide