From owner-p4-projects@FreeBSD.ORG Wed May 6 20:56:06 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C96DC1065675; Wed, 6 May 2009 20:56:05 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 89BC21065673 for ; Wed, 6 May 2009 20:56:05 +0000 (UTC) (envelope-from syl@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 6E7928FC13 for ; Wed, 6 May 2009 20:56:05 +0000 (UTC) (envelope-from syl@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n46Ku5N3034019 for ; Wed, 6 May 2009 20:56:05 GMT (envelope-from syl@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n46Ku5mv034017 for perforce@freebsd.org; Wed, 6 May 2009 20:56:05 GMT (envelope-from syl@FreeBSD.org) Date: Wed, 6 May 2009 20:56:05 GMT Message-Id: <200905062056.n46Ku5mv034017@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to syl@FreeBSD.org using -f From: Sylvestre Gallon To: Perforce Change Reviews Cc: Subject: PERFORCE change 161679 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 May 2009 20:56:06 -0000 http://perforce.freebsd.org/chv.cgi?CH=161679 Change 161679 by syl@syl_atuin on 2009/05/06 20:55:52 - Implement libusb_cancel_transfer. - Restore zero length array for compatibility reasons. - Update xfer->status on libusb_submit_transfer. Affected files ... .. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb.h#6 edit .. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#5 edit Differences ... ==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb.h#6 (text+ko) ==== @@ -328,8 +328,9 @@ libusb_transfer_cb_fn callback; void *user_data; unsigned char *buffer; + void *os_priv; int num_iso_packets; - struct libusb_iso_packet_descriptor *iso_packet_desc; + struct libusb_iso_packet_descriptor iso_packet_desc[0]; } libusb_transfer __aligned(sizeof(void *)); typedef struct libusb_pollfd { ==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10.c#5 (text+ko) ==== @@ -494,28 +494,58 @@ int libusb_submit_transfer(struct libusb_transfer *xfer) { - struct libusb20_transfer usb20_xfer; + struct libusb20_transfer *usb20_xfer; int ret; - libusb20_tr_open(&usb20_xfer, xfer->length, xfer->num_iso_packets, xfer->endpoint); - libusb20_tr_set_timeout(&usb20_xfer, xfer->timeout); - libusb20_tr_set_buffer(&usb20_xfer, xfer->buffer, xfer->num_iso_packets); - libusb20_tr_set_length(&usb20_xfer, xfer->length, xfer->num_iso_packets); - libusb20_tr_set_priv_sc0(&usb20_xfer, xfer->callback); - libusb20_tr_set_priv_sc1(&usb20_xfer, xfer->user_data); - libusb20_tr_set_callback(&usb20_xfer, libusb10_proxy); - libusb20_tr_submit(&usb20_xfer); + usb20_xfer = malloc(sizeof(*usb20_xfer)); + xfer->os_priv = usb20_xfer; + + libusb20_tr_open(usb20_xfer, xfer->length, xfer->num_iso_packets, xfer->endpoint); + libusb20_tr_set_timeout(usb20_xfer, xfer->timeout); + libusb20_tr_set_buffer(usb20_xfer, xfer->buffer, xfer->num_iso_packets); + libusb20_tr_set_length(usb20_xfer, xfer->length, xfer->num_iso_packets); + libusb20_tr_set_priv_sc0(usb20_xfer, xfer->callback); + libusb20_tr_set_priv_sc1(usb20_xfer, xfer->user_data); + libusb20_tr_set_callback(usb20_xfer, libusb10_proxy); + libusb20_tr_submit(usb20_xfer); - switch (libusb20_tr_get_status(&usb20_xfer)) { - default: - ret = LIBUSB_ERROR_OTHER; + switch (libusb20_tr_get_status(usb20_xfer)) { + case LIBUSB20_TRANSFER_COMPLETED: + xfer->status = LIBUSB_TRANSFER_COMPLETED; + break ; + case LIBUSB20_TRANSFER_OVERFLOW: + xfer->status = LIBUSB_TRANSFER_OVERFLOW; + break ; + case LIBUSB20_TRANSFER_NO_DEVICE: + xfer->status = LIBUSB_TRANSFER_NO_DEVICE; + break ; + case LIBUSB20_TRANSFER_STALL: + xfer->status = LIBUSB_TRANSFER_STALL; + break ; + case LIBUSB20_TRANSFER_SINGLE_SHORT_NOT_OK: + case LIBUSB20_TRANSFER_MULTI_SHORT_NOT_OK: + xfer->status = LIBUSB_TRANSFER_SHORT_NOT_OK; + break ; + case LIBUSB20_TRANSFER_CANCELLED: + xfer->status = LIBUSB_TRANSFER_CANCELLED; + break ; + case LIBUSB20_TRANSFER_TIMED_OUT: + xfer->status = LIBUSB_TRANSFER_TIMED_OUT; + break ; + default: + xfer->status = LIBUSB_TRANSFER_ERROR; } - return (ret); + return (0); } int libusb_cancel_transfer(struct libusb_transfer *xfer) { + if (xfer == NULL) + return (LIBUSB_ERROR_NO_MEM); + libusb20_tr_stop(xfer->os_priv); + libusb20_tr_close(xfer->os_priv); + return (0); }