PERFORCE change 170778 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Nov 18 18:05:25 UTC 2009
http://p4web.freebsd.org/chv.cgi?CH=170778
Change 170778 by hselasky at hselasky_laptop001 on 2009/11/18 18:05:01
LibUSB v2.0:
- add new API function, libusb20_tr_bulk_intr_sync().
Affected files ...
.. //depot/projects/usb/src/lib/libusb/libusb20.3#5 edit
.. //depot/projects/usb/src/lib/libusb/libusb20.c#11 edit
.. //depot/projects/usb/src/lib/libusb/libusb20.h#8 edit
Differences ...
==== //depot/projects/usb/src/lib/libusb/libusb20.3#5 (text+ko) ====
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD: src/lib/libusb/libusb20.3,v 1.4 2009/07/30 00:11:41 alfred Exp $
.\"
-.Dd June 22, 2009
+.Dd November 18, 2009
.Dt LIBUSB20 3
.Os
.Sh NAME
@@ -98,6 +98,8 @@
.Fn libusb20_tr_setup_intr "struct libusb20_transfer *xfer" "void *pbuf" "uint32_t length" "uint32_t timeout"
.Ft void
.Fn libusb20_tr_setup_isoc "struct libusb20_transfer *xfer" "void *pbuf" "uint32_t length" "uint61_t fr_index"
+.Ft uint8_t
+.Fn libusb20_tr_bulk_intr_sync "struct libusb20_transfer *xfer" "void *pbuf" "uint32_t length" "uint32_t *pactlen" "uint32_t timeout"
.Ft void
.Fn libusb20_tr_start "struct libusb20_transfer *xfer"
.Ft void
@@ -451,6 +453,29 @@
.
.Pp
.
+.Fn libusb20_tr_bulk_intr_sync
+will perform a synchronous BULK or INTERRUPT transfer having length given by the
+.Fa length
+argument and buffer pointer given by the
+.Fa pbuf
+argument on the USB transfer given by the
+.Fa xfer
+argument.
+.
+If the
+.Fa pactlen
+argument is non-NULL the actual transfer length will be stored at the given pointer destination.
+.
+If the
+.Fa timeout
+argument is non-zero the transfer will timeout after the given value in milliseconds.
+.
+This function does not change the transfer flags, like short packet not ok.
+.
+This function returns zero on success else a LIBUSB20_TRANSFER_XXX value is returned.
+.
+.Pp
+.
.Fn libusb20_tr_start
will get the USB transfer started, if not already
started.
==== //depot/projects/usb/src/lib/libusb/libusb20.c#11 (text+ko) ====
@@ -1,6 +1,6 @@
/* $FreeBSD: src/lib/libusb/libusb20.c,v 1.5 2009/11/08 20:03:52 thompsa Exp $ */
/*-
- * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
+ * Copyright (c) 2008-2009 Hans Petter Selasky. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -423,6 +423,72 @@
return;
}
+uint8_t
+libusb20_tr_bulk_intr_sync(struct libusb20_transfer *xfer,
+ void *pbuf, uint32_t length, uint32_t *pactlen,
+ uint32_t timeout)
+{
+ struct libusb20_device *pdev = xfer->pdev;
+ uint32_t transfer_max;
+ uint32_t transfer_act;
+ uint8_t retval;
+
+ /* set some sensible default value */
+ if (pactlen != NULL)
+ *pactlen = 0;
+
+ /* check for error condition */
+ if (libusb20_tr_pending(xfer))
+ return (LIBUSB20_ERROR_OTHER);
+
+ do {
+ /* compute maximum transfer length */
+ transfer_max =
+ libusb20_tr_get_max_total_length(xfer);
+
+ if (transfer_max > length)
+ transfer_max = length;
+
+ /* setup bulk or interrupt transfer */
+ libusb20_tr_setup_bulk(xfer, pbuf,
+ transfer_max, timeout);
+
+ /* start the transfer */
+ libusb20_tr_start(xfer);
+
+ /* wait for transfer completion */
+ while (libusb20_dev_process(pdev) == 0) {
+
+ if (libusb20_tr_pending(xfer) == 0)
+ break;
+
+ libusb20_dev_wait_process(pdev, -1);
+ }
+
+ transfer_act = libusb20_tr_get_actual_length(xfer);
+
+ /* update actual length, if any */
+ if (pactlen != NULL)
+ pactlen[0] += transfer_act;
+
+ /* check transfer status */
+ retval = libusb20_tr_get_status(xfer);
+ if (retval)
+ break;
+
+ /* check for short transfer */
+ if (transfer_act != transfer_max)
+ break;
+
+ /* update buffer pointer and length */
+ pbuf = ((uint8_t *)pbuf) + transfer_max;
+ length = length - transfer_max;
+
+ } while (length != 0);
+
+ return (retval);
+}
+
void
libusb20_tr_submit(struct libusb20_transfer *xfer)
{
==== //depot/projects/usb/src/lib/libusb/libusb20.h#8 (text+ko) ====
@@ -1,6 +1,6 @@
/* $FreeBSD: src/lib/libusb/libusb20.h,v 1.5 2009/06/12 16:07:06 thompsa Exp $ */
/*-
- * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
+ * Copyright (c) 2008-2009 Hans Petter Selasky. All rights reserved.
* Copyright (c) 2007-2008 Daniel Drake. All rights reserved.
* Copyright (c) 2001 Johannes Erdfelt. All rights reserved.
*
@@ -226,6 +226,7 @@
void libusb20_tr_setup_control(struct libusb20_transfer *xfer, void *psetup, void *pbuf, uint32_t timeout);
void libusb20_tr_setup_intr(struct libusb20_transfer *xfer, void *pbuf, uint32_t length, uint32_t timeout);
void libusb20_tr_setup_isoc(struct libusb20_transfer *xfer, void *pbuf, uint32_t length, uint16_t fr_index);
+uint8_t libusb20_tr_bulk_intr_sync(struct libusb20_transfer *xfer, void *pbuf, uint32_t length, uint32_t *pactlen, uint32_t timeout);
void libusb20_tr_start(struct libusb20_transfer *xfer);
void libusb20_tr_stop(struct libusb20_transfer *xfer);
void libusb20_tr_submit(struct libusb20_transfer *xfer);
More information about the p4-projects
mailing list