From: Michael Gernoth Date: Fri, 11 Apr 2008 13:36:07 +0000 (+0200) Subject: add xpcu_set_interface X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/commitdiff_plain/0c2db148a4e604ceeab5eda38efcf64d1ef25c76 add xpcu_set_interface --- diff --git a/usb-driver.c b/usb-driver.c index 566b10b..1a37f54 100644 --- a/usb-driver.c +++ b/usb-driver.c @@ -229,20 +229,7 @@ static int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { #ifndef NO_WINDRVR ret = (*ioctl_func) (fd, request, wdioctl); #else - if (xpcu->dev) { - if (!xpcu->handle) { - xpcu->handle = usb_open(xpcu->dev); -#ifndef NO_USB_RESET - if (xpcu->handle) { - usb_reset(xpcu->handle); - xpcu->handle = usb_open(xpcu->dev); - } -#endif - } - - xpcu->interface = xpcu->dev->config[0].interface[usi->dwInterfaceNum].altsetting[usi->dwAlternateSetting].bInterfaceNumber; - xpcu->alternate = usi->dwAlternateSetting; - } + xpcu_set_interface(xpcu, usi); #endif DPRINTF("unique: %lu, interfacenum: %lu, alternatesetting: %lu, options: %lx\n", usi->dwUniqueID, usi->dwInterfaceNum, diff --git a/xpcu.c b/xpcu.c index 17ab7cb..de23d9e 100644 --- a/xpcu.c +++ b/xpcu.c @@ -232,6 +232,23 @@ int xpcu_transfer(struct xpcu_s *xpcu, struct usb_transfer *ut) { return ret; } +void xpcu_set_interface(struct xpcu_s *xpcu, struct usb_set_interface *usi) { + if (xpcu->dev) { + if (!xpcu->handle) { + xpcu->handle = usb_open(xpcu->dev); +#ifndef NO_USB_RESET + if (xpcu->handle) { + usb_reset(xpcu->handle); + xpcu->handle = usb_open(xpcu->dev); + } +#endif + } + + xpcu->interface = xpcu->dev->config[0].interface[usi->dwInterfaceNum].altsetting[usi->dwAlternateSetting].bInterfaceNumber; + xpcu->alternate = usi->dwAlternateSetting; + } +} + struct xpcu_s *xpcu_open(void) { static struct xpcu_s xpcu; diff --git a/xpcu.h b/xpcu.h index fb8fd55..eeb25eb 100644 --- a/xpcu.h +++ b/xpcu.h @@ -11,5 +11,6 @@ struct xpcu_s { int __attribute__ ((visibility ("hidden"))) xpcu_deviceinfo(struct xpcu_s *xpcu, unsigned char *buf); int __attribute__ ((visibility ("hidden"))) xpcu_transfer(struct xpcu_s *xpcu, struct usb_transfer *ut); +void __attribute__ ((visibility ("hidden"))) xpcu_set_interface(struct xpcu_s *xpcu, struct usb_set_interface *usi); struct xpcu_s __attribute__ ((visibility ("hidden"))) *xpcu_open(void); void __attribute__ ((visibility ("hidden"))) xpcu_close(struct xpcu_s *xpcu);