diff options
author | Hans de Goede <hdegoede@redhat.com> | 2011-02-17 15:06:40 +0100 |
---|---|---|
committer | Peter Stuge <peter@stuge.se> | 2011-09-15 15:16:20 +0200 |
commit | 44d6319f57e7e2c77347da228ed032e62716b438 (patch) | |
tree | 156ff8a1d655f4999086cbaea2f0f2d642899c09 | |
parent | c8c40bcbd22abca922ff31c4ed6a75fd7af78b59 (diff) | |
download | libusb-44d6319f57e7e2c77347da228ed032e62716b438.tar.gz |
Linux: Provide libusb_get_device_speed() data from sysfs
References #45.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r-- | libusb/os/linux_usbfs.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c index a1825ad..ca75779 100644 --- a/libusb/os/linux_usbfs.c +++ b/libusb/os/linux_usbfs.c @@ -784,7 +784,7 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum, struct linux_device_priv *priv = __device_priv(dev); unsigned char *dev_buf; char path[PATH_MAX]; - int fd; + int fd, speed; int active_config = 0; int device_configured = 1; ssize_t r; @@ -797,6 +797,20 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum, if (!priv->sysfs_dir) return LIBUSB_ERROR_NO_MEM; strcpy(priv->sysfs_dir, sysfs_dir); + + /* Note speed can contain 1.5, in this case __read_sysfs_attr + will stop parsing at the '.' and return 1 */ + speed = __read_sysfs_attr(DEVICE_CTX(dev), sysfs_dir, "speed"); + if (speed >= 0) { + switch (speed) { + case 1: dev->speed = LIBUSB_SPEED_LOW; break; + case 12: dev->speed = LIBUSB_SPEED_FULL; break; + case 480: dev->speed = LIBUSB_SPEED_HIGH; break; + case 5000: dev->speed = LIBUSB_SPEED_SUPER; break; + default: + usbi_warn(DEVICE_CTX(dev), "Unknown device speed: %d Mbps", speed); + } + } } if (sysfs_has_descriptors) |