diff options
author | Hans de Goede <hdegoede@redhat.com> | 2011-02-17 16:52:30 +0100 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2011-02-17 16:52:30 +0100 |
commit | f233c9dfed8e5b8c996c5bae02f6196e8262b651 (patch) | |
tree | 1137be31cb90c97bdd3172c65e00c4661cc30366 | |
parent | d9eeafb52555382de98324991ba7695d1c0420f9 (diff) |
Diferentiate between all usb speeds, not just lo and the rest
-rw-r--r-- | usb-redirection-protocol.txt | 19 | ||||
-rw-r--r-- | usbredirhost.c | 20 | ||||
-rw-r--r-- | usbredirproto.h | 10 | ||||
-rw-r--r-- | usbredirtestclient.c | 9 |
4 files changed, 44 insertions, 14 deletions
diff --git a/usb-redirection-protocol.txt b/usb-redirection-protocol.txt index 5985d9d..71afeca 100644 --- a/usb-redirection-protocol.txt +++ b/usb-redirection-protocol.txt @@ -156,8 +156,16 @@ usb_redir_header.type: usb_redir_device_info usb_redir_header.length: sizeof(usb_redir_device_info_header) usb_redir_header.id: 0 (always as this is an unsolicited packet) +enum { + usb_redir_speed_low, + usb_redir_speed_full, + usb_redir_speed_high, + usb_redir_speed_super, + usb_redir_speed_unknown = 255 +} + struct usb_redir_device_info_header { - uint8_t slow; /* True if this is a low speed device */ + uint8_t speed; } No packet type specific additional data. @@ -173,6 +181,15 @@ usb_redir_header.type: usb_redir_ep_info usb_redir_header.length: sizeof(usb_redir_ep_info_header) usb_redir_header.id: 0 (always as this is an unsolicited packet) +enum { + /* Note these 4 match the usb spec! */ + usb_redir_type_control, + usb_redir_type_iso, + usb_redir_type_bulk, + usb_redir_type_interrupt, + usb_redir_type_invalid = 255 +} + struct usb_redir_ep_info_header { uint8_t type[32]; uint8_t interval[32]; diff --git a/usbredirhost.c b/usbredirhost.c index 8ca4b15..cc82ded 100644 --- a/usbredirhost.c +++ b/usbredirhost.c @@ -344,7 +344,7 @@ struct usbredirhost *usbredirhost_open(libusb_device_handle *usb_dev_handle, { struct usbredirhost *host; struct usb_redir_device_info_header device_info; - enum libusb_speed_type speed; + enum libusb_speed speed; int r; host = calloc(1, sizeof(*host)); @@ -404,16 +404,14 @@ struct usbredirhost *usbredirhost_open(libusb_device_handle *usb_dev_handle, return NULL; } - r = libusb_get_device_speed(host->handle, &speed); - if (r < 0) { - ERROR("could not get device speed: %d", r); - usbredirhost_close(host); - return NULL; - } - if (speed == LIBUSB_SPEED_LOW) { - device_info.slow = 1; - } else { - device_info.slow = 0; + speed = libusb_get_device_speed(host->dev); + switch (speed) { + case LIBUSB_SPEED_LOW: device_info.speed = usb_redir_speed_low; break; + case LIBUSB_SPEED_FULL: device_info.speed = usb_redir_speed_full; break; + case LIBUSB_SPEED_HIGH: device_info.speed = usb_redir_speed_high; break; + case LIBUSB_SPEED_SUPER: device_info.speed = usb_redir_speed_super; break; + default: + device_info.speed = usb_redir_speed_unknown; } usbredirparser_send_device_info(host->parser, &device_info); diff --git a/usbredirproto.h b/usbredirproto.h index 267472f..4196dff 100644 --- a/usbredirproto.h +++ b/usbredirproto.h @@ -43,6 +43,14 @@ enum { }; enum { + usb_redir_speed_low, + usb_redir_speed_full, + usb_redir_speed_high, + usb_redir_speed_super, + usb_redir_speed_unknown = 255 +}; + +enum { /* Control packets */ usb_redir_hello, usb_redir_device_info, @@ -86,7 +94,7 @@ struct usb_redir_hello_header { }; struct usb_redir_device_info_header { - uint8_t slow; /* True if this is a low speed device */ + uint8_t speed; }; struct usb_redir_ep_info_header { diff --git a/usbredirtestclient.c b/usbredirtestclient.c index 6aec45b..7fc85fd 100644 --- a/usbredirtestclient.c +++ b/usbredirtestclient.c @@ -433,7 +433,14 @@ static void usbredirtestclient_cmdline_parse(void) static void usbredirtestclient_device_info(void *priv, struct usb_redir_device_info_header *device_info) { - printf("device info, speed: %s\n", device_info->slow ? "lo" : "full"); + switch (device_info->speed) { + case usb_redir_speed_low: printf("device info: speed: low\n"); break; + case usb_redir_speed_full: printf("device info: speed: full\n"); break; + case usb_redir_speed_high: printf("device info: speed: high\n"); break; + case usb_redir_speed_super: printf("device info: speed: super\n"); break; + default: + printf("device info: speed: unknown\n"); + } } static void usbredirtestclient_ep_info(void *priv, |