return usbi_backend->release_interface(dev, iface);
}
+/* FIXME docs */
+API_EXPORTED int libusb_set_interface_altsetting(
+ struct libusb_device_handle *dev, int iface, int altsetting)
+{
+ usbi_dbg("interface %d altsetting %d", iface, altsetting);
+ return usbi_backend->set_interface_altsetting(dev, iface, altsetting);
+}
+
/** \ingroup lib
* Initialize libusb. This function must be called before calling any other
* libusb function.
libusb_device_handle *libusb_open_device_with_vid_pid(uint16_t vendor_id,
uint16_t product_id);
+int libusb_set_interface_altsetting(libusb_device_handle *dev, int iface,
+ int altsetting);
+
/* async I/O */
/** \ingroup asyncio
int (*claim_interface)(struct libusb_device_handle *handle, int iface);
int (*release_interface)(struct libusb_device_handle *handle, int iface);
+ int (*set_interface_altsetting)(struct libusb_device_handle *handle,
+ int iface, int altsetting);
+
void (*destroy_device)(struct libusb_device *dev);
int (*submit_transfer)(struct usbi_transfer *itransfer);
return r;
}
+static int op_set_interface(struct libusb_device_handle *handle, int iface,
+ int altsetting)
+{
+ int fd = __device_handle_priv(handle)->fd;
+ struct usbfs_setinterface setintf;
+ int r;
+
+ setintf.interface = iface;
+ setintf.altsetting = altsetting;
+ r = ioctl(fd, IOCTL_USBFS_SETINTF, &setintf);
+ if (r < 0)
+ usbi_err("setintf failed error %d", r);
+ return r;
+}
+
static void op_destroy_device(struct libusb_device *dev)
{
unsigned char *nodepath = __device_priv(dev)->nodepath;
.claim_interface = op_claim_interface,
.release_interface = op_release_interface,
+ .set_interface_altsetting = op_set_interface,
+
.destroy_device = op_destroy_device,
.submit_transfer = op_submit_transfer,