svn commit: r261483 - stable/9/lib/libusb
Hans Petter Selasky
hselasky at FreeBSD.org
Tue Feb 4 10:22:29 UTC 2014
Author: hselasky
Date: Tue Feb 4 10:22:28 2014
New Revision: 261483
URL: http://svnweb.freebsd.org/changeset/base/261483
Log:
MFC r260315:
Implement two new libusb API functions.
PR: usb/185454
Modified:
stable/9/lib/libusb/Makefile
stable/9/lib/libusb/libusb.3
stable/9/lib/libusb/libusb.h
stable/9/lib/libusb/libusb10_io.c
Directory Properties:
stable/9/lib/ (props changed)
stable/9/lib/libusb/ (props changed)
Modified: stable/9/lib/libusb/Makefile
==============================================================================
--- stable/9/lib/libusb/Makefile Tue Feb 4 10:18:29 2014 (r261482)
+++ stable/9/lib/libusb/Makefile Tue Feb 4 10:22:28 2014 (r261483)
@@ -98,6 +98,8 @@ MLINKS += libusb.3 libusb_event_handler_
MLINKS += libusb.3 libusb_lock_event_waiters.3
MLINKS += libusb.3 libusb_unlock_event_waiters.3
MLINKS += libusb.3 libusb_wait_for_event.3
+MLINKS += libusb.3 libusb_handle_events_timeout_completed.3
+MLINKS += libusb.3 libusb_handle_events_completed.3
MLINKS += libusb.3 libusb_handle_events_timeout.3
MLINKS += libusb.3 libusb_handle_events.3
MLINKS += libusb.3 libusb_handle_events_locked.3
Modified: stable/9/lib/libusb/libusb.3
==============================================================================
--- stable/9/lib/libusb/libusb.3 Tue Feb 4 10:18:29 2014 (r261482)
+++ stable/9/lib/libusb/libusb.3 Tue Feb 4 10:22:28 2014 (r261483)
@@ -485,11 +485,40 @@ transfer completes or another thread sto
timeout expired.
.Pp
.Ft int
+.Fn libusb_handle_events_timeout_completed "libusb_context *ctx" "struct timeval *tv" "int *completed"
+Handle any pending events by checking if timeouts have expired and by
+checking the set of file descriptors for activity.
+If the
+.Fa completed
+argument is not equal to NULL, this function will
+loop until a transfer completion callback sets the variable pointed to
+by the
+.Fa completed
+argument to non-zero.
+If the
+.Fa tv
+argument is not equal to NULL, this function will return
+LIBUSB_ERROR_TIMEOUT after the given timeout.
+Returns 0 on success, or a LIBUSB_ERROR code on failure or timeout.
+.Pp
+.Ft int
+.Fn libusb_handle_events_completed "libusb_context *ctx" "int *completed"
+Handle any pending events by checking the set of file descriptors for activity.
+If the
+.Fa completed
+argument is not equal to NULL, this function will
+loop until a transfer completion callback sets the variable pointed to
+by the
+.Fa completed
+argument to non-zero.
+Returns 0 on success, or a LIBUSB_ERROR code on failure.
+.Pp
+.Ft int
.Fn libusb_handle_events_timeout "libusb_context *ctx" "struct timeval *tv"
Handle any pending events by checking if timeouts have expired and by
checking the set of file descriptors for activity.
Returns 0 on success, or a
-LIBUSB_ERROR code on failure.
+LIBUSB_ERROR code on failure or timeout.
.Pp
.Ft int
.Fn libusb_handle_events "libusb_context *ctx"
@@ -508,7 +537,7 @@ Must be called with the event lock held.
Determine the next internal timeout that libusb needs to handle.
Returns 0
if there are no pending timeouts, 1 if a timeout was returned, or a LIBUSB_ERROR
-code on failure.
+code on failure or timeout.
.Pp
.Ft void
.Fn libusb_set_pollfd_notifiers "libusb_context *ctx" "libusb_pollfd_added_cb added_cb" "libusb_pollfd_removed_cb remove_cb" "void *user_data"
Modified: stable/9/lib/libusb/libusb.h
==============================================================================
--- stable/9/lib/libusb/libusb.h Tue Feb 4 10:18:29 2014 (r261482)
+++ stable/9/lib/libusb/libusb.h Tue Feb 4 10:22:28 2014 (r261483)
@@ -436,6 +436,8 @@ int libusb_event_handler_active(libusb_c
void libusb_lock_event_waiters(libusb_context * ctx);
void libusb_unlock_event_waiters(libusb_context * ctx);
int libusb_wait_for_event(libusb_context * ctx, struct timeval *tv);
+int libusb_handle_events_timeout_completed(libusb_context * ctx, struct timeval *tv, int *completed);
+int libusb_handle_events_completed(libusb_context * ctx, int *completed);
int libusb_handle_events_timeout(libusb_context * ctx, struct timeval *tv);
int libusb_handle_events(libusb_context * ctx);
int libusb_handle_events_locked(libusb_context * ctx, struct timeval *tv);
Modified: stable/9/lib/libusb/libusb10_io.c
==============================================================================
--- stable/9/lib/libusb/libusb10_io.c Tue Feb 4 10:18:29 2014 (r261482)
+++ stable/9/lib/libusb/libusb10_io.c Tue Feb 4 10:22:28 2014 (r261483)
@@ -331,29 +331,50 @@ libusb_wait_for_event(libusb_context *ct
}
int
-libusb_handle_events_timeout(libusb_context *ctx, struct timeval *tv)
+libusb_handle_events_timeout_completed(libusb_context *ctx,
+ struct timeval *tv, int *completed)
{
- int err;
+ int err = 0;
ctx = GET_CONTEXT(ctx);
- DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout enter");
+ DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout_completed enter");
libusb_lock_events(ctx);
- err = libusb_handle_events_locked(ctx, tv);
+ while (1) {
+ if (completed != NULL) {
+ if (*completed != 0 || err != 0)
+ break;
+ }
+ err = libusb_handle_events_locked(ctx, tv);
+ if (completed == NULL)
+ break;
+ }
libusb_unlock_events(ctx);
- DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout leave");
+ DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_handle_events_timeout_completed exit");
return (err);
}
int
+libusb_handle_events_completed(libusb_context *ctx, int *completed)
+{
+ return (libusb_handle_events_timeout_completed(ctx, NULL, completed));
+}
+
+int
+libusb_handle_events_timeout(libusb_context *ctx, struct timeval *tv)
+{
+ return (libusb_handle_events_timeout_completed(ctx, tv, NULL));
+}
+
+int
libusb_handle_events(libusb_context *ctx)
{
- return (libusb_handle_events_timeout(ctx, NULL));
+ return (libusb_handle_events_timeout_completed(ctx, NULL, NULL));
}
int
@@ -366,8 +387,9 @@ libusb_handle_events_locked(libusb_conte
if (libusb_event_handling_ok(ctx)) {
err = libusb10_handle_events_sub(ctx, tv);
} else {
- libusb_wait_for_event(ctx, tv);
- err = 0;
+ err = libusb_wait_for_event(ctx, tv);
+ if (err != 0)
+ err = LIBUSB_ERROR_TIMEOUT;
}
return (err);
}
More information about the svn-src-stable-9
mailing list