mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-16 21:28:33 +03:00
USB addresses change every time the device re-enumerates, while the path reflects the physical topology of USB connections and stays persistent unless the usb cabling is changed. Let's allow the user to specify the path instead of the address to uniquely identify a given slot.
53 lines
1.6 KiB
C
53 lines
1.6 KiB
C
#pragma once
|
|
|
|
#include <libusb.h>
|
|
|
|
#define USB_MAX_PATH_LEN 20
|
|
|
|
struct dev_id {
|
|
uint16_t vendor_id;
|
|
uint16_t product_id;
|
|
};
|
|
|
|
/* Find any USB devices in the system matching the given Vendor and
|
|
* Product ID */
|
|
libusb_device **find_matching_usb_devs(const struct dev_id *dev_ids);
|
|
|
|
/* structure describing a single matching interface found */
|
|
struct usb_interface_match {
|
|
/* libusb device E*/
|
|
libusb_device *usb_dev;
|
|
/* Vendor ID of the device running matching interface */
|
|
uint16_t vendor;
|
|
/* Product ID of the device running matching interface */
|
|
uint16_t product;
|
|
/* USB Bus Address */
|
|
uint8_t addr;
|
|
/* physical path */
|
|
char path[USB_MAX_PATH_LEN];
|
|
/* configuration of matching interface */
|
|
uint8_t configuration;
|
|
/* interface number of matching interface */
|
|
uint8_t interface;
|
|
/* altsetting of matching interface */
|
|
uint8_t altsetting;
|
|
/* bInterfaceClass of matching interface */
|
|
uint8_t class;
|
|
/* bInterfaceSubClass of matching interface */
|
|
uint8_t sub_class;
|
|
/* bInterfaceProtocol of matching interface */
|
|
uint8_t protocol;
|
|
/* index of string descriptor of matching interface */
|
|
uint8_t string_idx;
|
|
};
|
|
|
|
int dev_find_matching_interfaces(libusb_device *dev, int class, int sub_class, int protocol,
|
|
struct usb_interface_match *out, unsigned int out_len);
|
|
|
|
int usb_match_interfaces(libusb_context *ctx, const struct dev_id *dev_ids,
|
|
int class, int sub_class, int protocol,
|
|
struct usb_interface_match *out, unsigned int out_len);
|
|
|
|
libusb_device_handle *usb_open_claim_interface(libusb_context *ctx,
|
|
const struct usb_interface_match *ifm);
|