summaryrefslogtreecommitdiff
path: root/libusb/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'libusb/core.c')
-rw-r--r--libusb/core.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/libusb/core.c b/libusb/core.c
index 848679b..61b6564 100644
--- a/libusb/core.c
+++ b/libusb/core.c
@@ -1081,6 +1081,33 @@ out:
return r;
}
+static const struct libusb_endpoint_descriptor *find_alt_endpoint(
+ struct libusb_config_descriptor *config,
+ int iface_idx, int altsetting_idx, unsigned char endpoint)
+{
+ if (iface_idx >= config->bNumInterfaces) {
+ return NULL;
+ }
+
+ const struct libusb_interface *iface = &config->interface[iface_idx];
+
+ if (altsetting_idx >= iface->num_altsetting) {
+ return NULL;
+ }
+
+ const struct libusb_interface_descriptor *altsetting
+ = &iface->altsetting[altsetting_idx];
+ int ep_idx;
+
+ for (ep_idx = 0; ep_idx < altsetting->bNumEndpoints; ep_idx++) {
+ const struct libusb_endpoint_descriptor *ep =
+ &altsetting->endpoint[ep_idx];
+ if (ep->bEndpointAddress == endpoint)
+ return ep;
+ }
+ return NULL;
+}
+
static int get_endpoint_max_packet_size(libusb_device *dev,
const struct libusb_endpoint_descriptor *ep)
{