From: Hans de Goede Date: Thu, 17 Feb 2011 12:17:55 +0000 (+0100) Subject: Add new API function libusb_get_device_speed() X-Git-Tag: upstream/1.0.21~799 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c8c40bcbd22abca922ff31c4ed6a75fd7af78b59;p=platform%2Fupstream%2Flibusb.git Add new API function libusb_get_device_speed() Reworked version of my earlier patch, largely modelled after (if not copy and pasted from) Trygve Laugstøl's similar commit 5a6541e0d80fb1f21e2b960bc2337a612f9d74fb in git://git.libusb.org/libusb-trygvis.git http://git.libusb.org/libusb-trygvis.git http://git.libusb.org/?p=libusb-trygvis.git;a=commitdiff;h=5a6541e0d This patch does not add any OS specific code. The supporting code in each backend follows in separate patches. References #45. Signed-off-By: Hans de Goede --- diff --git a/libusb/core.c b/libusb/core.c index 1dedb17..072d050 100644 --- a/libusb/core.c +++ b/libusb/core.c @@ -523,6 +523,7 @@ struct libusb_device *usbi_alloc_device(struct libusb_context *ctx, dev->ctx = ctx; dev->refcnt = 1; dev->session_data = session_id; + dev->speed = LIBUSB_SPEED_UNKNOWN; memset(&dev->os_priv, 0, priv_size); usbi_mutex_lock(&ctx->usb_devs_lock); @@ -680,6 +681,17 @@ uint8_t API_EXPORTED libusb_get_device_address(libusb_device *dev) return dev->device_address; } +/** \ingroup dev + * Get the negotiated connection speed for a device. + * \param dev a device + * \returns a \ref libusb_speed code, where LIBUSB_SPEED_UNKNOWN means that + * the OS doesn't know or doesn't support returning the negotiated speed. + */ +int API_EXPORTED libusb_get_device_speed(libusb_device *dev) +{ + return dev->speed; +} + static const struct libusb_endpoint_descriptor *find_endpoint( struct libusb_config_descriptor *config, unsigned char endpoint) { diff --git a/libusb/libusb-1.0.def b/libusb/libusb-1.0.def index b7c9404..9cdbc5f 100644 --- a/libusb/libusb-1.0.def +++ b/libusb/libusb-1.0.def @@ -48,6 +48,8 @@ EXPORTS libusb_get_device_descriptor@8 = libusb_get_device_descriptor libusb_get_device_list libusb_get_device_list@8 = libusb_get_device_list + libusb_get_device_speed + libusb_get_device_speed@4 = libusb_get_device_speed libusb_get_max_iso_packet_size libusb_get_max_iso_packet_size@8 = libusb_get_max_iso_packet_size libusb_get_max_packet_size diff --git a/libusb/libusb.h b/libusb/libusb.h index 45e20ec..619a65a 100644 --- a/libusb/libusb.h +++ b/libusb/libusb.h @@ -684,6 +684,26 @@ typedef struct libusb_device libusb_device; */ typedef struct libusb_device_handle libusb_device_handle; +/** \ingroup dev + * Speed codes. Indicates the speed at which the device is operating. + */ +enum libusb_speed { + /** The OS doesn't report or know the device speed. */ + LIBUSB_SPEED_UNKNOWN = 0, + + /** The device is operating at low speed (1.5MBit/s). */ + LIBUSB_SPEED_LOW = 1, + + /** The device is operating at full speed (12MBit/s). */ + LIBUSB_SPEED_FULL = 2, + + /** The device is operating at high speed (480MBit/s). */ + LIBUSB_SPEED_HIGH = 3, + + /** The device is operating at super speed (5000MBit/s). */ + LIBUSB_SPEED_SUPER = 4, +}; + /** \ingroup misc * Error codes. Most libusb functions return 0 on success or one of these * codes on failure. @@ -890,6 +910,7 @@ void LIBUSB_CALL libusb_free_config_descriptor( struct libusb_config_descriptor *config); uint8_t LIBUSB_CALL libusb_get_bus_number(libusb_device *dev); uint8_t LIBUSB_CALL libusb_get_device_address(libusb_device *dev); +int LIBUSB_CALL libusb_get_device_speed(libusb_device *dev); int LIBUSB_CALL libusb_get_max_packet_size(libusb_device *dev, unsigned char endpoint); int LIBUSB_CALL libusb_get_max_iso_packet_size(libusb_device *dev, diff --git a/libusb/libusbi.h b/libusb/libusbi.h index 1ea7f26..564ee3e 100644 --- a/libusb/libusbi.h +++ b/libusb/libusbi.h @@ -276,6 +276,7 @@ struct libusb_device { uint8_t bus_number; uint8_t device_address; uint8_t num_configurations; + enum libusb_speed speed; struct list_head list; unsigned long session_data;