summaryrefslogtreecommitdiffstats
path: root/lib/libusb/libusb.h
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2009-07-10 14:15:53 +0000
committerthompsa <thompsa@FreeBSD.org>2009-07-10 14:15:53 +0000
commit916ae8e45c6bd152c979c581a46108fdfb7a9111 (patch)
tree57a73b4c88e143f696376dd2fa566249ccfe438c /lib/libusb/libusb.h
parentbc06993eb4fc58e6b7b99c857dcdc29054d79d0c (diff)
downloadFreeBSD-src-916ae8e45c6bd152c979c581a46108fdfb7a9111.zip
FreeBSD-src-916ae8e45c6bd152c979c581a46108fdfb7a9111.tar.gz
Sync the libusb 1.0 exported api to the latest GSoC code.
- Fix possible uninitialised variables and null derefs - Support big transfers - Various bug fixes and style changes Submitted by: Sylvestre Gallon Sponsored by: Google Summer of Code 2009 Approved by: re (kib)
Diffstat (limited to 'lib/libusb/libusb.h')
-rw-r--r--lib/libusb/libusb.h58
1 files changed, 40 insertions, 18 deletions
diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h
index a07c355..58a8918 100644
--- a/lib/libusb/libusb.h
+++ b/lib/libusb/libusb.h
@@ -27,14 +27,16 @@
#ifndef __LIBUSB_H__
#define __LIBUSB_H__
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/endian.h>
+#include <sys/queue.h>
+
#include <stdint.h>
#include <time.h>
#include <string.h>
#include <pthread.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/endian.h>
#ifdef __cplusplus
extern "C" {
@@ -44,10 +46,6 @@ extern "C" {
#endif
-struct list_head {
- struct list_head *prev, *next;
-};
-
/* libusb enums */
enum libusb_class_code {
@@ -183,6 +181,33 @@ enum libusb_debug_level {
LIBUSB_DEBUG_TRANSFER=2,
};
+/* internal structures */
+
+typedef struct libusb_pollfd {
+ int fd;
+ short events;
+} libusb_pollfd;
+
+struct usb_pollfd {
+ TAILQ_ENTRY(usb_pollfd) list;
+ struct libusb_pollfd pollfd;
+};
+
+struct usb_transfer {
+ TAILQ_ENTRY(usb_transfer) list;
+ int num_iso_packets;
+ struct timeval timeout;
+ int transferred;
+ uint8_t flags;
+};
+
+struct usb_ep_tr {
+ TAILQ_ENTRY(usb_ep_tr) list;
+ uint8_t addr;
+ uint8_t idx;
+ uint8_t flags;
+ void *os_priv;
+};
/* libusb structures */
typedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data);
@@ -194,16 +219,16 @@ typedef struct libusb_context {
int ctrl_pipe[2];
- struct list_head usb_devs;
+ TAILQ_HEAD(usb_devs_list, libusb_device) usb_devs;
pthread_mutex_t usb_devs_lock;
- struct list_head open_devs;
+ TAILQ_HEAD(open_devs_list, libusb_device_handle) open_devs;
pthread_mutex_t open_devs_lock;
- struct list_head flying_transfers;
+ TAILQ_HEAD(flying_transfers_list, usb_transfer) flying_transfers;
pthread_mutex_t flying_transfers_lock;
- struct list_head pollfds;
+ TAILQ_HEAD(pollfds_list, usb_pollfd) pollfds;
pthread_mutex_t pollfds_lock;
unsigned int pollfd_modify;
@@ -230,7 +255,7 @@ typedef struct libusb_device {
uint8_t device_address;
uint8_t num_configurations;
- struct list_head list;
+ TAILQ_ENTRY(libusb_device) list;
unsigned long session_data;
void *os_priv;
} libusb_device;
@@ -239,9 +264,10 @@ typedef struct libusb_device_handle {
pthread_mutex_t lock;
unsigned long claimed_interfaces;
- struct list_head list;
+ TAILQ_ENTRY(libusb_device_handle) list;
struct libusb_device *dev;
void *os_priv;
+ TAILQ_HEAD(ep_list, usb_ep_tr) ep_list;
} libusb_device_handle;
typedef struct libusb_device_descriptor {
@@ -343,11 +369,6 @@ typedef struct libusb_transfer {
struct libusb_iso_packet_descriptor iso_packet_desc[0];
} libusb_transfer __aligned(sizeof(void *));
-typedef struct libusb_pollfd {
- int fd;
- short events;
-} libusb_pollfd;
-
/* Library initialisation */
void libusb_set_debug(libusb_context * ctx, int level);
@@ -360,6 +381,7 @@ ssize_t libusb_get_device_list(libusb_context * ctx, libusb_device *** list);
void libusb_free_device_list(libusb_device ** list, int unref_devices);
uint8_t libusb_get_bus_number(libusb_device * dev);
uint8_t libusb_get_device_address(libusb_device * dev);
+int libusb_clear_halt(libusb_device_handle *devh, unsigned char endpoint);
int libusb_get_max_packet_size(libusb_device * dev, unsigned char endpoint);
libusb_device *libusb_ref_device(libusb_device * dev);
void libusb_unref_device(libusb_device * dev);
OpenPOWER on IntegriCloud