if (fd == windrvrfd && windrvrfd >= 0) {
DPRINTF("close windrvrfd\n");
- if (xpcu->handle) {
- xpcu_claim(xpcu, XPCU_RELEASE);
- usb_close(xpcu->handle);
- }
+ if (xpcu)
+ xpcu_close(xpcu);
- xpcu->handle = NULL;
- xpcu->interface = -1;
xpcu = NULL;
windrvrfd = -1;
}
return len;
}
-int xpcu_claim(struct xpcu_s *xpcu, int claim) {
+static int xpcu_claim(struct xpcu_s *xpcu, int claim) {
int ret = 0;
static int claimed = 0;
return &xpcu;
}
+
+void xpcu_close(struct xpcu_s *xpcu) {
+ if (xpcu->handle) {
+ xpcu_claim(xpcu, XPCU_RELEASE);
+ usb_close(xpcu->handle);
+ }
+
+ xpcu->handle = NULL;
+ xpcu->interface = -1;
+ xpcu->alternate = -1;
+}
};
int __attribute__ ((visibility ("hidden"))) xpcu_deviceinfo(struct xpcu_s *xpcu, unsigned char *buf);
-int __attribute__ ((visibility ("hidden"))) xpcu_claim(struct xpcu_s *xpcu, int claim);
int __attribute__ ((visibility ("hidden"))) xpcu_transfer(struct xpcu_s *xpcu, struct usb_transfer *ut);
struct xpcu_s __attribute__ ((visibility ("hidden"))) *xpcu_open(void);
+void __attribute__ ((visibility ("hidden"))) xpcu_close(struct xpcu_s *xpcu);